2016-07-10 4 views
0

Я использую 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. 

Я понимаю, что эта ошибка об этом, но я не могу это исправить. Если я удалю Firebase из целевого объекта MyApp, я не могу использовать 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

Вы ссылаетесь Firebase дважды.

Вы можете использовать inherit! :search_patchs директиву Podfile (требуется 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 

Update . на место MyFramework.podspec, если необходимо.

+0

Спасибо за ответ. На этот раз я не хочу использовать MyFramework как CocoaPod. Не могли бы вы объяснить «post_install hook»? – sash

+0

@sash Явное объявление зависимостей и добавление 'inherit! search_paths' делает заголовки доступными во время компиляции. См. Мое обновление для решения 'Podfile'. – redent84

+0

FYI этот ответ для Cocoapods 1.0.0 и выше. Для 0.39 вы действительно хотите обновить, но если вам нужно остановиться на 0,39, вы хотите использовать 'link_with' –

Смежные вопросы