iOS 开发流程笔记

n342 10年前

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

目录导航

  • 证书知识及准备工作
    • 基础问题答疑 </li>
    • 各流程中证书的需求情况
      • 模拟器调试
      • 真机调试
      • 打包和发布
      • 消息推送后端服务
      • </ul> </li>
      • 开发中常见的证书及相关文件介绍
        • CSR(certificate request) 文件
        • 开发者证书
        • apns(Apple Push Notification Service) 证书
        • p12(Personal Information Exchange) 证书
        • 描述文件(Provisioning Profiles)
        • </ul> </li>
        • 附录1: 开发准备相关的网址
        • </ul> </li>
        • 几种开发者帐号区别
          • 关键区别
          • </ul> </li>
          • 真机调试流程
            • 基本概念
            • 条件和流程
            • </ul> </li>
            • 内测发布流程
              • 基本概念
              • 实现条件
              • 几种常见的分发途径
              • 附录2: 常见分发渠道及工具地址
              • </ul> </li>
              • Appstore 上架流程
                • 附录3: App store最新审核标准(2015.3)
                • </ul> </li> </ul>

                  证书知识及准备工作

                  基础问题答疑

                  什么是证书

                  由 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文件

                    </li>
                  • 命令行下使用 openssl 生成

                  • </ul>
                    $ 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)

                    包含certificateappIDdevices 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 新建应用, 配置授权设备等
                    • 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 上架流程

                    <p>@TODO </p>

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

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

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

                    https://github.com/leecade/ios-dev-flow