来源: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