本地 CocoaPods 干扰其他 pods

Local CocoaPods interfering with other pods

我正在编写一个 Swift 框架和一个 Swift iOS 应用程序,我正在尝试使用 Cocoapods 将我的框架添加到我的应用程序和其他 sdk 中。

这是我的 swift 框架的 podspec

Pod::Spec.new do |s|
  s.name         = "InfraCocoa"
  s.version      = "0.0.1"
  s.summary      = "A short description of InfraCocoa."
  s.license      = "MIT"
  s.author             = { "" => "" }
  s.platform     = :ios
  s.ios.deployment_target = "7.0 "
  s.source_files  = "Classes", "Classes/**/*.{swift,h,m}"
end

我的 iOS 应用程序的 pod podfile

target 'CocoaProjectTest' do

pod 'InfraCocoa', :path => '~/Documents/workspaces/CocoaPodsTesting/Infra/InfraCocoa'
pod 'CrashlyticsFramework', '2.2.5.2'
pod 'GoogleTagManager', '3.09'
pod 'Google-Mobile-Ads-SDK', '7.0.0'
pod 'Facebook-iOS-SDK', '3.23.0'
pod 'AFNetworking', '2.5.1'

end

现在一开始如果我 运行 'pod install' 或 'pod update' 一切正常。问题是当我尝试构建 Xcode(6.1.1) 时。我收到一个编译错误,说这样的话 “_sqlite3_close”,引用自:

  -[TAGDataLayerPersistentStoreImpl closeDatabase] in libGoogleAnalyticsServices.a(TAGDataLayerPersistentStoreImpl.o)


 (maybe you meant: _fbdfl_sqlite3_close)

经过几次 google 搜索后,我发现这是因为我的 GoogleTagManager 在 'Link Binary With Libraries' 中缺少库 'libz.dylib' 和 'libsqllite3.dylib'。我可以手动添加它们,它会编译,尽管这并不理想。

我决定在我的 podfile 中没有以下行的情况下进行测试,它编译了

pod 'InfraCocoa', :path => '~/Documents/workspaces/CocoaPodsTesting/Infra/InfraCocoa'

我想这可能是因为库版本有冲突,但这个 InfraCocoa 框架是完全干净和空的(做了一个 File-> New-> Project -> CocoaTouch Framework)。

有什么想法吗? (应用程序项目也是空的和干净的)

我认为您可以覆盖 PodFile 中的 GoogleTagManager.podspec 并简单地在文件的修改版本中添加缺少的库。

类似于:

pod 'GoogleTagManager', :podspec => './GoogleTagManager.podspec.json'

并且在 podspec 中:

"libraries": ["GoogleAnalyticsServices", "sqlite3", "z"], 

似乎正在使用 cocoapods 0.36.rc.1