我正在使用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
答案 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
位置。