React Native SDK从Objective-C迁移Swift编译失败求助
解决React Native Objective-C转Swift SDK的编译错误
1. 确认桥接文件配置无误
- 检查Xcode工程的
Build Settings > Objective-C Bridging Header,确保填写的桥接文件路径是相对工程根目录的完整路径,比如./ios/BigTreeDoorway-Bridging-Header.h,不要写绝对路径 - 桥接文件里只放需要暴露给Swift的Objective-C头文件,比如
#import "SCDoorway.h"、#import "Loans.h",别直接导入.a或.framework文件
2. 修正Swift里的依赖导入逻辑
- Swift中导入Objective-C依赖不用
#import,直接写import SCDoorway、import Loans——前提是这些依赖已经通过CocoaPods或者手动添加到工程的Link Binary With Libraries里 - 如果是静态库,必须在
Build Settings > Other Linker Flags里加上-ObjC或者-all_load,不然静态库的符号可能加载不出来
3. 彻底排查arm64架构问题
- 别只改
EXCLUDED_ARCHS,要同步检查:- 工程和Target的
Build Settings > Architectures设为Standard Architectures (arm64, x86_64) - 搜索
Valid Architectures(Xcode12+默认隐藏,需手动搜索显示),确保包含arm64 - 用
lipo -info [依赖库路径]命令检查SCDoorway、Loans本身是否支持arm64,不支持的话必须换兼容版本
- 工程和Target的
4. 修复Loans函数调用的CompileC错误
- 核对Swift调用OC方法的语法:
- OC里的
nullable参数对应Swift的Optional,调用时参数类型要匹配,比如OC的- (void)submitLoan:(nullable NSDictionary *)params,Swift里要写Loans.shared.submitLoan(params: ["key": "value"]),传空就直接写nil - 区分类方法和实例方法:OC类方法
+ (void)initSDK在Swift里是Loans.initSDK(),实例方法才用对象调用 - 确认桥接文件里完整导入了Loans的头文件,没漏关键方法声明
- OC里的
5. 终极清理缓存操作
- 按顺序执行:
- 关掉Xcode
- 删除
~/Library/Developer/Xcode/DerivedData下对应工程的缓存文件夹 - 删除工程根目录的
ios/build文件夹 - 用CocoaPods的话,执行
pod deintegrate && pod install - 重新打开Xcode,按
Cmd+Shift+K清理构建文件夹,再重新编译
内容的提问来源于stack exchange,提问作者AadityaS
相关产品推荐
相关产品推荐

