使用Firebase Unity SDK时出现Firebase Xcode链接器命令错误

使用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

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_$_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