iOS App 研发的最后冲刺:内测与部署
当开发者历经磨难、披荆斩棘,完成了一个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,具体流程如下:
- 安装调试证书
- 填写 App ID
- 根据 App ID 填写 provision profile ,并下载安装到 Xcode
- 真机调试运行
怎样申请开发者证书?
需要下列几步:
1.请求CSR文件
- 打开钥匙串访问, 从证书颁发机构请求证书
填写电子邮件地址,常用名称,勾选存储到磁盘,最后保存CSR文件到指定位置
最后保存CSR文件到指定位置
2.创建调试证书
- 选择CSR文件
- 点击Download下载,双击安装到钥匙串匙串
3. 双击安装
可以看到钥匙串中有了我们刚安装的证书,左侧有个三角,点击展开可以看到证书私钥,如果没有私钥,则证书是不可用的,一般这种情况是你在开发者网站上下载了其他Mac上制作的证书,可以从这台Mac导出证书安装到自己的电脑上。
创建AppID
1. 填写AppID Name
2. 支持推送、Game Center等功能的话不能创建含有通配符*的AppID,所以这里我们选择Explicit App ID
3. 勾选需要的服务,然后Continue
添加设备
1. 填写设备名称、设备UDID
2. Register
注意:最多添加100台设备
创建Provisioning Profile
- iOS App Development:真机调试Profile(需要选择iOS设备,只有包含的设备可以真机调试)
- App Store:上传到AppStore商店Profile
- In House:企业内发布Profile(所有设备可以安装)
- Ad Hoc:Ad Hoc Profile(需要选择iOS设备,除了只有包含的设备可以安装外与AppStore、Inhouse版本基本没有区别)
1. 选择AppID
2. 选择证书
3. 选择设备(只有Development、AdHoc需要选择设备)
4. 填写Profile Name
5. 点击Download下载,双击安装到Xcode
XCode打包
Configurations
默认Configurations包含两个配置,Debug、Release,可以看到Build Setting里好多配置都区分了Debug、Release,可以根据不同的情况配置不同的选项,最常用的就是根据真机调试、打包发布,分别在Debug、Release选择合适的证书、Profile。
个人认为,现在的Xcode不用再Duplicate Release配置来建立专门打包AppStore或者Adhoc或其它的Configuration,因为感觉并不会方便多少,只是省去了选择证书,但是你还是设置Archive选项。
一般来说,Adhoc、AppStore\Inhouse,二者用的都是同一个证书,只是Profile不同而已,简单的选择一下Profile,是不是更省事一些呢。
指令集
先说一下iOS设备的指令集:
- arm64:
iPhone 5s, iPhone 6, iPhone6 Plus;
iPad Air, iPad Air 2;
iPad Mini 2, iPad Mini 3;
- armv7s:
iPhone 5, iPhone 5c;
iPad 4;
- armv7:
iPhone 3GS, iPhone 4, iPhone 4S;
iPad, iPad 2, iPad 3, iPad Mini;
- armv6:
iPhone, iPhone 3G;
Architectures
该编译选项指定了工程支持哪些指令集,如果支持的指令集数目有多个,就会编译出包含多个指令集二进制包,造成最终编译的包很大。Valid Architectures
该编译项指定可能支持的指令集,该列表和Architectures列表的交集,将是Xcode最终生成二进制包所支持的指令集。
如上图所示,Architectures 支持的指令集为 armv7、arm64、Valid Architectures 支持的指令集为armv7、armv7s、arm64,这时只会生成一个 armv7、arm64 指令集的二进制包。
- Build Active Architecture Only
该编译项用于设置是否只编译当前使用的设备对应的arm指令集。通常情况下,该编译选项在Debug模式都设成YES,Release模式都设成NO。该选项起作用的条件有两个,必须同时满足才会起作用:
注意:许多用户可能会发现自己的应用安装不了,这时候可以看看自己的App支持的指令集,遇到过几个用户的指令集只支持arm64,这样的App在设备不是arm64的情况下是安装不了的。
Code Signing
上图中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首先需要选择ipa版本,导出App Store/AdHoc/企业版ipa,然后点击Next。如果Xcode 没有登录企业开发者账号,选择导出企业版ipa的时候会提示添加企业开发者账号到xcode。
选择证书
这里就是上面说的在工程选择的证书、profile可能并不是签名用的,关键在这里,这里会显示已经添加到Xcode的开发者账号对应的证书列表,可以选择签名用的证书。如果跟工程设置的证书一致,并且Profile匹配,则会根据工程配置的证书、Profile来签名导出。如果跟工程配置的证书不一致,则会根据选择的证书自动查找匹配的Profile来签名导出ipa。
这里会显示导出的ipa用的是哪一个证书、Profile签名的,Profile旁边那个箭头并不是选择Profile,然后在Finder中显示当前Profile。 所以导出的最后一步,尽量确认一下签名的证书、Profile是不是自己指定的。
内测分发ipa文件
内测分发ipa文件给测试人员主要有3种方法:
- 使用iTunes将iPa同步到手机中;
- 使用itms-services协议进行下载分发;
- 使用第三方工具进行下载分发。
请注意,无论使用何种形式分发,内测的人数限制,以及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快速地进行内测分发。
本文整理自:【CSDN技术公开课】iOSApp研发的最后冲刺:内测与部署,作者纪承,演讲PPT>>下载地址。
iOS App 研发的最后冲刺:内测与部署的更多相关文章
- “快的打车”创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - V2EX
"快的打车"创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - ...
- 案例分析丨H&M用设计冲刺将App研发周期缩短为6个月
案例背景 H&M是一家来自瑞典的时装公司,1947年成立.截至2018年6月,H&M 分店遍布全球 68 个国家和地区,分店数目为 4338 间. 作为快速服装生产商,H&M的 ...
- 在Azure上部署IPv6的App通过IOS App Store审核
随着中国企业出海Go Global,越来越多的用户开始在Global Azure部署自己的应用.由于对Global Azure功能和文档的不熟悉,使用过程中或多或少遇到了一些坑.事实上呢,这些并不是坑 ...
- iOS App稳定性指标及监测
一个App的稳定性,主要决定于整体的系统架构设计,同时也不可忽略编程的细节,正所谓"千里之堤,溃于蚁穴",一旦考虑不周,看似无关紧要的代码片段可能会带来整体软件系统的崩溃.尤其因为 ...
- 勾勾街——一个专注于免越狱免签名的苹果ios APP打包生成的网站
自涛舅舅研发的“苹果ios APP自助生成系统”上线以来,每天都有大量的用户注册和生成免越狱app,为什么? 因为我们有明显的技术优势,APP不需要上架appstore, 生成APP又不需要企业签名证 ...
- App Transfer:苹果允许iOS App从一个开发者帐号转至另一个开发者账号
App Transfer:苹果允许iOS App从一个开发者帐号转至另一个开发者账号 苹果在WWDC上宣布超过30万的开发者为iOS平台开发超过90万的应用,你可能会想到有人想出售或者购买app. 现 ...
- iOS App的加固保护原理
本文由 网易云发布. 本文从攻防原理层面解析了iOS APP的安全策略.iOS以高安全性著称,但它并非金刚不坏之身.对于信息安全而言,止大风于青萍之末是上上策,杭研深入各个细节的研发工作,正是网易产 ...
- iOS开发之--iOS APP打包的时候出现的四个选项
- (转))iOS App上架AppStore 会遇到的坑
iOS App上架AppStore 会遇到的坑 前言:非原创 文章摘自:http://zhuanlan.zhihu.com/100000PM/20010725 相信大家一定非常「深恶痛疾」AppS ...
随机推荐
- 比较两个Long对象值
比较两个Long对象的值是否相等,不可以使用双等号进行比较,(long int Integer可以用双等号进行比较)可以采用如下方式: 1.使用equals方法进行比较 Long a=new Long ...
- jsp学习---使用jsp和JavaBean实现超简单网页计算器
一.需求 如题,用jsp实现一个超简单的网页计算器. 二.实现 1.效果图 1)初始界面: 2)随便输入两个数进行相乘: 3)当除数为零时提示报错: 2.代码 Calculator.java pack ...
- MVC5+EF6 简易版CMS(非接口) 第一章:新建项目
目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...
- Swagger 使用方法
注:本篇文章基于Django-rest-swagger 2.0.7环境下撰写 参考英文文档: http://django-rest-swagger.readthedocs.io/en/latest/ ...
- C#保存Base64格式图片
.前端页面代码 /** * 通过图片本地路径获取图片真实大小,并进行压缩 */ function getLocalRealSize(path, callback) { var img = new Im ...
- 互联网云生态下DDOS安全产品的一些考虑和测试方法(一)
DDOS攻击简介 安全的三要素——“保密性”.“完整性”和“可用性”中,DOS(Denial of Service拒绝服务攻击)所针对的目标是服务的“可用性”.这种攻击方式利用目标系统的网络服务功能缺 ...
- iOS多线程编程之NSOperation和NSOperationQueue的使用(转自容芳志专栏)
转自由http://blog.csdn.net/totogo2010/ 使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBl ...
- 2.每人自己建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令。比较项目的新旧版本的差别。答题人:张立鹏
第1步:创建SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步.如果没有,打开Shell ...
- BZOJ4293 [PA2015]Siano(线段树)
传送门 这Seg确实不好写,不过因为它与ai的相对顺序无关,所以,我们在对ai排序之后,就可做了.维护一个区间最大值,维护一个和,维护一个区间赋值的懒标记,再维护一个时间变化的标记就可以了. 因为不论 ...
- 解决:Could not load type 'System.ServiceModel.Activation.HttpModule' from assemb
解决:Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceMode ...