SDK Firebase Unity 1.1.1. Unity 5.5.0p4 XCode 8.2.1
Lors de l'utilisation de l'authentification et de la base de données à partir de Firebase, j'obtiens l'erreur suivante lors de la construction du projet dans XCode:
Symboles non définis pour l'architecture arm64:
"_ OBJC_CLASS _ $ _ FIRGoogleAuthProvider", référencé à partir de: objc-class-ref dans libAuth.a (credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)
"_ OBJC_CLASS _ $ _ FIRGitHubAuthProvider", référencé à partir de: objc-class-ref dans libAuth.a (credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)
"_ OBJC_CLASS _ $ _ FIREmailPasswordAuthProvider", référencé à partir de: objc-class-ref dans libAuth.a (credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)
"_ OBJC_CLASS _ $ _ FIRFacebookAuthProvider", référencé à partir de: objc-class-ref dans libAuth.a (credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)
"_ OBJC_CLASS _ $ _ FIRApp", référencé à partir de: objc-class-ref dans libApp.a (app_ios_c76c7d869e568a9b561ea55e25a7dcc0.o)
"_ OBJC_CLASS _ $ _ FIRAuth", référencé à partir de: objc-class-ref dans libAuth.a (auth_ios_3c64a79cf1eb3f06f9309f4d8e91ee94.o)
"_ OBJC_CLASS _ $ _ FIRTwitterAuthProvider", référencé à partir de: objc-class-ref dans libAuth.a (credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)
"_ OBJC_CLASS _ $ _ FIROptions", référencé à partir de: objc-class-ref dans libApp.a (app_ios_c76c7d869e568a9b561ea55e25a7dcc0.o) ld: symbole (s) introuvable (s) pour l'architecture arm64 clang: erreur: la commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation)
Dois-je manquer quelque chose dans XCode? Ou vous avez quelque chose à vérifier dans Unity?
Merci!
J'ai passé quelques jours à essayer de comprendre les erreurs de construction avec Unity Cloud Build par rapport à la construction locale. J'espère que cela peut aider quelqu'un d'autre!
Cela a fonctionné tant que vous avez installé CocoaPods. Une erreur apparaîtra dans la console Unity après la construction pour iOS si CocoaPods n'est pas installé. En dehors de cela, les instructions fournies par Firebase ont bien fonctionné avec Unity 5.6 et Xcode 8.3.
CocoaPods n'est pas disponible sur UCB mais Firebase a une alternative non CocoaPods: https://firebase.google.com/docs/ios/setup#frameworks
Ajouter des cadres manuellement
Les instructions supposent une construction iOS native, mais vous pouvez simplement faire glisser les cadres dont vous avez besoin dans Assets/Plugins/iOS/Firebase au lieu d'un projet Xcode. Unity ajoutera ces frameworks au projet Xcode lors de la construction.
Ajouter un indicateur de l'éditeur de liens
Vous devrez ajouter manuellement -ObjC
Dans d'autres indicateurs de lien. Pour une raison quelconque, il est apparu dans mon projet Xcode local, mais pas lorsque UCB a fait la construction. Créez un script de post-processus un peu comme maros mentionné: https://forum.unity3d.com/threads/problem-building-ios-app-with-cloud-build-using-google-analytics.390803/#post -2549911
Vous devrez ajouter -ObjC
Comme ceci:
proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC");
Si vous n'ajoutez pas cette partie, UCB peut toujours créer une build mais le jeu se bloquera immédiatement après avoir essayé de créer FirebaseAuth car il fera référence à une méthode d'extension/catégorie qui n'a pas été incluse en raison de l'indicateur -ObjC
Manquant.
Ajouter d'autres cadres et bibliothèques requis
Selon les fonctionnalités de Firebase que vous utilisez, vous pouvez avoir besoin de différents frameworks ou bibliothèques supplémentaires. Par exemple, j'avais utilisé FirebaseDatabase et bien que les documents ne l'aient pas mentionné, Xcode s'est plaint d'une erreur de l'éditeur de liens qui m'obligeait à ajouter libicucore.tbd
.
La meilleure façon dont je pouvais penser pour résoudre ce problème était de désinstaller CocoaPods localement, puis de demander à Unity de créer le projet Xcode afin que je puisse obtenir une représentation plus précise de ce que subirait UCB. Cette partie peut nécessiter quelques essais et erreurs ainsi que la recherche sur Google pour déterminer à quel cadre ou bibliothèque l'erreur de l'éditeur de liens fait référence. Essayez simplement de construire le projet Xcode localement et vous obtiendrez les erreurs de l'éditeur de liens le cas échéant.
J'ai ajouté:
List<string> frameworks = new List<string>() {
"AdSupport.framework",
"CoreData.framework",
"SystemConfiguration.framework",
"libz.dylib",
"libsqlite3.dylib",
"libicucore.tbd"
};
Déplacer manuellement GoogleServices-Info.plist
Une autre bizarrerie est que UCB n'a pas déplacé GoogleServices-Info.plist dans le projet Xcode. Il doit y avoir un autre script qui ne s'exécute pas sur UCB qui s'exécute localement. Dans le script de post-traitement dans lequel vous ajoutez l'indicateur de l'éditeur de liens et les frameworks, vous pouvez également déplacer GoogleServices-Info.plist dans le répertoire du projet Xcode, puis l'ajouter au bundle.
Déplacez d'abord le fichier:
if (!File.Exists(path + "/GoogleService-Info.plist"))
{
FileUtil.CopyFileOrDirectory ("GoogleService-Info.plist", path + "/GoogleService-Info.plist");
}
Ajoutez-le ensuite à la build:
string guid = proj.AddFile("GoogleService-Info.plist", "GoogleService-Info.plist");
proj.AddFileToBuild(target, guid);
Et ça devrait être ça. Je mettrai à jour si je rencontre d'autres problèmes à mesure que j'ajoute d'autres fonctionnalités Firebase. Actuellement, j'utilise Auth, Database et Analytics.
Tout d'abord, merci à tous d'avoir partagé votre (dur) travail!
Beaucoup a été dit sur le sujet, mais il m'a fallu beaucoup de temps et beaucoup d'essais et d'erreurs pour rassembler toutes les pièces sur les deux SO & Unity forums, donc je vais juste publier la solution que j'ai finalement trouvée, qui a finalement résolu tous les problèmes pour moi, en utilisant la construction de cloud d'unité/Unity 5.6.0f3/Xcode 8.0, le projet utilisant uniquement le package d'analyse Firebase
private static void ProcessPostBuild (BuildTarget buildTarget, string path)
{
// Only perform these steps for iOS builds
#if UNITY_IOS
Debug.Log ("[UNITY_IOS] ProcessPostBuild - Adding Google Analytics frameworks.");
// Go get pbxproj file
string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
// PBXProject class represents a project build settings file,
// here is how to read that in.
PBXProject proj = new PBXProject ();
proj.ReadFromFile (projPath);
// This is the Xcode target in the generated project
string target = proj.TargetGuidByName("Unity-iPhone");
proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC");
proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-v");
proj.SetBuildProperty(target, "ENABLE_BITCODE", "NO");
if (!File.Exists(path + "/GoogleService-Info.plist"))
{
FileUtil.CopyFileOrDirectory("Assets/GoogleService-Info.plist", path + "/GoogleService-Info.plist");
}
string guid = proj.AddFile("GoogleService-Info.plist", "GoogleService-Info.plist");
proj.AddFileToBuild(target, guid);
// List of frameworks that will be added to project
List<string> frameworks = new List<string>() {
"AddressBook.framework",
"AdSupport.framework",
"CoreData.framework",
"SystemConfiguration.framework",
};
// Add each by name
frameworks.ForEach((framework) => {
proj.AddFrameworkToProject(target, framework, false);
});
// List of frameworks that will be added to project
List<string> usrLibFrameworks = new List<string>() {
"libsqlite3.tbd",
"libz.tbd",
"libicucore.tbd",
};
// Add each by name
usrLibFrameworks.ForEach((framework) => {
proj.AddFileToBuild(target, proj.AddFile("usr/lib/"+ framework, "Frameworks/" + framework, PBXSourceTree.Sdk));
});
// Write PBXProject object back to the file
proj.WriteToFile (projPath);
#endif
}
PS, c'est fou que Firebase Unity SDK nécessite de tels hacks pour fonctionner (UCB est une exigence absolue pour nous et je suppose pour la plupart des développeurs mobiles multiplateformes) et j'espère que toutes ces solutions de contournement seront bientôt inutiles, mais juger que tous ces problèmes sont ici de le début du support officiel de Firebase Unity, je ne compterais pas trop dessus
J'ai eu le même problème, je l'ai juste résolu.
Recherchez le fichier Podfile et ouvrez-le dans un éditeur de texte. retirer
,: integr_targets => false
dans la deuxième ligne, il est dit: installez! "cocoapods"
Ajoutez ensuite une nouvelle ligne après la plateforme: ios ...
use_frameworks!
Ouvrez ensuite un écran de terminal et accédez au répertoire de ce projet. Tapez "pod install" et entrez. Si tout se passe bien, un fichier d'espace de travail est créé et un message apparaît que vous devez ouvrir l'espace de travail dans Xcode à la place du projet. Fermez donc le projet dans xcode et ouvrez le fichier projectname.xcworkspace. Maintenant, Xcode ouvrira l'espace de travail et vous pourrez exécuter le projet. Vous devrez peut-être ajuster votre objectif de déploiement à 8.0. J'espère que cela fonctionne pour toi
J'ai eu le même problème, après avoir passé quelques heures, j'ai eu le problème principal.
C'était la version spécifique définie de la bibliothèque podfile.
target 'Unity-iPhone' do
pod 'Firebase/Auth', '4.10.0'
pod 'Firebase/Core', '4.10.0'
end
Lorsque l'unité construit le podfile du projet iOS, ils définissent leur dernière version de bibliothèque. Mais lorsque depuis xcode/terminal, essayez de mettre à jour la bibliothèque de pods de GIT et que la version spécifique n'est pas disponible, sa mise à jour n'a pas réussi et affiche cette erreur.
La solution est simple, il suffit de ne pas définir la version spécifique. Pod mettra à jour la dernière version du GIT.
target 'Unity-iPhone' do
pod 'Firebase/Auth'
pod 'Firebase/Core'
end
Construction de l'application Unity avec le framework Firebase localement avec Xcode:
Il s'agit de la version du SDK iOS. Cette réponse fait partie de la solution: https://stackoverflow.com/a/41908040/8063631
Travailler sur un environnement Mac.
Lors de la création dans Unity sur iOS. Assurez-vous de vérifier avant: Actifs -> Résolveur iOS -> Paramètres
Construisez sur iOS et ouvrez le fichier .workspace.
Ensuite, allez dans Pods -> Podfile et ajoutez la dernière version (3.7.0), car le 4.0.0 lance cette erreur.
target 'Unity-iPhone' do
pod 'Firebase/Auth'
pod 'Firebase/Core'
end
par (par exemple ...)
target 'Unity-iPhone' do
pod 'Firebase/Auth', '3.7.0'
pod 'Firebase/Core', '3.7.0'
end
Fermez xCode IDE pour éviter les conflits, puis installez Cocoapods si vous ne l'avez pas encore ( https://guides.cocoapods.org/using/getting-started.html ):
Vérifier avec:
pod --version
Installer avec:
Sudo gem install cocoapods
Accédez à votre dossier de projet en exécutant Terminal et tapez:
pod install
Il supprimera la version actuelle et la remplacera par la 3.7.0
Ouvrez xCode et appuyez sur Produit -> Nettoyer et produit -> Créer
j'ai eu ce problème et j'ai été résolu en mettant à jour l'installation des pods d'une manière, en effaçant la copie mise en cache localement et en la réinstallant et une autre façon était de forcer l'installation à provenir d'une source en ligne
il convient de mentionner que le bâtiment à IOS a été réussi
Construction terminée avec le résultat "Réussi"
mais a rencontré une erreur lors de l'installation des modules
sur le terminal mac, changez le répertoire en dossier construit qui doit contenir un Podfile
exécuté ce qui suit
$ pod repo remove master
$ pod install --repo-update
Reconstruire le projet à partir de l'unité devrait installer automatiquement le pods
voir modules Firebase pour plus d'informations
Pour les versions commençant par 5.0.0, la source de chaque version est également déployée sur CocoaPods master et disponible via la syntaxe CocoaPods Podfile standard.
Ces instructions peuvent être utilisées pour accéder au référentiel Firebase dans d'autres branches, balises ou commits.
Voir la référence de syntaxe Podfile pour obtenir des instructions et des options sur la substitution des emplacements de source de pod.
Instructions d'installation étape par étape du module source
Pour iOS, copiez un sous-ensemble des lignes suivantes dans votre Podfile
:
pod 'Firebase' # To enable Firebase module, with `@import Firebase` support pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseAuth', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseDatabase', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseFunctions', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseMessaging', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseStorage', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0'
Pour macOS et tvOS, copiez un sous-ensemble des éléments suivants: pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseAuth', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseDatabase', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseStorage', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0'
1- Assurez-vous d'avoir au moins la version 1.4.0 de CocoaPods - pod --version.
2- Supprimez les modules pour tous les composants dont vous n'avez pas besoin, sauf que FirebaseCore doit toujours être inclus.
3- Mettez à jour les balises vers la dernière version de Firebase. Voir les notes de version
4- Exécutez la mise à jour du pod.
CocoaPods
CocoaPods est un gestionnaire de dépendances pour les projets iOS/macOS. Il est utilisé pour installer des frameworks/bibliothèques externes dans votre projet.
Construction de l'application Unity avec le framework Firebase localement avec Xcode :
Vous devez avoir des cocoapods installés sur votre système: https://guides.cocoapods.org/using/getting-started.html#toc_
Construction de l'application Unity avec le framework Firebase sur Unity Build Cloud:
Pour les utilisateurs qui rencontrent ce problème sur le serveur Unity Build Cloud.
Selon ce fil de discussion du forum: https://forum.unity3d.com/threads/build-failed-cocoapods.421286/ la prise en charge des cocoapods n'est pas prise en charge. (et probablement même pas prévu pour le développement).
Les Cocoapods sont responsables d'avoir toutes les bibliothèques référencées pour la configuration de votre projet iOS dans votre projet Xcode. Comme ils ne sont pas pris en charge sur Unity Build Cloud, vous devez le faire manuellement.
assurez-vous d'avoir installé des cocoapods sur votre système macOS: https://guides.cocoapods.org/using/getting-started.html#toc_
créez votre application Unity localement (ne déclenchez pas la génération sur le cloud). La version exporte un projet Xcode (qui devrait être exécutable). Ce projet Xcode contient des bibliothèques (Frameworks) que vous devez ajouter au projet Unity.
déplacez tous les dossiers * .framework de EXPORTED_XCODE_PROJECT/Frameworks à YOUR_UNITY_PROJECT/Assets/Plugins/iOS par exemple: FirebaseAnalytics.framework = =, FirebaseCore.framework
Firebase nécessite que le framework sqlite iOS soit également inclus dans le projet. Pour cela, utilisez cette solution: https://forum.unity3d.com/threads/problem-building-ios-app-with-cloud-build-using-google-analytics.390803/#post-2549911 = Dans la classe PostBuildProcessor modifiez la méthode ProcessPostBuild,
// ObjC - needed for Firebase proj.AddBuildProperty (target, "OTHER_LDFLAGS", "-ObjC");
List<string> frameworks = new List<string>() { "AdSupport.framework", "CoreData.framework", "SystemConfiguration.framework", "libz.dylib", "libsqlite3.dylib", "libApp.a", "libAnalytics.a" };
Enregistrez le projet Unity et à présent, iOS Unity Build Cloud devrait fonctionner