xcodebuild / xcrun 兼容
安装目录中同名的 xcodebuild、xcrun 支持哪些动作和参数,不支持哪些,退出码含义,React Native、Expo、Flutter 的脚本为什么不用改。
同名程序
Windows 和 Linux 上,安装目录的 bin 中有和 macOS 同名的 xcodebuild、xcrun 和 codesign。React Native、Expo、Flutter、Cordova 的构建脚本调用它们时会使用 KXBuild 的实现,脚本不需要修改,自己写的脚本也可以按 macOS 的写法。macOS 上 Xcode 自带这些程序,KXBuild 的叫 kxcodebuild,不覆盖系统的。
兼容的是框架脚本用到的常用参数。xcodebuild test 和 -exportArchive 不支持,测试用 kxdevice test,导出 ipa 用 kxbuild build -c Release。日常构建建议直接用 kxbuild build,参数更全、输出更清楚。
xcodebuild
xcodebuild [-project X.xcodeproj | -workspace X.xcworkspace] [-scheme S | -target T | -alltargets] [-configuration C] [-sdk SDK] [-arch A] [KEY=VALUE]… [动作]…
支持的动作有 build(默认)、clean、install、installhdrs、installapi、installsrc、archive。
| 参数 | 说明 |
|---|---|
| -project / -workspace NAME | 要构建的工程或工作区 |
| -scheme / -target NAME、-alltargets | 构建哪个 scheme、target 或全部 target |
| -configuration NAME | 构建配置 |
| -sdk SDK、-arch ARCH、-toolchain NAME | SDK、架构、工具链 |
| -destination SPEC | 目标描述,key=value 逗号分隔 |
| -xcconfig PATH、KEY=VALUE | 覆盖构建设置 |
| -derivedDataPath PATH、-archivePath PATH | 输出目录、归档目录 |
| -clonedSourcePackagesDirPath PATH、-resolvePackageDependencies | Swift 包检出目录、只解析依赖 |
| -showBuildSettings、-showsdks、-showdestinations、-list、-version | 查询构建设置、SDK 列表、目标列表、target 与 scheme 列表、版本,可加 -json |
| -jobs N、-quiet、-verbose、-hideShellScriptEnvironment、-json | 并行数与输出控制 |
不支持 test、build-for-testing、test-without-building、analyze、docbuild、-exportArchive、-create-xcframework、本地化导入导出和平台下载,遇到时以 65 退出。其他 xcodebuild 参数接受但忽略。archive 只组装一个最小的 .xcarchive,不签名,要交付的 .ipa 用 kxbuild build 的 Release 构建。
| 退出码 | 含义 |
|---|---|
| 64 | 用法错误 |
| 65 | 构建失败、scheme 错误或不支持的动作 |
| 66 | 输入文件不存在 |
> xcodebuild -workspace ios\MyApp.xcworkspace -scheme MyApp -configuration Debug -sdk iphoneosxcrun
xcrun [--sdk SDK] [--show-sdk-path | --show-sdk-version | … | -f 工具 | 工具 参数…]
查找 SDK 和工具链中的工具并执行。框架脚本最常用的是查 SDK 路径和调用 clang。
| 参数 | 说明 |
|---|---|
| --sdk / -sdk NAME | 选择 SDK,iphoneos、iphonesimulator、macosx,可带版本或路径。非 macOS 默认 iphoneos |
| --show-sdk-path、--show-sdk-version、--show-sdk-build-version | 打印 SDK 路径、版本、构建号 |
| --show-sdk-platform-path、--show-sdk-platform-version | 打印平台目录、平台版本 |
| --show-toolchain-path | 打印工具链目录 |
| -f, --find 工具 | 打印工具的完整路径 |
| xcrun clang …、xcrun xcodebuild … | 执行工具。clang 会按 -sdk 和 -arch 补上目标三元组、SDK 根目录和链接器参数 |
> xcrun --sdk iphoneos --show-sdk-pathcodesign
签名与验签,参数、输出和退出码与 macOS 一致,证书从证书目录读取。构建时会自动签名,一般不需要手动调用。