CocoaPods - дублирующие символы, когда приложение и фреймворк имеют общую зависимость - PullRequest
1 голос
/ 03 апреля 2019

Я пишу приложение для iOS, используя CocoaPods 1.6.0 в качестве менеджера зависимостей.Мой проект состоит из проекта приложения для iOS (myapp-ui), а также 3 проектов iOS Framework (myapp-common, myapp-model и myapp-editor).Я также использую Fabric.io для отчетов о сбоях и показателей приложений.В моих проектах myapp-ui и myapp-model используются платформы Fabric и Crashlytics.Мой файл Pods выглядит следующим образом:

platform :ios, '11.0'
workspace 'MyApp.xcworkspace'

project 'myapp-ui/myapp-ui.xcodeproj'
project 'myapp-common/myapp-common.xcodeproj'
project 'myapp-model/myapp-model.xcodeproj'
project 'myapp-editor/myapp-editor.xcodeproj'

target 'myapp-ui' do
  use_frameworks!

  project 'myapp-ui/myapp-ui.xcodeproj'

  # Pods for myapp-ui
  pod 'SwiftyBeaver'
  pod 'SwifterSwift'
  pod 'Fabric'
  pod 'Crashlytics'
  pod 'KeychainSwift', '~> 13.0'

  target 'myapp-uiTests' do
    inherit! :search_paths
    # Pods for testing
  end

end

target 'myapp-common' do
  use_frameworks!

  project 'myapp-common/myapp-common.xcodeproj'

  # Pods for myapp-common
  pod 'SwiftyBeaver'
  pod 'SwifterSwift'
  pod 'KeychainSwift', '~> 13.0'

end

target 'myapp-model' do
  use_frameworks!

  project 'myapp-model/myapp-model.xcodeproj'

  # Pods for myapp-model
  pod 'SwiftyBeaver'
  pod 'SwifterSwift'
  pod 'Fabric'
  pod 'Crashlytics'

end

target 'myapp-editor' do
  use_frameworks!

  project 'myapp-editor/myapp-editor.xcodeproj'

  # Pods for myapp-editor

end

Модули устанавливаются просто отлично, и мое приложение собирается без проблем.Однако, когда я запускаю его, я вижу большое количество ошибок в консоли, которые выглядят примерно так:

objc[62607]: Class CLSInternalReport is implemented in both <SOME LOCATION>/Build/Products/Debug-iphonesimulator/myapp_model.framework/myapp_model (0x11252f960) and <SOME OTHER LOCATION>/myapp-ui.app/myapp-ui (0x10f2831e8). One of the two will be used. Which one is undefined.
objc[62607]: Class Crashlytics is implemented in both <SOME LOCATION>/Products/Debug-iphonesimulator/myapp_model.framework/myapp_model (0x11252f9b0) and <SOME OTHER LOCATION>/myapp-ui.app/myapp-ui (0x10f283238). One of the two will be used. Which one is undefined.
objc[62607]: Class CLSFileManager is implemented in both <SOME LOCATION>/Build/Products/Debug-iphonesimulator/myapp_model.framework/myapp_model (0x11252fa00) and <SOME OTHER LOCATION>/myapp-ui.app/myapp-ui (0x10f283288). One of the two will be used. Which one is undefined.
objc[62607]: Class CLSAlert is implemented in both <SOME LOCATION>/Build/Products/Debug-iphonesimulator/myapp_model.framework/myapp_model (0x11252fa78) and <SOME OTHER LOCATION>/myapp-ui.app/myapp-ui (0x10f283300). One of the two will be used. Which one is undefined.

Есть ли способ устранения этих предупреждений?Я пытался удалить их из myapp-ui, думая, что myapp-ui использует myapp-model (и поэтому будет наследовать зависимость), но это не сработало.Я в недоумении, как решить эту проблему.Мысли

1 Ответ

1 голос
/ 03 апреля 2019

Я получал те же предупреждения, что вы видели, и мне потребовалось некоторое время, чтобы найти исправление. Оказывается, это происходит, когда у вас есть предварительно скомпилированная зависимость, такая как Fabric и Crashlytics. Я думаю, это потому, что они копируются дважды.

Что я сделал, так это добавил эти модули только к цели приложения. Мой Podfile в итоге выглядел примерно так

def pods
    pod 'CGMath'
    ...
end

def app
    pod 'Crashlytics'
    pod 'Fabric'
end

target 'FrameworkTarget' do
    pods
end

target 'AppTarget' do
    pods
    app
end
...