little-snow-fox / react-native-wechat-lib

🚀 WeChat login, share, favorite and payment for React-Native on iOS and Android
MIT License
667 stars 129 forks source link

apple silicon m1 安装后项目跑不起来 有遇到的吗? #194

Open NoirVoider opened 2 years ago

NoirVoider commented 2 years ago

ld: in /myProject/node_modules/react-native-wechat-lib/ios/libWeChatSDK.a(WechatAuthSDK.o), building for iOS Simulator, but linking in object file built for iOS, file 'myProject/node_modules/react-native-wechat-lib/ios/libWeChatSDK.a' for architecture arm64

QMY-ZQ commented 2 years ago

你这个问题有修复办法吗?

michaelknoch commented 2 years ago

As far as I know this is a problem with the underlying wechat sdk. It doesn't support arm64 simulators which is mandatory on apple silicon devices. Can we fill a support ticket on official wechat side to escalate this issue to their developers? @little-snow-fox

hyfjjjj commented 2 years ago

你这个问题有修复办法吗?

是微信sdk的问题,目前我只能通过下面方法解决: 在 RCTWeChat.podspec 文件中,注释掉下面这行,默认不链接 libWeChatSDK.a

# s.vendored_libraries = "ios/libWeChatSDK.a"

在 RCTWeChat.podspec 末尾添加以下内容

s.xcconfig = {
    'OTHER_LDFLAGS[sdk=iphoneos*]' => '$(inherited) -L$(PROJECT_DIR)/../node_modules/react-native-wechat-lib/ios -lWeChatSDK'
}

表示只有在build到设备时才链接 libWeChatSDK.a。

然后再 RCTWeChat.h 和 RCTWeChat.m 中通过宏 #if !(TARGET_OS_SIMULATOR) 判断是不是模拟器,当是模拟器的时候,把所有微信sdk相关的代码全都删掉,不参与编译。也就是当build到模拟器时,这个模块什么功能都没有,因为全注释了,比如 RCTWeChat.h 里,

#import "WXApi.h"

变成了

#if !(TARGET_OS_SIMULATOR)
#import "WXApi.h"
#endif

找到所有 WX 开头相关的各种东西全包在这么一个宏里就行。所有处理完之后再重新安装库,重新 pod install 就可以了。

我对 xcode 编译这块没怎么研究过,今天遇到这个问题临时发现的解决方法。

wubaibin commented 1 year ago

ld: in /myProject/node_modules/react-native-wechat-lib/ios/libWeChatSDK.a(WechatAuthSDK.o), building for iOS Simulator, but linking in object file built for iOS, file 'myProject/node_modules/react-native-wechat-lib/ios/libWeChatSDK.a' for architecture arm64

请问解决了吗

XionGuo37 commented 1 year ago

一样的问题

XionGuo37 commented 1 year ago

你这个问题有修复办法吗?

是微信sdk的问题,目前我只能通过下面方法解决: 在 RCTWeChat.podspec 文件中,注释掉下面这行,默认不链接 libWeChatSDK.a

# s.vendored_libraries = "ios/libWeChatSDK.a"

在 RCTWeChat.podspec 末尾添加以下内容

s.xcconfig = {
    'OTHER_LDFLAGS[sdk=iphoneos*]' => '$(inherited) -L$(PROJECT_DIR)/../node_modules/react-native-wechat-lib/ios -lWeChatSDK'
}

表示只有在build到设备时才链接 libWeChatSDK.a。

然后再 RCTWeChat.h 和 RCTWeChat.m 中通过宏 #if !(TARGET_OS_SIMULATOR) 判断是不是模拟器,当是模拟器的时候,把所有微信sdk相关的代码全都删掉,不参与编译。也就是当build到模拟器时,这个模块什么功能都没有,因为全注释了,比如 RCTWeChat.h 里,

#import "WXApi.h"

变成了

#if !(TARGET_OS_SIMULATOR)
#import "WXApi.h"
#endif

找到所有 WX 开头相关的各种东西全包在这么一个宏里就行。所有处理完之后再重新安装库,重新 pod install 就可以了。

我对 xcode 编译这块没怎么研究过,今天遇到这个问题临时发现的解决方法。

这些文件在哪?我无法找到他们

fv0008 commented 8 months ago

安装rosetta模式,模拟器使用rosetta模式就可以运行了