声明Podspec与objc库

时间:2018-03-28 21:37:21

标签: 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. 设置标题路径以查找NewRelic标题,并按说明here
  4. 找到模块图

    这是我的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_mapframeworksvendored_frameworksdependencypreserve_paths中有如此多的引用令人困惑, MyFrameFramework.h,...

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

    非常感谢提前!

    PS:我真的不知道我应该把 [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(AccountLoginModel viewModel) { if (!ModelState.IsValid) return View(viewModel); var user = _manager.FindByEmail(viewModel.Email); if (user != null) { await SignInAsync(user, viewModel.RememberMe); string uid = user.Id; return RedirectToLocal(viewModel.ReturnUrl); } ModelState.AddModelError("", "Invalid username or password."); return View(viewModel); } 文件放在哪里由CocoaPods管理,我已经尝试了不同的手动方法而没有运气。

1 个答案:

答案 0 :(得分:3)

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

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

NewRelicAgent podspec指定了vendored_framework,但zip缺少模块地图。

有可能提出一种解决方法,但最好的解决方案是说服NewRelicAgent pod维护者更新pod。