打包环境:MacOS+Jenkins
错误提示:
/usr/bin/xcrun xxx -exportArchive -exportOptionsPlist 'xxx' -archivePath xxxxx.xcarchive -exportPath 'xxxxxxxx' �[0m
+ xcodebuild -exportArchive -exportOptionsPlist xxxx -archivePath 'xxxxxxx' -exportPath xxxx
xcodebuild [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path 'xxxxxxx'.
error: exportArchive: IPA processing failed
Error Domain=IDEFoundationErrorDomain Code=1 "IPA processing failed" UserInfo={NSLocalizedDescription=IPA processing failed}
分析
通过错误信息可以知道,编译是成功的,导出ipa包时候报错,网上查了下"IPA processing failed"
错误原因,可能是以下几种:
- 选择了 rebuild for bitcode,而有些 Framework 不支持 bitcode。 解决方式:不选择 rebuild for bitcode选项。
- 有些 framework 里包含了多余的架构,比如支持模拟器的 i386, x86_64。解决方式:通过脚本移除多余架构,或者使用 carthage copy-frameworks 做framework的拷贝,copy指令会自动移除不需要的架构。
- framework 出错、重复、或者缺少。比如使用了
Carthage
,却忘记在 build phase 里添加 Run Script:
/usr/local/bin/carthage copy-frameworks
, 并指定所需的framework。
经过排查,均不是以上三种问题,但是从上面三种出错原因可以总结为:"IPA processing failed"有可能是Framework有问题,并且本项目也有使用 Carthage ,概率大增。 于是解压编译结果 xxx. xcarchive 文件,查看.app的内容,观察framework文件,经过对比,发现framework里多了一个隐藏的.svn目录。
原因就是这个。
Carthage 和 macOS 自带旧版本 svn 一起,导致了问题。
打包机升级到10.15.x之后,svn软件没有更新,还是使用的1.11之类古老版本,Jenkins使用旧版本的svn,导致项目的每个目录和子目录下都有.svn文件夹,而 xxxx.framework 也被 macOS 识别为目录,/usr/local/bin/carthage copy-frameworks
操作在分离framework的x86和arm架构的时候,把.svn目录也当做framework的一部分,copy 到 app 里面,Xcode 无法 export framework 里包含 .svn 的. xcarchive 文件,报"IPA processing failed"
错误。
解决思路:在carthage copy-frameworks操作之前,去除framework里的 .svn目录。
方法1. 使用脚本手动删除.svn
方法2.升级打包机的svn版本:brew upgrade svn
,然后升级本工程的svn版本,到项目根目录,运行svn upgrade
推荐方法2