來源:https://github.com/leecade/ios-dev-flow
證書知識及準備工作
基礎問題答疑
什麼是證書
由 apple 官方頒發, 用以證明開發者身份的特殊文件, 在 iOS 開發中主要用於代碼簽名, 保障 iOS 生態的健康安全, 分爲開發者證書和發佈者證書
什麼時候需要證書
只有在本機模擬器調試時無需代碼簽名, 當 App 需要在真機運行和發佈時需要使用相應證書進行簽名
證書如何獲得
首先需要擁有相應權限的開發者帳號, 通過在本地生成配對的密鑰, 向 provisioning portal 提交公鑰後換取, 後續證書在使用時會驗證本地私鑰
如何對代碼進行簽名
在 xcode 中, 使用描述文件(provision profile 包含調試者證書, 授權設備清單, 應用ID), 在 Build Settings
中選擇存於 Keychain
Access
中的證書文件設置調試和發佈任務時的代碼簽名
我生成的私鑰如何共享給團隊成員
在 Keychain Access
中找到導入的證書, 右擊導出爲包含私鑰的 Personal Information Exchange(.p12)文件(導出時可以創建密碼), 團隊成員再導入 p12
證書後就完整包含了證書和私鑰
各流程中證書的需求情況
模擬器調試
不需要
真機調試
-
描述文件(Provisioning Profiles)
-
開發者證書(ios_development.cer)
打包和發佈
-
描述文件(Provisioning Profiles)
-
可用於發佈的開發者證書(ios_distribution.cer)
消息推送後端服務
- apns 證書
開發中常見的證書及相關文件介紹
CSR(certificate request) 文件
用於換取證書的公鑰文件, 實際是在本地基於 RSA
加密得到配對的密鑰, 私鑰存於 Keychain
Access
用於簽名, 公鑰作爲換取證書的憑證
生成方法
-
OSX 系統自帶的 Keychain Access
-
選擇 "Request a Certificate From a Certificate Authority…"
-
輸入 email 等信息後保存爲
.certSigningRequest
文件
-
-
命令行下使用 openssl 生成
$ openssl genrsa -out private.key 2048
$ openssl req -new -sha256 -key private.key -out my.certSigningRequest
開發者證書
由 apple 官方頒發, 用來證明開發者資格的證書文件, 分開發(ios_development.cer)和發佈(ios_distribution.cer)兩種
cer
證書跟開發機(私鑰)綁定只能在擁有私鑰的機器上使用, 如果要遷移機器需要導出爲 p12
文件
生成方法
在 開發者中心 "certificates" 面板中添加 certificate
並上傳剛剛生成的 CSR
文件,
獲取 ios_development.cer
apns(Apple Push Notification Service) 證書
用於服務端消息推送, 類似 ssl 證書使用, 和 App 端的開發打包沒有關係
生成方法
在 開發者中心 "Identifiers" 面板中添加 App
ID
並上傳剛剛生成的 CSR
文件, 獲取 aps_production.cer
p12(Personal Information Exchange) 證書
p12
證書實際是包含了 cer
證書及私鑰信息,
可以分發給團隊成員
生成方法
在 Keychain Access 中找到已經導入的 cer
證書, 點右鍵導出爲 p12
格式
描述文件(Provisioning Profiles)
包含 certificate
appID
devices
id
的文件用於在 xcode 調試打包時提供授權的配置信息
生成方法
-
在 開發者中心 "Provisioning Profiles" 面板中添加
iOS Provisioning Profiles
並上傳剛剛生成的CSR
文件, 獲取.mobileprovision
文件 -
在 xcode 登錄開發者帳號後可以連接開發者中心獲取
附錄1: 開發準備相關的網址
開發者中心 https://developer.apple.com/devcenter/ios/index.action
iOS 描述管理(配置證書、描述文件、推送服務) https://developer.apple.com/ios/manage/overview/index.action
切換團隊(在 web 界面上死活沒有找到) https://developer.apple.com/account/selectTeam.action
iOS 上架 Appstore http://itunesconnect.apple.com/
幾種開發者帳號區別
- 個人(individual) $99/year
- 公司(company) $99/year
- 企業(enterprise) $299/year
- 大學(University) free
關鍵區別
- 個人帳號可以真機調試, 發佈 appstore, 每年 最多爲 100臺設備分發
- 公司帳號和個人帳號類似, 只有這兩種帳號可以發佈 appstore, 主要特權是可以添加多個開發者子賬號, 但只允許主賬號提交, 發佈等操作, 在協同開發時比較靈活, 可以各自管理授權設備等
- 企業帳號無法用於 appstore 發佈, 但可以不通過 appstore 發佈任意 iphone 都可以安裝的應用
- 大學帳號不能發佈 appstore, 主要擁有真機調試的權限
真機調試流程
基本概念
真機調試指 mac 連上 iphone, xcode 可以直接以這臺 iphone 設備爲 build target, 能在 iphone 裏執行編譯結果
條件和流程
分爲擁有獨立開發者帳號(也包括公司帳號或企業帳號成員)和共享開發者帳號兩種情況
擁有獨立開發者帳號
- 1. 在 provisioning portal 新建應用, 配置授權設備等
- 2. 開發機上導入證書
- 3. 在 xcode 上登錄開發者帳號, 不需要準備描述文件, xcode 會自動生成(如果是公司帳號可以自動生成
iOS Team Provisioning Profile
)
共享開發者帳號
如果無法在 xcode 登錄一個開發者帳號, 也可以通過他人對你手機和應用 id 的授權, 得到 .mobileprovision
描述文件再導入其含私鑰的證書(p12
)
即可, 具體步驟如下:
- 1. 獲得手機的
udid
(可以連上 mac, 在 itunes 中查看) - 2. 告知對方
udid
(用以設備授權) 和 應用 id - 3. 得到對方生成的證書和描述文件後, 先導入
p12
證書, 再雙擊mobileprovision
文件 - 4. 連接手機, 在 xcode 中選擇 build target 爲已連接的手機
對剛入門的個人開發者而言, 可以在淘寶搜
iOS真機調試
花幾元購買一份授權, 包含(p12
證書 和.mobileprovision
描述文件)
內測發佈流程
基本概念
當 App 開發進行到一定程度, 需要更多的人蔘與測試, 需要謀求一種方式方便應用能安裝進更多的設備中
實現條件
進行內測發佈主要的關鍵點是:
- 1. 是如何將應用打包爲
.ipa
xcode6 以後, 個人/公司帳號無法對應用打包爲 .ipa
, 要麼用 xcode5 打包要麼擁有企業帳號級別的授權
- 2. 設備需不需要授權
個人/公司帳號權限只有在 TestFlight
/ 越獄渠道下完成不授權安裝; 企業帳號授權可以在 ad-hoc
/ in-house
渠道下分發,
完成不授權設備安裝
幾種常見的分發途徑
- ad-hoc
打包時必須在登錄企業帳號(或其成員)並已導入證書和描述文件的情況下, 任何用戶(未授權)都可以在手機上用瀏覽器訪問一個 url(例: itms-services://?action=download-manifest&url=https://example.com/manifest.plist) 完成安裝
最大的問題是安裝量有 100 的上限, 無法作爲一個量很大的分發渠道
- in-house
針對企業內部用戶進行分發, 相比 ad-hoc
無安裝量上限
iOS 8.1.3 開始不能企業證書 Iresign 方式重新簽名的應用無法安裝 https://support.apple.com/en-us/HT204245
- TestFlight
僅支持 iOS8.0 以上, 不需要對設備 udid
進行授權, 適合個人 / 公司開發者, 在應用發佈前可以開啓 TestFlight Beta 測試並添加測試者的 iTunes Connect 帳號,
需要待測用戶擁有 iTunes Connect 帳號並在設備安裝 TestFlight
客戶端
這種方式非常便於推送應用更新和收集測試信息
- 導出 ipa 包, 越獄安裝
如果測試設備都越獄了, 這種方式非常靈活簡單, 只有能導出 ipa 包就能通過 itools 等第三方工具安裝
附錄2: 常見分發渠道及工具地址
fir-第三方應用託管平臺 http://fir.im/
TestFlight https://developer.apple.com/testflight/
Agile-百度內部 ios 分發測試平臺 http://agile.baidu.com
fir-分發相關工具 http://fir.im/dev/tools
itools http://www.itools.cn/
Appstore 上架流程
@TODO