صِف بيئة التطوير الخاصة بك هنا ، مع إعطاء أكبر قدر ممكن من التفاصيل. إذا كان لديك ، فتأكد من تضمين:
2020.1.0f1
8.1.1
قم ببناء المشروع بسلاسة من الوحدة وبنائه وتشغيله من Xcode.
أنا أستخدم Firebase SDK في مشروعي. لقد قمت بعمل مصادقة البريد الإلكتروني / كلمة المرور وكانت الخطوة التالية هي تنفيذ تسجيل الدخول إلى Facebook. كل شيء سار بشكل جيد ويبدو أنه يعمل ، نظرًا لعدم وجود أخطاء في وحدة التحكم واتبعت جميع خطوات التوثيق. تبدأ المشكلة عند إنشاء المشروع ومحاولة تشغيله من خلال Xcode.
قرأت كل شيء يتعلق بأخطاء مماثلة ولم يحلها شيء. الخطأ الذي أواجهه هو:
إظهار الرسائل الأخيرة
رمز غير محدد: _OBJC_CLASS _ $ _ GKLocalPlayer
ld: تحذير: وظيفة arm64 ليست محاذاة 4 بايت: _unwind_tester من / المستخدمين/XXX/XXX/XXX/XXX/YYYY/Build_iOS/Libraries/libiPhone-lib.a(unwind_test_arm64.o)
رموز العمارة arm64:
"_OBJC_CLASS _ $ _ GKLocalPlayer" ، مُشار إليه من:
objc-class-ref في libFirebaseCppAuth.a (credential_ios_ XXX.o)
ld: لم يتم العثور على رمز (رموز) للعمارة arm64
clang: خطأ: فشل الأمر linker مع رمز الخروج 1 (استخدم -v لرؤية الاستدعاء)
[تعديل]
شيء واحد لاحظته هو أنه عندما أقوم بتشغيل "pod --version" داخل مجلد "Build_iOS" ، فإنه يعيد 1.10.0.
هل لدى أي شخص معلومات عن هذا الموضوع؟
أنا عالق في هذه المشكلة لمدة يوم تقريبًا دون أن أتمكن من حلها. نقدر بعض المساعدة!
مرحبًا ، نعم ، لقد أصلحت هذا لتطبيقنا.
تحتاج إلى تضمين GameKit.framework
إذا واجهتك مشكلة في البحث عن GKLocalPlayer ، فهناك ملف واحد في Facebook sdk ، لا يمكنك تذكر الاسم. قم بالتعليق على كل ما يتعلق بـ GKLocalPlayer ، قد لا يعمل الاحتياطي أو في الواقع من المرجح أن Firebase يشير مباشرة إلى GKLocalPlayer
تضمين التغريدة
شكرًا على الرد ، على الرغم من أنني قرأت بالفعل بعض الموضوعات ذات الاقتراحات المماثلة ولم تعمل معي.
إذا لم تكن مشكلة كبيرة بالنسبة لك ، فهل يمكن أن تعطيني تعليمات أكثر تفصيلاً حول ما نجح معك؟
Nicokkam أعتقد أنه يجب عليك إزالة تسمية الخطأ لأن هذا على الأرجح خطأ Firebase SDK بدلاً من خطأ Facebook SDK.
كنت أكتب هذا بالفعل عندما رأيت تعليقك. من هنا تبدأ
أضف GameKit.framework إلى UnityFramework الخاص بك ، وقم ببناء المراحل .. اربط الثنائي بالمكتبات
اجعلها اختيارية
ابحث عن GKLocalPlayer
يجب أن تكون إحدى النتائج هي FIRGameCenterAuthProvider.m
افتح هذا الملف
انتقل إلى السطر 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.
is used for
checking whether the APP that consuming our SDK has linked GameKit.framework. If not, a
OptionalLocalPlayer
* /// أضف هذا الرابط إلى السطر 41 .. علق على كل شيء في السطر 95إذا (اكتمال) {الانتهاء (لا شيء ، [FIRAuthErrorUtils gameKitNotLinkedError]) ؛}إرجاع؛/
...
// إلى السطر 95 أنت بحاجة إلى إزالة التعليقات المزدوجة بالرغم من ذلك ، استبدل بـ / * و * /
}
@نهاية
NS_ASSUME_NONNULL_END
* / `
تضمين التغريدة
أتلقى بعض الأخطاء في فعل ما اقترحته.
`/ *
NS_ASSUME_NONNULL_BEGIN
implementation FIRGameCenterAuthProvider
(نوع instancetype) init {
[FIRAuthExceptionUtils
liftMethodNotImplementedExceptionWithReason: @ "لا يُقصد بهذه الفئة أن تتم تهيئتها."]؛
العودة لا شيء
}
(باطل) getCredentialWithCompletion: (FIRGameCenterCredentialCallback) إكمال {
/ *يؤدي ربط GameKit.framework دون استخدامه على macOS إلى رفض App Store.وبالتالي ، فإننا لا نربط GameKit.framework بحزمة SDK الخاصة بنا مباشرةً.
إذا لم يكن كذلك ، أسيتم جمع GameKitNotLinkedError
.* /
إذا (اكتمال) {
الانتهاء (لا شيء ، [FIRAuthErrorUtils gameKitNotLinkedError]) ؛
}
إرجاع؛
/ *
GKLocalPlayer * _Nullable OptionalLocalPlayer = [[NSClassFromString (@ "GKLocalPlayer") تخصيص] init]؛
إذا (! OptionalLocalPlayer) {
إذا (اكتمال) {
الانتهاء (لا شيء ، [FIRAuthErrorUtils gameKitNotLinkedError]) ؛
}
إرجاع؛
}
__weak GKLocalPlayer * localPlayer = [[OptionalLocalPlayer class] localPlayer] ؛
إذا (! localPlayer.isAuthenticated) {
إذا (اكتمال) {
إكمال (لا شيء ، [FIRAuthErrorUtils localPlayerNotAuthenticatedError]) ؛
}
إرجاع؛
}
[localPlayer createIdentityVerificationSignatureWithCompletionHandler: ^ (
NSURL * publicKeyURL ، NSData * التوقيع ، NSData * salt ، uint64_t timestamp ،
NSError * خطأ) {
إذا (خطأ) {
إذا (اكتمال) {
إكمال (لا شيء ، خطأ) ؛
}
} آخر {
إذا (اكتمال) {
NSString *displayName = localPlayer.alias;
FIRGameCenterAuthCredential *credential =
[[FIRGameCenterAuthCredential alloc] initWithPlayerID:localPlayer.playerID
publicKeyURL:publicKeyURL
signature:signature
salt:salt
timestamp:timestamp
displayName:displayName];
completion(credential, nil);
}
}
}] ؛
}
** /
@نهاية
NS_ASSUME_NONNULL_END
"
لست على دراية بـ Swift ، ربما لهذا السبب.
Nicokkam تحتاج إلى إزالة التعليقات .. لا يمكن أن يكون / * و / داخل / .. * /
أو يمكنك ببساطة إزالة كل الخطوط
من السطر 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` will be raised.
**/
if (completion) {
completion(nil, [FIRAuthErrorUtils gameKitNotLinkedError]);
}
return;
}
<strong i="10">@end</strong>
NS_ASSUME_NONNULL_END
تضمين التغريدة
لقد أجريت هذه التغييرات ولم تحل المشكلة ... أفكر في استخدام بديل آخر لإدارة تسجيل الدخول إلى تطبيقي.
لكن شكرا على الاهتمام. إذا كان هناك شيء آخر يخطر ببالك ، فيرجى إبلاغي بذلك!
Nicokkam هل أضفت GameKit.framework أيضًا؟
نعم فعلت.
Nicokkam أنت تضيف GameKit.framework في مكان خاطئ .. أضفه إلى هدف UnityFramework ، وليس Unity-iPhone .. الذي يجب أن يفعل ذلك
Nicokkam أعتقد أنه يجب عليك إزالة تسمية الخطأ لأن هذا على الأرجح خطأ Firebase SDK بدلاً من خطأ Facebook SDK.
كنت أكتب هذا بالفعل عندما رأيت تعليقك. من هنا تبدأأضف GameKit.framework إلى UnityFramework الخاص بك ، وقم ببناء المراحل .. اربط الثنائي بالمكتبات
اجعلها اختياريةابحث عن GKLocalPlayer
يجب أن تكون إحدى النتائج هي FIRGameCenterAuthProvider.m
افتح هذا الملف
انتقل إلى السطر 34
- (باطل) getCredentialWithCompletion: (FIRGameCenterCredentialCallback) إكمال {
/ *يؤدي ربط GameKit.framework دون استخدامه على macOS إلى رفض App Store.وبالتالي ، فإننا لا نربط GameKit.framework بحزمة SDK الخاصة بنا مباشرةً.
إذا لم يكن كذلك ، أسيتم جمعGameKitNotLinkedError
.* /
إذا (اكتمال) {
الانتهاء (لا شيء ، [FIRAuthErrorUtils gameKitNotLinkedError]) ؛
}
إرجاع؛
}
@نهاية
NS_ASSUME_NONNULL_END
شكرا يعمل لي! مرة أخرى شكرا
تضمين التغريدة
انها عملت!! لا أستطيع شكرك بما فيه الكفاية!
لم أكن لأدرك أبدًا أنني كنت أقوم بإضافة إطار العمل في المكان الخطأ.
بالنسبة لأي شخص يعاني من هذه المشكلة أيضًا ، اتبع الخطوات الموضحة أعلاه التي قدمها
هذا هو المكان الذي تحتاج فيه إلى إضافة Gamekit.framework:
ولا تنس تحرير الكود داخل ملف "FIRGameCenterAuthProvider.m".
ما زلت أواجه نفس المشكلة. أنا أستخدم FirebaseAuth Email / Facebook / Google و FacebookSDK و GoogleMobileAds و Firebase Storage و Firestore.
لقد تابعت ما اقترحه snorrsi لكنه لا يعمل معي
كما أنني أستخدم unit2019.1.17 لهذا الغرض ولا أحصل على أي خيار لهدف UnityFramework. كيف أحصل على ذلك؟
أعتقد أنني بحاجة إلى استخدام unit2019.3 أو أعلى
https://www.fiverr.com/s2/3fee81076a
يمكنني مساعدتك في أي نوع من أخطاء xcode
الإصلاح المؤقت:
[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
}
العودة إلى Firebase 6.16.1 أو الرجوع إلى Facebook 8.1.0 ، قم بإصلاحه وفقًا لهذا:
https://github.com/firebase/quickstart-unity/issues/908
الإصلاح المؤقت:
[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 }
شكرًا على هذا ، أين يجب تضمين ذلك في مشروعي؟
اكتشفه! اضطررت إلى إضافة هذا البرنامج النصي إلى دليل Editor
حتى يتم اختياره بواسطة عمليات الإنشاء
التعليق الأكثر فائدة
تضمين التغريدة
انها عملت!! لا أستطيع شكرك بما فيه الكفاية!
لم أكن لأدرك أبدًا أنني كنت أقوم بإضافة إطار العمل في المكان الخطأ.
بالنسبة لأي شخص يعاني من هذه المشكلة أيضًا ، اتبع الخطوات الموضحة أعلاه التي قدمها
هذا هو المكان الذي تحتاج فيه إلى إضافة Gamekit.framework:
ولا تنس تحرير الكود داخل ملف "FIRGameCenterAuthProvider.m".