XcodeBuild

XcodeBuild 构建助手是 Xcode 命令行调用的一个封装。它将抽象诸如 xcodebuild -project app.xcodeproj -configuration <config> -arch <arch> ... 这样的调用。

XcodeBuild 助手可以这样使用:

from conan import conanfile
from conan.tools.apple import XcodeBuild

class App(ConanFile):
    settings = "os", "arch", "compiler", "build_type"

    def build(self):
        xcodebuild = XcodeBuild(self)
        xcodebuild.build("app.xcodeproj")

参考

class XcodeBuild(conanfile)
__init__(conanfile)
XcodeBuild.build(xcodeproj, target=None, configuration=None, cli_args=None)

调用 xcodebuild 来构建一个 Xcode 项目。

参数:
  • xcodeproj – 要构建的 _xcodeproj_ 文件。

  • target – 要构建的目标。如果此参数传递给 build() 方法,它将向构建系统调用添加 -target 参数。如果未传递,它将构建所有目标,转而传递 -alltargets 参数。

  • configuration – 要使用的构建配置(例如,DebugRelease)。默认为配方的 settings.build_type

  • cli_args – 要直接传递给 xcodebuild 的额外选项(字符串列表)。示例:["-xcconfig", "<path/to/file.xcconfig>"] 或自定义 Xcode 构建设置,如 ["BUILD_LIBRARY_FOR_DISTRIBUTION=YES"]

返回:

启动的 xcodebuild 命令的返回码。

XcodeBuild.build() 方法在内部实现了一个类似以下的 xcodebuild 调用:

$ xcodebuild -project app.xcodeproj -configuration <configuration> -arch <architecture> <sdk> <verbosity> -target <target>/-alltargets *_DEPLOYMENT_TARGET=settings.os.version <cli_args>

其中

  • configuration 是配置,通常是 _Release_ 或 _Debug_,除非通过 configuration 参数显式传递,否则将从 settings.build_type 获取。

  • architecture 是构建架构,从 settings.arch 映射到 Apple 定义的常见架构,如 ‘i386’、‘x86_64’、‘armv7’、‘arm64’ 等。

  • sdk 是根据 os.sdkos.sdk_version 的值设置的,定义了相应的 SDKROOT Xcode 构建设置。例如,设置 os.sdk=iOSos.sdk_version=8.3` 将把 SDKROOT=iOS8.3 传递给构建系统。如果您在 **[conf]** 中定义了 tools.apple:sdk_path,该值将优先,并直接传递 SDKROOT=<tools.apple:sdk_path>,因此 **请注意**,对于这种情况,位于该路径的 SDK 应该设置您的 os.sdkos.sdk_version 设置值。

  • verbosity 是构建的详细程度级别,如果通过您 **[conf]** 中的 tools.build:verbosity 设置,则可以取值为 ‘verbose’ 或 ‘quiet’。

  • cli_args 是通过 cli_args 参数传递的附加命令行参数。这些参数可以包括自定义构建设置,例如 BUILD_LIBRARY_FOR_DISTRIBUTION=YES。您还可以通过传递 SYMROOTOBJROOT 设置来将构建构件重定向到 Conan 构建文件夹。

    def build(self):
      xcodebuild = XcodeBuild(self)
      xcodebuild.build("app.xcodeproj", cli_args=[f"SYMROOT={self.build_folder}",
                                                  f"OBJROOT={self.build_folder}"])
    

传递给 xcodebuild 的附加参数(但在 cli_args 之前)。

  • 根据配置文件中的 osos.version 值设置的部署目标,例如 MACOSX_DEPLOYMENT_TARGET=10.15IPHONEOS_DEPLOYMENT_TARGET=15.0

conf

  • tools.build:verbosity(或回退的 tools.compilation:verbosity),它接受 quietverbose,并为 XcodeBuild.install() 设置 -verbose-quiet 标志。

  • tools.apple:sdk_path SDK 位置的路径,将优先设置 SDKROOT 值,而不是从 os.sdkos.sdk_version 设置组合值。