更新Xcode 13.1 之后发现之前正常工作的打包的命令出现异常
xcodebuild -exportArchive -archivePath 'xxx.xcarchive' -exportPath 'xxx/Path' -exportOptionsPlist 'xxx/ExportOptions.plist'
该命令是将 xxx.xcarchive
生成 xxx.ipa
操作直接报错如下:
2021-11-14 11:35:15.012 xcodebuild[33157:150865] -[NSNull path]: unrecognized selector sent to instance 0x7ff84de9c0c0
** INTERNAL ERROR: Uncaught exception **
Uncaught Exception: -[NSNull path]: unrecognized selector sent to instance 0x7ff84de9c0c0
Stack:
0 __exceptionPreprocess (in CoreFoundation)
1 objc_exception_throw (in libobjc.A.dylib)
2 -[NSObject(NSObject) __retain_OA] (in CoreFoundation)
3 ___forwarding___ (in CoreFoundation)
4 _CF_forwarding_prep_0 (in CoreFoundation)
5 -[IDEDistributionProcessingPipeline process:] (in IDEFoundation)
6 -[IDEDistributionPackagingStep loadFromExportOptions:error:] (in IDEFoundation)
7 -[IDEDistributionDriver runWithDestinationPath:error:] (in IDEFoundation)
8 -[Xcode3CommandLineBuildTool _distributeArchiveAndExit] (in Xcode3Core)
9 -[Xcode3CommandLineBuildTool run] (in Xcode3Core)
10 main (in xcodebuild)
11 start (in dyld)
12 0x0000000000000000
zsh: abort xcodebuild -exportArchive -archivePath -exportPath -exportOptionsPlist
解决思路
觉得麻烦可以直接到最后查看解决方案
1, 首先觉得可能是证书的问题,但是直接XCode 程序 Product -> Archive 可以打包, 排除证书问题
2, 怀疑是机器的问题,因为之前升级过终端的 brew
和 CocoaPods
, 但是用同事的电脑也一样不行
3, 发现一个奇怪的点: UAT和生产都没问题, 只有测试环境才会有,通过对比发现, 两种不同环境的配置差异在 compileBitcode
和 method
合理怀疑问题出在exportOptionsPlist
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compileBitcode</key>
<true/>
<key>destination</key>
<string>export</string>
<key>method</key>
<string>ad-hoc</string>
<key>provisioningProfiles</key>
<dict>
<key>xxx.test</key>
<string>xxx</string>
</dict>
<key>signingCertificate</key>
<string>Apple Distribution</string>
<key>signingStyle</key>
<string>manual</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>xxx</string>
<key>thinning</key>
<string><none></string>
</dict>
</plist>
method
两个环境都有 , 但是测试环境多了一个 compileBitcode : true
直觉告诉我大概率就是这个导致, bitcode
如果项目有很多第三方库的话想必应该不会陌生
本文工程配置: tragets -> build setting -> enable bitcode -> no
这个值好像与打包配置文件的值不一样, 通过XCode生成的打包配置文件 compileBitcode
为 true
有趣的是旧版的命令行哪怕不一致也可以运行成功,但是在新版的却不行
解决方法
所以手动将打包配置文件exportOptionsPlist
中 compileBitcode
的值改为与 Xcode 配置中的一致,我这边工程中是No
,所以配置文件中改成false
. 再次尝试打包发现问题解决