【问题标题】:Ionic app linker errors after building for iOS为 iOS 构建后的 Ionic 应用程序链接器错误
【发布时间】:2019-08-06 14:32:21
【问题描述】:

我正在使用 Ionic 4 框架开发一个应用程序,目前正在尝试为 iOS 构建它并将其发布到 App Store。我得到的错误是当我尝试在 Xcode 中运行应用程序时,它将在链接阶段失败并出现以下错误:

ld:架构 x86_64 clang 的 346 个重复符号:错误:链接器 命令失败,退出代码为 1(使用 -v 查看调用)。

前面是一个重复符号列表,如下所示:

重复符号 _OBJC_IVAR__$_FIRInstanceIDURLQueryItem._name 在: /Users/james/Library/Developer/Xcode/DerivedData/Jambox-ataoinheliizvyaczvbklhkqvhpf/Build/Products/Debug-iphonesimulator/FirebaseInstanceID/libFirebaseInstanceID.a(FIRInstanceIDURLQueryItem.o) Jambox/Plugins/cordova-plugin-firebase/FirebaseInstanceID.framework/FirebaseInstanceID(FIRInstanceIDURLQueryItem_ce817fff617a4255d51c2a25da32a1f0.o)

这些与以下框架有关:

  • FirebaseInstanceID.framework
  • GoogleUtilities.framework

  • nanopb.framework

  • FirebaseCore.framework

我已经尝试了一些解决这个问题的方法,但都没有成功:

1)。从其他链接器标志中删除 -ObjC 和 $(inherited) - 这会导致应用程序成功构建和链接,但在启动时崩溃并出现以下错误:

*** 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'+[FIRApp registerAsConfigurable:]: 发送到类的无法识别的选择器 0x1080bc178'

2)。删除重复符号列表中的每个框架 - 这有助于减少重复符号的数量。在我必须删除 GoogleUtilities.framework 之前,我可以将其减少到 65 个重复符号,这会导致构建失败并出现以下错误:

架构 x86_64 的未定义符号:
“_OBJC_CLASS_$_GULObjectSwizzler”,引用自: FirebasePerformance 中的 objc 类引用(FPRObjectInstrumentor_f65d32035cadef24185912716f0b12f9.o) FirebasePerformance 中的 objc 类引用(FPRNetworkTrace_3053ec2ab59f2fcfec4b18c29e4b4cec.o) FirebasePerformance 中的 objc 类引用(FPRNSURLConnectionInstrument_5611d225f62417fa73742554b6a45401.o) ld:未找到架构 x86_64 的符号 clang:错误:链接器 命令失败,退出代码为 1(使用 -v 查看调用)

3)。删除 DerivedData 文件夹 - 执行此操作后出现相同的错误。

4)。删除和添加 iOS 平台 - 相同的错误。

【问题讨论】:

    标签: ios xcode ionic-framework linker-errors


    【解决方案1】:

    在我的例子中,当同时使用 phonegap-plugin-push 和 cordova-plugin-firebase-analytics 时出现了这个问题。我在这个issue thread 中找到了解决方法。

    基本上,在 Xcode 中转到您的项目导航器,然后“构建阶段”,展开“将二进制文件与库链接”,单击“+”并添加“libGoogleToolboxForMac.a”和“libPodsYourProjectName.a”并重新构建。

    【讨论】:

    • 嘿,感谢您的回复 - 我在哪里可以找到 libGoogleToolboxForMac.a 文件?我已经有了我的项目名称。
    • 尝试删除平台和插件文件夹 ionic cordova platform rm ios rm -rf plugins,然后从 config.xml 中删除 Firebase 插件,以便以后手动安装。然后安装平台ionic cordova platform add ios,然后安装Firebase 插件ionic cordova plugin add cordova-plugin-firebase。您可能需要单独安装 pod,即 cd platform/ios pod install
    • 这为我修复了重复符号错误!但是,我现在收到架构 x86_64 的未定义符号:“_OBJC_CLASS_$_GULObjectSwizzler”,引用自:objc-class-ref in ...”错误,如上所述。知道如何解决吗?我也不知道在哪里可以找到 libGoogleToolboxForMac.a 文件。
    • 我能够通过添加 firebase performance Cordova 插件并将 pod 'Firebase/Performance' 添加到我的 pod 文件来修复我的未定义符号错误。该应用程序现在将构建但崩溃 *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“+ [FIRApp registerAsConfigurable:]:无法识别的选择器发送到类 0x1080bc178”。知道如何解决这个问题吗?
    • 我不确定,但这听起来像是 Cocoapods 的问题。尝试 pod setup(从任何目录)以确保 Cocoapods 是最新的,然后从 <project-root>/platform/ios 运行 pod install
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    相关资源
    最近更新 更多