本地 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
我正在编写一个 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