Przenoszenie aplikacji do systemu Mac jest wreszcie możliwe dzięki Catalyst , problem w tym, że wiele modułów nie obsługuje AppKit. Najpopularniejszym z nich jest 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
Ponieważ jest to najnowszy temat, nie mogłem znaleźć dokumentu na temat usuwania zasobnika z mojej kompilacji dla systemu macOS, ale zachowaj go na iOS i iPadO S.
Możliwe jest użycie w kodzie:
#if !targetEnvironment(macCatalyst)
// Code to exclude for your macOS app
#endif
Ale ta część problemu, druga część to połączenie kapsuły tylko na iOS ...
Jaki byłby najłatwiejszy / najlepszy sposób działania, gdy biblioteka nie jest niezbędna dla macOS, ale nadal jest pożądana na iOS?
if target.name.start_with?("Pods")
aby złapać wszystkie cele kapsuły.if [[ ${IS_MACCATALYST} != "YES" ]]; then "${PODS_ROOT}/Fabric/run" fi
Otwórz plik Pods- $ projectname.release.xcconfig w katalogu Pods projektu i zlokalizuj wiersz OTHER_LDFLAGS. Dodaj
[sdk=iphone*]
bezpośrednio po nazwie zmiennej (na przykład moja wygląda teraz tak):To warunkowo ustawia opcje łącza tylko podczas budowania wariantów iPhone'a, zapobiegając podłączeniu zasobnika w OSX. Oczywiście, jak wspomniałeś, musi to być połączone z kodem wywołującym pod
#if !targetEnvironment(macCatalyst)
i#endif
otaczającym go, inaczej dostaniesz błędy linkera.To pozwoliło mi ominąć ten sam problem. (A jeśli zastanawiasz się, jakie inne fajne rzeczy oprócz zmiennych warunkowych możesz dodać do swoich plików .xcconfig, oto odnośnik, który znalazłem: https://pewpewthespells.com/blog/xcconfig_guide.html )
źródło
pod install
. Poleciłbym przeczytać odpowiedź Fernando Moya de Rivasa na najlepszą alternatywęW przypadku cocoapodów 1.8.4 musiałem dostosować doskonałą odpowiedź @ AncAinu w następujący sposób:
źródło
[]
Mam zaktualizowane rozwiązanie, które działa dla mnie z następującymi zasobnikami Google:
źródło
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
używam dokładnie tego, co masz powyżej minusGoogleMobileAds
iGoogle-Mobile-Ads-SDK
. Dlaczego to dostaję?Aby uzyskać najlepsze podejście do obsługi nieobsługiwanych ramek dla Catalyst, powinieneś przeczytać rozwiązanie Fernando Moya de Ri .
Po prostu powiedział, że musisz zdefiniować tablicę wszystkich bibliotek, których nie chcesz instalować na Mac OSX, w następujący sposób:
['Fabric', 'Crashlytics', 'Firebase/Core', ...]
.Następnie plik pod może wyglądać tak prosto:
źródło