深入浅出 Xcode Command Lines Tool - 初探

17,744 阅读4分钟

Xcode命令列 = Xcode Command Lines Tool

如果你是一个iOS/Mac Developer 或是你在用Mac开发什么坏坏的事

你一定对这个画面不陌生,

截图 2019-11-13 下午3.44.55

然后我们只需要按下安装,

截图 2019-11-13 下午4.25.41

之后就能继续开发啦!

C1DB1108-AE40-4B01-A717-DD59733E2FD6

本文结束. . . .

Ok, 所以.... 这个Dialog到底帮我们安装了什么? 安装在哪? 为何要安装?

安装了什么

如弹窗所说 命令列开发者工具 (command line developer tools),可以从Apple Developer单独下载

截图 2019-11-13 下午4.40.53

有macOS SDK, LLVM编译器, linker...等开发环境,

我们之后再来仔细地看看里面的内容。

这里有一篇官方对常见关于Xcode Command Line发问做的FAQ Building from the Command Line with Xcode FAQ

安装在哪

为了得知安装的路径,我们使用 SuspiciousPackage 查看下载dmg里的.pkg

CommnadLineToolsForXcode.dmg - pkg

哦! 所以 Command Line Tools 在mac的 唯一路径 就是

/Library/Developer/CommandLineTools !!!

仔细看看上上张图的描述 - 如果你是用Xcode, Xcode 是自带 Command Line Tools的 (老的Xcode是不默认安装的)

Command Line Tools

那放在 Xcode 的哪呢??

Xcode.app/Contents/Developer

目录结构基本类似于安装在 Library的目录结构,但是多了不少东西,

我们会在之后提到他们

多份 Command Line Tools

那.. 如果说我有多份的 Xcode 哪就有多份的 Command Line Tools ?? 😱

Well yes

基于目前的讨论,你的 mac 开发环境可以是以下这样的

commandLineToo

于是就有了三连问,现在使用的是哪一个?我该用哪一个?怎么切换成另一个?

Xcode-Select

To answer your question. I bring you

xcode-select

作为一个command指令,名称还是挺浅显易懂的,也许你并不陌生。来让我们敲个 man xcode-select 瞅瞅👀

描述内容简述如下

xcode-select 管理着 xcode的Developer Directory 你能轻松得使用 xcode-select --switch 在多个版本的Xcode之间切换对应的开发工具路径, 而这些路径将被用于 xcrun, xcodebuild, cc ...

xcrun, xcodebuild,这又钓出了许多熟悉不过的指令,我们一样后面说。

xcode-select用法:

  • -s <path>, --switch <path>:
    • 将路径指向某个Command Line Tools, ex:
      • xcode-select --switch /Applications/Xcode.app
      • commandLineToo
  • -p, --print-path:
    • 打印目前指向的路径, ex: /Applications/Xcode.app/Contents/Developer
  • -r, --reset:
    • 将之前用-s 指定的路径重置, (笔者是指回application里的xcode)
  • --install:
    • 弹出安装Command Line Tools视窗,对 还是它
    • 截图 2019-11-13 下午3.44.55

上面描述提到xcodebuild..等指令用的环境是基于xcode-select指向的路径,xcode-select提供了一个环境变量,让你能临时使用其他环境来执行xcode command.

env DEVELOPER_DIR="/Applications/Xcode-beta.app" /usr/bin/xcodebuild

xcode-select的好处

有了这个机制,我们就能同时拥有多个开发环境,不同的Swift版本, 不同的模拟器版本...而我们编译的指令不需要用 /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild

只需要统一用 xcrun xcodebuild

xcode-select in Xcode

你可以在 Xcode -> Preference -> Locations 去选择自己得 Command Line Tools,

在这里选择 效力等同于 xcode-select, 所以也是需要user密码。

截图 2019-11-14 下午4.18.14

为何要安装 Command Line Tools

现在你知道 command Line Tools '大概是哪些东西', '放在哪些地方'

当然你可能也已经知道许多tool的用途,例如很熟悉的xcodebuild, 但既然我都从头讲了,就讲全一点 😅😅

For Xcode

commandLineTool

就像大部分的软件一样,我们看到的,操作的都是软件的GUI,而Xcode的底层对应的就是Command Line Tool,

例如按下 Build键 => xcodebuid ..., 开一台模拟器 => simctl ...,当然这些都不是一对一的映射,而是多个command 的组合。

我们之后会介绍几个常见的组合。

For others

然而就算你不是使用Xcode开发,还是会碰到需要安装Command Line Tools的情况(也就是使用安装在/Library/Developer/CommandLineTools的那组),因为Tools也有包含整个MacOS的SDK还有编译器Clang甚至包括Make。

例如有使用Homebrew在管理package的一些python开发或是js的开发,都会提示需要Xcode Command Line Tools.

Futher More

现在我们知道 Command Line Tools 是什么,安装在哪,以及Command Line Tools 有多个。

之后的一系列文章我会来介绍 Command Line Tools里,确切包含了哪些命令列工具