#ios #swift #cocoapods #crashlytics
#iOS #swift #cocoapods #crashlytics
Вопрос:
Я пишу приложение для 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:
Я получал те же предупреждения, которые вы видите, и мне потребовалось некоторое время, чтобы найти исправление. Оказывается, это происходит, когда у вас есть зависимость, которая поставляется предварительно скомпилированной, например, 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
Комментарии:
1. Если я это сделаю, то получу ошибки компиляции «Нет такого модуля» в моем проекте myapp-model, поскольку он вызывает Crashlytics.
2. Ах, я забыл, что перенес весь код Crashlytics в AppDelegate, который находится снаружи
FrameworkTarget
. Если вы не можете этого сделать, вам, возможно, придется смириться с этими предупреждениями.