使用 Swift Package Manager 构建 iOS 项目

此项目演示了使用 Swift Package Manager (SPM) 管理 iOS 项目依赖项的可行方法。 它已使用 Xcode 9.1、Swift 4 和 SPM v4 描述格式进行测试。

注意:目前,SPM 中官方尚不支持 iOS 目标或相关的系统库

开始使用

  1. 安装 xcodeproj ruby 库:sudo gem install xcodeproj

  2. 在项目根目录中运行 ruby generate-project-dependencies.rb。 这将拉取在 Package.swift 中定义的依赖项,然后生成并修改一个 *Dependencies* 项目,该项目随后作为子项目包含在示例项目中。

  3. 在 Xcode 中打开 SwiftPackagesWithiOS.xcodeproj

  4. 构建主目标(你可能需要手动构建 *Dependencies* 子项目的目标)。

这将构建一个简单的应用程序,该应用程序依赖于 RxSwift。 选择 RxSwift 是因为它展示了如何处理从 Objective-C 生成的模块。

最终结果将是一个标准的 iOS 应用程序,每个依赖项的静态框架都嵌入在 bundle 中。

如果愿意,你可以动态链接依赖项,方法是从 generate-project-dependencies.rb 中删除 config.build_settings['MACH_O_TYPE'] = 'staticlib' 行。 如果你这样做,你需要 将依赖项嵌入到你的主应用程序目标中

你可以逐步浏览提交记录以查看采取了哪些步骤,以下是该过程的简要概述。

流程

(此过程尚未在 Xcode 8.3 和 Swift 3.1 中进行测试)

  1. 使用 Xcode 生成 iOS App 项目
  2. 为依赖项生成 swift 包
  3. 为依赖项创建虚拟源文件(我选择将其放在 .deps-sources 中,但并非必须隐藏)
  4. 修改生成的 xcodeproj 中的构建设置(这是在 generate-project-dependencies.rb 中完成的)
  5. 将 Dependencies.xcodeproj 作为主应用程序 xcodeproj 的子项目添加
  6. 在 Package.swift 中添加依赖项(在此示例中为 RxSwift)
  7. 将我们的应用程序与新的 Rx*.frameworks 链接
  8. 编写一些示例代码以验证导入是否有效
  9. 覆盖非 Swift 模块的 MODULEMAP_FILE 设置