系统学习 macOS 学习路径:从 BSD 文件命令到系统、网络与开发维护

xcrun

按当前 Xcode 或命令行工具目录查找并执行编译、模拟器和公证工具。

补充说明

xcrun 根据 xcode-select 的当前 developer 目录定位工具,并可按 --sdk 选择 SDK。xcrun --find clang 只打印路径,xcrun clang ... 直接执行;--show-sdk-path、--show-sdk-version 常用于构建脚本确认 SDK。它本身不修改 PATH,脚本里应显式用 xcrun 或 $(xcrun --find 工具),不要假设工具一定在 /usr/bin。

CLT 和完整 Xcode 提供的能力不同:CLT 有 clang、swiftc、make 和 macOS SDK;simctl、xcodebuild、iOS SDK、notarytool 通常需要完整 Xcode。xcrun --sdk iphoneos 找不到 SDK 时,先在 Xcode 的设置里安装对应平台,而不是反复切 xcode-select。

xcrun 有查找缓存,切换 Xcode 后如果仍解析到旧工具,用 xcrun -k 清缓存或 -n 跳过缓存。环境变量 DEVELOPER_DIR 优先于全局 xcode-select,CI 中常用它做单次构建的 Xcode 选择,但也容易在排障时被忽略,先 echo $DEVELOPER_DIR。

常用示例

# 查找当前生效的 clang 路径
% xcrun --find clang

# 查看 macOS SDK 路径和版本,构建脚本常依赖
% xcrun --sdk macosx --show-sdk-path
% xcrun --sdk macosx --show-sdk-version

# 查看 iOS SDK 版本(需要完整 Xcode 和对应平台)
% xcrun --sdk iphoneos --show-sdk-version

# 列出可用模拟器并启动一个
% xcrun simctl list devices available
% xcrun simctl boot "iPhone 15"

# 对已启动模拟器截图
% xcrun simctl io booted screenshot /tmp/sim.png

# 公证:提交并用 stapler 装订票据
% xcrun notarytool submit App.zip --keychain-profile AC_PASSWORD --wait
% xcrun stapler staple App.app

# 切换 Xcode 后清缓存,避免仍解析到旧工具
% xcrun -k --find swift

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. xcrun --find clang 和 which clang 有什么区别?
  2. 为什么只有 Command Line Tools 时 xcrun simctl 会失败?
  3. 切换 Xcode 后 xcrun 仍用旧版本,应该检查什么?
答案
  1. xcrun --find 按当前 developer 目录和 SDK 解析工具路径,which 只看 PATH;两者可能指向不同版本。
  2. simctl 属于完整 Xcode 的模拟器工具,CLT 不包含;需要安装 Xcode 并切换 developer 目录。
  3. 先 xcrun -k 清缓存,再检查 xcode-select -p 和 DEVELOPER_DIR 是否仍指向旧 Xcode。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令