xcodebuild命令

自动化构建的命令行工具,在几十年前,Unix世界就已经有了GNU make, 而Java世界有AntMavengradle.Net世界则有NantMSBuild。 作为以GUI和命令行操作结合的完美性著称的苹果公司来说, 当然也不会忘记为自己的封闭的iOS系统提供开发环境下命令行编译工具:xcodebuild

在介绍xcodebuild的使用方法之前,需要先弄清楚一些在Xcode环境下的一些概念:

  • Workspace
    一个Workspace可以包含多个ProjectWorkspace便于模块化开发,Workspace会管理各个Project之间的相互依赖关系。
  • Project
    指一个项目,该项目会负责管理生成一个或者多个软件产品的全部文件和配置, 一个Project可以包含多个Target
  • Target
    一个Target是指在一个Project中构建的一个产品, 它包含了构建该产品的所有文件,以及如何构建该产品的配置。
  • Scheme
    一个定义好构建过程的Target成为一个Scheme。 可在Scheme中定义的Target的构建过程有:BuildRunTestProfileAnalyzeArchive
  • BuildSetting
    配置产品的Build设置,比方说,使用哪个Architectures、使用哪个版本的SDK等。 在一个Xcode Project中,有Project级别的Build Setting,也有Target级别的Build SettingBuild一个产品时一定是针对某个Target的,因此,Xcode中总是优先选择TargetBuild Setting, 如果Target没有配置,则会使用ProjectBuild Setting

查看xcodebuild的帮助:

参考

1.1、xcodebuild -version

显示Xcode的版本号。

示例:

1.2、xcodebuild -showsdks

显示当前系统安装的SDK和对应的版本号。

示例:

1.3、xcodebuild -list

列出当前工程中的targetschemaConfiguration等信息。

1.4、-workspace path/to/name.xcworkspace

如果想要构建整个Workspace就要指定该参数。

示例:

-workspace newton.xcworkspace
1.5、-project path/to/name.xcodeproj

如果想要构建一个Project就要指定该参数。

示例:

-workspace newton.xcworkspace
1.5、-target <targetName>

使用xcodebuild -list命令可以查看到当前工程中的所有的target

示例:

-target newton
1.6、-scheme <schemeName>

使用xcodebuild -list命令可以查看到当前工程中的所有的scheme

示例:

-scheme newton
1.7、-configuration <configurationName>

使用xcodebuild -list命令可以查看到当前工程中的所有的configuration。 ,默认有两个:DebugRelease

示例:

-configuration Debug
1.8、-sdk <sdkName>

指定使用那个SDK。可以通过xcodebuild -showsdks查看取值, 比如:iphoneos10.3iphonesimulator10.3等。

示例:

-sdk iphonesimulator10.3
1.9、buildaction
buildaction说明
build构建,生成build目录,将构建过程中的文件存放在这个目录下。
clean清除build目录下的文件。
test测试某个scheme,必须和-scheme参数一起使用。
archive打包,必须和-scheme参数一起使用。

示例:

xcodebuild clean
xcodebuild build
xcodebuild clean install
1.10、使用示例

step1、使用Xcode创建一个Project,目录结构如下:

step2、使用CocoaPodspod 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,这样才能进行分发。