通过Xcode命令行编译
本文档提供命令行常提到一些问题
命令行工具是什么
命令行工具包是一个小型独立包,可供下载独立于Xcode的和允许您执行命令行开发OS X,它由两部分组成:OS X SDK
和命令行工具
,如Clang的,这是安装在/ usr/ bin中
下载命令行工具无法使用在Xcode的OS X10.9。我怎么能在我的机器上安装它们?
在OS X10.9,Xcode预设的下载窗格将不会支持下载命令行工具,使用下列任何一个方式到你的系统上安装命令行的工具:
使用Xcode
如果您计算机上安装Xcode,那么就没有必要安装它们。Xcode绑定了所有的命令行工具。OSX10.9
包含所有的安装包,这些垫片,安装在/ usr/ bin中,可以映射列入在/ usr / bin添加到里面的Xcode相应之一的任何工具。xcrun就是这样垫片之一,它可以让你找到或者在命令行内运行的Xcode任何工具。使用它可从命令行调用在Xcode中的任何工具。
图1 在终端应用程序运行dwarfdump
$ xcrun dwarfdump --uuid MySample.app/MySample
UUID: AD019F0E-1318-3F9F-92B6-9F95FBEBBE6F (armv7) MySample.app/MySample
UUID: 4776671F-0C12-3172-AE97-3676E83E3F19 (armv7s) MySample.app/MySample
UUID: BB59C973-06AC-388F-8EC1-FA3701C9E264 (arm64) MySample.app/MySample
用终端
如清单2中看到,您可以通过运行xcode-select --install
命令或试图使用在终端任何其他工具进行安装
尝试在终端使用Git
$ git
xcode-select: note: no developer tools were found at '/Applications/Xcode.app', requesting install. Choose an option in the dialog to download the command line developer tools.
OS X还附带在
Xcode-Select
,一个是安装在/ usr/ bin命令行工具,它允许你管理活跃的开发者目录下Xcode和其他BSD的开发工具,有关详细信息,请参阅其手册页。
OS X会显示一个对话框,尝试运行在终端的任何工具时,如图1所示.
选择“Install
”来设置命令行工具包的/Library/Developer/CommandLineTools
。
图一 对话框下载工具
在开发者网站上使用“Download for Apple Developers
”页面
命令行工具包可供下载的下载地址用于Apple开发者页面,登录你的Apple ID,然后搜索并下载命令行工具包OS X Mavericks
,
如图2。在命令行的工具包下载地址页面
在OS X10.9,软件更新时会通知你的命令行工具的新版本可用于更新。
如何卸载我的命令行工具?
- Xcode中包括所有的命令行工具。如果它被安装在系统上,删除卸载你的工具。
- 如果你的工具是从Xcode中单独下载,那么他们位于
/Library/Developer/CommandLineTools
。删除CommandLineTools
文件夹将其卸载。
我有我机器上安装的Xcode的多个版本。什么版本的Xcode确实目前我使用的命令行工具?
要找出正在使用的Xcode的版本用你的工具,请在终端中输入以下命令:
$ xcode-select --print-path
打印目前使用我的工具Xcode的版本
$ xcode-select --print-path
/Applications/Xcode5.1.1/Xcode.app/Contents/Developer
如何选择Xcode中的默认版本用于我的命令行工具?
为了选择适合您的命令行工具Xcode默认运行在终端下面的命令:
$ sudo xcode-select -switch <path/to/>Xcode.app
其中,<path/to/>
是路径要使用的开发Xcode.app包
设置Xcode的默认版本
$ sudo xcode-select -switch /Applications/Xcode5.1.1/Xcode.app
我怎么用命令行编译我的工程?
xcodebuild
是一个命令行的工具,可以让你的工程通过projects
workspaces
进行编译,测试,分析,打包。他可以运行在包含一个或者多个Target
的工程上面,或者在projects
workspaces
包含scheme
上面。xcodebuild
提供了几个选项,可以在Main Page看到这些。默认情况下,xcodebuild
会保存和输出在Xcode的本地定义的面板里面。
请观看下面xcodebuild
运用的各种用法。请确保终端运行在projects
workspaces
目录,然后运行下面命令。
列出所有的Target
,编译你工程的配置和schemes
。在命令行打印下面的命令。
xcodebuild -list -project <your_project_name>.xcodeproj
<your_project_name>
是你工程的名称。
图5 列出你工程所有的信息
$ cd /Users/username/Desktop/MyApplication
$ xcodebuild -list -project MyApplication.xcodeproj
Information about project "MyApplication":
Targets:
MyMacApp
MyMacAppTests
MyiOSApp
MyiOSAppTests
Build Configurations:
Debug
Release
If no build configuration is specified and -scheme is not passed then "Release" is used.
Schemes:
MyMacApp
MyiOSApp
可以运行下面的命令去编译你工程一个scheme
xcodebuild -scheme <your_scheme_name> build
<your_scheme_name>
是你选择特定的编译和执行的一个scheme
图6 编译MyiOSApp
scheme
$ xcodebuild -scheme MyiOSApp build
xcodebuild -scheme MyiOSApp
=== BUILD TARGET MyiOSApp OF PROJECT MyApplication WITH CONFIGURATION Debug ===
xcodebuild
还有其他执行scheme
的编译命令,比如build
,analyze
,analyze
。如图7所示,没有任何的方法,xcodebuild
将会使用默认的build
命令。
通过configuration
文件编译你的工程,运行下面的命令。
xcodebuild -target <your_target_name> -xcconfig <your_configuration_file>.xcconfig
<your_target_name>
和<your_configuration_file>
分别是你编译Target
的名字和你配置文件的名字。
图7 通过配置文件编译MyiOSApp
的target
$ xcodebuild -target MyiOSApp -xcconfig configuration.xcconfig
Build settings from configuration file 'configuration.xcconfig':
GCC_WARN_CHECK_SWITCH_STATEMENTS = YES
GCC_WARN_UNDECLARED_SELECTOR = YES
IPHONEOS_DEPLOYMENT_TARGET = 6.0
PRODUCT_NAME = MyApp
=== BUILD TARGET MyiOSApp OF PROJECT MyApplication WITH THE DEFAULT CONFIGURATION (Debug) ===
改变你xcodebuild
本地的输出命令,运用SYMROOT
(编译你工程的命令)DSTROOT
(安装编译本地目录)。分别指定Debug
发布,Release
发布和.dSYM
的本地文件路径。想知道更多的编译设置点击这里。
为MyiOSApp's
设置一个Debug
版本的本地路径`
$ xcodebuild -scheme MyiOSApp SYMROOT="/Users/username/DebugLocation"
Build settings from command line:
SYMROOT = "/Users/username/DebugLocation"
=== BUILD TARGET MyiOSApp OF PROJECT MyApplication WITH CONFIGURATION Debug ===
为MyiOSApp's
设置一个Release
版本的本地路径
$ xcodebuild -scheme MyiOSApp DSTROOT="/Users/username/ReleaseLocation" archive
Build settings from command line:
DSTROOT = /Users/username/ReleaseLocation
=== BUILD TARGET MyiOSApp OF PROJECT MyApplication WITH CONFIGURATION Release ===
App有很多的设置选项,我怎么为xcodebuild
设置一个默认的设置
在Xcode
的Info
的面板设置一个弹出的菜单,当你编译Target
这里设置xcodebuild
编译的默认选项。通过下面可以知道怎么用弹出的菜单设置一个默认的xcodebuild
选项
给xcodebuild
设置默认编译Debug
我怎么通过命令行运行unit
测试的命令。
为了执行unit
测试,你可以通过下面的命令。
xcodebuild test -scheme <your_scheme_name> -destination destinationspecifier
xcodebuild运用
test的编译命令去
执行unit
测试。这个编译命令必须有一个scheme
说明和明确的目的。-destination
选项可以让你为unit
测试做目的说明。最后-destinationspecifier
的是device
,simulator
或者Mac
的说明。它由一组用逗号分隔的key = value键值对,这都依赖于设备,所使用模拟器,或所使用Mac。
可以通过Xcode scheme或者选择一个目标来运行你的应用程序去知道
scheme
各自目的。
对于OS X
的应用destinationspecifier
支持的platform
和arch
所有键值看下面的表格,如果是OS X
进行unit
测试必须包含这两个键值
OS X
支持的键值
key | 描述 | Value |
---|---|---|
platform |
unit 测试支持的平台 |
OS X |
arch |
unit 测试的架构 |
i386 or x86_64 |
下面的一个例子是测试OSX APP的一个scheme。-destinationspecifier
设置为'platform=OS X, arch=x86_64'
测试OS X
64位MyMacApp
scheme
xcodebuild test -scheme MyMacApp -destination 'platform=OS X, arch=x86_64'
对于IOS的APP,-destinationspecifier
支持platform
,name
,id
三种字段。
key | 描述 | Value |
---|---|---|
platform |
unit 测试支持的平台 |
iOS |
name |
unit 测试你设备全拼 |
可以在Xcode 的Devices Organizer 找到你设备的名字 |
id |
unit 测试你设备的identifier
|
查看你设备详细信息可以找到identifier
|
name
和id
可以platform
分别组合,但是必须存在一个,可以看下面的例子
用id
测试MyiOSApp scheme
xcodebuild test -scheme MyiOSApp -destination 'platform=iOS,id=998058a1c30d845d0dcec81cd6b901650a0d701c'
用name
测试MyiOSApp scheme
xcodebuild test -scheme MyiOSApp -destination 'platform=iOS,name=iPod touch'
对于iOS模拟器的APP,-destinationspecifier
支持platform
,name
,OS
key | 描述 | Value |
---|---|---|
platform |
unit 测试支持的平台 |
iOS模拟器 |
name |
unit 测试模拟器的名字 |
iPhone Retina (3.5-inch), iPhone Retina (4-inch), iPhone Retina (4-inch 64-bit), iPad, iPad Retina, or iPad Retina (64-bit. |
OS | iOS支持的版本 | 一个IOS版本 |
下表是iOS模拟器APP支持的所有key
key | 描述 | Value |
---|---|---|
platform |
unit 测试支持的平台 |
iOS模拟器 |
name |
unit 测试模拟器的名字 |
iPhone Retina (3.5-inch), iPhone Retina (4-inch), iPhone Retina (4-inch 64-bit), iPad, iPad Retina, or iPad Retina (64-bit. |
OS | iOS支持的版本 | 一个IOS版本 |
platform
和name
是比选的,OS
是可选的。
测试MyiOSApp scheme
用iPad
模拟器
xcodebuild test -scheme MyiOSApp -destination 'platform=iOS Simulator,name=iPad'
测试MyiOSApp
用7.1iPhone Retina (4-inch 64-bit)
模拟器
xcodebuild test -scheme MyiOSApp -destination 'platform=iOS Simulator,name=iPhone Retina (4-inch 64-bit),OS=7.1'
-destination
允许你在多个平台运行同一个unit
测试,下面是同时添加多个平台的测试。
测试MyiOSApp
用模拟器和iPod touch
xcodebuild test -scheme MyiOSApp -destination 'platform=iOS Simulator,name=iPhone Retina (4-inch 64-bit),OS=7.1' -destination 'platform=iOS,name=iPod touch'
xcodebuild
会循序渐进的测试你的平台,对于上面会先测试模拟器在测试iPod touch