小白学习xcodebuild自动化打包

2018-01-22 10:47:43来源:https://www.jianshu.com/p/3968440eb095作者:冬风破10人点击

分享

随着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路径可以自定义。





Product文件路径.png

在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:



image.png

注:此处去掉勾选,否者命令行打包会报错



image.png



image.png

如果正常导出导出,最后能看到如下4个文件:



image.png

其中ExportOptions.plist就是打包需要的plist文件,可以看到它包含8个内容:


<?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>
<false/>
<key>method</key>
<string>ad-hoc</string>
<key>signingStyle</key>
<string>automatic</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>Z5QA9CANKM</string>
<key>thinning</key>
<string>&lt;none&gt;</string>
</dict>
</plist>

以上8个内容不可减少,可以根据打包要求继续增加。


xcarchive文件也是在手动打包后Xcode生成的文件,可以在Xcode偏好设置中找到存放位置,将文件拷贝到工程根目录。





xcarchive.png

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时遇到错误


关注和喜欢都是对我的鼓励和支持~



微信扫一扫

第七城市微信公众平台