Xcode 9.2归档iOS应用时找不到libAppEngine iOS.a,求解决方案
我之前也碰到过几乎一模一样的情况——App在模拟器和真机上跑都没问题,一归档就报找不到静态库的错误,给你几个针对性的排查和解决步骤:
核对库与主App的架构配置
打开你的C++库项目,检查Build Settings里的Architectures和Valid Architectures,确保和主App的完全一致。尤其是归档时用的是Release-iphoneos配置,你可以手动去库的派生数据目录(~/Library/Developer/Xcode/DerivedData)里找到Release-iphoneos下的产物,确认libAppEngine iOS.a确实存在且路径正确。修正主App的库引用路径
进入主App的Build Phases->Link Binary With Libraries,检查这个静态库的引用方式。如果是相对路径,归档时可能因为编译环境路径变化导致找不到。建议改用基于项目根目录的变量路径,比如$(SRCROOT)/你的库所在文件夹/Release-iphoneos/libAppEngine iOS.a,或者直接把库文件复制到主App项目内,用本地引用。确认库的归档Scheme配置
打开库项目的Scheme编辑界面(点击Xcode顶部的Scheme下拉框,选择Edit Scheme...),切换到Archive标签页,确保Build Configuration设置为Release。如果这里是Debug,那单独归档库没问题,但主App归档时调用的Release配置就找不到对应的库文件了。彻底清理缓存后重新编译
先删掉库项目和主App的派生数据,然后单独编译库的Release-iphoneos版本,确认生成了正确的libAppEngine iOS.a文件。之后把这个最新生成的库文件重新添加到主App的依赖中,再尝试归档主App。检查主App的Library Search Paths
打开主App的Build Settings,找到Library Search Paths,切换到Release配置,确保这里包含了静态库所在的路径。很多时候Debug配置加了路径但Release没加,就会出现运行正常、归档失败的情况。可以添加$(SRCROOT)/你的库所在文件夹并勾选Recursive选项。
内容的提问来源于stack exchange,提问作者Daniel Ryan

