Cocoapods 将框架导入源代码

Posted

技术标签:

【中文标题】Cocoapods 将框架导入源代码【英文标题】:Cocoapods importing a framework to source code 【发布时间】:2013-04-08 07:29:38 【问题描述】:

在我的 ios 版 cocoapod 中,我有一个基本项目:

    开源类(.m 和 .h 文件) MyFramework.framework(.framework 目录、头文件和资源的 .bundle)

其中一个开源类调用import <MyFramework.MyFramework.h>,因此它可以在其实现中使用 MyFramework 的组件。但正因为如此,我无法让 podspec 通过 spec lint 测试 (pod spec lint MyCocoapod.podspec)。当我运行规范 lint 验证时,它说:

ERROR | [iOS] [xcodebuild] .../MyFile.h:54:9: fatal error: 'MyFramework/MyFramework.h' file not found

在调查时,我注意到如果我在 podspec 的 source_files 部分 s.source_files = 'MyFiles.h,m' 中删除该开源类,则 podspec 确实通过了规范 lint 验证。知道为什么我的班级在规范 lint 验证期间无法导入我的自定义框架吗?

podspec 中的相关代码如下所示:

s.preserve_paths      = 'myframework/MyFramework.framework'
s.frameworks          = 'Foundation', 'MyFramework'
s.xcconfig            =  'FRAMEWORK_SEARCH_PATHS' => '$(SRCROOT)/myframework/' 
s.public_header_files = 'MyFramework.framework/Headers/*.h', 'SourceCode/*.h'
s.source_files        = 'SourceCode/*.h,m'  # Crashes here - Source_file imports MyFramework.h. If I take this out, it passes spec lint validation

【问题讨论】:

【参考方案1】:

要包含您可以使用的框架:

s.vendored_frameworks = 'path/to/SomeFramework.framework'

要包含捆绑文件,请执行以下操作:

s.resources ='path/to/SomeBundle.bundle'

【讨论】:

【参考方案2】:

EDIT 这个过程现在完全由vendored_frameworks 选项处理。这将处理保留路径、框架搜索路径和项目链接。

【讨论】:

感谢您的回复。因此,如果我的 cocoapod 只是一个框架,那么它可以工作。但是 pod 也有一些 source_code(.m 和 .h 文件)要分发。在我的 pod 的 source_code (.m) 中,发生了 #import <MyFramework.framework>,这就是 lint 规范验证失败的地方。 是的,根据您的更新,我忘记了 Foo 中的 FRAMEWORK_SEARCH_PATHS。感谢您的提示。 是否有任何有关 vendored_frameworks 的实际文档?这不是文档:guides.cocoapods.org/syntax/podspec.html#vendored_frameworks。比如不知道 vendored_frameworks 会不会自动把我的 pod 编译成一个框架,放在那里? (到目前为止还没有发生......)或者,我应该创建框架然后把它放在那里吗? Cocoapods 文档简洁得令人沮丧…… vendored_frameworks 仅用于发布预编译框架。如果您使用此 pod 发送源文件,则不需要此属性。 我正在使用vendored_frameworks,但问题与 OP 完全相同。有什么建议吗?

以上是关于Cocoapods 将框架导入源代码的主要内容,如果未能解决你的问题,请参考以下文章

创建反应本机库并将CocoaPods添加到该库

将CocoaPods(Swift)导入Xcode项目

iOS 使用cocoapods导入ReactiveCocoa和ReactiveObjC框架

CocoaPods入门到精通

创建通用 Cocoapods 框架

Alamofire 使用 CocoaPods 和 xcode 6.3