ipa使用企業賬號重簽名並支援推送
Apple對APP的嚴格管理,導致我們TM案子iOS app們如果在app store上上線面臨很大的技術問題。和CP的協調以及商務上的折衷後,打算用企業簽名的方案,為嵌入我們sdk的app們建立一個專門的下載渠道。
假設要重新簽名的應用為iCPApp.ipa, bundleid為iCPApp,包名為cn.186.iCPApp。這個時候我們要用自己的企業賬號為這個ipa重新進行一次簽名,同時還要能夠支援訊息推送服務。如下步驟:
1. 在自己的企業賬號裡建立一個APP IDs,假設為com.cnc.iCPAppTMD
2. 建立一個Certificates,勾選Apple Push Notification service SSL, 然後選擇剛才建立的APP IDs (com.cnc.iCPAppTMD)
3.建立一個Distribution Provisioning Profiles, 使用com.cnc.iCPAppTMD包名,這樣這個distribution provisioning 才能夠支援訊息推送, 並下載,儲存做iCPAppTMD.mobileprovision。
接下來就是進行重新簽名了,
1. 將ipa改名zip,並解壓縮
#mv iCPApp.ipa iCPApp.zip
#unzip iCPApp.ipa
2. 刪除_CodeSignature 檔案
#rm -R Payload/iCPApp.app/_CodeSignature
3.用iCPAppTMD.mobileprovision覆蓋embedded.mobileprovision
#cp iCPAppTMD.mobileprovision Payload/iCPApp.app/embedded.mobileprovision
4.編輯Entitlements.plist 檔案,注意:一開始我也沒有設定這個檔案,簽名可以,但是推送依然不成功。下面標記紅色的地方可以cat iCPApp TMD.
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>XXXXXXXXXX.com.cnc.iCPAppTMD</string>
<key>aps-environment</key>
<string>production</string>
<key>get-task-allow</key>
<false/>
<key>keychain-access-groups</key>
<array>
<string>XXXXXXXXXX.*</string>
</array>
</dict>
</plist>
5. 重新簽名,下文標示紅色為iCPAppTMD.mobileprovision對應的Certificates
/usr/bin/codesign -f -s "iPhone Distribution: XXXXX Science & Technology Co., Ltd." --entitlements Entitlements.plist --resource-rules Payload/iCPApp.app/ResourceRules.plist Payload/iCPApp.app
Q&A:
1. 如果提示找不到resource file, 則可以從iPhoneOS SDK目錄中拷貝ResourceRules.plist檔案到iCPApp.app中
Ref:
http://www.cocoachina.com/bbs/read.php?tid-282106.html