xcodebuild编译参数有哪些常用选项?

99ANYc3cd6
预计阅读时长 22 分钟
位置: 首页 参数 正文

下面我将详细梳理 xcodebuild 的编译参数,从核心命令到各种常用选项,并提供示例。

核心命令

xcodebuild 的基本语法结构如下:

xcodebuild [-project <project>] [-scheme <scheme>] [-target <target>] ... [action]

一个典型的构建命令会包含以下几个部分:

  1. 指定项目/工作区:告诉 xcodebuild 要构建哪个 Xcode 项目或工作区。
  2. 指定构建目标:明确要构建哪个 Scheme 或 Target。
  3. 指定操作:要执行什么操作,build (构建), test (测试), archive (归档), analyze (静态分析) 等。
  4. 指定选项:控制构建过程的各种参数,如配置、架构、代码签名等。

指定项目和目标

这些参数用于精确定位你要操作的项目和构建目标。

参数 全称 描述 示例
-project --project 指定一个 .xcodeproj 文件的路径。 xcodebuild -project MyApp.xcodeproj
-workspace --workspace 指定一个 .xcworkspace 文件的路径,当使用 CocoaPods 或 Swift Package Manager 时,通常会使用工作区。 xcodebuild -workspace MyApp.xcworkspace
-scheme --scheme (非常重要) 指定要构建的 Scheme 名称,Scheme 是构建、运行、测试等操作的集合。 xcodebuild -scheme MyApp
-target --target 指定要构建的 Target 名称,当 Scheme 不适用或只想构建特定模块时使用。 xcodebuild -target MyFramework
-configuration --configuration 指定构建的配置,通常是 DebugRelease xcodebuild -configuration Release
-alltargets --alltargets 构建项目中的所有 Target。 xcodebuild -alltargets

指定构建操作

这是 xcodebuild 命令的核心,告诉它要做什么。

操作 描述
build 构建指定的 Scheme 或 Target,这是最常见的操作。
test 运行与 Scheme 关联的测试用例。
analyze 对代码进行静态分析,寻找潜在的内存泄漏等问题。
archive 归档应用,通常用于生成用于提交到 App Store 的 .xcarchive 文件。
clean 清理项目的构建产物(如 DerivedData),确保下一次构建是干净的。
install 构建并安装到连接的 iOS 设备或模拟器上。
exportArchive 将一个 .xcarchive 文件导出为 .ipa 或其他分发格式,通常与 -archivePath-exportPath 配合使用。

核心编译与链接参数

这些参数直接控制编译器和链接器的行为,是自定义构建过程的关键。

参数 描述 示例
-sdk 指定 SDK。iphoneos (设备), iphonesimulator (模拟器), macosx xcodebuild -sdk iphonesimulator
-arch 指定目标架构,可以指定多个,用空格隔开。 xcodebuild -arch arm64 x86_64
-ONLY_ACTIVE_ARCH YESNO,设置为 NO 会为所有指定的架构进行编译,对验证通用二进制文件很有用,默认为 YES xcodebuild -ONLY_ACTIVE_ARCH=NO
-enableBitcode YESNO,是否启用 Bitcode,App Store 已不再要求,但某些分发平台可能需要。 xcodebuild -enableBitcode=YES
-VALID_ARCHS 设置一个有效的架构列表。xcodebuild 只会编译这些架构。 xcodebuild -VALID_ARCHS="arm64 x86_64"
-OTHER_CFLAGS 传递给 C/C++ 编译器的额外标志,定义宏或开启警告级别。 xcodebuild -OTHER_CFLAGS="-DDEBUG=1 -Werror"
-OTHER_SWIFT_FLAGS 传递给 Swift 编译器的额外标志。 xcodebuild -OTHER_SWIFT_FLAGS="-suppress-warnings"
-OTHER_LDFLAGS 传递给链接器的额外标志,添加自定义的库或框架搜索路径。 xcodebuild -OTHER_LDFLAGS="-framework CustomFramework"
-library-search-paths 指定链接器搜索 .a 静态库的路径。 xcodebuild -library-search-paths="$(inherited) /path/to/libs"
-header-search-paths 指定 C/C++/Objective-C 编译器搜索头文件的路径。 xcodebuild -header-search-paths="$(inherited) /path/to/headers"

代码签名与打包参数

这些参数在准备发布应用时至关重要。

参数 描述 示例
-codeSignIdentity 指定代码签名的身份,"iPhone Distribution: Company Name (XXXXXXXXXX)" 或 "Apple Development"。 xcodebuild -codeSignIdentity "iPhone Distribution: My Company"
-provisioningProfile 指定 Provisioning Profile 的 UUID,在 Xcode 11 之后,推荐使用 PROVISIONING_PROFILE_SPECIFIER xcodebuild -provisioningProfile "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
-PROVISIONING_PROFILE_SPECIFIER (推荐) 指定 Provisioning Profile 的名称,更易于记忆和管理。 xcodebuild -PROVISIONING_PROFILE_SPECIFIER "My App Ad Hoc"
-exportOptionsPlist 在执行 exportArchive 时,指定一个 .plist 文件来定义导出选项(如方法、团队 ID 等),这是现代标准做法。 xcodebuild -exportOptionsPlist ExportOptions.plist
-allowProvisioningUpdates YESNO,在构建时是否允许 Xcode 自动更新 Provisioning Profile。 xcodebuild -allowProvisioningUpdates=YES

输出与日志参数

参数 描述 示例
-derivedDataPath 指定 DerivedData 的输出路径,默认在 ~/Library/Developer/Xcode/DerivedData xcodebuild -derivedDataPath /path/to/my/build
-archivePath 指定 archive 操作输出的 .xcarchive 文件路径。 xcodebuild -archivePath MyApp.xcarchive
-exportPath 指定 exportArchive 操作输出的 .ipa 文件目录。 xcodebuild -exportPath /path/to/ipa
-exportPath 指定 exportArchive 操作输出的 .ipa 文件目录。 xcodebuild -exportPath /path/to/ipa
-quiet 静默模式,只输出错误信息。 xcodebuild -quiet
-verbose 详细模式,打印出所有执行的命令和参数,对调试构建问题非常有用。 xcodebuild -verbose

综合示例

示例 1:基本构建(Debug,模拟器)

# 构建名为 "MyApp" 的 Scheme,配置为 Debug,目标为 iOS 模拟器
xcodebuild -workspace MyApp.xcworkspace -scheme MyApp -configuration Debug -sdk iphonesimulator build

示例 2:为所有架构构建并打包(用于 Ad Hoc 分发)

这个脚本会为 arm64x86_64 架构分别构建,然后链接成一个通用二进制文件,并打包成 .ipa

#!/bin/bash
# 定义变量
SCHEME="MyApp"
CONFIGURATION="Release"
WORKSPACE="MyApp.xcworkspace"
ARCHIVE_PATH="build/MyApp.xcarchive"
EXPORT_PATH="build/IPA"
EXPORT_OPTIONS_PLIST="ExportOptions-AdHoc.plist" # 这个plist文件需要提前准备好
# 清理旧构建
xcodebuild -workspace "$WORKSPACE" -scheme "$SCHEME" clean
# 归档(xcodebuild会自动处理多架构)
xcodebuild archive \
  -workspace "$WORKSPACE" \
  -scheme "$SCHEME" \
  -configuration "$CONFIGURATION" \
  -archivePath "$ARCHIVE_PATH" \
  -allowProvisioningUpdates
# 检查归档是否成功
if [ $? -ne 0 ]; then
  echo "Archive failed"
  exit 1
fi
# 导出 IPA
xcodebuild -exportArchive \
  -archivePath "$ARCHIVE_PATH" \
  -exportPath "$EXPORT_PATH" \
  -exportOptionsPlist "$EXPORT_OPTIONS_PLIST"
# 检查导出是否成功
if [ $? -ne 0 ]; then
  echo "Export failed"
  exit 1
fi
echo "Build and export successful! IPA is at $EXPORT_PATH"

示例 3:在 CI 环境中构建并运行测试

# 在 CI 中,通常需要设置 CODE_SIGN_IDENTITY 和 PROVISIONING_PROFILE_SPECIFIER 为 "-"
# 表示禁用代码签名,因为 CI 服务器没有有效的证书和描述文件。
xcodebuild test \
  -project MyApp.xcodeproj \
  -scheme MyApp \
  -destination 'platform=iOS Simulator,name=iPhone 14 Pro,OS=latest' \
  -enableCodeCoverage YES \
  -codeSignIdentity "-" \
  -PROVISIONING_PROFILE_SPECIFIER "-"

掌握 xcodebuild 的关键在于理解其分层结构:

  1. 定位:用 -workspace/-project-scheme/-target 找到你要构建的东西。
  2. 行动:用 build, test, archive 等命令告诉它要做什么。
  3. 定制:用 -sdk, -arch, -configuration 等参数控制构建环境和类型。
  4. 发布:用 -codeSignIdentity, -exportOptionsPlist 等参数处理签名和打包。

对于复杂的构建,建议从 Xcode 的 Product -> Scheme -> Edit Scheme 菜单中查看当前 Scheme 的配置,这能帮助你理解 xcodebuild 在后台执行的具体操作。

-- 展开阅读全文 --
头像
乐心mambo watch参数有哪些?
« 上一篇 今天
索尼Xperiaxzs配置参数
下一篇 » 56分钟前

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]