Le portage d'applications sur mac est enfin possible grâce à Catalyst , le problème est que de nombreux pods ne prennent pas en charge AppKit. Le plus courant serait 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
Puisqu'il s'agit d'un sujet récent, je n'ai pas pu trouver de document sur la façon de supprimer un pod de ma version pour macOS, mais le conserver pour iOS et iPadO S.
Il est possible d'utiliser en code:
#if !targetEnvironment(macCatalyst)
// Code to exclude for your macOS app
#endif
Mais cette partie du problème, l'autre partie est de lier le pod uniquement pour iOS ...
Quelle serait la ligne de conduite la plus simple / la meilleure lorsque la bibliothèque n'est pas vitale pour macOS mais toujours souhaitée sur iOS?
if target.name.start_with?("Pods")
pour attraper toutes les cibles du pod.if [[ ${IS_MACCATALYST} != "YES" ]]; then "${PODS_ROOT}/Fabric/run" fi
Ouvrez votre fichier Pods- $ projectname.release.xcconfig dans le répertoire Pods de votre projet et recherchez la ligne OTHER_LDFLAGS. Ajoutez
[sdk=iphone*]
immédiatement après le nom de la variable (à titre d'exemple, le mien ressemble maintenant à ceci):Cela définit conditionnellement les options de lien uniquement lors de la création de variantes d'iphone, empêchant le pod d'être lié sur OSX. Bien sûr, comme vous le mentionnez, cela doit être combiné avec
#if !targetEnvironment(macCatalyst)
et#endif
entourer le code appelant le pod ou vous obtiendrez des erreurs de l'éditeur de liens.Cela m'a permis de surmonter le même problème. (Et au cas où vous vous demandez quelles autres choses intéressantes en plus des variables conditionnelles que vous pouvez ajouter à vos fichiers .xcconfig, voici une référence que j'ai trouvée: https://pewpewthespells.com/blog/xcconfig_guide.html )
la source
pod install
. Je recommanderais de lire cette réponse de Fernando Moya de Rivas pour la meilleure alternativeAvec les cocoapods 1.8.4, j'ai dû adapter l'excellente réponse de @ AncAinu comme suit:
la source
[]
J'ai une solution mise à jour qui fonctionne pour moi avec les pods Google suivants:
la source
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
j'utilise exactement ce que vous avez ci-dessus moins leGoogleMobileAds
etGoogle-Mobile-Ads-SDK
. Pourquoi est-ce que je reçois ça?Pour la meilleure approche de la gestion des cadres non pris en charge pour Catalyst, vous devriez lire la solution de Fernando Moya de Ri .
Essentiellement , il a dit que vous avez juste besoin de définir un tableau de tous les libs que vous ne souhaitez pas installer sur Mac OS X, comme ceci:
['Fabric', 'Crashlytics', 'Firebase/Core', ...]
.Ensuite, votre fichier pod peut sembler simple comme ceci:
la source