軟件環(huán)境
- Mac: v10.12.6 (16G29)
- ruby: v2.3.4
- rvm: v1.29.3
- sigh: v2.71.1
- Xcode: v9.2
應(yīng)用場(chǎng)景
主要解決因重復(fù)打包導(dǎo)致測(cè)試同學(xué)回歸測(cè)試的包和上傳App Store的包不一致的問題流济。
App開發(fā)測(cè)試流程
分析:一般情況下父阻,流程如下:
- 開發(fā)同學(xué)完成開發(fā)后,打包給測(cè)試同學(xué)測(cè)試
- 測(cè)試同學(xué)發(fā)現(xiàn)bug,然后開發(fā)同學(xué)繼續(xù)開發(fā)改bug义起、打包
- 測(cè)試到一定階段后,開發(fā)同學(xué)打包(封板)芍碧,測(cè)試同學(xué)做回歸測(cè)試
- 回歸測(cè)試完成之后栅迄,開發(fā)同學(xué)再次打包上傳App Store
可能存在的問題:
- 多次打包,麻煩区宇,編譯一次的成本比想象中大
- 多次打包娃殖,可能會(huì)導(dǎo)致測(cè)試同學(xué)回歸測(cè)試的包和上傳App Store的包不一致(!important)
解決辦法:
對(duì)回歸測(cè)試通過的ipa包進(jìn)行重新簽名,然后上傳 App Store
ipa包重新簽名
新版本的ipa包重新簽名
-
切換至ipa目錄
xxx.ipa和xxxDistrbution.mobileprovision文件在同一目錄下
-
在終端輸入
sigh resign
命令
此時(shí)會(huì)看到可選擇的 identities 列表
-
Signing Identity:輸入用來簽名的證書標(biāo)識(shí)
因?yàn)閤xx.ipa和xxxDistrbution.mobileprovision文件在同一個(gè)目錄下议谷,所以省略了拖拽ipa文件和證書配置文件等步驟炉爆。
如果xxx.ipa和xxxDistrbution.mobileprovision文件不在一個(gè)目錄下,你可能需要這樣做:
- 在終端輸入
sigh resign
命令 - Path to ipa file:
- 輸入ipa文件路徑(拖拽ipa文件到終端即可)
- Signing Identity:輸入用來簽名的證書標(biāo)識(shí)(同上)
- Path to provisioning file:
- 輸入.mobileprovision文件路徑(拖拽.mobileprovision文件到終端即可)
- 自動(dòng)resign卧晓,成功
TIPS
輸入的 Signing Identity 如果和 .mobileprovision文件 不一致芬首,那么終端上仍會(huì)提示resign成功,但是逼裆,安裝時(shí)會(huì)報(bào)錯(cuò)郁稍!
查看app信息(校驗(yàn)簽名是否替換成功)
codesign -vv -d xxx.app
替換前(開發(fā)證書打的包)
替換后(企業(yè)證書打的包)
老版本的ipa包重新簽名(已過時(shí)!Jび睢耀怜!)
# *********************** 部分命令如下: ***********************
# 工程絕對(duì)路徑
project_path=$(pwd)
# build文件夾路徑
build_path=${project_path}/build
# 創(chuàng)建保存打包結(jié)果的目錄
result_path=${build_path}/build_release_$(date +%Y-%m-%d_%H_%M)
mkdir -p "${result_path}"
# target名稱
target_name=${project_name}
# zip的路徑
zipPath=${result_path}/${target_name}_jailbroken.zip
# 解壓縮
unzip ${zipPath} -d ${result_path}
# payload目錄
cd ${result_path}
payload="Payload"
bundle_path="${payload}/${target_name}.app"
#刪除以前的簽名
rm -r "${bundle_path}/_CodeSignature" "${bundle_path}/CodeResources" 2> /dev/null | true
#替換provision
cp "${project_path}/XXXDistribution.mobileprovision" "${bundle_path}/embedded.mobileprovision"
#重新簽名
codesign -f -s "${rightDistributionSign}" --resource-rules "${bundle_path}/ResourceRules.plist" "${bundle_path}"
#ipa名稱
ipa_name_p="${result_path}/${target_name}_${bundleShortVersion}_${dcName}_${dcId}.ipa"
#壓縮zip
zip -r "${ipa_name_p}" "${payload}"
現(xiàn)在運(yùn)行恢着,報(bào)錯(cuò)如下:
Warning: --resource-rules has been deprecated in Mac OS X >= 10.10!