1. 程式人生 > >ipa使用企業賬號重簽名並支援推送

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.

mobileprovision 檔案得到。

<!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