您的位置:首页 > 运维架构 > Shell

如何使用Shell脚本编译生成Archive文件并导出签名IPA文件。

2015-06-19 16:41 721 查看
如何使用Shell脚本编译生成Archive文件并导出签名IPA文件。


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目录
给脚本执行权限
修改脚本参数源代码里已经有注释

代码块

执行脚本

目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: