Xcode项目归档分发时提示Mach-O文件中找不到适配arm64的架构
Xcode归档分发报错
Couldn't find suitable architecture for linking arm64 in Mach-O file 排查与解决方案 该报错核心原因为OneSignal通知扩展(OneSignalNotificationServiceExtension)的Mach-O二进制文件缺少arm64架构切片,或配置冲突导致分发流程无法识别对应架构,可按以下步骤排查处理:
排查步骤
- 核对Extension target架构配置:打开Xcode项目,选中
OneSignalNotificationServiceExtensiontarget,进入Build Settings页面搜索Architectures- 确认
Architectures配置包含arm64,不要手动硬编码仅保留x86_64等模拟器专属架构 - 确认Release模式下
Excluded Architectures没有排除arm64,注意排查是否有父级配置继承过来的排除规则
- 确认
- 核对Bitcode配置一致性:主App target与Extension target的
Enable Bitcode配置必须完全相同,避免一侧开启一侧关闭导致架构切片丢失 - 核对编译架构规则:
Build Settings中搜索Build Active Architecture Only,确认Release模式下取值为NO - 验证二进制架构信息:打开终端进入OneSignalNotificationServiceExtension.appex所在目录,执行命令
lipo -info OneSignalNotificationServiceExtension,查看输出结果是否包含arm64架构 - 核对版本兼容性:确认主App与Extension的最低支持iOS版本一致,避免版本差导致架构适配规则冲突
解决方案
方案1:修正Extension架构配置
- 将
OneSignalNotificationServiceExtensiontarget的Architectures设置为$(ARCHS_STANDARD),自动适配所有设备所需架构 - 清空Release模式下
Excluded Architectures的所有配置,移除对arm系列架构的排除规则 - 确认Release模式下
Build Active Architecture Only设置为NO,Enable Bitcode与主App保持一致
方案2:更新OneSignal SDK
旧版本OneSignal SDK的通知扩展存在架构缺失的已知问题,将项目中集成的OneSignal SDK升级到最新稳定版即可修复该问题
方案3:清理缓存重新编译
- 按下
Shift + Command + K清理Xcode编译缓存 - 进入
~/Library/Developer/Xcode/DerivedData目录,删除对应项目的缓存文件夹 - 重新执行归档操作
方案4:CocoaPods集成配置修正
如果使用CocoaPods集成OneSignal,可在Podfile末尾添加以下配置强制修正架构规则:
post_install do |installer| installer.pods_project.targets.each do |target| if target.name.include?("OneSignal") target.build_configurations.each do |config| config.build_settings['ARCHS'] = '$(ARCHS_STANDARD)' config.build_settings['EXCLUDED_ARCHS[sdk=iphoneos*]'] = '' config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES' end end end end
保存后执行pod install --repo-update,重新打开.xcworkspace文件执行归档即可
内容的提问来源于stack exchange,提问作者Jamaludeen MA
相关产品推荐
相关产品推荐

