這是一篇關(guān)于XCode自動(dòng)打包的文章以及xcodebuild, xrun兩種打包方法寫法茄茁。
自動(dòng)打包的文章非常非常多了,我寫這篇也沒什么新意为迈,只是因?yàn)橛辛薃ndroid那篇丹壕,所以也得有iOS的。
忽略這篇文章的名字沃疮,也是因?yàn)樯掀鹆诉@個(gè)名字盒让。。司蔬。
1.xrun方法:
##########################################################################################
buildtype=sample-ol
hosturl=https://xxx.xxx.xxx
##########################################################################################
#拷貝替換資源
#需要拷貝的資源路徑
resource_path=/Users/Compass/Package/Resource/${buildtype}/resource.zip
current_dir=$(pwd)
echo $current_dir
cd $current_dir
cd ..
cd WReader/Sample
workspace_pathbase=$(pwd)
echo $workspace_pathbase
#根據(jù)當(dāng)前shell所在位置邑茄,獲取到的工程代碼路徑
workspace_path=${workspace_pathbase}/Sample
echo ======Begin Build=========
#resource在工程里的路徑
resource_workpath=${workspace_path}/resource.zip
#拷貝資源到工程路徑,強(qiáng)制替換
cp ${resource_path} ${resource_workpath}
##########################################################################################
# 指定ipa的輸出位置
ipa_path=/Users/Compass/Package/app/$(date +%Y%m%d)
# 配置文件的位置俊啼,修改配置文件里的某些參數(shù)
config_plist=${workspace_path}/Resource/config.plist
# 修改config
/usr/libexec/PlistBuddy -c "Set:hosturl ${hosturl}" ${config_plist}
# 清空上一次的文件夾
rm -rf ${workspace_pathbase}/Build
# 進(jìn)入要工作的文件夾
cd ${workspace_pathbase}
# 打包項(xiàng)目名字
scheme_name=Sample
# ipa名字
ipa_name=${buildtype}
# 打包使用的證書
CODE_SIGN_IDENTITY="iPhone Distribution: Beijing XXXXXX XXXXXX, XXXXXX."
# 打包使用的描述文件
PROVISIONING_PROFILE="XXXX-XXXX-XXXX-XXXX-XXXXXXXXX"
# 指定app的輸出位置 也就是Demo中build文件夾的位置
build_path=${workspace_pathbase}/Build
# 生成app
xcodebuild -project ${workspace_path}.xcodeproj -target ${scheme_name} -configuration Release clean -sdk iphoneos build CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${PROVISIONING_PROFILE}" SYMROOT="${build_path}"
mkdir /Users/Compass/Package/app/$(date +%Y%m%d)
xcrun -sdk iphoneos -v PackageApplication ${build_path}/Release-iphoneos/Sample.app -o ${ipa_path}/${ipa_name}.ipa
echo ======End Build=========
其實(shí)關(guān)鍵只有兩步肺缕,上面一大堆都是找路徑和拷貝資源文件的:
# 1.build app
xcodebuild -project ${workspace_path}.xcodeproj -target ${scheme_name} -configuration Release clean -sdk iphoneos build CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${PROVISIONING_PROFILE}" SYMROOT="${build_path}"
# 2.生成ipa
xcrun -sdk iphoneos -v PackageApplication ${build_path}/Release-iphoneos/Sample.app -o ${ipa_path}/${ipa_name}.ipa
其中,打包需要的證書授帕,描述文件如果不知道在哪里看同木,打開xcodeproj/project.pbxproj,以文本方式打開:
CODE_SIGN_IDENTITY的地方:
image.png
PROVISIONING_PROFILE的地方:
image.png
用xrun打包的時(shí)候,其實(shí)使用的是PackageApplication工具跛十,但是這個(gè)工具在XCode8.2.1(好像是這個(gè)版本)以后就沒有了彤路,所以,如果報(bào)找不到這個(gè)工具的錯(cuò)誤芥映,可以參照這位同學(xué)方法放回去:
http://blog.csdn.net/itiapp_home/article/details/70241011
用xrun打包成功之后斩萌,會(huì)有一個(gè)警告:
warning: PackageApplication is deprecated, use `xcodebuild -exportArchive` instead.
因此,如果我們不用xrun打包屏轰,還有其他的方法颊郎,就是使用xcodebuild exportArchive:
2.xcodebuild導(dǎo)出ipa:
# 指定exportplist位置
export_plist=${workspace_path}/Resource/exportplist.plist
# 1.清空
xcodebuild clean -project ${workspace_path}.xcodeproj -target ${scheme_name}
# 2.指定輸出xcarchive路徑,打包xcarchive
archivepath=${build_path}/Archive/Sample.xcarchive
xcodebuild archive -project ${workspace_path}.xcodeproj -scheme ${scheme_name} -configuration Release -archivePath ${archivepath}
# 2.輸出ipa
xcodebuild -exportArchive -archivePath ${archivepath} -exportPath ${ipa_path} -exportOptionsPlist ${export_plist}
其中exportplist里的內(nèi)容:
<?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>method</key>
<string>enterprise</string>
<key>teamID</key>
<string>xxxxxxx</string>
</dict>
</plist>
method是打包的類型,文檔上有ad-hoc,enterprise等幾種值霎苗,我這里使用的是enterprise.其他值不清楚的大家搜一下文檔姆吭。
其實(shí)這幾個(gè)值,也可以在shell里編譯的時(shí)候自動(dòng)寫值唁盏,寫入方法參照上面plist寫入方法内狸。
TeamID的值是DEVELOPMENT_TEAM的值:
兩種方法我都測過了检眯,都可以打包成功。
因?yàn)槲也恍枰褂闷压⒌绕脚_(tái)昆淡,所以其他就不介紹了锰瘸。
有一點(diǎn)小郁悶:因?yàn)閕OS打包的時(shí)候,developer和distribution的包使用的證書是不一樣的昂灵,每次編譯的時(shí)候避凝,需要手動(dòng)選一下證書,否則可以和android一樣一鍵搞定眨补,連IDE都不用打開了管削。