ios - 声明依赖于 objc 库的 Podspec

标签 ios xcode frameworks 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'

根据我在不同帖子中阅读的内容,我认为我在这里做的是:

  1. 首先声明一个static_framework 以便能够使用静态库NewRelic。
  2. 设置 NewRelic 依赖项。
  3. 设置 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,但它不起作用

enter image description here

我开始放弃了,因为我发现 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/

相关文章:

ios - 为什么我的 iOS 应用程序启动屏幕在加载时消失然后又重新出现?

ios - 设置 UITabBar 的高度

ios - 如何在 ios 的 nsuserdefaults 中保存相机捕获的图像

java - 为 play 框架生成 eclipse 配置后,play 存储库库让我很难看

c++ - libSDL、CMake 和 Mac OS X Lion

ios - Podfile中link_with的真正含义是什么?

iphone - xcode iphone触摸点画

ios - 如何为工作区设置 Jenkins Xcode 插件?

ios - 使用未解析的标识符 'FIRInstanceIDAPNSTokenTypeSandbox'

php - 在深入研究框架(如 Zend、CakePHP)之前,您是否需要非常了解 PHP?