如何使用Shell脚本编译生成Archive文件并导出签名IPA文件。
2015-06-19 16:41
721 查看
如何使用Shell脚本编译生成Archive文件并导出签名IPA文件。
本Shell脚本用于build,XCode的workspace源代码工程,并导出成可重签名的IPA文件,用于分发测试安装文件和用于提交appstore审核的文件。实现辅助产品开发,测试的配置管理工作。
使用本脚本需要以下环境
- Mac OS 10.9+
- XCode 6.0 or later and command line tools
- 用于WorkSpace工程,例如使用了Cocoapods依赖库管理的工程
- *配置好开发证书和ad ho 证书(for Debug)和(for Release)
- 源代码工程中配置好Scheme名字和build
- 对Debug配置和Release配置设置好证书名称
- 确认在Xcode UI界面中能够完全build,并通过环境生成Archive和IPA,并正确签名。
- 在workspace文件夹下建立build文件夹
chmod 777 ./build_one_target.sh
需要修改的
workspace name
provisioningProfile
scheme name
build_config
代码块语法遵循标准markdown代码
./build_one_target.sh
大一些的工程,大约3-5分钟完成。
完成之后,在workspace目录下的build目录下,会有如下两个主要文件。
targetname_QA_20150420_094731.xcarchive
targetname_QA_adhoc_v2.1.1_b44_rev7849_t20150420_094731.ipa
xcarchive文件很重要,可以用于不同证书签名的ipa文件
ipa文件使用的是adhoc 证书导出,用于真机测试分发。证书名称在源代码中配置。根据不同的产品bundle id,做相应修改,这里的名称和证书,仅做演示参考,不具有任何商业意义。
用
build 脚本说明
复制脚本文件到WorkSpace目录
打开终端工具并进入workspace目录
给脚本执行权限
修改脚本参数源代码里已经有注释
代码块
执行脚本
目录
1. build 脚本说明
本Shell脚本用于build,XCode的workspace源代码工程,并导出成可重签名的IPA文件,用于分发测试安装文件和用于提交appstore审核的文件。实现辅助产品开发,测试的配置管理工作。使用本脚本需要以下环境
- Mac OS 10.9+
- XCode 6.0 or later and command line tools
- 用于WorkSpace工程,例如使用了Cocoapods依赖库管理的工程
- *配置好开发证书和ad ho 证书(for Debug)和(for Release)
- 源代码工程中配置好Scheme名字和build
- 对Debug配置和Release配置设置好证书名称
- 确认在Xcode UI界面中能够完全build,并通过环境生成Archive和IPA,并正确签名。
- 在workspace文件夹下建立build文件夹
2. 复制脚本文件到WorkSpace目录
3. 打开终端工具,并进入workspace目录
4. 给脚本执行权限
chmod 777 ./build_one_target.sh
5. 修改脚本参数,源代码里已经有注释
需要修改的workspace name
provisioningProfile
scheme name
build_config
代码块
代码块语法遵循标准markdown代码<code class="language-shell hljs bash has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-shebang" style="color: rgb(0, 102, 102); box-sizing: border-box;">#!/bin/bash </span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># init build configuration</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># archive and ipa output path</span> build_path=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"./build"</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># workspace name</span> build_workspace=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"workspacename.xcworkspace"</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># project name and path</span> project_path=$(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">pwd</span>) project_name=$(ls | grep xcodeproj | awk -F.xcodeproj <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'{print $1}'</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># provisiong profile name</span> provisioningProfile=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'"XC Ad Hoc: com.xxxxxx.yyyyyy"'</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># timestamp for ouput file name</span> timeStamp=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$(date +"%Y%m%d_%H%M%S")</span>"</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">echo</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$project_path</span>/<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$build_workspace</span>"</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> [ ! <span class="hljs-operator" style="box-sizing: border-box;">-d</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$project_path</span>/<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$build_workspace</span>"</span> ]; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">then</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">echo</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Error!Current path is not a xcode workspace.Please check, or do not use -w option."</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">exit</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">fi</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># get the info.plist</span> app_infoplist_path=<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${project_path}</span>/<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${project_name}</span>/<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${project_name}</span>-AppStore-Info.plist <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">echo</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${app_infoplist_path}</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># get the main version</span> bundleShortVersion=$(/usr/libexec/PlistBuddy -c <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"print CFBundleShortVersionString"</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${app_infoplist_path}</span>"</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># get the build version</span> bundleVersion=$(/usr/libexec/PlistBuddy -c <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"print CFBundleVersion"</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${app_infoplist_path}</span>"</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># get the svn revision</span> svn_revision=$(svn info |grep Revision: |awk <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'{print $2}'</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#`svnversion -c |sed 's/^.*://' |sed 's/[A-Z]*$//'`</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#svn info |grep Revision: |awk '{print $2}'</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#workspace_name='*.xcworkspace'</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#ls $project_path/$build_workspace &>/dev/null</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#rtnValue=$?</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#if [ !$rtnValue = 0 ];then</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># #build_workspace=$(echo $(basename $project_path/$workspace_name))</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># echo "Error!Current path is not a xcode workspace.Please check, or do not use -w option."</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># exit 2</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#fi</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># scheme name</span> build_scheme=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"schemename"</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># buidl config. the default is Debug|Release</span> build_config=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Release"</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># clean build</span> clean_cmd=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'xcodebuild'</span> clean_cmd=<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${clean_cmd}</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">' clean -workspace '</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${build_workspace}</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">' -scheme '</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${build_scheme}</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">' -configuration '</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${build_config}</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$clean_cmd</span> > <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$build_path</span>/clean_qa.txt || <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">exit</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># build & archive, generate the archive file</span> archive_name=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"targetname_QA_<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${timeStamp}</span>.xcarchive"</span> archive_path=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"./build/"</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$archive_name</span> build_cmd=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'xcodebuild'</span> build_cmd=<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${build_cmd}</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">' -workspace '</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${build_workspace}</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">' -scheme '</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${build_scheme}</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">' -destination generic/platform=iOS archive -configuration '</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${build_config}</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">' ONLY_ACTIVE_ARCH=NO -archivePath '</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${archive_path}</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">echo</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"** Archiving QA ** to the <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${archive_path}</span>"</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">echo</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${build_cmd}</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$build_cmd</span> > ./build/build_archive_qa.log || <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">exit</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> [ ! <span class="hljs-operator" style="box-sizing: border-box;">-d</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${archive_path}</span>"</span> ]; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">then</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">echo</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"** Error! ARCHIVE QA FAILED ** Please check ./build/build_archive_qa.log."</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">exit</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">echo</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"** ARCHIVE QA SUCCEEDED ** to the <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${archive_path}</span>"</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">fi</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># export to ipa with QA server</span> ipa_name=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"targetname_QA_adhoc_v<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${bundleShortVersion}</span>_b<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${bundleVersion}</span>_rev<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${svn_revision}</span>_t<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${timeStamp}</span>.ipa"</span> ipa_path=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"./build/"</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ipa_name</span> ipa_cmd=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'xcodebuild'</span> ipa_cmd=<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${ipa_cmd}</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">' -exportArchive -exportFormat ipa -archivePath '</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${archive_path}</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">' -exportPath '</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${ipa_path}</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">' -exportProvisioningProfile '</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${provisioningProfile}</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">echo</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"** Exporting QA ** to the <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${ipa_path}</span>"</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">echo</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${ipa_cmd}</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">eval</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${ipa_cmd}</span> > ./build/<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">export</span>_ipa_qa.log || <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">exit</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> [ ! <span class="hljs-operator" style="box-sizing: border-box;">-f</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${ipa_path}</span>"</span> ]; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">then</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">echo</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"** Error! Export IPA QA FAILED ** Please check ./build/export_ipa_qa.log."</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">exit</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">echo</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"** Export IPA QA SUCCEEDED ** to the <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">${ipa_path}</span>"</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">fi</span> </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li></ul>
6. 执行脚本
./build_one_target.sh大一些的工程,大约3-5分钟完成。
完成之后,在workspace目录下的build目录下,会有如下两个主要文件。
targetname_QA_20150420_094731.xcarchive
targetname_QA_adhoc_v2.1.1_b44_rev7849_t20150420_094731.ipa
xcarchive文件很重要,可以用于不同证书签名的ipa文件
ipa文件使用的是adhoc 证书导出,用于真机测试分发。证书名称在源代码中配置。根据不同的产品bundle id,做相应修改,这里的名称和证书,仅做演示参考,不具有任何商业意义。
目录
用 [TOC]来生成目录:
build 脚本说明
复制脚本文件到WorkSpace目录
打开终端工具并进入workspace目录
给脚本执行权限
修改脚本参数源代码里已经有注释
代码块
执行脚本
目录
相关文章推荐
- shell脚本生成一个简单的计算器
- Powershell 自动化安装zabbix agent
- 解决删除大量文件的问题 -bash: /usr/bin/sudo: Argument list too long
- python调用Shell脚本:os.system(cmd)或os.popen(cmd)()【转】
- 使用Bash Shell处理JSON文件
- 40 个很有用的 Mac OS X Shell 脚本和终端命令
- 解决Xshell显示中文乱码的问题
- Bash 快捷键大全
- Bash中一些重要的命令
- Shell脚本实现判断IP地址是否在一个ip段内代码分享
- php-fpm开机自动启动Shell脚本
- 整理的Linux Shell语法速查表(用C语言语法来作对比)
- 70个经典的 Shell 脚本面试问题
- -bash: zip: command not found提示解决办法
- 感叹号:bash 的历史扩展功能
- bash字符串处理
- Linux Shell 学习笔记(三)--Shell变量
- Linux Shell 学习笔记(二)
- Linux Shell 学习笔记(一)
- php-fpm开机自动启动Shell脚本