iOS 开发流程笔记

  • 证书知识及准备工作
  • 几种开发者帐号区别
  • 真机调试流程
  • 内测发布流程
  • Appstore 上架流程

证书知识及准备工作

基础问题答疑

什么是证书

由 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 生成

1
2
$ 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/

几种开发者帐号区别

详见: https://developer.apple.com/programs/start/ios/

关键区别

  • 个人帐号可以真机调试, 发布 appstore, 每年 最多为 100台设备分发
  • 公司帐号和个人帐号类似, 只有这两种帐号可以发布 appstore, 主要特权是可以添加多个开发者子账号, 但只允许主账号提交, 发布等操作, 在协同开发时比较灵活, 可以各自管理授权设备等
  • 企业帐号无法用于 appstore 发布, 但可以不通过 appstore 发布任意 iphone 都可以安装的应用
  • 大学帐号不能发布 appstore, 主要拥有真机调试的权限

真机调试流程

基本概念

真机调试指 mac 连上 iphone, xcode 可以直接以这台 iphone 设备为 build target, 能在 iphone 里执行编译结果

条件和流程

分为拥有独立开发者帐号(也包括公司帐号或企业帐号成员)和共享开发者帐号两种情况

拥有独立开发者帐号

    1. provisioning portal 新建应用, 配置授权设备等
    1. 开发机上导入证书
    1. 在 xcode 上登录开发者帐号, 不需要准备描述文件, xcode 会自动生成(如果是公司帐号可以自动生成 iOS Team Provisioning Profile)

共享开发者帐号

如果无法在 xcode 登录一个开发者帐号, 也可以通过他人对你手机和应用 id 的授权, 得到 .mobileprovision 描述文件再导入其含私钥的证书(p12) 即可, 具体步骤如下:

    1. 获得手机的 udid (可以连上 mac, 在 itunes 中查看)
    1. 告知对方 udid (用以设备授权) 和 应用 id
    1. 得到对方生成的证书和描述文件后, 先导入 p12 证书, 再双击 mobileprovision 文件
    1. 连接手机, 在 xcode 中选择 build target 为已连接的手机

对刚入门的个人开发者而言, 可以在淘宝搜 iOS真机调试 花几元购买一份授权, 包含(p12 证书 和 .mobileprovision 描述文件)

内测发布流程

基本概念

当 App 开发进行到一定程度, 需要更多的人参与测试, 需要谋求一种方式方便应用能安装进更多的设备中

实现条件

进行内测发布主要的关键点是:

    1. 是如何将应用打包为 .ipa

xcode6 以后, 个人/公司帐号无法对应用打包为 .ipa, 要么用 xcode5 打包要么拥有企业帐号级别的授权

    1. 设备需不需要授权

个人/公司帐号权限只有在 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

附录3: App store最新审核标准(2015.3)

App store最新审核标准(2015.3) 中文翻译

App store最新审核标准(2015.3) 英文原版