加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用Firebase Unity SDK的Firebase Xcode链接器命令错误

发布时间:2020-12-15 01:44:35 所属栏目:百科 来源:网络整理
导读:Firebase Unity SDK 1.1.1. Unity 5.5.0p4 XCode 8.2.1 从Firebase使用身份验证和数据库时,在XCode中构建项目时出现以下错误: Undefined symbols for architecture arm64: “_OBJC_CLASS_$_FIRGoogleAuthProvider”,referenced from: objc-class-ref in lib
Firebase Unity SDK 1.1.1.
Unity 5.5.0p4
XCode 8.2.1

从Firebase使用身份验证和数据库时,在XCode中构建项目时出现以下错误:

Undefined symbols for architecture arm64:
“_OBJC_CLASS_$_FIRGoogleAuthProvider”,referenced from:
objc-class-ref in libAuth.a(credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)
“_OBJC_CLASS_$_FIRGitHubAuthProvider”,referenced from:
objc-class-ref in libAuth.a(credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)
“_OBJC_CLASS_$_FIREmailPasswordAuthProvider”,referenced from:
objc-class-ref in libAuth.a(credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)
“_OBJC_CLASS_$_FIRFacebookAuthProvider”,referenced from:
objc-class-ref in libAuth.a(credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)
“_OBJC_CLASS_$_FIRApp”,referenced from:
objc-class-ref in libApp.a(app_ios_c76c7d869e568a9b561ea55e25a7dcc0.o)
“_OBJC_CLASS_$_FIRAuth”,referenced from:
objc-class-ref in libAuth.a(auth_ios_3c64a79cf1eb3f06f9309f4d8e91ee94.o)
“_OBJC_CLASS_$_FIRTwitterAuthProvider”,referenced from:
objc-class-ref in libAuth.a(credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)
“_OBJC_CLASS_$_FIROptions”,referenced from:
objc-class-ref in libApp.a(app_ios_c76c7d869e568a9b561ea55e25a7dcc0.o) ld: symbol(s) not
found for architecture arm64 clang: error: linker command failed with
exit code 1 (use -v to see invocation)

我在XCode中想念一下吗?或者在Unity中检查一下?

谢谢!

解决方法

我花了几天的时间试图弄清楚使用Unity Cloud Build构建本地构建的错误.希望这可以帮助别人!

在当地建设

只要你安装了CocoaPods,这就行了.如果未安装CocoaPods,则在构建iOS后,Unity控制台中将显示错误.除此之外,Firebase提供的说明适用于Unity 5.6和Xcode 8.3.

使用Unity Cloud Build构建

CocoaPods不适用于UCB,但Firebase有非CocoaPods替代品:https://firebase.google.com/docs/ios/setup#frameworks

手动添加框架

这些说明假设是原生iOS构建,但您只需将所需的框架拖到Assets / Plugins / iOS / Firebase而不是Xcode项目中. Unity将在构建时将这些框架添加到Xcode项目中.

添加链接器标志

您需要手动将-ObjC添加到Other Link Flags中.出于某种原因,它出现在我的本地Xcode项目中,但不是在UCB进行构建时.创建一个后期处理脚本,就像提到的maros:https://forum.unity3d.com/threads/problem-building-ios-app-with-cloud-build-using-google-analytics.390803/#post-2549911

你需要像这样添加-ObjC:

proj.AddBuildProperty(target,“OTHER_LDFLAGS”,“ – ObjC”);

如果你不添加这个部分,UCB仍然可以创建一个版本,但是在尝试创建FirebaseAuth后游戏会立即崩溃,因为它将引用由于缺少-ObjC标志而未包含的扩展/类别方法.

添加其他所需的框架和库

根据您使用的Firebase功能,您可能需要不同的其他框架或库.例如,我使用过FirebaseDatabase,而文档没有提到这一点,Xcode抱怨链接器错误,需要我添加libicucore.tbd.

我能想到解决这个问题的最好方法是在本地卸载CocoaPods然后让Unity创建Xcode项目,这样我就可以更准确地表示UCB会遇到什么.这部分可能需要一些试验和错误以及谷歌搜索来确定链接器错误所指的是哪个框架或库.只是尝试在本地构建Xcode项目,如果有的话,你会得到链接器错误.

我补充说:

List<string> frameworks = new List<string>() {
    "AdSupport.framework","CoreData.framework","SystemConfiguration.framework","libz.dylib","libsqlite3.dylib","libicucore.tbd"
};

手动移动GoogleServices-Info.plist

另一个奇怪的是,UCB没有将GoogleServices-Info.plist移动??到Xcode项目中.必须有一些未在UCB上运行的其他脚本在本地运行.在添加链接器标志和框架的后期处理脚本中,您还可以将GoogleServices-Info.plist移动??到Xcode项目目录中,然后将其添加到捆绑包中.

首先移动文件:

if (!File.Exists(path + "/GoogleService-Info.plist"))
{
    FileUtil.CopyFileOrDirectory ("GoogleService-Info.plist",path + "/GoogleService-Info.plist");
}

然后将其添加到构建中:

string guid = proj.AddFile("GoogleService-Info.plist","GoogleService-Info.plist");
proj.AddFileToBuild(target,guid);

这应该是它.如果我在添加更多Firebase功能时遇到任何其他问题,我会更新.目前我正在使用Auth,数据库和分析.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读