我正在开发一个 Swift 框架 (MyFramework),它依赖于用 Objc ( NewRelic) 编写的第三方静态库
我正在使用 CocoaPods 1.4.0 并且我已经这样声明了我的 podspec:
...
s.source_files = 'MyFrame/Classes/**/*'
s.static_framework = true
s.dependency 'NewRelicAgent', '6.1.1' # Obj-c
s.xcconfig = { 'HEADER_SEARCH_PATHS' => '$(PODS_ROOT)/NewRelicAgent/NewRelicAgent/NewRelicAgent.framework/Headers', 'SWIFT_INCLUDE_PATHS' => '$(PODS_TARGET_SRCROOT)/MyFrameFramework' }
s.preserve_paths = 'MyFrameFramework/MyFrame.modulemap'
根据我在不同帖子中阅读的内容,我认为我在这里做的是:
- 首先声明一个
static_framework
以便能够使用静态库NewRelic。 - 设置 NewRelic 依赖项。
- 设置 header 路径以查找 NewRelic header 并按照说明找到模块映射 here
这是我的MyFrame.modulemap
:
framework module LGResources {
umbrella header "MyFrameFramework.h"
export *
module * { export * }
}
还有这个MyFrameFramework.h
:
//! Project version number for LGResources.
FOUNDATION_EXPORT double MyFrameVersionNumber;
//! Project version string for LGResources.
FOUNDATION_EXPORT const unsigned char MyFrameVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <Amplitude/PublicHeader.h>
#import <NewRelicAgent/NewRelic.h>
在我的框架类中,我尝试使用 NewRelic,但它不起作用
我开始放弃了,因为我发现 CocoaPod specs 中有这么多引用资料令人困惑: module_map
, frameworks
, vendored_frameworks
, dependency
, preserve_paths
, ...
有人可以指出我正确的方向吗?如何声明静态依赖项并在我的框架中使用它?
非常感谢!
PS:我真的不知道我应该把 CocoaPods 管理的 MyFrameFramework.h
文件放在哪里,因为我尝试了不同的手动方法,但没有成功。
最佳答案
可能还有其他问题,但一个问题是 NewRelicAgent.framework 缺少模块映射。
静态框架可以有其他静态框架或静态 vendored_frameworks 作为依赖。静态库是不够的。捆绑到框架中的模块映射对于告诉构建系统如何从 Swift 或 Objective C 模块访问其公共(public)方法是必要的。
NewRelicAgent podspec正在指定一个 vendored_framework,但是 zip缺少模块映射。
也许可以想出一个解决方法,但最好的解决方案是说服 NewRelicAgent pod 维护者更新 pod。
关于ios - 声明依赖于 objc 库的 Podspec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49544587/