声明 Podspec 依赖于 objc 库

Xav*_*Gil 7 xcode frameworks ios cocoapods

我正在开发一个 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'
Run Code Online (Sandbox Code Playgroud)

从我在不同帖子中读到的,我认为我在这里做的是:

  1. 首先声明一个static_framework能够使用静态库NewRelic。
  2. 设置 NewRelic 依赖项。
  3. 设置标头路径以查找 NewRelic 标头并按照此处的说明定位模块映射

这是我的MyFrame.modulemap

framework module LGResources {
    umbrella header "MyFrameFramework.h"

    export *
    module * { export * }
}
Run Code Online (Sandbox Code Playgroud)

而这个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>
Run Code Online (Sandbox Code Playgroud)

在我的框架类中,我尝试使用 NewRelic 但它不起作用

在此处输入图片说明

我开始放弃,因为我发现CocoaPod 规范中有如此多的引用令人困惑:module_map, frameworks, vendored_frameworks, dependency, preserve_paths, ...

有人可以指出我正确的方向吗?如何声明静态依赖项并在我的框架中使用它?

提前谢谢了!

PS:我真的不知道应该把MyFrameFramework.hCocoaPods 管理的文件放在哪里,因为我尝试了不同的手动方法但没有运气。

Pau*_*ien 4

可能还有其他问题,但其中一个问题是 NewRelicAgent.framework 缺少模块映射。

静态框架可以有其他静态框架或静态venred_frameworks作为依赖项。静态库是不够的。捆绑到框架中的模块映射对于告诉构建系统如何从 Swift 或 Objective C 模块访问其公共方法是必要的。

NewRelicAgent podspec指定了vendored_framework,但zip缺少模块映射。

也许可以想出一个解决方法,但最好的解决方案是说服 NewRelicAgent Pod 维护者更新 Pod。