随着App产品上线运行后的运营,会出现这样的需求:对同一个App,编译出不同ipa包,供不同渠道使用,也即是我们常常说的马甲包。这种需求在Android中出现较多,不同的apk对应不同的渠道。Android中可以通过ADB命令行一次性配置好所有渠道标志,很轻易的完成马甲包的需求。iOS端也有同样的利器——xcodebuild。下面逐步介绍其实现方式。
打开Mac命令行,输入
xcodebuild -version
我们就能看到我们本机安装Xcode的版本信息,「9.2」代表大版本,「9C40b」代表9.2下的小版本。一般安装Xcode的同时会自动带有xcodebuild命令,如果找不到命令,则需要下载xcodebuild重新安装,请自行搜索。
Xcode 9.2
Build version 9C40b
输入命令
xcodebuild -help
能看到xcodebuild命令详情。其中命令参数的解释可以对照官方文档理解。
下面只介绍和打包有关的命令。
Xcode中新建Single View App,或者命令行cd进入自己工程的根目录(即带有xxx.xcodeproj的目录),输入命令
xcodebuild -configuration Debug
就能产生Xcode中 command+r 一样的效果。如果出现如下错误:
Check dependencies
Code Signing Error: Signing for "ipaAuto" requires a development team. Select a development team in the project editor.
Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 11.2'
** BUILD FAILED **
The following build commands failed:
Check dependencies
说明我们在工程中没有配置好 BundleIdentifier 和
Provisioning Profile。因为xcodebuild命令如果没有指定具体参数,就会采用项目中的默认配置。配置好项目中的
BundleIdentifier 和 Provisioning Profile 文件,保证项目正常运行后,再次使用命令,就能得到正确的提示。
** BUILD SUCCEEDED **
如果我们使用的是Xcode8.0或者以下版本,打包使用的命令为:
//“xxx/xxx.app" 代表Product文件的存放路径;
//“xxx.ipa“代表编译成功的ipa路径;
xcrun -sdk iphoneos PackageApplication -v “xxx/xxx.app" -o “xxx.ipa“
Product文件路径的寻找方式如下图,右键Show in Finder后,按住app文件拖拽到Mac命令行,就能获取Product的路径。ipa路径可以自定义。
在Xcode9.0中,苹果爸爸对打包命令进行了修改,舍弃了PackageApplication(当然也可以重新安装PackageApplication),使用「xcodebuild -exportArchive」命令,具体参数如下:
//xxx.xcarchive代表xcarchive文件;
//xxx.plist代表指定的exportOptionsPlist文件;
xcodebuild -exportArchive -archivePath xxx.xcarchive -exportOptionsPlist xxx.plist -exportPath ./Product
xcarchive和exportOptionsPlist都是在对工程进行Archive时自动生成的文件。
打包工程,选择和Provisioning Profile对应的distribution:
注:
此处去掉勾选,否者命令行打包会报错
如果正常导出导出,最后能看到如下4个文件:
其中ExportOptions.plist就是打包需要的plist文件,可以看到它包含8个内容:
compileBitcode
method
ad-hoc
signingStyle
automatic
stripSwiftSymbols
teamID
Z5QA9CANKM
thinning
<none>
以上8个内容不可减少,可以根据打包要求继续增加。
xcarchive文件也是在手动打包后Xcode生成的文件,可以在Xcode偏好设置中找到存放位置,将文件拷贝到工程根目录。
cd到项目根目录,再次调用以上打包命令,就能在工程根目录的Product文件夹下看到打包成功后的文件。
Tips:
出现错误:
error: exportArchive: The data couldn’t be read because it isn’t in the correct format.
Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo={NSDebugDescription=No value., NSFilePath=/var/folders/q_/d_cyw7jd7q70lpcp28m9mqx80000gn/T/ipatool-json-filepath-ZD7JAl}
** EXPORT FAILED **
前面勾选处需要去掉。
参考:
1 Xcode9 xcodebuild export plist 配置
2 打包ipa时遇到错误