Xcode8以后的自动打包

Posted Cocoa开发者社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xcode8以后的自动打包相关的知识,希望对你有一定的参考价值。


本文为投稿文章

原文链接:https://fight4j.github.io/


缘起


最近的工作需要频繁使用企业证书给项目打包,用于当前项目的企业内部测试。由于测试工作的临时性以及需要用外网发布的特性,所以并没有使用当前用于开发测试组的CI。这个工作在我这里就是简单的导出用企业证书打包的IPA包并交付同事。


网上针对自动打包脚本的文章多如牛毛,本文只是自己在修改老脚本的过程中形成的一些细枝末节。


xcodebuild, xctool, xcbuild


翻出以前的脚本,看到以前的build脚本用替代了官方的xcodebuild。习惯性地点开xctool的github主页想看看有什么更新,却看到了README上的这段话:


Note: Support for building projects with xctool is deprecated and will not be updated to support future versions of Xcode. We suggest moving to xcodebuild (with xcpretty) for simple needs, or xcbuild for more involved requirements. xctool will continue to support testing (see above).


太久没逛的缘故,这才发现了xctool在Xcode8以后不再支持build功能。对于build功能的简单使用,Facebook团队推荐转回官方的xcodebuild(搭配更给力),或者转而使用他们家的,而xctool将专注于测试功能(也解释了为何从xctool迁移回xcodebuild)。


对我而言xcbuild和xcpretty又是新鲜的东西,继续点开链接。前者的主页上写道,在搭配Ninja的情况下,使用xcbuild来编译速度甚至比xcodebuild还快。而回想当时使用xctool的缘由,仅仅是为了日志更好看些,再加上本能地也不想为一个简单需求再增加依赖(Ninja),于是果断选择xcodebuild + 只是用于格式化输出的xcpretty。


xcpretty非常简单,安装后作为管道使用:


   $ xcodebuild [flags] | xcpretty


自动脚本打包


岔路走完,继续回到主题。快使用xcodebuild,哼哼哈兮。要把工程打包IPA,拢共分几步?两步!


1、xcodebuild archive

2、xcodebuild -exportArchive -archivePath xcarchivepath -exportPath destinationpath -exportOptionsPlist path


嗑嗑,额,具体来讲第一步呢,当然要根据实际情况加上-project, -configuration, -archivePath等参数,还可以搭配给力的xcpretty:


   xcodebuild archive -workspace /Path/To/Workspace/Demo.xcworkspace -scheme DemoScheme -configuration Release -archivePath /Path/To/Archive/Demo.xcarchive | xcpretty


第二条命令xcodebuild -exportArchive的-archivePath -exportPath ``-exportOptionsPlist三个选项很容易理解,其中-exportOptionsPlist替换了以前的-exportSigningIdentity -exportSigningIdentity等选项。这部分改动在中还未更新,当然在man文档中早有体现,-exportOptionsPlist要求指定一个plist文件作为配置文件,下面列举几个常用的key值:


   method : String

         Describes how Xcode should export the archive. Available options: app-store, ad-hoc, package, enterprise, development, and developer-id. The list of options varies based on the type of archive. Defaults to development.  

teamID : String

         The Developer Portal team to use for this export. Defaults to the team used to build the archive.


对应到具体的需求,我的plist里就只指定了这两个键值对,其中method选择enterprise(其他发布方式对应选择即可),teamID选择对应值。这两个选项也对应了在Xcode中手动arhive并导出包时要点选的两个动作。


Xcode8中的设置


Xcode近年来致力于自动管理开发证书,每个大版本都会有修改(有方便的地方也有坑的地方)。到了Xcode8,在target的General设置面板中直接新增了“Signing”,看得出来,Automatically manage signing选项是苹果推荐的签名方式。如果恰巧不幸,你的证书里的App ID与Xcode中的bundle ID不符(比如我的企业证书中的App ID带有通配符),就应该关闭该选项,手动为某个configuration指定打包证书。不要忘记在-exportOptionsPlist指定的plist中配置对应的teamID,否则在xcodebuild -exportArchive时会报团队不匹配的错误。


总结


  • 如果对编译速度有较高要求,可以参考使用xcbuild;对于自动化测试工作,xctool有更好的支持;如果只是简单的自动打包需求,官方的xcodebuild可以满足,并且无需折腾也不用担心失效,如果需要更直观的输出,可以搭配xcpretty。

  • Xcode8中根据实际情况打开或关闭Automatically manage signing

  • 自动打包是ios开发中的一项基础工作,作为自动化工作的一小部分往往被应用于CI系统。持续集成的内容很多,还有自动化测试、代码静态检查、持续交付等内容。概括了其中一些方面,并给出了实际工程方案。





▲长按二维码“识别”关注即可免费学习 iOS 开发

月薪十万、出任CEO、赢娶白富美、走上人生巅峰不是梦

--------------------------------------

商务合作QQ:2408167315

投稿邮箱:support@cocoachina.com

以上是关于Xcode8以后的自动打包的主要内容,如果未能解决你的问题,请参考以下文章

xcode8 自动打包

vue-cli 打包输出到dist文件夹以后,丢入服务器,资源自动https加载的问题

cordova工程ios打包自动编译打包,自动签名失败

xcode9打包静态库不兼容xcode8环境的处理

自动化打包之fastlane-- 代码签名和项目配置

使用Maven完成自动化打包并部署到Linux服务器下(Tomcat7)