当闭源 CocoaPod 依赖于其他 pod 时,如何为它创建 XCFramework

Jor*_*n H 5 frameworks ios cocoapods xcframework

我正在寻找创建一个闭源 CocoaPod。根据我的研究,建议似乎是将其作为 XCFramework 分发。(来源)似乎还可以通过在 Podspec 文件中指定其他 CocoaPods 来使您的框架依赖于它们。( source ) ( source ) 这将确保当有人将此 pod 添加到其 Podfile 并运行时pod install,它将安装此框架及其依赖项。

我创建了一个框架 Xcode 项目,并在我们应用程序的工作区中将其作为子项目进行开发。所以此时,应用程序已经通过 CocoaPods 安装了所有依赖项,这使得其中的框架可以利用它们。现在我准备好准备分发框架,以便它可以在其他应用程序中使用。

据我了解,我需要先创建一个 XCFramework,然后才能为其创建一个 CocoaPod。当我去归档框架项目时,我收到一个错误,因为它找不到依赖项,这是有道理的。此时我不明白这是如何工作的,因为框架似乎需要包含在其自身中的依赖项才能成功创建 XCFramework,但我从我的研究中预计这将由 CocoaPods 处理,而不包含在框架本身。

xcodebuild archive \
-scheme MyFramework \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath './build/MyFramework.framework-iphoneos.xcarchive' \
SKIP_INSTALL=NO \
BUILD_LIBRARIES_FOR_DISTRIBUTION=YES
Run Code Online (Sandbox Code Playgroud)
/Users/.../AppName/MyFramework/Helpers/Extensions.swift:10:8: error: no such module 'Kingfisher'
import Kingfisher
       ^

** ARCHIVE FAILED **
Run Code Online (Sandbox Code Playgroud)

Jor*_*n H 6

为了解决这个问题,我所做的是为框架项目创建一个 Podfile 并运行,pod install以便它拥有自己的工作区。我验证在打开该工作区时能够在 Xcode 中成功构建框架。然后要创建存档,请指定它应该构建工作区而不是项目,如下所示:

xcodebuild archive \
-workspace MyFramework.xcworkspace \
-scheme MyFramework \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath './build/MyFramework.framework-iphoneos.xcarchive' \
SKIP_INSTALL=NO \
BUILD_LIBRARIES_FOR_DISTRIBUTION=YES
Run Code Online (Sandbox Code Playgroud)

据我了解,当您创建 XCFramework 时,不会包含依赖项,它只是您自己的框架。但是,必须可以访问依赖项才能成功构建存档。

这个理解解决了我提出这个问题时的困惑。现在我可以继续为我的 XCFramework 创建 CocoaPod 并在 Podspec 文件中指定其依赖项。