现在涉及到编译打包的工作主要是以下两个:
两个流程分别是:
所以研究下自动化编译打包,提高下效率,减少人工操作成本。
主要有两种实现途径,AppleScript和Shell脚本,AppleScript
没怎么研究,网上说是很强大的脚本语言。
下面主要讲Shell脚本的实现,网上也有人实现了并托管在github
上,可以参考下。
https://github.com/webfrogs/xcode_shell
主要是以下几个工具:
xcodebuild
和xcrun
都是来自Command Line Tools
,Xcode自带,如果没有可以通过以下命令安装:
xcode-select --install
或者在下面的链接下载安装:
https://developer.apple.com/downloads/
安装完可在以下路径看到这两个工具:
/Applications/Xcode.app/Contents/Developer/usr/bin/
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html
可以执行 xcodebuild -help
查看,主要展示了几种用法、一些可选项,最后是比较重要的exportOptionsPlist文件的一些可选key,这个文件在后面导出ipa包会用到。
主要下面三个查看的命令比较重要:
-showsdks display a compact list of the installed SDKs
-showBuildSettings display a list of build settings and values
-list lists the targets and configurations in a project, or the schemes in a workspace
后面两个需要在Xcode的project或者workspace目录下才能用。
xcrun -h
主要是打包,看网上比较多是用这个工具打包各种渠道包。
这个工具在网上搜索几乎没有什么结果,大概国内直接用命令行工具提交App Store的比较少。后来在StackOverflow上才找到相关的文档:
https://itunesconnect.apple.com/docs/UsingApplicationLoader.pdf
在上面的文档第38页讲述了如何使用altool上传二进制文件。
这个工具实际上是ApplicationLoader,打开Xcode-左上角Xcode-Open Developer Tool-Application Loader 可看到。有个“交付您的应用”操作,网上看到有人是直接用这个工具上传的。
altool的路径是:
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool
使用时会提示下面的错误:
altool[] *** Error: Exception while launching iTunesTransporter:
Transporter not found at path: /usr/local/itms/bin/iTMSTransporter.
You should reinstall the application.
建立个软链接可解决(类似于Windows的快捷方式):
ln -s /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/itms /usr/local/itms
安装时会提示各种权限不允许,可以执行下面命令:
echo 'gem: --bindir /usr/local/bin' >> ~/.gemrc
sudo 'gem install fir-cli
fir有提供Android Studio、Eclipse、gradle插件,可以看下。
http://fir.im/tools
这是�它的github地址,其中讲到有对?xcodebuild
?原生指令进行了封装。
https://github.com/FIRHQ/fir-cli/blob/master/README.md
Plist在Mac OSX系统中起着举足轻重的作用,系统和程序使用Plist文件来存储自己的安装/配置/属性等信息。而PlistBuddy是Mac里一个用于命令行下读写plist文件的工具,在/usr/libexec/下。可以通过它读取或修改plist文件的内容。
这里我仅通过它来获取内部版本号、外部版本号。在一些文章中见过用来修改plist文件的信息来导出出不同需要的包。
Workspace、Project、Scheme、Target的区别。
下面是官方文档:
https://developer.apple.com/library/ios/featuredarticles/XcodeConcepts/Concept-Targets.html#//apple_ref/doc/uid/TP40009328-CH4-SW1
下面从上往下大概说下,具体看文档比较好:
WorkspaceWorkspace
是最大的集合,可以包含多个Project
,可以管理不同的Project
之间的关系。Workspace
是以xcworkspace
的文件形式存在的。(这点和Project
一致)。Workspace
的存在是为了解决原来仅有Project
的时候不同的Project
之间的引用和调用困难的问题。同时,一个Workspace
的Project
共用一个编译路径。比如使用CocoaPod、或者使用其他开发库/框架。
ProjectProject
是一个仓库,包含编译一个或多个product
所需的文件、资源和信息,保持和聚合这些元素间的关系。(每个Target
能指定自己的Build Settings
来覆盖Project
的)
- Source code, including header files and implementation files
- Libraries and frameworks, internal and external
- Resource files
- Image files