求助:如何让Xcode为iPhone6构建运行armv7版本,解决架构与签名问题
解决iPhone6上无法运行armv7构建版本的问题
我之前在给老设备适配旧架构时也踩过一模一样的坑,Xcode对arm64的强制校验确实头疼,给你几个亲测有效的解决方向:
一、彻底检查架构配置细节
别只改Build Active Architecture Only,得把整个架构链的设置都捋一遍:
- 打开Target的
Build Settings,搜索Architectures:- 把
Architectures改成手动输入armv7, arm64(别用默认的Standard Architectures,它会自动排除老架构) - 确保
Valid Architectures也明确包含armv7, arm64 - 重点:Debug和Release两个配置的
Build Active Architecture Only都要设为No,很多人只改了Debug,Release没动,最后还是出问题
- 把
二、定位「Invalid bitcode signature」的元凶
这个错误确实太模糊,试试这些方法缩小范围:
- 先清缓存:执行
Cmd+Shift+K清理构建产物,再去Xcode > Preferences > Locations里删除Derived Data,然后重启Xcode重新构建 - 排查第三方依赖:如果你用了CocoaPods,大概率是某个Pod的架构或bitcode不兼容armv7。可以在Podfile里加一段配置,强制所有Pods和主项目保持一致:
执行post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['ARCHS'] = 'armv7 arm64' config.build_settings['VALID_ARCHS'] = 'armv7 arm64' # 先临时关掉bitcode试试,如果能跑通,再逐个排查哪个库不支持armv7的bitcode config.build_settings['ENABLE_BITCODE'] = 'NO' end end endpod install后重新构建,要是错误消失了,就去逐个排查依赖库的兼容性 - 临时关闭全局Bitcode:在Target的
Build Settings里把Enable Bitcode设为No,如果构建成功,说明问题出在bitcode兼容性上,要么找兼容armv7的库版本,要么就一直关着bitcode(其实很多项目现在都不需要bitcode了)
三、构建通用(Fat)版本的正确姿势
要生成同时包含armv7和arm64的通用包,可以这么做:
方法1:通过Xcode归档生成
- 选择
Generic iOS Device作为构建目标 - 执行
Product > Archive,归档完成后,在Organizer里导出时选择「iOS App Store Deployment」或「Ad Hoc Deployment」,导出的IPA就是包含多架构的通用包
方法2:用lipo命令手动合并
- 先分别构建armv7和arm64版本:
- 连接iPhone6,选择它作为目标构建armv7版本,产物在
Derived Data对应的路径里 - 再选择一个arm64设备(比如iPhone X)构建arm64版本
- 连接iPhone6,选择它作为目标构建armv7版本,产物在
- 找到两个版本的二进制文件,用
lipo命令合并:lipo -create /path/to/armv7-binary /path/to/arm64-binary -output /path/to/fat-binary
内容的提问来源于stack exchange,提问作者Pavel P
相关产品推荐
相关产品推荐

