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

如何使用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]来生成目录:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值