通过Xcode命令行编译

通过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

图一 对话框下载工具

Paste_Image.png

在开发者网站上使用“Download for Apple Developers”页面

命令行工具包可供下载的下载地址用于Apple开发者页面,登录你的Apple ID,然后搜索并下载命令行工具包OS X Mavericks

如图2。在命令行的工具包下载地址页面

Paste_Image.png

在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 编译MyiOSAppscheme

$ xcodebuild -scheme MyiOSApp build
xcodebuild -scheme MyiOSApp
=== BUILD TARGET MyiOSApp OF PROJECT MyApplication WITH CONFIGURATION Debug ===

xcodebuild还有其他执行scheme的编译命令,比如buildanalyzeanalyze。如图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设置一个默认的设置

XcodeInfo的面板设置一个弹出的菜单,当你编译Target这里设置xcodebuild编译的默认选项。通过下面可以知道怎么用弹出的菜单设置一个默认的xcodebuild选项

xcodebuild设置默认编译Debug

Paste_Image.png

我怎么通过命令行运行unit测试的命令。

为了执行unit测试,你可以通过下面的命令。

xcodebuild test -scheme <your_scheme_name> -destination destinationspecifier

xcodebuild运用test的编译命令去执行unit测试。这个编译命令必须有一个scheme说明和明确的目的。-destination选项可以让你为unit测试做目的说明。最后-destinationspecifier的是devicesimulator或者Mac的说明。它由一组用逗号分隔的key = value键值对,这都依赖于设备,所使用模拟器,或所使用Mac。

可以通过Xcode scheme或者选择一个目标来运行你的应用程序去知道scheme各自目的。

对于OS X的应用destinationspecifier支持的platformarch所有键值看下面的表格,如果是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 X64位MyMacAppscheme

xcodebuild test -scheme MyMacApp -destination 'platform=OS X, arch=x86_64'

对于IOS的APP,-destinationspecifier支持platformnameid三种字段。

key 描述 Value
platform unit测试支持的平台 iOS
name unit测试你设备全拼 可以在XcodeDevices Organizer找到你设备的名字
id unit测试你设备的identifier 查看你设备详细信息可以找到identifier

nameid可以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支持platformname,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版本

platformname是比选的,OS是可选的。

测试MyiOSApp schemeiPad模拟器

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • 转://www.greatytc.com/p/1616d9bfbb53 代码覆盖 代码覆盖率是Xcode7...
    测试小蚂蚁阅读 1,072评论 0 3
  • 代码覆盖 代码覆盖率是Xcode7的一项功能,能够显示和测量你有多少的代码执行了测试。随着你代码的覆盖你可以确定你...
    许漠颜阅读 1,724评论 3 20
  • 【转载】曾梦想仗剑走天涯 1.Xcode IDE概览 说明:从左到右,依次是“导航窗格(Navigator)->边...
    06a6a973d7ab阅读 3,823评论 2 20
  • 你从我的生命走过 唯留下一点,渐行渐远 太过的坚持自我 交汇后的分离,再无纠葛 我只是个匆匆的路人 忘了停留,忘了...
    夏爅阅读 289评论 7 6
  • 上星期一直忙碌 周六又被绑架一天 周日做了各种好吃的 吃完晚饭已经近8点
    kameila阅读 107评论 10 2