1 證書申請流程介紹
1.1 Certification(證書)
證書是用來給應用程序簽名的,只有經過簽名的應用程序才能保證來源是可信任的,并且代碼是完整的, 未經修改的。在Xcode Build Setting的Code Signing Identity中,你可以設置用于為代碼簽名的證書。
基本證書(非推送通知證書)
Developer Certification(開發證書)安裝在電腦上提供權限:開發人員通過設備進行真機測試。可以生成副本供多臺電腦安裝;
Distribution Certification(發布證書)安裝在電腦上提供發布iOS程序的權限:開發人員可以制做測試版和發布版的程序。不可生成副本,僅有配置該證書的電腦才可使用。
1.2 appID
什么是appID: 例如WNP的APPID:com.chinanetcenter.wspushapp,它是每一個應用的獨立標識,在設置項中可以設置Services,也就是其所使用的額外服務,比如是否用到了
PassBook,GameCenter以及常見的push服務,如果選中了push服務,我們的應用有用到推送功能,必須生成第3條所的推送證書。
1.3 推送證書
分為開發和發布兩種,分別為APNs Devlopment(開發用推送證書)和APNs Production(發布用推送證書)具體內容如下:
該證書在appID配置中創建生成,和開發者證書一樣,安裝到開發電腦上。
Development
App Development (1年):用來開發和真機調試應用程序。
Push Development (1年):用來調試Apple Push Notification
Production
In-House and Ad Hoc (3年):用來發布In-House和AdHoc的應用程序。
App Store :用來發布提交App Store的應用程序。
MDM CSR
Push Production (1年):用來在發布版本中使用Apple Push Notification。
1.4 Provisioning Profile(描述文件)
描述什么:描述文件里邊包含了App ID , Certificates , Devices. 說明生成描述文件需要用到這些信息.
如果我們要打包ipa或者在真機上運行一個應用程序,我們首先需要證書來進行簽名,用來標識這個應用程序是合法的、安全的、完整的等等;然后需要指明它的App ID,并且驗證Bundle
ID是否與其一致;再次,如果是真機調試,需要確認這臺設備能否用來運行程序。而ProvisioningProfile就把這些信息全部打包在一起,方便我們在調試和發布程序打包時使用,這樣我們
只要在不同的情況下選擇不同的profile文件就可以了。而且這個Provisioning Profile文件會在打包時嵌入.ipa的包里。
如下圖所示,一個用于Development的Provisioning Profile中包含了該ProvisioningProfile對應的App ID,可使用的證書和設備。這意味著使用這個ProvisioningProfile打包程序必須擁有
相應的證書,并且是將App ID對應的程序運行到Devices中包含的設備上去。

如上所述,在一臺設備上運行應用程序的過程如下:

證書一樣,Provisioning Profile也分為分為Distribution、和Development兩種類型
(注:前面提到不同賬戶類型所能創建的證書種類不同,顯然Profile文件的種類是和我們創建的證書種類相關的)
Development (1年)
Distribution (1年)
In House(WNP用到的,是企業分發的生產pp文件)
Ad Hoc
App Store
In House 與Ad Hoc的不同之處在于:In House沒有設備數量限制,而Ad Hoc是用來測試用的,AdHoc的包只能運行在該賬戶內已登記的可用設備上,顯然是有最多100個設備的數量限制。
所以這兩種Provisioning?Profile文件的區別就在于其中的設備限制不一樣而已,而他們所使用的Certificate是相同的。
1.5 制作證書大致流程
制作流程大致按照以上序列進行:
申請證書
加入設備
生成Provisioning Profile
設置Xcode Code Sign Identifer
2 更新證書和文件時遇到的問題
2.1 更換推送證書需要哪些操作
見第三章證書申請流程
及時刪除過期的證書,登錄apple網站重新導出push certificate,生成對應的p12,上傳到極光后臺即可。
2.2 更換推送證書對舊版本的app有沒有什么影響?對pp文件有什么影響?
推送證書是和APPID綁定的,蘋果推送機制也是通過識別APPID來實現對該應用的推送,所以更新推送證書,保證APPID沒有變化,對舊版本的app沒有影響。
更換APNS證書不用重新制作pp文件,沒有影響。
2.3 Provision Profile文件過期的有什么影響?
pp文件是打包到軟件包中的 要是和pp相關的證書變更或者過期,整個app就用不了.
遇到的問題:
運行已經安裝好的app ,啟動就閃退。根本運行不了
連接設備,查看打印日志(Xcode 下下Device-》Device Log)。 其中打印一條
報錯提示:
The executable was signed with invalid entitlements.
解決方法:
重新編輯下描述文件并下載安裝好。即解決。
2.4 根證書過期舊版本的app有沒有什么影響?對pp文件有什么影響?該怎么操作?
基證書過期后會影響到pp文件對此應用程序appid的校驗,無法識別導致app不能使用,該pp文件也無效了。
這時候應該
編輯新的根證書,
在kaychain中打開安裝后,
在開發者網頁那邊的發布證書,選擇新編輯的那個,重新生成mobileprovision,下載下來,安裝。
2.5 創建證書的過程中證書的種類有哪些?區別是什么?
Development(1年):
iOS APP Development真機調試證書
Apple Push Notiifaction Service SSL (Sandbox)推送調試證書,直接用 Xcode 調試到設備的 App 需要調試證書推送通知。
Production(1年):
App Store and Ad Hoc發布證書,App Store、Ad Hoc 發布方式都需要這個證書來簽名。
Apple Push Notifiaction Service SSL (Sandbox & Production)推送正式證書,AppStore、In-House、AdHoc 都需要用正式推送證書推送通知。
2.6 什么是CSR?怎么生成?
當CSR文件創建的時候,會自動生成一對私鑰和公鑰.私鑰存儲在本地電腦.mac上,私鑰存儲默認存儲在登錄鑰匙串中,可以在鑰匙串的分類鑰匙下查看.請求到的證書會包含公鑰部分.
證書拿到手,最重要的一件事是如何證明這個證書是你的.不是假的,不是別人的.
CSR就提供了如何證明的方法.
CSR生成的同時,生成一對私鑰公鑰,私鑰保存在本地,用來加密數據或者解密公鑰加密的數據.公鑰包含在CSR中,Apple用來加密數據及解密私鑰加密的數據.這樣就像把數據放在帶鎖的箱子中傳遞,使得Apple可以通過公鑰來驗證你就是你.
鑰匙串訪問-》證書助理-》從證書頒發機構請求證書-》保存到磁盤,用于接下來創建開發或生產證書時上傳剛剛生成的后綴為 .certSigningRequest 的文件。
生成證書成功后,點擊 “Download” 按鈕把證書下載下來,是后綴為 .cer 的文件。生成證書結束后,雙擊,會在“KeychainAccess”中打開,選擇左側“鑰匙串”列表中“登錄”,以及“種類”列表中“我的證書”,找到剛才下載的證書,并導出為 .p12 文件
2.7 為什么要通過.p12來傳遞證書?
因為直接從Apple下載的證書只有公鑰,沒有私鑰.沒有辦法證明這個證書是你的(潛臺詞:沒有辦法證明你有這個權利).而從本地鑰匙串中導出.p12文件是包含私鑰的,換句話說,可以把證書上描述的權利賦予他人.
在極光控制臺上,進入你應用的應用設置中 iOS 的鑒權方式選擇 “證書”,上傳剛才導出的 .p12 證書。極光會在后臺為你的應用進行鑒權。
2.8 Keychain(開發密鑰)
安裝證書成功的情況下證書下都會生成Keychain,上面提到的證書副本(導出證書重新命名)就是通過配置證書的電腦導出Keychain(就是.p12文件)安裝到其他機子上,讓其他機子得到證書對應的權限。Developer Certification就可以制做副本Keychain分發到其他電腦上安裝,使其可以進行真機測試。
注意:Distribution Certification只有配置證書的電腦才可使用,因此即使導出導出Keychain安裝到其他電腦上,其他電腦也不可能具有證書的權限.
3 證書申請流程
登陸iOS Dev Center選擇進入iOS Provisioning Portal。
在iOS Provisioning Portal中,點擊App IDs進入App ID列表。
創建 App ID,如果 ID 已經存在可以直接跳過此步驟
為 App 開啟 Push Notification 功能。如果是已經創建的 App ID 也可以通過設置開啟 Push Notification 功能。
根據實際情況完善 App ID 信息并提交,注意此處需要指定具體的 Bundle ID 不要使用通配符。
配置和下載證書
如果你之前沒有創建過 Push 證書或者是要重新創建一個新的,請在證書列表下面新建。
新建證書需要注意選擇證書種類(開發證書用于開發和調試使用,生產證書用于 App Store 發布)
點擊 Continue 后選擇證書對應的應用ID,然后繼續會出現“About Creating a Certificate Signing Request (CSR)”。
根據它的說明創建打開KeychainAccess 創建 Certificate Signing Request。
填寫“User Email Address”和“Common Name” 后選擇 Saved to disk 進行保存 。
繼續返回Apple developer 網站點擊 Continue ,上傳剛剛生成的 .certSigningRequest 文件生成 APNs Push Certificate。
下載并雙擊打開證書,證書打開時會啟動“鑰匙串訪問”工具。
在“鑰匙串訪問”中你的證書會顯示在“我的證書”中,注意選擇“My Certificates” 和"login"
導出 .p12 證書文件
注意要選“login”和“My Certificates” 導出證書時要選中證書文件,不要展開private key。
將文件保存為Personal Information Exchange (.p12)格式。
將文件保存為Personal Information Exchange (.p12)格式。
上傳證書
在JPush 管理 Portal 上,針對某應用程序,上傳上面步驟得到 .p12 證書文件。這是 iOS SDK 能夠接收到 JPush 推送消息的必要步驟。
Provisioning Profile的創建
創建Provisioning Profile的前提,已在Apple Developer網站創建待發布應用所使用的Bundle ID的App ID,且為該App ID創建了APNs證書,如下圖:
創建App ID、APN證書和p12證書的導出的具體步驟請看 :iOS 證書 設置指南
在蘋果開發者賬號的Provisioning Profile頁面點擊下圖按鈕,創建Provisioning Profile
選擇此Provisioning Profile的環境后點擊[Continue]:
選擇要創建Provisioning Profile的App ID后點擊[Continue]:
選擇所屬的開發者證書,(這里創建了多個開發者證書,建議只創建一個,方便管理)為了方便,選擇了[Select All],再點擊[Continue]進入下一步:
為該Provisioning Profile選擇將要安裝的設備(一般選擇[Select All]),點擊[Continue]:
給該Provisioning Profile填寫Profile Name,點擊[generate]完成創建。
填寫完Profile Name后點擊[generate]完成創建,之后點擊[DownLoad]下載Provisioning Profile
雙擊下載下來的Provisioning Profile,添加到xcode。
XCode的證書配置教程
參照iOS SDK 集成指南集成JPush SDK 和上傳了推送用到的p12證書后在編譯運行前需要先配置一下證書,步驟如下:
打開xxx-info.plist的Bundle identifier項把上傳到JPush 控制臺的bundle id填寫進去:
點擊項目,選擇目標TARGETS后進入Build Setting 界面,搜索“Code signing”,按照下圖配置
