關於iOS證書配置介紹
一、概念介紹
登入開發者賬號,開啟Certificates,Indentifiers & Profiles
,可以看到如下內容
上面的列表就包含了開發、除錯和釋出iOS應用程式所需的所有內容:Certificates(證書)、Identifiers(識別符號)、Devices(裝置)、Provisioning Profiles(授權配置檔案)。下面將一一解釋這幾個東東。
1、Certificate
證書是用來給應用程式簽名的,只有經過簽名的應用程式才能保證他的來源是可信任的,並且程式碼是完整的,未經修改的。在Xcode Build Setting
的Code Signing Identity
在我們申請一個Certificate
之前,需要先申請一個Certificate Signing Request
檔案(即CSR檔案)。
申請CSR檔案,這個過程中實際上是生成了一對公鑰和私鑰,儲存在你Mac的Keychain中。
程式碼簽名正是使用這種基於非對稱祕鑰的加密方式,用私鑰進行簽名,用公鑰進行驗證。如下圖所示,在你Mac的keychain的login中儲存著相關的公鑰和私鑰,而證書中包含了公鑰。
你只能用私鑰來進行簽名,所以如果沒有了私鑰,就意味著你不能進行簽名了,所以就無法使用這個證書了,此時你只能
revoke
之前的證書,再申請一個。因此在申請完證書時,最好匯出並儲存好你的私鑰,當然CSR檔案也要一併儲存好。
當你想與其他人或其他裝置共享證書時,把私鑰傳給它就可以了。
私鑰儲存在你的Mac中,而蘋果生成的Certificate中包含了公鑰。
當你用自己的私鑰對程式碼簽名後,蘋果就可以用證書中的公鑰來進行驗證,確保是你對程式碼進行了簽名,而不是別人冒充你,同時也確保程式碼的完整性等。
證書主要分為兩類:Development
和Production
,
Development證書用來開發和除錯應用程式,
Production主要用來分發應用程式(根據證書種類有不同作用),
下面是證書的分類資訊:
注:不同型別的開發者賬戶所能建立的證書種類不同,此處不做對比
- Development
- App Development:用來開發和真機除錯應用程式。
- Push Development:用來除錯Apple Push Notification
- Production
- App Store and Ad Hoc:用來發布提交App Store的應用程式。
- Apple Push Notification service SSL (Sandbox & Production) :用來在釋出版本中使用Apple Push Notification。
- 其他,唧唧歪歪……(各種原因,省略好多字……)
2、App ID
App ID用於標識一個或者一組App,App ID應該是和Xcode中的Bundle ID是一致的或者匹配的。App ID主要有以下兩種:
-
Explicit App ID
:唯一的App ID,這種App ID用於唯一標識一個應用程式,例如com.ABC.demo1,標識Bundle ID為com.ABC.demo1的程式。 -
Wildcard App ID
:萬用字元App ID,用於標識一組應用程式。==例如 * 可以表示所有應用程式,而com.ABC.*可以表示以com.ABC開頭的所有應用程式。==
2.1、App Services
每建立一個App ID,我們都可以設定該App ID所使用的APP Services,也就是其所使用的額外服務。
Enable Services:
Access WiFi Information
App Groups
Apple Pay Payment Processing
Associated Domains
AutoFill Credential Provider
ClassKit
Data Protection
Complete Protection
Protected Unless Open
Protected Until First User Authentication
Game Center
HealthKit
HomeKit
Hotspot
iCloud
Compatible with Xcode 5
Include CloudKit support (requires Xcode 6)
In-App Purchase 【蘋果內購】
Inter-App Audio
Multipath
Network Extensions
NFC Tag Reading
Personal VPN
Push Notifications 【訊息推送服務】
SiriKit
Wallet
Wireless Accessory Configuration
複製程式碼
3、Device
Device最簡單了,就是iOS裝置。Devices中包含了該賬戶中所有可用於開發和測試的裝置。 每臺裝置使用UDID來唯一標識。
每個賬戶中的裝置數量限制是100個。Disable 一臺裝置也不會增加名額,只能在membership year 開始的時候才能通過刪除裝置來增加名額。
4、Provisioning Profile
一個Provisioning Profile檔案包含了上述的所有內容:證書、App ID、裝置。
試想一下,如果我們要打包或者在真機上執行一個應用程式,我們首先需要證書來進行簽名,用來標識這個應用程式是合法的、安全的、完整的等等;然後需要指明它的App ID,並且驗證Bundle ID是否與其一致;再次,如果是真機除錯,需要確認這臺裝置能否用來執行程式。而Provisioning Profile就把這些資訊全部打包在一起,方便我們在除錯和釋出程式打包時使用,這樣我們只要在不同的情況下選擇不同的profile檔案就可以了。而且這個Provisioning Profile檔案會在打包時嵌入.ipa的包裡。
例如,如下圖所示,一個用於Development的Provisioning Profile中包含了該Provisioning Profile對應的App ID,可使用的證書和裝置。這意味著使用這個Provisioning Profile打包程式必須擁有相應的證書,並且是將App ID對應的程式執行到Devices中包含的裝置上去。
與證書一樣,Provisioning Profile也分為Development和Distribution兩種:
注:前面提到不同賬戶型別所能建立的證書種類不同,顯然Profile檔案的種類是和你所能建立的證書種類相關的)
- Development
- iOS App Development
- 其他,唧唧歪歪……
- Distribution
- App Store
- 其他,唧唧歪歪……
二、iOS證書配置指南(基本配置模式)
1、建立應用Identifiers - App ID
-
步驟0:進入應用建立頁面。選擇
Identifiers
-App IDs
-+
,如下圖 -
步驟1:編輯你的應用id名稱,該名稱將
App IDs
列表頁面的Name
一欄顯示 -
步驟2:建立一個應用的唯一標識,在
App ID Suffix
中選擇Explicit App ID
,並填寫Bundle ID
(與你在App Store Connect
建立的應用的Bundle ID一樣)
注意:這裡的Bundle ID沒有 * 號(與萬用字元 App ID不同,萬用字元中含有 * 號,可用於字首相同的所有應用)
-
步驟3:在
App Services
中,勾選需要的額外服務,例如:推送服務Push Notifications
-
步驟4:檢查配置內容,下一步到結束。
2、建立Certificate
2.1、建立開發者賬號證書
開發者賬號證書,開發者賬號下,所有的App ID均需要該證書,
-
步驟0:進入新建證書頁面。選擇
Certificates
-All
-+
,如下圖 -
步驟1:Select Type 選擇證書型別。例如,建立開發環境證書,
Development
-iOS App Development
,然後點選下一步
-
步驟2:Request,直接點選
下一步
即可。這個頁面是在教你怎麼建立一個CSR檔案,步驟3需要用到 -
步驟3:Generate 生成證書,點選
Choose File...
按鈕,上傳你的CSR檔案,然後點選下一步
-
步驟4:Download 下載生成好的證書。證書格式字尾為
.cer
釋出環境開發者賬號證書建立流程同上。步驟1中選擇
Production
-App Store and Ad Hoc
3、建立Provisioning Profile(授權配置檔案)
-
步驟0:進入授權配置檔案建立頁面。選擇
Provisioning Profiles
-All
-+
-
步驟1:Select Type 選擇授權配置檔案型別。例如,建立開發環境使用的授權配置檔案,
Development
-iOS App Development
,然後點選下一步
-
步驟2:配置授權資訊
- 步驟2.1:Configure 配置App ID
- 步驟2.1:Configure 配置Certjfjcate
- 步驟2.3:Configure 配置Devices
-
步驟3:Generate 生成授權配置檔案,新增個名稱即可
-
步驟4:Download 下載生成好的授權配置檔案。檔案格式字尾為
.mobileprovision
釋出環境授權配置檔案建立流程同上,步驟1中選擇
Distribution
-App Store
4、最終下載的證書
-
kaifazhe_dev.cer
--> 開發者賬號證書_開發環境 -
kaifazhe_dis.cer
--> 開發者賬號證書_釋出環境 -
appid_dev.mobileprovision
--> 應用授權配置檔案_開發環境 -
appid_dis.mobileprovision
--> 應用授權配置檔案_釋出環境
三、關於我們的應用需要的證書
1、一個應用需要哪些證書檔案?
例子1.1:建立一個應用證書
有個開發者:kaifazhe
Ta有個應用:yingyong
應用的bundle id是:com.kaifazhe.yingyong
步驟如下:
- 準備材料:CSR檔案
- 建立開發者(賬號)證書:
Certificate
- 選擇iOS App
型別證書 - 上傳CSR
- 生成2個開發者證書(kaifazhe_dev.cer
和kaifazhe_dis.cer
) - 建立應用App ID:
App IDs
- 填寫Explicit App ID
(與蘋果應用後臺的應用bundle id一致,如例子中的com.kaifazhe.yingyong ) - 建立授權配置檔案:
Provisioning Profile
- 選擇App ID
(步驟3建立的那個) - 選擇Certificate
(步驟2建立的那個開發者證書) - 生成2個授權配置檔案
一波操作之後,總共獲得檔案4個
kaifazhe_dev.cer
kaifazhe_dis.cer
comkaifazheyingyong_dev.mobileprovision
comkaifazheyingyong_dis.mobileprovision
複製程式碼
注意:步驟2中,一般一個開發者賬號只要一個開發者證書即可,賬號下所有App ID都可以使用的
例子1.2、給yingyong
新增蘋果推送服務證書(APNs證書)
步驟如下:
- 準備材料:CSR檔案(還是例子1.1中的那個CSR)
- 建立APNs證書:
Certificate
- 選擇Apple Push Notification service SSL
型別證書 - 選擇App ID
- 上傳CSR
- 生成2個push證書
一波操作之後,總共獲得檔案2個
comkaifazheyingyong_dev.cer
comkaifazheyingyong_dev.cer
複製程式碼
注意:這2個證書,客戶端開發人員是不需要,直接轉換為
.p12
格式配置到推送後臺即可。
.cer
轉.p12
,將.cer
新增到Mac電腦的keychain.app
中,然後從keychan中匯出即是.p12
格式。
例子1.3、iOS 10新增富文字推送服務,
步驟如下:
- 建立應用萬用字元App ID:
App IDs
- 填寫Wildcard App ID
(com.kaifazhe.yingyong.*) - 建立授權配置檔案:
Provisioning Profile
- 選擇App ID
(步驟1建立的那個com.kaifazhe.yingyong.*) - 選擇Certificate
(例子1.1步驟2建立的那個開發者證書) - 生成2個授權配置檔案
一波操作之後,總共獲得檔案2個
comkaifazheyingyong_appgroup_dev.mobileprovision
comkaifazheyingyong_appgroup_dis.mobileprovision
複製程式碼
例子1.4、富文字推送、today等外掛如何建立App ID
及 Provisioning Profile
這類外掛,均是依託於應用的。一般不需要建立唯一標識的App ID。
視情況,採用不同的萬用字元App ID(即:Wildcard App ID),此類App ID通常含有*
號,例如:com.kaifazhe.*
表示以com.kaifazhe.
開頭的所有應用程式;com.kaifazhe.yingyong.*
則表示以com.kaifazhe.yingyong.
開頭的所有應用程式。
換個理解方式。
App ID 採用反向域名的形式。一般的App ID,可這樣解讀:
com.開發者.應用名
,則com.kaifazhe.*
表示該萬用字元適用範圍為這個開發者kaifazhe
的所有應用;而com.kaifazhe.yingyong.*
則表示該萬用字元適用範圍為開發者kaifazhe
的應用yingyong
所附帶的所有子應用(如富文字推送、today等均屬於這類)
步驟如下:
- 建立外掛適用的萬用字元App ID:一般外掛歸屬於應用,則萬用字元格式為
com.開發者.應用名.*
- 建立授權配置檔案:
Provisioning Profile
- 選擇App ID
(步驟1建立的那個com.kaifazhe.yingyong.*) - 選擇Certificate
(例子1.1步驟2建立的那個開發者證書) - 生成2個授權配置檔案
一波操作之後,總共獲得檔案2個
應用子程式萬用字元的授權配置檔案
comkaifazheyingyong_appgroup_dev.mobileprovision
comkaifazheyingyong_appgroup_dis.mobileprovision
或
開發者的應用程式萬用字元的授權配置檔案
comkaifazhe_team_dev.mobileprovision
comkaifazhe_team_dis.mobileprovision
複製程式碼
萬用字元App ID 相關授權配置檔案命名規則,bundle id + appgroup(代表應用子程式集合)或team(開發者應用集合) 當然,
com.kaifazhe.*
的子集 是包含com.kaifazhe.yingyong.*
的
附錄:About Creating a Certificate Signing Request (CSR)
To manually generate a Certificate,you need a Certificate Signing Request (CSR) file from your Mac. To create a CSR file,follow the instructions below to create one using Keychain Access.
Create a CSR file. In the Applications folder on your Mac,open the Utilities folder and launch Keychain Access.
Within the Keychain Access drop down menu,select Keychain Access > Certificate Assistant > Request a Certificate from a Certificate Authority.
In the Certificate Information window,enter the following information:
In the User Email Address field,enter your email address.
In the Common Name field,create a name for your private key (e.g.,John Doe Dev Key).
The CA Email Address field should be left empty.
In the "Request is" group,select the "Saved to disk" option.
Click Continue within Keychain Access to complete the CSR generating process.
複製程式碼