当它依赖于其他 pods 时如何为闭源 CocoaPod 创建 XCFramework
How to create XCFramework for closed source CocoaPod when it has dependencies on other pods
我想创建一个闭源 CocoaPod。根据我的研究,建议似乎是将其作为 XCFramework 分发。 (source) It seems it should also be possible to make your framework dependent upon other CocoaPods by specifying them in your Podspec file. () () 这将确保当有人将此 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
/Users/.../AppName/MyFramework/Helpers/Extensions.swift:10:8: error: no such module 'Kingfisher'
import Kingfisher
^
** ARCHIVE FAILED **
为了解决这个问题,我所做的是为框架项目和 运行 pod install
创建一个 Podfile,因此它有自己的工作区。打开该工作区时,我验证了我能够在 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
据我了解,当您创建 XCFramework 时,不会包含依赖项,它只会包含您自己的框架。但是依赖项必须是可访问的才能成功构建存档。所以这个理解解决了我问这个问题时的困惑。现在我可以继续为我的 XCFramework 创建一个 CocoaPod 并在 Podspec 文件中指定它的依赖项。
我想创建一个闭源 CocoaPod。根据我的研究,建议似乎是将其作为 XCFramework 分发。 (source) It seems it should also be possible to make your framework dependent upon other CocoaPods by specifying them in your Podspec file. (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
/Users/.../AppName/MyFramework/Helpers/Extensions.swift:10:8: error: no such module 'Kingfisher'
import Kingfisher
^
** ARCHIVE FAILED **
为了解决这个问题,我所做的是为框架项目和 运行 pod install
创建一个 Podfile,因此它有自己的工作区。打开该工作区时,我验证了我能够在 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
据我了解,当您创建 XCFramework 时,不会包含依赖项,它只会包含您自己的框架。但是依赖项必须是可访问的才能成功构建存档。所以这个理解解决了我问这个问题时的困惑。现在我可以继续为我的 XCFramework 创建一个 CocoaPod 并在 Podspec 文件中指定它的依赖项。