您如何归档 Swift 包依赖项以包含在您的 XCFramework 中以作为 Swift 包进行二进制分发?

How do you archive Swift Package Dependencies to include in your XCFramework for binary distribution as a Swift Package?

目标是为 Swift 包托管一个 git 存储库,以在 XCFramework 中将专有代码作为二进制文件分发。源代码依赖于其他 Swift 包。在 .package 配置中列出依赖项是不够的。简单地要求消费者导入依赖项不是一种选择,因为他们可能在不同级别使用相同的包。我试图解决的主要问题是当我的 Swift 包导入项目时如何解决这些依赖关系。

  1. 每个依赖包也应该归档并包装到 XCFramework 中,对吗?
  2. 我该怎么做?

我正在使用的包也可以在 CocoaPod 中使用。

  1. 为了存档目的,将它们导入为 pods 会更容易吗?

我浏览了以下资源和 SO 帖子,但找不到针对此特定目的的答案。

几个月前我遇到了同样的问题,但没有找到合适的解决方案,所以我刚开始使用 Cocoapods 进行分发,这个脚本用于归档我的框架目标,它有一些 Cocoapods 作为依赖项:

xcodebuild archive -workspace "../workspace_name.xcworkspace" \
  -scheme %scheme_name% \
  -sdk iphonesimulator \
  -archivePath "./SdkArchives/ios_simulators.xcarchive" \
  BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
  SKIP_INSTALL=NO
  
xcodebuild archive -workspace "../workspace_name.xcworkspace" \
  -scheme %scheme_name% \
  -sdk iphoneos \
  -archivePath "./SdkArchives/ios_devices.xcarchive" \
  BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
  SKIP_INSTALL=NO
  
rm -rf ../DevPods/SDK/framework_name.xcframework
  
xcodebuild -create-xcframework \
-framework ./SdkArchives/ios_devices.xcarchive/Products/Library/Frameworks/framework_name.framework \
-framework ./SdkArchives/ios_simulators.xcarchive/Products/Library/Frameworks/framework_name.framework \
-output ../DevPods/SDK/framework_name.xcframework

rm -rf SdkArchives

你可以简单地将这个 xcframework 打包为一个 pod,在你的 podspeck 中使用以下行:

s.vendored_frameworks = 'framework_name.xcframework'
s.dependency 'framework_name_dependency'

你也可以看看这篇文章,我没试过,但看起来很有希望。 https://kean.blog/post/xcframeworks-caveats

在 Swift 论坛上找到了执行此操作的方法。有人建议使用“虚拟”目标来包装二进制框架。然后您可以在清单中的虚拟目标定义中列出依赖项。

https://forums.swift.org/t/issue-with-third-party-dependencies-inside-a-xcframework-through-spm/41977/2

我将二进制文件托管在一个 zip 文件中,SPM 和 Cocoa Pods 都可以使用它。使用框架二进制文件处理两个包管理器。