如何在 Xcode 中构建 iOS 框架的发布版本?

How to build a release version of an iOS framework in Xcode?

假设我做了以下事情:

  1. 打开Xcode7
  2. 文件 |新 |项目 | Cocoa 触控框架
  3. 使用 Swift 语言创建 "TestFramework"
  4. 使用 public 创建文件 Hello.swift func hello() { print("Hello") }.

从这里,我可以构建框架的调试版本(在 Debug-iphoneos 文件夹中),但我不知道如何构建框架的发布版本(在 Release-iphoneos 中)。我认为 Archive 可能会这样做,但事实并非如此。请指点一下?

要获取发布版本,您需要更改方案设置:

或者,为发布版本创建一个新方案。

确保您选择了设备。不是模拟器。

构建您的项目,您应该会看到它已添加到此位置: (点击箭头在取景器中导航)

深入了解后,您应该能够找到包含您的发布框架的发布文件夹。

这对我有用:

Select 您的框架目标,然后单击产品 -> 存档。如果组织者 window 在成功构建框架后没有弹出,则转到框架目标的“构建设置”,查找选项“跳过安装”并将其更改为“否”(然后再次存档).

当您将框架添加到其他 Xcode 项目时,您必须将“$(BUILT_PRODUCTS_DIR)”添加到构建设置 -> 框架搜索路径。 这将在您 运行 项目(使用调试)时创建调试,并在您存档项目时创建发布版本。 存档不会在 Products 目录下创建发布版本,但会在 "Intermediates.noindex" 文件夹中创建发布版本。

通过 Xcode IDE 构建框架的替代方法是从命令行构建它。

您可以使用以下命令为 iphoneos 设备生成框架的发布版本:

xcodebuild -workspace TestSDK.xcworkspace -scheme TestSDK -configuration Release -sdk iphoneos

您可以将 -configuration 参数的值从 Release 更改为 Debug 以生成调试版本,或者更改 -sdk 参数的值从 iphoneosiphonesimulator 以便为模拟器设备生成构建。

请注意,如果您的目标只是 Xcode 项目的一部分而不是 Xcode 的一部分,您可能需要提供 -project 参数而不是 -workspace工作区。 运行 xcodebuild -help 命令以获得 xcodebuild 选项的完整列表。

如果您更喜欢归档,也可以从命令行执行此操作,如下所示:

xcodebuild archive -workspace TestSDK.xcworkspace -scheme TestSDK -configuration Release -sdk iphoneos -archivePath "TestSDK_Release_iphoneos.xcarchive" SKIP_INSTALL=NO

请注意,如果您愿意,可以将 SKIP_INSTALL=NO 指定为项目或目标构建设置的一部分。

最后,如果您想将 iphoneosiphonesimulator 构建成一个二进制文件,您可以使用 xcodebuild -create-xcframework 命令执行此操作,如下所示:

xcodebuild -create-xcframework \
    -framework "TestSDK_Release_iphoneos.xcarchive/Products/Library/Frameworks/TestSDK.framework" \
    -framework "TestSDK_Release_iphonesimulator.xcarchive/Products/Library/Frameworks/TestSDK.framework" \
    -output "TestSDK.xcframework"

有关创建 XCFramework 的官方指南,请参阅 here