Beschreiben Sie hier Ihre Entwicklungsumgebung und geben Sie so viele Details wie möglich an. Wenn Sie sie haben, stellen Sie sicher, dass Sie Folgendes angeben:
2020.1.0f1
8.1.1
Erstellen Sie reibungslos ein Projekt aus Unity und bauen und führen Sie es aus Xcode aus.
Ich verwende Firebase SDKs in meinem Projekt. Ich habe die E-Mail-/Passwort-Authentifizierung zum Laufen gebracht und der nächste Schritt war die Implementierung von Facebook SignIn. Alles hat gut funktioniert und es scheint zu funktionieren, da in der Konsole keine Fehler aufgetreten sind und ich alle Dokumentationsschritte befolgt habe. Das Problem beginnt beim Erstellen des Projekts und beim Versuch, es über Xcode auszuführen.
Ich habe alles über ähnliche Fehler gelesen und nichts hat es gelöst. Der Fehler, den ich erhalte, ist:
Aktuelle Nachrichten anzeigen
Undefiniertes Symbol: _OBJC_CLASS_$_GKLocalPlayer
ld: Warnung: arm64-Funktion nicht 4-Byte ausgerichtet: _unwind_tester from /Users/XXX/XXX/XXX/XXX/YYYY/Build_iOS/Libraries/libiPhone-lib.a(unwind_test_arm64.o)
Undefinierte Symbole für Architektur arm64:
"_OBJC_CLASS_$_GKLocalPlayer", referenziert von:
objc-class-ref in libFirebaseCppAuth.a(credential_ios_XXX.o)
ld: Symbol(e) für Architektur arm64 nicht gefunden
clang: error: Linker-Befehl mit Exitcode 1 fehlgeschlagen (verwenden Sie -v, um den Aufruf anzuzeigen)
[BEARBEITEN]
Eine Sache, die mir aufgefallen ist, ist, dass beim Ausführen von "pod --version" im Ordner "Build_iOS" 1.10.0 zurückgegeben wird.
Hat jemand Informationen zu diesem Thema?
Ich stecke fast einen Tag mit diesem Problem fest, ohne es lösen zu können. Würde mich über etwas Hilfe freuen!
Hallo, ja, ich habe dies für unsere App behoben.
Sie müssen GameKit.framework einschließen
Wenn Sie mehr Probleme bei der Suche nach GKLocalPlayer haben, befindet sich eine Datei im Facebook-SDK, deren Name sich nicht mehr merken kann. Kommentieren Sie alles aus, was mit GKLocalPlayer zu tun hat, der Fallback funktioniert möglicherweise nicht oder es ist wahrscheinlicher, dass Firebase direkt auf GKLocalPlayer verweist
@snorrsi
Danke für die Antwort, obwohl ich bereits einige Themen mit ähnlichen Vorschlägen gelesen habe und sie bei mir nicht funktioniert haben.
Wenn es für Sie keine großen Probleme bereitet, könnten Sie mir genauere Anweisungen geben, was bei Ihnen funktioniert hat?
@Nicokkam Ich denke, Sie sollten die Fehlerbezeichnung entfernen, da dies höchstwahrscheinlich ein Firebase SDK-Fehler und
Habe das gerade aufgeschrieben, als ich deinen Kommentar gesehen habe. Hier kommt's
Fügen Sie GameKit.framework zu Ihrem UnityFramework hinzu, bauen Sie Phasen auf.. Verknüpfen Sie Binärdateien mit Bibliotheken
mach es optional
Suche nach GKLocalPlayer
Ein Ergebnis sollte FIRGameCenterAuthProvider.m sein
Öffne diese Datei
Gehe zu Linie 34
+ (void)getCredentialWithCompletion:(FIRGameCenterCredentialCallback)completion {
/**
Linking GameKit.framework without using it on macOS results in App Store rejection.
Thus we don't link GameKit.framework to our SDK directly.
optionalLocalPlayer is used for
checking whether the APP that consuming our SDK has linked GameKit.framework. If not, a
GameKitNotLinkedError` wird ausgelöst.
*/// Diesen Link in Zeile 41 einfügen .. alles in Zeile 95 auskommentierenwenn (Vervollständigung) {Vervollständigung(nil, [FIRAuthErrorUtils gameKitNotLinkedError]);}Rückkehr;/
...
// zu Zeile 95 Sie müssen jedoch doppelte Kommentare entfernen, ersetzen Sie sie durch / * und * /
}
@Ende
NS_ASSUME_NONNULL_END
*/`
@snorrsi
Ich bekomme einige Fehler, wenn ich das tue, was Sie vorgeschlagen haben.
`/*
NS_ASSUME_NONNULL_BEGIN
@implementierung FIRGameCenterAuthProvider
(Instanztyp)init {
[FIRAuthExceptionUtils
raiseMethodNotImplementedExceptionWithReason:@"Diese Klasse soll nicht initialisiert werden."];
Rückgabe null;
}
(void)getCredentialWithCompletion:(FIRGameCenterCredentialCallback)completion {
/ *Das Verknüpfen von GameKit.framework, ohne es unter macOS zu verwenden, führt zur Ablehnung durch den App Store.Daher verknüpfen wir GameKit.framework nicht direkt mit unserem SDK.
Wenn nicht, aGameKitNotLinkedError
wird erhöht.* /
wenn (Vervollständigung) {
Vervollständigung(nil, [FIRAuthErrorUtils gameKitNotLinkedError]);
}
Rückkehr;
/*
GKLocalPlayer *_Nullable optionalLocalPlayer = [[NSClassFromString(@"GKLocalPlayer") alloc] init];
if (!optionalLocalPlayer) {
wenn (Vervollständigung) {
Vervollständigung(nil, [FIRAuthErrorUtils gameKitNotLinkedError]);
}
Rückkehr;
}
__schwacher GKLocalPlayer *localPlayer = [[optionalLocalPlayer-Klasse] localPlayer];
if (!localPlayer.isAuthenticated) {
wenn (Vervollständigung) {
Vervollständigung(nil, [FIRAuthErrorUtils localPlayerNotAuthenticatedError]);
}
Rückkehr;
}
[localPlayergeneriereIdentityVerificationSignatureWithCompletionHandler:^(
NSURL *publicKeyURL, NSData *Signatur, NSData *Salz, uint64_t Zeitstempel,
NSFehler *Fehler) {
wenn (Fehler) {
wenn (Vervollständigung) {
Vervollständigung (Null, Fehler);
}
} anders {
wenn (Vervollständigung) {
NSString *displayName = localPlayer.alias;
FIRGameCenterAuthCredential *credential =
[[FIRGameCenterAuthCredential alloc] initWithPlayerID:localPlayer.playerID
publicKeyURL:publicKeyURL
signature:signature
salt:salt
timestamp:timestamp
displayName:displayName];
completion(credential, nil);
}
}
}];
}
**/
@Ende
NS_ASSUME_NONNULL_END
`
Ich kenne Swift nicht, vielleicht deshalb.
@Nicokkam du musst die Kommentare entfernen .. darf nicht /* und / innerhalb / .. */ haben
Oder Sie entfernen einfach alle Linien
Ab Zeile 34 ändern Sie es in dies unten
+ (void)getCredentialWithCompletion:(FIRGameCenterCredentialCallback)completion {
/**
Linking GameKit.framework without using it on macOS results in App Store rejection.
Thus we don't link GameKit.framework to our SDK directly. `optionalLocalPlayer` is used for
checking whether the APP that consuming our SDK has linked GameKit.framework. If not, a
`GameKitNotLinkedError` will be raised.
**/
if (completion) {
completion(nil, [FIRAuthErrorUtils gameKitNotLinkedError]);
}
return;
}
<strong i="10">@end</strong>
NS_ASSUME_NONNULL_END
@snorrsi
Ich habe diese Änderungen vorgenommen und das Problem wurde dadurch nicht behoben ... Ich erwäge, eine andere Alternative zur Verwaltung der Anmeldung meiner App zu verwenden.
Aber danke für die Aufmerksamkeit. Falls Ihnen noch etwas einfällt, lassen Sie es mich bitte wissen!
@Nicokkam hast du auch GameKit.framework hinzugefügt?
Ja, habe ich.
@Nicokkam Sie fügen das GameKit.framework an der falschen Stelle hinzu.. fügen Sie es zum UnityFramework-Ziel hinzu, nicht zum Unity-iPhone.. das sollte es tun
@Nicokkam Ich denke, Sie sollten die Fehlerbezeichnung entfernen, da dies höchstwahrscheinlich ein Firebase SDK-Fehler und
Habe das gerade aufgeschrieben, als ich deinen Kommentar gesehen habe. Hier kommt'sFügen Sie GameKit.framework zu Ihrem UnityFramework hinzu, bauen Sie Phasen auf.. Verknüpfen Sie Binärdateien mit Bibliotheken
mach es optionalSuche nach GKLocalPlayer
Ein Ergebnis sollte FIRGameCenterAuthProvider.m sein
Öffne diese Datei
Gehe zu Linie 34
- (void)getCredentialWithCompletion:(FIRGameCenterCredentialCallback)completion {
/ *Das Verknüpfen von GameKit.framework, ohne es unter macOS zu verwenden, führt zur Ablehnung durch den App Store.Daher verknüpfen wir GameKit.framework nicht direkt mit unserem SDK.
Wenn nicht, aGameKitNotLinkedError
wird erhöht.* /
wenn (Vervollständigung) {
Vervollständigung(nil, [FIRAuthErrorUtils gameKitNotLinkedError]);
}
Rückkehr;
}
@Ende
NS_ASSUME_NONNULL_END
Danke funktioniert bei mir! Nochmal danke
@snorrsi
Es funktionierte!! Ich kann Ihnen nicht genug danken!
Mir wäre nie aufgefallen, dass ich das Framework an der falschen Stelle hinzugefügt habe.
Für alle, die auch dieses Problem haben, folgen Sie den obigen Schritten von @snorrsi und wenn es dasselbe ist, sollte es funktionieren.
Hier müssen Sie das Gamekit.framework hinzufügen:
Und vergessen Sie nicht, den Code in der Datei "FIRGameCenterAuthProvider.m" zu bearbeiten.
Ich habe immer noch das gleiche Problem. Ich verwende FirebaseAuth Email/Facebook/Google, FacebookSDK, GoogleMobileAds, Firebase Storage und Firestore.
Ich habe das befolgt, was @snorrsi vorgeschlagen hat, aber es funktioniert nicht für mich
Außerdem verwende ich dafür unity2019.1.17 und erhalte keine Option für das UnityFramework-Ziel. Wie bekomme ich das hin?
Ich glaube, ich brauche Unity2019.3 oder höher
https://www.fiverr.com/s2/3fee81076a
Ich kann Ihnen bei jedem Typ-Xcode-Fehler helfen
Vorübergehende Korrektur:
[PostProcessBuild]
public static void OnPostProcessBuildAddFirebaseFile(BuildTarget buildTarget, string pathToBuiltProject)
{
if (buildTarget == BuildTarget.iOS)
{
// Go get pbxproj file
string projPath = PBXProject.GetPBXProjectPath(pathToBuiltProject);
// PBXProject class represents a project build settings file,
// here is how to read that in.
PBXProject proj = new PBXProject();
proj.ReadFromFile(projPath);
// Copy plist from the project folder to the build folder
proj.AddFileToBuild(proj.GetUnityMainTargetGuid(), proj.AddFile("GoogleService-Info.plist", "GoogleService-Info.plist"));
// Write PBXProject object back to the file
proj.WriteToFile(projPath);
}
}
const string GameKitFrameworkName = "GameKit.framework";
[PostProcessBuild(101)]
private static void PostProcessBuild_LinkGameKit(BuildTarget target, string buildPath)
{
#if UNITY_EDITOR_OSX
if (target == BuildTarget.iOS)
{
string projPath = PBXProject.GetPBXProjectPath(buildPath);
PBXProject proj = new PBXProject();
proj.ReadFromString(File.ReadAllText(projPath));
// embed gamekit into Unity framework target because its used in the facebooksdk
Debug.Log("Embedding gamekit frameworks into UnityFramework target...");
string targetGuid = proj.GetUnityFrameworkTargetGuid();
proj.AddFrameworkToProject(targetGuid, GameKitFrameworkName, true);
proj.WriteToFile(projPath);
}
#endif
}
Wenn Sie zu Firebase 6.16.1 zurückkehren oder zu Facebook 8.1.0 zurückkehren, wird dies wie folgt behoben:
https://github.com/firebase/quickstart-unity/issues/908
Vorübergehende Korrektur:
[PostProcessBuild] public static void OnPostProcessBuildAddFirebaseFile(BuildTarget buildTarget, string pathToBuiltProject) { if (buildTarget == BuildTarget.iOS) { // Go get pbxproj file string projPath = PBXProject.GetPBXProjectPath(pathToBuiltProject); // PBXProject class represents a project build settings file, // here is how to read that in. PBXProject proj = new PBXProject(); proj.ReadFromFile(projPath); // Copy plist from the project folder to the build folder proj.AddFileToBuild(proj.GetUnityMainTargetGuid(), proj.AddFile("GoogleService-Info.plist", "GoogleService-Info.plist")); // Write PBXProject object back to the file proj.WriteToFile(projPath); } } const string GameKitFrameworkName = "GameKit.framework"; [PostProcessBuild(101)] private static void PostProcessBuild_LinkGameKit(BuildTarget target, string buildPath) { #if UNITY_EDITOR_OSX if (target == BuildTarget.iOS) { string projPath = PBXProject.GetPBXProjectPath(buildPath); PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); // embed gamekit into Unity framework target because its used in the facebooksdk Debug.Log("Embedding gamekit frameworks into UnityFramework target..."); string targetGuid = proj.GetUnityFrameworkTargetGuid(); proj.AddFrameworkToProject(targetGuid, GameKitFrameworkName, true); proj.WriteToFile(projPath); } #endif }
Danke dafür, wo sollte das in meinem Projekt enthalten sein?
Herausgefunden! Musste dieses Skript in ein Editor
Verzeichnis hinzufügen, damit es von den Build-Prozessen aufgenommen wird
Hilfreichster Kommentar
@snorrsi
Es funktionierte!! Ich kann Ihnen nicht genug danken!
Mir wäre nie aufgefallen, dass ich das Framework an der falschen Stelle hinzugefügt habe.
Für alle, die auch dieses Problem haben, folgen Sie den obigen Schritten von @snorrsi und wenn es dasselbe ist, sollte es funktionieren.
Hier müssen Sie das Gamekit.framework hinzufügen:
Und vergessen Sie nicht, den Code in der Datei "FIRGameCenterAuthProvider.m" zu bearbeiten.