一个iOS打包错误提示"IPA processing failed"的解决方法

打包环境: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"错误原因,可能是以下几种:

  1. 选择了 rebuild for bitcode,而有些 Framework 不支持 bitcode。 解决方式:不选择 rebuild for bitcode选项。
  2. 有些 framework 里包含了多余的架构,比如支持模拟器的 i386, x86_64。解决方式:通过脚本移除多余架构,或者使用 carthage copy-frameworks 做framework的拷贝,copy指令会自动移除不需要的架构。
  3. 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

你可能感兴趣的:(一个iOS打包错误提示"IPA processing failed"的解决方法)