在框架中使用Cocoapods

3
我创建了一个使用 CocoaPods 的库(RestKit)的 iOS 框架。 在使用我的框架的应用程序项目中,我还使用 CocoaPods 包含其他库。我不得不将框架中的库包含到项目中,否则项目无法编译。
一切都很正常,但是当我启动应用程序时,我会得到以下信息: 在几个来自库的类中,"Class X is implemented in both /private/var/mobile/Containers/Bundle/Application/[...]/Application.app/Frameworks/Framework.framework/Framework and /private/var/mobile/Containers/Bundle/Application/[...]/Application.app/Application. One of the two will be used. Which one is undefined."。
在 CocoaPods 或构建过程中是否有任何方法可以防止重复使用已经被使用的库?
更多问题的背景如下:
1. 创建了一个 Cocoa Touch Framework 项目。最初只添加了一个 Podfile 文件,它具有 RestKit 作为依赖项。然后我删除了 Podfile 文件并像 @Paula Chavarría 所说的那样添加了一个 podspec 文件。
2. 创建应用程序项目。添加了一个包含其他依赖项和框架依赖项的 Podfile 文件(与 @Paula Chavarría 相同)。在构建应用程序项目时,框架构建失败,因为它找不到正确的头文件。我更改了框架的头文件搜索路径,但这似乎不足以使构建成功。
我需要在框架中也有一个 Podfile 文件吗?正如我在原始问题中所说的那样,我一开始就这样做了,然后最终出现了重复的库,这就是我试图避免的。是否有任何方法可以调整 Podfile 或其生成的配置,并在应用程序中使用头文件和链接库?我错过了什么?...提前感谢您! :)

你不应该将外部库,比如RestKit链接到你的框架中。你的框架需要依赖或要求所有外部依赖项,但不包括它们。任何人如果同时添加RestKit,将会得到重复的符号。 - Andrei Shender
谢谢您的回复@AndreiShender!那么应用程序项目是否应该在自己的Podfile中拥有所有所需的库? - Cat Simoes
1个回答

3

如果您在应用程序项目中使用Cocoapods,您可以为iOS框架创建一个私有pod。为此,您必须创建一个.podspec文件,以添加冲突的依赖项。对于Restkit,.podspec文件如下:

Pod::Spec.new do |s|

 s.name         = "MyFramework"
 ...
 s.dependency 'RestKit', '~> 0.23'

end

你可以在此处了解有关这些文件的更多信息:http://guides.cocoapods.org/making/specs-and-specs-repo.html 之后,您只需在应用程序项目的Podfile中添加一个框架依赖项。您可以通过本地路径或版本控制系统来实现。
pod 'MyFramework', :path => './../my-framework'

pod 'MyFramework', :git => 'https://url/to/my-framework.git', :tag => '0.0.1'

谢谢您的评论。非常有道理!尽管我仍然在构建框架方面遇到问题。它找不到正确的头文件... - Cat Simoes
你能在你的Pods项目中看到所有框架文件吗?在Podspec中,你必须非常具体地指定源文件的路径。例如:s.source_files = "path/to/classes/**/*.{h,m}" - Paula Chavarría
好的,那个确实漏了。我还需要在构建设置中修复头文件搜索路径。感谢帮助! - Cat Simoes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接