Xcode8以后的自动打包
来源:互联网 发布:艺术签名 源码 编辑:程序博客网 时间:2024/04/27 20:45
本文为投稿文章
原文链接:https://fight4j.github.io/
缘起
最近的工作需要频繁使用企业证书给项目打包,用于当前项目的企业内部测试。由于测试工作的临时性以及需要用外网发布的特性,所以并没有使用当前用于开发测试组的CI。这个工作在我这里就是简单的导出用企业证书打包的IPA包并交付同事。
网上针对自动打包脚本的文章多如牛毛,本文只是自己在修改老脚本的过程中形成的一些细枝末节。
xcodebuild, xctool, xcbuild
翻出以前的脚本,看到以前的build脚本用xctool替代了官方的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(搭配xcpretty更给力),或者转而使用他们家的xcbuild,而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系统。持续集成的内容很多,还有自动化测试、代码静态检查、持续交付等内容。这篇文章概括了其中一些方面,并给出了实际工程方案。
文章写了这么多,其实只是说了很多人再熟悉不过的一条命令xcodebuild。在实际工作中,肯定会有更多的需求,比如我以前的脚本简单地用Python检查了项目中的一些配置项,如IP地址、插件的api key、BundleDisplayName(大厂也犯过错噢)等,检查通过后再打包。
- Xcode8以后的自动打包
- Xcode8以后的自动打包
- xCode8 之后的自动打包
- Xcode8.3.2 自动打包脚本
- xcode8 打包 Framework 的脚本
- xcode8 打包上线的一个坑
- Xcode8 以后如何使用 插件
- xcode8 打包证书问题
- xcode8打包出错
- Xcode8 从调试到打包遇到的一些问题
- 对于xcode8打包上传出现的问题留下纪念
- Xcode8打包APP上传到APPStore遇到的问题
- Xcode8打包APP上传到APPStore遇到的问题
- xCode8.1打包上传AppStore包“消失”的问题
- Protobuf的自动打包
- 自动打包的流程
- 新 Xcode8打包发布应用
- Xcode8打包发布应用 NSPhotoLibraryUsageDescription
- php字符串处理函数大全
- android logo、android开机动画改变详解
- C/C++中typedef struct和struct的区别
- 使用Apache的ab工具对网站进行性能测试
- T-SQL 12章 阶段3 查询数据
- Xcode8以后的自动打包
- ASP.NET MVC IOC 之AutoFac
- 开源集锦(七)GitHub开源控件(三)
- Document share of Oracle VM VirtualBox(ubuntu) and Windows 7(虚拟机与本地主机实现文件夹的共享方法)
- android.view.InflateException: Binary XML file line #51: Error inflating class <unknown>
- 【转】通过TFTP实现Ubuntu与开发板之间的文件传输
- suse 搭建opensis
- 混合开发的大趋势之一React Native手势行为那些事
- 5.1 类、超类和子类