将pod与静态框架连接到另一个pod作为podspec

时间:2018-04-12 08:38:08

标签: ios objective-c swift google-maps cocoapods

我有一个框架,我作为pod连接到我的项目。 我需要在框架中连接Google地图。我试图在podspec文件中创建它:

s.dependency 'GoogleMaps'
s.dependency 'GooglePlaces'

但是我在pod install期间发现错误,“目标具有包含静态二进制文件的传递依赖项”。

我尝试将此代码添加到podfile

pre_install do |installer|
    def installer.verify_no_static_framework_transitive_dependencies; end
end

但它似乎不起作用。

我还尝试将GoogleMaps.frameworkGoogleMapsCore.frameworkGooglePlaces.framework复制到我的框架中并将其连接起来:

s.vendored_frameworks = "MyFrameworkFolder/GoogleMaps/*.framework"

但在编译包含pod的项目时遇到错误:无法构建Objective-C模块'MyFramework'

我尝试使用

在post install hook中修复它
  if target.name.start_with?('MyFramework')
      config.build_settings["OTHER_LDFLAGS"] = '$(inherited) "-ObjC"'

但没有效果。

有没有人有解决这类问题的经验?

2 个答案:

答案 0 :(得分:2)

在使用Firebase依赖项时遇到了类似的问题,但是我不确定我找到的解决方案是否也会应用你的问题,所以pelase,请带上一粒盐。

尝试在podspecs中添加这些行:

spec.pod_target_xcconfig = {
    "OTHER_LDFLAGS" => '$(inherited) -framework "GoogleMaps" -framework "GooglePlaces",
    "CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES" => 'YES',
    "FRAMEWORK_SEARCH_PATHS" => '$(inherited) "${PODS_ROOT}/GoogleMaps/Frameworks" "${PODS_ROOT}/GooglePlaces/Frameworks",
  }

希望有所帮助

答案 1 :(得分:2)

CocoaPods 1.4.0添加了静态框架podspec属性,该属性指示CocoaPods构建静态框架而不是动态框架以依赖静态vendored_frameworks。

s.static_framework = true添加到您的podspec。

CocoaPods 1.4.0 announcement blog中的更多内容。