使用Firebase Unity SDK时出现Firebase Xcode链接器命令错误
Firebase Unity SDK 1.1.1。 Unity 5.5.0p4 代码8.2.1 使用Firebase的身份验证和数据库时,在XCode中构建项目时,我遇到以下错误: 架构arm64的未定义符号:使用Firebase Unity SDK时出现Firebase Xcode链接器命令错误,xcode,unity3d,firebase,firebase-realtime-database,firebase-authentication,Xcode,Unity3d,Firebase,Firebase Realtime Database,Firebase Authentication,Firebase Unity SDK 1.1.1。 Unity 5.5.0p4 代码8.2.1 使用Firebase的身份验证和数据库时,在XCode中构建项目时,我遇到以下错误: 架构arm64的未定义符号: “_OBJC_CLASS_$_FIRGoogleAuthProvider”,引用自: libAuth.a中的objc类引用(凭证\u ios\u ef8c3cf45c3329a5e5902f99026c639a.o) “_OBJC_CLASS_$_FIRGitHubAuthProvide
“_OBJC_CLASS_$_FIRGoogleAuthProvider”,引用自: libAuth.a中的objc类引用(凭证\u ios\u ef8c3cf45c3329a5e5902f99026c639a.o)
“_OBJC_CLASS_$_FIRGitHubAuthProvider”,引用自: libAuth.a中的objc类引用(凭证\u ios\u ef8c3cf45c3329a5e5902f99026c639a.o)
“_OBJC_CLASS_$_FIREmailPasswordAuthProvider”,引用自: libAuth.a中的objc类引用(凭证\u ios\u ef8c3cf45c3329a5e5902f99026c639a.o)
“_OBJC_CLASS_$_FIRFacebookAuthProvider”,引用自: libAuth.a中的objc类引用(凭证\u ios\u ef8c3cf45c3329a5e5902f99026c639a.o)
“_OBJC_CLASS_$_FIRApp”,引用自: libApp.a中的objc类参考(app_ios_c76c7d869e568a9b561ea55e25a7dcc0.o)
“_OBJC_CLASS_$_FIRAuth”,引用自: libAuth.a中的objc类引用(auth_ios_3c64a79cf1eb3f06f9309f4d8e91ee94.o)
“_OBJC_CLASS_$_FIRTwitterAuthProvider”,引用自: libAuth.a中的objc类引用(凭证\u ios\u ef8c3cf45c3329a5e5902f99026c639a.o)
“_OBJC_CLASS_$_firopions”,引用自: libApp.a(app_ios_c76c7d869e568a9b561ea55e25a7dcc0.o)中的objc类参考ld:符号不可用 为体系结构arm64 clang找到:错误:链接器命令失败,错误为 退出代码1(使用-v查看调用) 我是否错过了XCode中的某些内容?或者有什么东西来检查团结
谢谢 我也有同样的问题,只是解决了 找到Podfile文件并在文本编辑器中打开它。 除去 ,:integrate_targets=>false 第二行是这样写的: 安装椰子荚 然后在平台后添加一行:ios 使用你的框架 然后打开终端屏幕并转到该项目的目录。键入“pod安装”并输入。 如果一切顺利,将创建一个工作区文件,并显示一条消息,提示您应该在Xcode中而不是在项目中打开工作区。因此,在xcode中关闭项目并打开projectname.xcworkspace文件。现在,Xcode将打开工作区,您将能够运行该项目。您可能必须将部署目标调整为8.0。
希望这对你有用 CocoaPods是iOS/macOS项目的依赖项管理器。它用于将外部框架/库安装到项目中
使用Xcode本地构建带有Firebase框架的Unity应用程序: 您需要在系统上安装CoCoapod:
在Unity Build Cloud上使用Firebase框架构建Unity应用程序: 对于在Unity Build Cloud server上遇到此问题的用户 根据本论坛帖子:不支持cocoapods。(甚至可能没有计划开发) CoCoapod负责在Xcode项目中设置iOS项目的所有引用库。由于Unity Build Cloud不支持这些功能,因此需要手动执行
- 确保已在macOS系统上安装CoCoapod:
- 在本地构建Unity应用程序(不要在云端触发构建)。构建导出一个Xcode项目(应该是可运行的)。此Xcode项目包含需要添加到Unity项目中的库(框架)
- 将所有*.framework文件夹从导出的\u XCODE\u项目/框架移动到您的\u UNITY\u项目/资产/插件/iOS e、 g.:FirebaseAnalytics.framework、FirebaseCore.framework
- Firebase要求iOS sqlite框架也包含在项目中。为此,请使用此解决方案:
在类PostBuildProcessor中修改方法ProcessPostBuild
//ObjC-Firebase需要 项目AddBuildProperty(目标,“其他标志”,“-ObjC”)代码>
List frameworks=newlist(){ “AdSupport.framework”, “CoreData.framework”, “SystemConfiguration.framework”, “libz.dylib”, “libsqlite3.dylib”, “libApp.a”, “libAnalytics.a” };代码>
保存Unity项目,iOS Unity Build Cloud现在应该可以运行了我花了几天时间试图找出使用Unity Cloud Build构建与本地构建的错误。希望这能帮助其他人 本地建筑 只要你安装了CocoaPods,这就行了。如果未安装CocoaPods,则在构建iOS后,Unity控制台中将出现错误。除此之外,Firebase提供的指令在Unity 5.6和Xcode 8.3中运行良好 使用统一云构建的建筑 UCB上没有CocoaPods,但Firebase有一个非CocoaPods替代方案: 手动添加框架 这些说明假定使用本机iOS构建,但您可以简单地将所需的框架拖到Assets/Plugins/iOS/Firebase中,而不是拖到Xcode项目中。Unity将在构建时将这些框架添加到Xcode项目中 添加链接器标志 您需要手动将
-ObjC
添加到其他链接标志中。出于某种原因,它出现在我本地的Xcode项目中,但不是在UCB构建时。创建一个后处理脚本,就像maros提到的那样:
您需要像这样添加-ObjC
:
proj.AddBuildProperty(目标,“其他标志”,“-ObjC”)代码>
如果您不添加此部分,UCB可能仍会创建一个构建,但在尝试创建FirebaseAuth后,游戏将立即崩溃,因为它将引用一个扩展/类别方法,该方法由于缺少-ObjC
标志而未包括在内
添加其他必需的框架和库
取决于您选择的Firebase功能
List<string> frameworks = new List<string>() {
"AdSupport.framework",
"CoreData.framework",
"SystemConfiguration.framework",
"libz.dylib",
"libsqlite3.dylib",
"libicucore.tbd"
};
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);
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
}
target 'Unity-iPhone' do
pod 'Firebase/Auth'
pod 'Firebase/Core'
end
target 'Unity-iPhone' do
pod 'Firebase/Auth', '3.7.0'
pod 'Firebase/Core', '3.7.0'
end
pod --version
sudo gem install cocoapods
pod install
target 'Unity-iPhone' do
pod 'Firebase/Auth', '4.10.0'
pod 'Firebase/Core', '4.10.0'
end
target 'Unity-iPhone' do
pod 'Firebase/Auth'
pod 'Firebase/Core'
end
$ pod repo remove master
$ pod install --repo-update