前提:
游戲嵌入SDK,用Adhoc配置文件打出母包.ipa,其中渠道id存儲在SDK的.bundle的plist文件里。開發(fā)人員拿到母包.ipa進(jìn)行修改,批量打渠道包。在進(jìn)行解壓縮.ipa會(huì)破壞之前的簽名,所以需要重新企業(yè)簽名。打開.app會(huì)發(fā)現(xiàn)有這兩個(gè)文件。其中_CodeSignature:ipa包簽名文件,embedded.mobileprovision:證書配置文件,只要替換了這兩個(gè)文件就可以解決ipa重簽名的主要問題。如下圖。
其中還需要用到Entitlements.plist,需要cd到Payload文件下,才可以生成。利用如下shell:
/usr/libexec/PlistBuddy -x -c "print :Entitlements " /dev/stdin <<< $(security cms -D -i production.app/embedded.mobileprovision) > Entitlements.plist
其中Can be debugged(Boolean)為NO。如下圖所示:
對于Can be degugged等同于get-task-allow。
其中關(guān)于這個(gè)屬性簡介是:get-task-allow, when signed into an application, allows
other processes (like the debugger) to attach to your app. Distribution
profiles require that this value be turned off, while development
profiles require this value to be turned on (otherwise
Xcode would never be able to launch and attach to your app).
【翻譯過來是:當(dāng)對應(yīng)用進(jìn)行簽名時(shí),有了這個(gè)屬性就可以運(yùn)行其他的進(jìn)程訪問你的app。發(fā)布文件需要這個(gè)屬性關(guān)掉,此文用到的是AdHoc,用到的就是Distribution profiles,所以需要設(shè)置為NO,如果是開發(fā)文件,這個(gè)屬性需要開啟設(shè)置為yes。如果不這樣設(shè)置的話,Xcode無法啟動(dòng)或者連接到你的應(yīng)用程序】
【參考連接http://www.cnblogs.com/tekkaman/p/3715560.html
【failed to get the task for process問題】
A: Why am I getting "Error launching remote program:failed to get the task for process" when debugging an iPhone application on the device?
You are getting the "Error launching remote program: failed to get the task for process" error message because you areeither using yourAd HocorDistributionProvisioning profilewhen debugging your iPhone application on your device or you specified a code signing entitlements property list in your build settings which does not include aget-task-allowor "Can be debugged" property.
【Debugging when using a Distribution Profile】
Distribution profiles don't have aget-task-allowentitlement property, which is needed for debugging iPhone applications. However, this property is available and enabled for Development Provisioning profiles. So, use your Development profile rather than your Distribution profile when debugging your iPhone application on the device.
【Missing Entitlement Property】
If you specified a code signing entitlements property list in your build settings, make sure that your property list contains theget-task-allowproperty.
】
準(zhǔn)備資料如下,準(zhǔn)備前4個(gè)。如下圖
1:從企業(yè)賬號里下載AdHoc配置文件;
2:創(chuàng)建的授權(quán)文件;
3:執(zhí)行批量打包的shell文件;
4:母包ipa;
5:OutApps:存放重新簽名渠道包的文件夾。
//--------
打開終端--》cd到當(dāng)前文件夾
sh TjjApp.sh TjjDemo
就可以了。
其中shell文件如下:
【#!/bin/bash
# 輸入的包名
name=$1
#echo 是打印的意思
echo "---ahh---"
echo ${name}
appName="${name}.app"
echo ${appName}
plistBuddy="/usr/libexec/PlistBuddy"
#configName="channel.plist"
configName="Payload/${appName}/JARIDK.bundle/data/JARChannelIDSetting.plist"
configNameNew="Payload"
ipa="${name}.ipa"
# 打好包后輸出的文件夾名字
outUpdateAppDir="OutApps"
# 獲取當(dāng)前目錄,并切換過去
currDir=${PWD}
echo ${currDir}
cd "${currDir}"
echo "-----${currDir}"
# 生成日志目錄
#mkdir log
rm -rf Payload
#解壓縮
unzip -o -q ${ipa} #>> log/unzipUpdateApp.log
#echo `ls Payload`
# 刪除舊的文件,重新生成
rm -rf "${outUpdateAppDir}"
mkdir "${outUpdateAppDir}"
echo "------------------------開始打包程序------------------------"
#echo ""
# 渠道列表文件開始打包
#for line in $(cat TargetChanelList.txt)
#循環(huán)數(shù)組,批量打包時(shí)需要修改的渠道號和渠道Id
#ChannelID=("1174" "1173" "1156" "1155" "1152" "1184" "1151")
echo ${#ChannelID[@]}
for ((i=0;i<${#ChannelID[@]};i++))
do
#echo是輸出命令,可以忽略
echo "........正在打包渠道號:${ChannelID[$i]}"
#??? cd Payload/${appName}
# 設(shè)置Channel.plist
echo "-----1----${PWD}"
#修改
$plistBuddy -c "set :SPREAD_ID ${ChannelID[$i]}" ${configName}
echo "-----2----${PWD}"
rm -rf Payload/${appName}/_CodeSignature
#cp AdHoc配置文件 替換 Payload/${appName}文件下的embedded.mobileprovision
cp AdHocOrgTjj.mobileprovision "Payload/${appName}/embedded.mobileprovision"
#?? ipa包簽名: codesign -f -s "iPhone Distribution: Distribution證書名字,打開鑰匙串可以看到" --entitlements "Entitlements.plist" "Payload/${appName}"
codesign -f -s "iPhone Distribution:? Distribution證書名字" --entitlements "Entitlements.plist" "Payload/${appName}"
#
#Payload/TjjDemo.app: replacing existing signature :這個(gè)時(shí)候是已經(jīng)OK
zip -rq "${outUpdateAppDir}/${ChannelID[$i]}.ipa" "Payload"
echo "........打包已完成"
#?? ?echo ""
done
echo "------------------------程序打包已結(jié)束------------------------"
】
如果安裝到手機(jī)上是灰色的,就要看看是不是證書的問題【?IOS 開發(fā) 證書顯示 此證書簽發(fā)者無效 解決辦法】
可以用下面的方法
【
鑰匙串中的所有證書 都 提示此證書簽發(fā)者無效
經(jīng)查找得知系統(tǒng)證書WWDR在2016年2月14日失效,需要更新WWDR系統(tǒng)證書
下載證書地址https://developer.apple.com/certificationauthority/AppleWWDRCA.cer 下載之后 雙擊安裝
到這? 還需要一步
1.在登錄里面刪除過期的證書WWDR
2.在系統(tǒng)里面 刪除過期的證書WWDR? 就可以完美的解決了。所有的證書 都可以使用了
(找不到過期證書?點(diǎn)擊顯示-->顯示已過期的證書。)】
參考鏈接:
最主要感謝一位前輩的指點(diǎn)
http://www.olinone.com/?p=198【iOS證書及ipa包重簽名探究】
http://objccn.io/issue-17-2/【代碼簽名探析】