美文网首页iOS DeveloperiOS Development
小白学习xcodebuild自动化打包

小白学习xcodebuild自动化打包

作者: uniapp | 来源:发表于2018-01-19 00:03 被阅读0次

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

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

相关文章

网友评论

    本文标题:小白学习xcodebuild自动化打包

    本文链接:https://www.haomeiwen.com/subject/tniwoxtx.html