V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fir.im Rio
fir.im 平台更新日志
快速获取 UDID
1 - 3 分钟发布应用
同时支持 iOS 和 Android
灵活设置应用权限
实时查看应用动态消息
自定义显示历史版本
随时了解应用下载情况
如果你也喜欢简单快速又美观的工具平台,就用 fir.im 吧!
BugHD
Imshaha
V2EX  ›  fir.im

iOS App 研发的最后冲刺:内测与部署

  •  
  •   Imshaha · 2015-08-12 10:46:24 +08:00 · 2866 次点击
    这是一个创建于 3421 天前的主题,其中的信息可能已经有所发展或是发生改变。

    当开发者历经磨难、披荆斩棘,完成了一个iOS项目后,最后的临门一脚就是应用的内测、部署。那么,在这最后的射门动作中,都有哪些地方需要开发者注意?有哪些方式能够更好地帮助我们进行iOS应用的发布部署?

    本文针对iOS App开发的最后阶段来详解如何在真机上进行调试,将App发送给其他测试人员进行内测,以及内测完成后如何将App上传至App Store进行应用审核,针对苹果账号的类型、真机调试、打包与崩溃收集进行深度剖析。

    苹果账号的类型

    苹果开发者计划分为个人、公司、企业和教育开发者四个类型。个人开发者证书费用为$99一年,该账号在App Store销售者只能显示个人的ID。并且,个人账号只能有一个开发者,100个苹果的iOS设备UDID测试。
    1.png
    公司开发者费用为$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设备都部署。

    2.png

    特别需要注意的是,其他渠道提供的所谓的企业证书实际上是与他人共用一张企业证书,苹果会侦测到这种情况,并进行封号处理。封号后,包括已经使用该证书安装了的App都会无法继续使用。

    这些开发者账号的申请都需要一个重要的条件,那就是有一张支持Visa或MasterCard的信用卡。

    真机调试

    使用真机调试,必须要使用开发者证书,以及正确填写App ID,配置好Provision Profile,具体流程如下:

    1. 安装调试证书
    2. 填写 App ID
    3. 根据 App ID 填写 provision profile ,并下载安装到 Xcode
    4. 真机调试运行

    怎样申请开发者证书?

    需要下列几步:
    1.请求CSR文件

    • 打开钥匙串访问, 从证书颁发机构请求证书

    3.png
    4.png

    • 填写电子邮件地址,常用名称,勾选存储到磁盘,最后保存CSR文件到指定位
      5.png

    • 最后保存CSR文件到指定位置
      6.png

    2.创建调试证书

    • 选择CSR文件 7.png
    • 点击Download下载,双击安装到钥匙串匙串

    8.png

    • 双击安装

    可以看到钥匙串中有了我们刚安装的证书,左侧有个三角,点击展开可以看到证书私钥,如果没有私钥,则证书是不可用的,一般这种情况是你在开发者网站上下载了其他Mac上制作的证书,可以从这台Mac导出证书安装到自己的电脑上。

    9.png

    创建AppID

    1. 填写AppID Name
    10.png
    2. 支持推送、Game Center等功能的话不能创建含有通配符*的AppID,所以这里我们选择Explicit App ID
    11.png
    3. 勾选需要的服务,然后Continue
    12.png

    添加设备

    1. 填写设备名称、设备UDID
    13.png
    2. Register
    14.png

    注意:最多添加100台设备

    创建Provisioning Profile

    15.png
    16.png

    • iOS App Development:真机调试Profile(需要选择iOS设备,只有包含的设备可以真机调试)
    • App Store:上传到AppStore商店Profile
    • In House:企业内发布Profile(所有设备可以安装)
    • Ad Hoc:Ad Hoc Profile(需要选择iOS设备,除了只有包含的设备可以安装外与AppStore、Inhouse版本基本没有区别)

    1. 选择AppID
    17.png
    2. 选择证书
    18.png
    3. 选择设备(只有Development、AdHoc需要选择设备)
    19.png
    4. 填写Profile Name
    20.png
    5. 点击Download下载,双击安装到Xcode

    XCode打包

    Configurations

    默认Configurations包含两个配置,Debug、Release,可以看到Build Setting里好多配置都区分了Debug、Release,可以根据不同的情况配置不同的选项,最常用的就是根据真机调试、打包发布,分别在Debug、Release选择合适的证书、Profile。

    21.png

    个人认为,现在的Xcode不用再Duplicate Release配置来建立专门打包AppStore或者Adhoc或其它的Configuration,因为感觉并不会方便多少,只是省去了选择证书,但是你还是设置Archive选项。
    22.png
    一般来说,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;

    23.png

    • 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

    24.png

    上图中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。

    选择证书
    25.png
    这里就是上面说的在工程选择的证书、profile可能并不是签名用的,关键在这里,这里会显示已经添加到Xcode的开发者账号对应的证书列表,可以选择签名用的证书。如果跟工程设置的证书一致,并且Profile匹配,则会根据工程配置的证书、Profile来签名导出。如果跟工程配置的证书不一致,则会根据选择的证书自动查找匹配的Profile来签名导出ipa。
    26.png
    这里会显示导出的ipa用的是哪一个证书、Profile签名的,Profile旁边那个箭头并不是选择Profile,然后在Finder中显示当前Profile。 所以导出的最后一步,尽量确认一下签名的证书、Profile是不是自己指定的。

    内测分发ipa文件

    内测分发ipa文件给测试人员主要有3种方法:

    1. 使用iTunes将iPa同步到手机中;
    2. 使用itms-services协议进行下载分发;
    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快速地进行内测分发。


    本文作者 fir.im 工程师 纪承,首发于 [CSDN技术公开课] ,演讲PPT>>下载地址

    13 条回复    2019-07-03 16:48:49 +08:00
    Missdong
        1
    Missdong  
       2015-08-12 10:56:26 +08:00
    这么长的干货,我觉得还是回复下比较好~
    code4life
        2
    code4life  
       2015-08-12 11:03:24 +08:00
    适合新手的干活~
    Imshaha
        3
    Imshaha  
    OP
       2015-08-12 11:13:10 +08:00
    @code4life 加油↖(^ω^)↗
    roys
        4
    roys  
       2015-08-12 11:25:06 +08:00
    最近在学IOS mark 给自己留着
    Imshaha
        5
    Imshaha  
    OP
       2015-08-12 11:33:15 +08:00
    @roys http://www.v2ex.com/t/212139#reply2 看这个是否对你有用
    pH
        6
    pH  
       2015-08-12 12:50:11 +08:00
    歪楼来了,头像是谁-.-
    Imshaha
        7
    Imshaha  
    OP
       2015-08-12 12:57:04 +08:00
    @pH 是我,是我,还是我 ~
    inmyfree
        8
    inmyfree  
       2015-08-12 13:18:18 +08:00
    @Imshaha 敲晕拖走。。。。
    beimenjun
        9
    beimenjun  
       2015-08-12 13:24:08 +08:00
    有空的话回复下这个帖子 /t/212637
    nellace
        10
    nellace  
       2015-08-12 15:39:38 +08:00
    这个帖子算是比较详细的了,不错
    nellace
        11
    nellace  
       2015-08-12 15:40:48 +08:00
    话说看到你是fir的,以前经常在你那打测试包
    walter
        12
    walter  
       2016-12-07 15:57:06 +08:00
    plist 文件不是这个就是那个链接吗?
    yalin
        13
    yalin  
       2019-07-03 16:48:49 +08:00
    plist 文件中 ipa 链接必须是无状态的吧?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1033 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 22:36 · PVG 06:36 · LAX 14:36 · JFK 17:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.