当开发者历经磨难、披荆斩棘,完成了一个 iOS 项目后,最后的临门一脚就是应用的内测、部署。那么,在这最后的射门动作中,都有哪些地方需要开发者注意?有哪些方式能够更好地帮助我们进行 iOS 应用的发布部署?
本文针对 iOS App 开发的最后阶段来详解如何在真机上进行调试,将 App 发送给其他测试人员进行内测,以及内测完成后如何将 App 上传至 App Store 进行应用审核,针对苹果账号的类型、真机调试、打包与崩溃收集进行深度剖析。
苹果开发者计划分为个人、公司、企业和教育开发者四个类型。个人开发者证书费用为 $99 一年,该账号在 App Store 销售者只能显示个人的 ID。并且,个人账号只能有一个开发者,100 个苹果的 iOS 设备 UDID 测试。
公司开发者费用为 $99 一年,该账号在 App Store 销售者可以显示类似 Studios,或者自定义的团队名称。公司账号可以允许多个开发者协作开发,比个人多一些帐号管理的设置,可以设置多个 Apple ID,分 4 种管理级别权限,100 个苹果的 iOS 设备 UDID 测试。但是,申请时需要填写公司的邓白氏编码(D-U-N-S),D-U-N-S 邓白氏码可以在 苹果官方网站免费申请。
企业开发者账号费用为 $299 一年, 该账号开发应用不能发布到 App Store,只能企业内部应用,苹果的 iOS 设备 UDID 数量不限制。企业账号适合不希望上线 App Store,但是需要企业内部,比如 1000 人的 iOS 设备都部署。
特别需要注意的是,其他渠道提供的所谓的企业证书实际上是与他人共用一张企业证书,苹果会侦测到这种情况,并进行封号处理。封号后,包括已经使用该证书安装了的 App 都会无法继续使用。
这些开发者账号的申请都需要一个重要的条件,那就是有一张支持 Visa 或 MasterCard 的信用卡。
使用真机调试,必须要使用开发者证书,以及正确填写 App ID,配置好 Provision Profile,具体流程如下:
需要下列几步:
1.请求 CSR 文件
填写电子邮件地址,常用名称,勾选存储到磁盘,最后保存 CSR 文件到指定位置
最后保存 CSR 文件到指定位置
2.创建调试证书
3. 双击安装
可以看到钥匙串中有了我们刚安装的证书,左侧有个三角,点击展开可以看到证书私钥,如果没有私钥,则证书是不可用的,一般这种情况是你在开发者网站上下载了其他 Mac 上制作的证书,可以从这台 Mac 导出证书安装到自己的电脑上。
1. 填写 AppID Name
2. 支持推送、Game Center 等功能的话不能创建含有通配符 * 的 AppID,所以这里我们选择 Explicit App ID
3. 勾选需要的服务,然后 Continue
1. 填写设备名称、设备 UDID
2. Register
注意:最多添加 100 台设备
1. 选择 AppID
2. 选择证书
3. 选择设备 (只有 Development、AdHoc 需要选择设备)
4. 填写 Profile Name
5. 点击 Download 下载,双击安装到 Xcode
默认 Configurations 包含两个配置,Debug、Release,可以看到 Build Setting 里好多配置都区分了 Debug、Release,可以根据不同的情况配置不同的选项,最常用的就是根据真机调试、打包发布,分别在 Debug、Release 选择合适的证书、Profile。
个人认为,现在的 Xcode 不用再 Duplicate Release 配置来建立专门打包 AppStore 或者 Adhoc 或其它的 Configuration,因为感觉并不会方便多少,只是省去了选择证书,但是你还是设置 Archive 选项。
一般来说,Adhoc、AppStore\Inhouse,二者用的都是同一个证书,只是 Profile 不同而已,简单的选择一下 Profile,是不是更省事一些呢。
先说一下 iOS 设备的指令集:
iPhone 5s, iPhone 6, iPhone6 Plus;
iPad Air, iPad Air 2;
iPad Mini 2, iPad Mini 3;
iPhone 5, iPhone 5c;
iPad 4;
iPhone 3GS, iPhone 4, iPhone 4S;
iPad, iPad 2, iPad 3, iPad Mini;
iPhone, iPhone 3G;
Architectures
该编译选项指定了工程支持哪些指令集,如果支持的指令集数目有多个,就会编译出包含多个指令集二进制包,造成最终编译的包很大。
Valid Architectures
该编译项指定可能支持的指令集,该列表和 Architectures 列表的交集,将是 Xcode 最终生成二进制包所支持的指令集。
如上图所示,Architectures 支持的指令集为 armv7、arm64、Valid Architectures 支持的指令集为 armv7、armv7s、arm64,这时只会生成一个 armv7、arm64 指令集的二进制包。
注意:许多用户可能会发现自己的应用安装不了,这时候可以看看自己的 App 支持的指令集,遇到过几个用户的指令集只支持 arm64,这样的 App 在设备不是 arm64 的情况下是安装不了的。
上图中 Code Signing Identity 包含的 Debug 和 Release 两项,其中,Debug 指选择真机调试证书,Release 指选择发布证书(AdHoc、AppStore/Inhouse 打包都使用发布证书)。而在 Provisioning Profile 中,无论真机调试,还是发布 App,选择的 Profile 的 App ID 要与项目工程的 BundleId 匹配。
注意:Provisioning Profile 的 Release 这里选择的 Profile,并不一定就是签名 ipa 用的 Profile,后面会讲到。
导出 ipa 首先需要选择 ipa 版本,导出 App Store/AdHoc/企业版 ipa,然后点击 Next。如果 Xcode 没有登录企业开发者账号,选择导出企业版 ipa 的时候会提示添加企业开发者账号到 xcode。
选择证书
这里就是上面说的在工程选择的证书、profile 可能并不是签名用的,关键在这里,这里会显示已经添加到 Xcode 的开发者账号对应的证书列表,可以选择签名用的证书。如果跟工程设置的证书一致,并且 Profile 匹配,则会根据工程配置的证书、Profile 来签名导出。如果跟工程配置的证书不一致,则会根据选择的证书自动查找匹配的 Profile 来签名导出 ipa。
这里会显示导出的 ipa 用的是哪一个证书、Profile 签名的,Profile 旁边那个箭头并不是选择 Profile,然后在 Finder 中显示当前 Profile。 所以导出的最后一步,尽量确认一下签名的证书、Profile 是不是自己指定的。
内测分发 ipa 文件给测试人员主要有 3 种方法:
请注意,无论使用何种形式分发,内测的人数限制,以及 App 的 UDID 限制始终是存在的。如果想新增加测试人员,开发者仍然需要将 UDID 写入 Provision Profile,重新生成 ipa 文件进行分发。
使用 iTunes 进行内测分发
使用 iTunes 进行分发比较麻烦,需要测试用户使用数据线连接装有 iTunes 的电脑上,先将 ipa 文件添加到 iTunes,再将 iTunes 的 App 同步到手机上。由于国内用户对 iTunes 熟悉程度不高,故不推荐大家使用这种方式进行内测分发。
使用 itms-services 协议进行下载分发
相比 iTunes 的分发方式,使用 itms-service 分发的最大好处是测试用户无需使用数据线,只需打开 Safari 中访问包含 itms-service 连接的页面,单击连接后即可下载 IPA 文件。
itms-services 的原理是 itms-services 指向一个 plist 文件,这个 plist 文件包含了 ipa 文件下载的地址,iOS 设备的 Safari 会自动将 plist 中指定的 ipa 文件下载安装到本地。
itms-services 的麻烦之处就是开发者需要自己搭建一个服务器,之后苹果在 iOS 7.1 以后安装 ipa,写入 ipa 地址的 plist 文件的存放地址必须是一个 https 的地址.
itms 的结构参考如下
<a href="itms-services://?action=download-manifest&url=https://xxx/test.plist">安装IOS BetaV1.0 </a>
plist 的结构参考如下
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0"><dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string><![CDATA[http://fir.im/xxxxxx]]></string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<integer>0</integer>
<key>url</key>
<string><![CDATA[http://fir.im/xxx]]></string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string><![CDATA[http://fir.im/xxx]]></string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>im.fir</string>
<key>bundle-version</key>
<string><![CDATA[1.3.0]]></string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string><![CDATA[Fir plist Demo]]></string>
</dict>
</dict>
</array>
</dict></plist>
我们可以看到,虽然说用户比较方便,但对开发者而言需要写很多东西,还得搭建服务器,上 OpenSSL 等,比较麻烦。
使用第三方工具进行内测分发
为了避免开发者使用 itms-services 而带来的额外工作量,可以使用第三方工具如 fir.im ,将 ipa 快速地进行内测分发。