【问题标题】:How to Incorporate Swift Package Manager to an Existing Xcode Project?如何将 Swift 包管理器整合到现有的 Xcode 项目中?
【发布时间】:2018-05-02 13:11:53
【问题描述】:

我已经有一个适用于 MacOS 应用程序的 Xcode 项目。不过,我想使用 Swift Package Manager 从 Github 添加一个 Swift 框架。

我在项目文件夹中运行了“swift package init”。然后我更新了 Package.swift 文件。然后我运行“swift package resolve”。

但是,当我尝试构建时,它仍然抱怨没有这样的模块。

由于我已经有一个工作项目,如果我运行“swift package generate-xcodeproj”,它会弄乱文件夹结构并删除故事板。

我如何告诉 Xcode 使用 swift 包管理器下载到项目中的模块?

谢谢!

【问题讨论】:

    标签: swift xcode


    【解决方案1】:

    从 SPM 生成的 Xcode 项目与您应用的 Xcode 项目/工作区不同。

    您应该在另一个目录中生成该 Xcode 项目,例如。 “依赖关系”。

    然后将其拖到您的应用程序中,并添加链接框架。我写了full step-by-step

    【讨论】:

    • 这对我来说效果很好。请注意,在 xcode 中构建的应用程序第一次失败,但第二次成功了(大概它必须再次传递依赖项才能意识到它们在那里)。
    【解决方案2】:

    在撰写本文时(2017 年 12 月),macOS、iOS、tvOS 和 watchOS 不支持 Swift 包管理器。相反,您必须将包中的文件直接添加到您的项目中。

    我建议在您的项目中创建一个Dependencies 组,并在该组下面创建一个具有包名称的组:

    然后将文件添加到组中:

    如果我添加文件夹,我无法让它工作,所以如果你想维护包的结构,你应该将所有文件添加到组中。不过我可能做错了。

    然后,您可以像自己编写代码时一样访问代码。没有进口。

    【讨论】:

      【解决方案3】:

      2019 年实现 Swift Package Manager 和 XCode 集成的步骤:

      1) 创建 Dependencies.swift 文件 /yourproject/Dependencies/Sources/Dependencies.swift

      (empty file)
      

      2) 创建 ma​​cos.xcconfig 文件 /yourproject/Dependencies/Sources/macos.xcconfig

      MACOSX_DEPLOYMENT_TARGET = 10.14
      

      3) 创建 Package.swift 文件 /yourproject/Dependencies/Package.swift

      // swift-tools-version:4.2
      import PackageDescription
      
      let package = Package(
          name: "Dependencies",
          products: [
              .library(name: "Dependencies", type: .static, targets: ["Dependencies"])
          ],
          dependencies: [
              .package(url: "https://github.com/YourDependency/here.git", .upToNextMinor(from: "0.1.0"))
          ],
          targets: [
              .target(name: "Dependencies", dependencies: ["YourDependency"])
          ]
      )
      

      4) 生成 Dependencies.xcodeproj 并拖放到您现有的项目中

      swift package generate-xcodeproj --xcconfig-overrides Sources/macos.xcconfig
      

      5) 导入您的依赖项

      import YourDependency
      

      这足以让它工作,但您可以通过一些额外的步骤让您的生活更轻松。

      其他(可选)步骤:

      6) 创建 ios.xcconfig 文件 /yourproject/Dependencies/Sources/ios.xcconfig

      SDKROOT = iphoneos
      SUPPORTED_PLATFORMS = iphonesimulator iphoneos
      IPHONEOS_DEPLOYMENT_TARGET = 10.0
      
      ARCHS = $(ARCHS_STANDARD)
      VALID_ARCHS = $(ARCHS_STANDARD)
      
      VALIDATE_PRODUCT = YES
      LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks
      TARGETED_DEVICE_FAMILY = 1, 2
      

      7) 将预构建操作添加到主项目的 iOS 和 macOS 方案

      iOS

      echo "Building SPM Dependencies"
      BASE_DIR="${PROJECT_DIR}/Dependencies"
      cd ${BASE_DIR}
      
      rm -fr Dependencies.xcodeproj
      swift package update
      swift package generate-xcodeproj --xcconfig-overrides Sources/ios.xcconfig
      
      sleep 3
      
      until [ -d "Dependencies.xcodeproj" ]
      do
      echo "File not found"
      sleep 0.1
      done
      echo "File found"
      exit
      

      macOS

      echo "Building SPM Dependencies"
      BASE_DIR="${PROJECT_DIR}/Dependencies"
      cd ${BASE_DIR}
      
      rm -fr Dependencies.xcodeproj
      swift package update
      swift package generate-xcodeproj --xcconfig-overrides Sources/macos.xcconfig
      
      sleep 3
      
      until [ -d "Dependencies.xcodeproj" ]
      do
      echo "File not found"
      sleep 0.1
      done
      echo "File found"
      exit
      

      8) 运行您的项目并享受 :)

      【讨论】:

        【解决方案4】:

        这里的所有答案都是真正过时的,所以我决定添加一些现代背景,以防有人像我一样遇到这个问题。

        Apple 对 Xcode 进行了一些非常棒的升级,以原生支持开箱即用的 Swift 包管理器。下图显示了与 git repo 中包含的演示项目合并的本地包(我构建和维护的)。导航到此页面 (3) 并单击 + 按钮 (4) 将打开一个对话框以从 git 存储库添加远程包。这可以通过任何.xcproj 文件来完成。

        Apple 也有很多关于如何自己构建和支持 Swift 包的精彩文档,或者如何incorporate them into your app

        将代码组织到本地包依赖项per the documentation

        Swift 包是一种方便且轻量级的解决方案,可用于创建模块化应用架构并在您的应用中或与其他开发人员重用代码。随着时间的推移,您可能希望与您的应用一起开发已发布的 Swift 包,或者创建一个示例应用来展示其功能。要与应用程序一起开发 Swift 包,您可以利用本地包覆盖具有相同名称的包依赖项的行为:

        1. 将 Swift 包作为包依赖项而不是本地包添加到您的应用中,如 Editing a Package Dependency as a Local Package 中所述。

        2. 协同开发您的应用和 Swift 包,并将更改推送到它们的存储库。

        3. 如果您发布了新版本的 Swift 包或想停止使用本地包,请将其从项目中删除以再次使用包依赖项。

        有关更多最新信息,请参阅 Apple 官方Swift Package Manager Documentation

        很多人喜欢!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-06-13
          • 1970-01-01
          • 1970-01-01
          • 2018-07-27
          • 2020-07-29
          • 2020-09-30
          • 2020-10-20
          • 1970-01-01
          相关资源
          最近更新 更多