Благодаря Catalyst , наконец, можно портировать приложения на Mac. Проблема в том, что многие модули не поддерживают AppKit. Наиболее распространенным был бы Crashlytics / Firebase.
In [...]/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics(CLSInternalReport.o), building for Mac Catalyst, but linking in object file built for iOS Simulator, file '[...]/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics' for architecture x86_64
Поскольку это недавняя тема, я не смог найти документ о том, как удалить модуль из моей сборки для macOS, но сохранил его для iOS и iPadO S.
Можно использовать в коде:
#if !targetEnvironment(macCatalyst)
// Code to exclude for your macOS app
#endif
Но это одна часть проблемы, другая часть состоит в том, чтобы связать модуль только для iOS ...
Какой будет самый простой / лучший способ действий, когда библиотека не является жизненно важной для macOS, но все еще требуется для iOS?
if target.name.start_with?("Pods")
чтобы поймать все цели Pod.if [[ ${IS_MACCATALYST} != "YES" ]]; then "${PODS_ROOT}/Fabric/run" fi
Откройте файл Pods- $ projectname.release.xcconfig в каталоге Pods вашего проекта и найдите строку OTHER_LDFLAGS. Добавьте
[sdk=iphone*]
сразу после имени переменной (как пример, мой теперь выглядит так):Это условно устанавливает параметры ссылки только при создании вариантов iphone, предотвращая соединение модуля в OSX. Конечно, как вы упоминаете, это должно сочетаться с кодом, вызывающим модуль,
#if !targetEnvironment(macCatalyst)
и#endif
окружать его, иначе вы получите ошибки компоновщика.Это позволило мне преодолеть ту же проблему. (И если вам интересно, какие еще интересные вещи помимо условных переменных вы можете добавить в свои файлы .xcconfig, вот ссылка, которую я нашел: https://pewpewthespells.com/blog/xcconfig_guide.html )
источник
pod install
. Я бы порекомендовал прочитать ответ Фернандо Мойи де Ривас за лучшую альтернативуС cocoapods 1.8.4 мне пришлось адаптировать отличный ответ @ AncAinu следующим образом:
источник
[]
У меня есть обновленное решение, которое работает для меня со следующими модулями Google:
источник
ld: in /Users/<name>/source/<app>/Pods/Fabric/iOS/Fabric.framework/Fabric(Fabric.o), building for Mac Catalyst, but linking in object file built for iOS Simulator, for architecture x86_64
я использую именно то, что у вас выше, минусGoogleMobileAds
иGoogle-Mobile-Ads-SDK
. Почему я это получаю?Чтобы лучше подходить к работе с неподдерживаемым фреймворком для Catalyst, вы, ребята, должны прочитать решение Фернандо Мойя де Ри .
Он в основном сказал , что просто нужно определить массив всех LIBS вы не хотите , чтобы установить на Mac OSX, как это:
['Fabric', 'Crashlytics', 'Firebase/Core', ...]
.Тогда ваш файл pod может выглядеть так:
источник