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

xcodebuild

在命令行构建、测试和归档 Xcode 工程,适用于 CI 和自动化。

补充说明

xcodebuild 是完整 Xcode 提供的构建工具,能读取 .xcodeproj 或 .xcworkspace,按 scheme、configuration 和 destination 执行 build、test、archive。只有一个 CLT 时会直接报 tool 'xcodebuild' requires Xcode, but active developer directory ... is a command line tools instance,必须安装完整 Xcode 并用 xcode-select --switch 指过去。

工程有 CocoaPods 或 Swift Package 依赖时通常用 .xcworkspace,纯 Xcode 工程才用 .xcodeproj。-scheme 必须存在且被共享,否则本地能看到、CI 却报 scheme 找不到。-destination 要写精确的平台和名称,模拟器名称可先用 xcrun simctl list devices available 确认。

构建产物默认写入 DerivedData,CI 上建议用 -derivedDataPath 固定到工作目录,便于缓存和清理。签名问题在 CI 上最常见:模拟器构建可以 CODE_SIGNING_ALLOWED=NO,真机或归档则需要有效的证书和描述文件,必要时加 -allowProvisioningUpdates 让 Xcode 自动处理。

常用示例

# 查看 Xcode 版本和可用 SDK
% xcodebuild -version
% xcodebuild -showsdks

# 列出 workspace 里的 scheme、target 和 configuration
% xcodebuild -list -workspace App.xcworkspace

# 构建模拟器版本
% xcodebuild -workspace App.xcworkspace -scheme App \
  -destination 'platform=iOS Simulator,name=iPhone 15' build

# 运行测试
% xcodebuild test -workspace App.xcworkspace -scheme App \
  -destination 'platform=iOS Simulator,name=iPhone 15'

# 查看构建设置,确认 bundle id 和签名配置
% xcodebuild -showBuildSettings -scheme App | grep PRODUCT_BUNDLE_IDENTIFIER

# 固定 DerivedData,便于 CI 缓存和清理
% xcodebuild -workspace App.xcworkspace -scheme App \
  -destination 'generic/platform=iOS' -derivedDataPath build/DerivedData build

# 归档并导出 ipa
% xcodebuild archive -workspace App.xcworkspace -scheme App \
  -archivePath build/App.xcarchive -destination 'generic/platform=iOS'
% xcodebuild -exportArchive -archivePath build/App.xcarchive \
  -exportOptionsPlist ExportOptions.plist -exportPath build/export

# 模拟器构建关闭签名,避免 CI 缺证书
% xcodebuild -workspace App.xcworkspace -scheme App \
  -destination 'platform=iOS Simulator,name=iPhone 15' \
  CODE_SIGNING_ALLOWED=NO build

易错点与排错

相关命令

参考链接

读完自测

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

  1. 为什么装了 Command Line Tools 仍然不能运行 xcodebuild?
  2. CI 上 scheme 找不到,常见原因是什么?
  3. 模拟器构建时怎样避免签名失败?
答案
  1. xcodebuild 只随完整 Xcode 提供,CLT 不包含;需要安装 Xcode 并切换 developer 目录。
  2. scheme 没有勾选 Shared,或应该用 .xcworkspace 却指定了 .xcodeproj。
  3. 加 CODE_SIGNING_ALLOWED=NO,模拟器构建不需要证书;真机/归档仍需有效签名。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令