iOS Video SDK v3.5.0 构建Any iOS Device(arm64,armv7)归档包失败
iOS Video SDK v3.5.0 armv7架构归档构建失败解决方案
根因说明
报错为Flipper调试框架不支持armv7架构导致的链接错误。Flipper是开发阶段使用的调试工具,官方仅提供arm64、x86_64架构的二进制实现,2021年起已停止armv7架构支持,因此同时编译armv7+arm64架构的归档包时,会找不到armv7架构下的Flipper相关符号。
你本地arm64架构编译正常,是因为Flipper提供了对应arm64的符号实现。
解决方案
方案1:移除armv7架构支持(优先推荐)
armv7架构仅对应iPhone 5及更早的旧设备,当前市面设备占有率不足1%,如果你的团队没有兼容旧设备的需求,直接移除armv7架构即可快速解决问题,生成的包可覆盖所有iPhone 5s及以后的主流设备:
- 打开Xcode项目,进入
Build Settings->Architectures配置项 - 将
Architectures的值从$(ARCHS_STANDARD)修改为仅arm64 - 在
Excluded Architectures配置中,针对Any iOS Device添加armv7 - 重新执行归档构建即可
方案2:保留armv7架构,Release模式禁用Flipper
如果确实需要兼容armv7架构的旧设备,需要在Release构建模式下完全移除Flipper相关依赖:
- 修改Podfile,在
post_install钩子中添加Release模式下过滤Flipper编译参数的逻辑:
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| if config.name != 'Debug' config.build_settings['OTHER_CFLAGS'] ||= ['$(inherited)'] config.build_settings['OTHER_CFLAGS'] = config.build_settings['OTHER_CFLAGS'].reject { |flag| flag.downcase.include? 'flipper' } end end end end
- 修改AppDelegate代码,将所有Flipper相关的头文件引用、初始化代码用DEBUG宏包裹,确保Release模式下不会引用Flipper相关类:
// 头文件引用部分添加Debug判断 #ifdef DEBUG #import <FlipperKit/FlipperClient.h> #import <FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.h> #import <FlipperKitUserDefaultsPlugin/FKUserDefaultsPlugin.h> #import <FlipperKitNetworkPlugin/FlipperKitNetworkPlugin.h> #import <SKIOSNetworkAdapter/SKIOSNetworkAdapter.h> #import <FlipperKitReactPlugin/FlipperKitReactPlugin.h> #endif - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Flipper初始化部分添加Debug判断 #ifdef DEBUG FlipperClient *client = [FlipperClient sharedClient]; SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults]; [client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]]; [client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]]; [client addPlugin:[FlipperKitReactPlugin new]]; [client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]]; [client start]; #endif // 其余原有初始化逻辑不变 return YES; }
- 执行
pod install重新安装依赖后,再次执行归档构建即可
内容的提问来源于stack exchange,提问作者Ramesh Vaidyanathan
相关产品推荐
相关产品推荐

