首页 > 解决方案 > 使用 CocoaPod 依赖项发布 Swift 包

问题描述

我正在尝试分发一个依赖于 CocoaPods 的一些库的 Swift 包。最终目标是能够使用 Swift 包管理器将用 React Native 编写的功能导入到原生 iOS 应用程序中。我从一个简单的例子开始,分布式包依赖于 Alamofire 而不是 React Native。

发布包

  1. 创建一个框架来封装要发布的功能。让我们称之为SomeFramework。这个框架依赖于 Cocoapods 的库,假设它依赖于 Alamofire。
  2. 归档 iPhone 和模拟器版本的框架。像这样:
xcodebuild archive \
 -workspace RNFeaturePOC.xcworkspace \
 -scheme SomeFramework \
 -archivePath Archives/SomeFramework-iphoneos.xcarchive \
 -sdk iphoneos \
 BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
 SKIP_INSTALL=NO

对于iphonesimulatorSDK 也是如此。

  1. 将两个档案捆绑成XCFramework这样:
xcodebuild -create-xcframework \
 -framework Archives/SomeFramework-iphonesimulator.xcarchive/Products/Library/Frameworks/SomeFramework.framework \
 -framework Archives/SomeFramework-iphoneos.xcarchive/Products/Library/Frameworks/SomeFramework.framework \
 -output Output/SomeFramework.xcframework
  1. 将包发布为 GitHub 上的 Swift 包,带有包文件:
let package = Package(
    name: "SomeFramework",
    platforms: [
        .iOS(.v13)
    ],
    products: [
        .library(name: "SomeFramework", targets: ["SomeFramework"])
    ],
    dependencies: [
    ],
    targets: [
        .binaryTarget(
            name: "SomeFramework",
            path: "RNFeaturePOC/Output/SomeFramework.xcframework"
        )
    ]
)

导入包

在一个单独的应用程序中,我们称之为 ClientApp,我现在将发布的包添加为 Swift 包。它能够找到、获取和安装包,但是当我将包导入 ClientApp 的源文件时,它给了我以下构建错误: Failed to build module 'SomeFramework' from its module interface; it may have been damaged or it may have triggered a bug in the Swift compiler when it was produced

在我看来,产品XCFramework并不包含它需要构建的所有东西。此外,当直接在另一个应用程序中链接框架时(不使用 Swift 包管理器),我看到了同样的错误。

我对没有任何 CocoaPod 依赖项的包尝试了相同的方法,并且能够一直导入和运行包而没有任何问题。

这是一张图片,可以让您大致了解整个过程: 带有 CocoaPods 依赖项的 Swift 包

标签: iosswiftxcodecocoapodsswift-package-manager

解决方案


推荐阅读