XCode 打包那些事

Configurations

1.png

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

个人感觉,现在的 Xcode 不用再 Duplicate Release 配置来建立专门打包 AppStore 或者 AdHoc 或其它的Configuration,因为感觉并不会方便多少,只是省去了选择证书,但是你还需要设置 Archive 选项。 5.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;
    1.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。
该选项起作用的条件有两个,必须同时满足才会起作用:

  • 其值设置为YES
  • XCode成功连接调试设备,否则依然还会编译Valid Architectures和Architectures指定的二进制包
注意

好多FIR.im的用户,发现自己的应用安装不了,这时候可以看看自己的App支持的指令集,遇到过几个用户的指令集只支持arm64,这样的App在设备不是arm64的情况下是安装不了的。

Code Signing

3.png

##### Code Signing Identity

  • Debug:选择真机调试证书
  • Release:选择发布证书(AdHoc、AppStore/Inhouse打包都使用发布证书)

    Provisioning Profile

    无论真机调试,还是发布 App,选择的 Profile 的 AppID 要与项目工程的 BundleId 匹配。

  • Debug:真机调试Profile

  • Release:按照自己发布版本的需要选择Profile,AppStore、Inhouse、AdHoc

    注意:Release这里选择的Profile,并不一定就是签名ipa用的Profile,后面会讲到。

Archive、导出ipa

Archive

6.png

Archive之后会弹出Organizer窗口,有刚刚我们archive出来的文件。

  • 建议每次发布版本都修改版本号,便于区分版本,无论是使用我们BugHD,还是其他的一些收集崩溃Crash的工具,查找符号表就比较方便了。
选择ipa版本

7.png

  1. 导出AppStore版ipa
  2. 导出AdHoc版ipa
  3. 导出企业版ipa

    选择自己需要导出的ipa点击下一步,如果xcode没有登录企业开发者账号,选择导出企业版ipa的时候会提示添加企业开发者账号到xcode。 1.png
    9.png

选择证书

8.png

这里就是上面说的在工程选择的证书、profile可能并不是签名用的,关键在这里,这里会显示已经添加到xcode的开发者账号对应的证书列表,可以选择签名用的证书,如果跟工程设置的证书一致,并且Profile匹配,则会根据工程配置的证书、Profile来签名导出,如果跟工程配置的证书不一致,则会根据选择的证书自动查找匹配的Profile来签名导出ipa。 10.png

这里会显示导出的ipa用的是哪一个证书(图1)、Profile(图2)签名的,Profile旁边那个箭头并不是选择Profile,然后在Finder中显示当前Profile。 所以导出的最后一步,尽量确认一下签名的证书、Profile是不是自己指定的。

常见问题

添加了设备的 UDID,仍然不能安装?

解决方法:查看你导出的 .ipa 是不是使用了你最近更新的 Profile,以下两种情况会导致 你打包时用的 Profile 不是最新:

  • 1.工程配置的是"证书1+Profile1",打包时选择了"证书2"。 然后导出 ipa 的时候会选择"证书2"匹配的证书,如果没有匹配的证书会提示你没有找到匹配的 Profile 文件。
  • 2.工程配置、导出选择证书是一样的,工程 Profile 选择的是 Profile1 ,但是 profile1 跟选择证书并不匹配,xcode 会自动查找匹配的 Profile,比如 Xcode 自动创建的通配 AdHoc Profile,XC Ad Hoc:xx。

顺便说一下 fir.im 上显示的内测版、企业版

fir.im 只支持两种打包方式,AdHoc、InHouse,AdHoc 就是内测版,InHouse 就是企业版,这里是识别上传的 .ipa 的信息来区分证书类型的,如果想显示企业版,需要用企业证书 InHouse 打包方式来导出 .ipa。

Sarah

fir.im & BugHD 的产品经理 :)

北京