我正在开发一个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。 这是我的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
中有如此多的引用令人困惑, 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管理,我已经尝试了不同的手动方法而没有运气。
答案 0 :(得分:3)
可能还有其他问题,但有一个问题是NewRelicAgent.framework缺少模块图。
静态框架可以将其他静态框架或静态vendored_frameworks作为依赖项。静态库是不够的。捆绑到框架中的模块映射是告诉构建系统如何从Swift或Objective C模块访问其公共方法所必需的。
NewRelicAgent podspec指定了vendored_framework,但zip缺少模块地图。
有可能提出一种解决方法,但最好的解决方案是说服NewRelicAgent pod维护者更新pod。