重叠pod依赖项

时间:2016-07-10 17:51:20

标签: swift firebase cocoapods

我正在使用cocoapods 0.39。我将Cocoa Touch Framework“MyFramework”添加为我的Swift项目的单独目标。该框架使用Firebase作为Cocoapod依赖项。我在应用程序内部使用MyFramework。当我尝试构建应用程序时,我遇到了多个错误:

class … is implemented in both …/MyFramework.framework/MyFramework and …/MyApp.app/MyApp. One of the two will be used. Which one is undefined.

我理解这个错误是什么,但我无法修复它。如果我从MyApp目标中删除Firebase,那么我无法在应用内部使用MyFramework,因为它取决于它。它看起来像是一个常见问题,但不幸的是我无法使其发挥作用。

我的Podfile如下所示:

use_frameworks!

target 'MyApp' do
    pod 'Firebase'
end

target 'MyAppTests' do

end

target 'MyFramework' do
    pod 'Firebase'
end

target 'MyFrameworkTests' do
    pod 'Firebase'
end

1 个答案:

答案 0 :(得分:0)

您要两次关联Firebase。

您可以在Podfile中使用inherit! :search_patchs指令(需要Cocoapods 1.0或更高版本)让MyApp知道依赖关系而不实际链接它们:

use_frameworks!

target 'MyFramework' do
    pod 'Firebase'
    pod 'FirebaseAnalytics'

    target 'MyApp' do
        inherit! :search_paths

    end
end

这要求您在Podfile明确声明依赖,以使其在MyApp目标中可用。例如,添加pod 'Firebase'不会在您的应用中提供using FirebaseAnalytics

您还可以将MyFramework转换为CocoaPod依赖项,并让CocoaPods为您处理依赖项。为此,请为您的框架创建一个Podspec文件,如下所示:

Pod::Spec.new do |s|

# Meta data
s.name         = "MyFramework"
s.version      = "1.0.0"
s.platform     = :ios
s.ios.deployment_target = '8.0'
s.summary      = "-"
s.homepage     = "-"
s.license      = { :type => "MIT" }
s.author       = { "Me" => "-" }
s.platform     = :ios
s.ios.deployment_target = '8.0'
s.source       = { :path => "MyFramework" }

# Source configuration
s.source_files  = "MyFramework/**/*.swift"
s.resources = "MyFramework/**/*.{png,jpeg,jpg,storyboard,xib,strings}"

s.requires_arc = true

# Dependencies

# Firebase for iOS
s.dependency 'Firebase', '~> 3.0'

end

然后,您可以在应用程序MyFramework中向Podfile添加开发依赖项,并删除Firebase依赖项:

target 'MyApp' do
    pod 'MyFramework', :path => '.'
end

如果需要,请将.更新到MyFramework.podspec位置。