ios 如何在CocoaPod依赖其他Pod时为它创建XCFramework

7d7tgy0s  于 2023-01-14  发布在  iOS
关注(0)|答案(1)|浏览(360)

我正在寻找创建一个封闭源码的CocoaPod。从我的研究来看,建议似乎是将其作为XCFramework分发。(source)似乎也可以通过在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
/Users/.../AppName/MyFramework/Helpers/Extensions.swift:10:8: error: no such module 'Kingfisher'
import Kingfisher
       ^

** ARCHIVE FAILED **
9gm1akwq

9gm1akwq1#

为了解决这个问题,我为框架项目创建了一个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

据我所知,当您创建XCFramework时,依赖项不会被包括在内,它将只是您自己的框架。但是,依赖项必须是可访问的,以便成功地构建归档。
这种理解解决了我在问这个问题时的困惑。现在我可以继续为我的XCFramework创建CocoaPod并在Podspec文件中指定它的依赖项。

相关问题