自动化构建的命令行工具,在几十年前,Unix
世界就已经有了gmake, 而Java
世界有Ant、Maven、gradle,.Net
世界则有Nant
和MSBuild
。 作为以GUI
和命令行操作结合的完美性著称的苹果公司来说, 当然也不会忘记为自己的封闭的iOS系统提供开发环境下命令行编译工具:xcodebuild
。
在介绍xcodebuild
的使用方法之前,需要先弄清楚一些在Xcode环境下的一些概念:
Workspace
可以包含多个Project
。Workspace
便于模块化开发,Workspace
会管理各个Project
之间的相互依赖关系。Project
可以包含多个Target
。Target
是指在一个Project
中构建的一个产品, 它包含了构建该产品的所有文件,以及如何构建该产品的配置。Target
成为一个Scheme
。 可在Scheme
中定义的Target
的构建过程有:Build
、Run
、Test
、Profile
、Analyze
、Archive
Xcode Project
中,有Project
级别的Build Setting
,也有Target
级别的Build Setting
。Build
一个产品时一定是针对某个Target
的,因此,Xcode
中总是优先选择Target
的Build Setting
, 如果Target
没有配置,则会使用Project
的Build Setting
。查看xcodebuild
的帮助:
显示Xcode的版本号。
示例:
显示当前系统安装的SDK
和对应的版本号。
示例:
列出当前工程中的target
、schema
、Configuration
等信息。
如果想要构建整个Workspace
就要指定该参数。
示例:
-workspace newton.xcworkspace
如果想要构建一个Project
就要指定该参数。
示例:
-workspace newton.xcworkspace
使用xcodebuild -list
命令可以查看到当前工程中的所有的target
。
示例:
-target newton
使用xcodebuild -list
命令可以查看到当前工程中的所有的scheme
。
示例:
-scheme newton
使用xcodebuild -list
命令可以查看到当前工程中的所有的configuration
。 ,默认有两个:Debug
和Release
。
示例:
-configuration Debug
指定使用那个SDK
。可以通过xcodebuild -showsdks
查看取值, 比如:iphoneos10.3
、iphonesimulator10.3
等。
示例:
-sdk iphonesimulator10.3
buildaction | 说明 |
---|---|
build | 构建,生成build 目录,将构建过程中的文件存放在这个目录下。 |
clean | 清除build 目录下的文件。 |
test | 测试某个scheme ,必须和-scheme 参数一起使用。 |
archive | 打包,必须和-scheme 参数一起使用。 |
示例:
xcodebuild clean
xcodebuild build
xcodebuild clean install
step1、使用Xcode创建一个Project
,目录结构如下:
step2、使用CocoaPods的pod init
命令生成Podfile
,此时的目录结构如下:
step3、在Podfile
配置文件中加入如下配置:
pod 'AFNetworking', '~> 3.1.0'
step4、安装依赖库
pod install
此时,我们的Project
被转换为了Workspace
,此时的项目目录结构如下:
我们将要对这个Workspace
进行构建。根据开发阶段的不同,我们可能需要构建出不同的app
, 比如,在开发前期,我们只需要构建运行在iOS模拟器中的app
、 而随着内测的开始,我们需要开始构建运行在真实的iOS设备中的app
。 而构建运行在真实的iOS设备中的app
并通过分发渠道进行分发app
是需要进行签名的,签名的时候需要使用由苹果公司的CA
签名的数字证书, 而只有成为苹果开发者才能获得苹果公司的CA
签名的数字证书。
构建模拟器上运行的app
:
xcodebuild -workspace newton.xcworkspace -scheme newton -configuration Debug -sdk iphonesimulator10.3
构建真机上运行的app
:
xcodebuild -workspace newton.xcworkspace -scheme newton -configuration Release -sdk iphoneos10.3 archive CODE_SIGN_IDENTITY= "iPhone Distribution:XXXXXX"
上面的iPhone Distribution:XXXXXX
就是您成为苹果开发者之后获得的苹果公司的CA
签名的数字证书(DER
格式,后缀名是.cer
)中的Common Name
字段的值,DER
格式的数字证书中的Common Name
是唯一的。 通过下面的命令可以或者该值:
openssl x509 -in xx.cer -inform der -text -noout | grep "iPhone"
构建出的app
只是一个Bundle,一般存放在Workspace
根目录下的Build/Products/
目录中。 我们还需要借助xcrun命令打包成IPA,这样才能进行分发。