【问题标题】:Build Cordova/Meteor/Ionic for iOS: "duplicate symbol _OBJC_CLASS_$_CDVLogger"为 iOS 构建 Cordova/Meteor/Ionic:“重复符号 _OBJC_CLASS_$_CDVLogger”
【发布时间】:2018-03-19 21:59:33
【问题描述】:

我目前在使用 Meteor 编译 Xcode for iOS 时遇到了一个错误,因为我将 Xcode 升级到 iOS 11 并将 Meteor 升级到 1.5.2

meteor 控制台中的构建运行良好,但尝试在 Xcode 上运行时,出现错误。

详情如下:

duplicate symbol _OBJC_CLASS_$_CDVLogger in:
    /Users/almaju/Library/Developer/Xcode/DerivedData/Shotgun-gfxenslogefzngcppvotdeekcsof/Build/Intermediates.noindex/Shotgun.build/Debug-iphonesimulator/Shotgun.build/Objects-normal/x86_64/CDVLogger.o
    /Users/almaju/Library/Developer/Xcode/DerivedData/Shotgun-gfxenslogefzngcppvotdeekcsof/Build/Products/Debug-iphonesimulator/libCordova.a(CDVLogger.o)
duplicate symbol _OBJC_METACLASS_$_CDVLogger in:
    /Users/almaju/Library/Developer/Xcode/DerivedData/Shotgun-gfxenslogefzngcppvotdeekcsof/Build/Intermediates.noindex/Shotgun.build/Debug-iphonesimulator/Shotgun.build/Objects-normal/x86_64/CDVLogger.o
    /Users/almaju/Library/Developer/Xcode/DerivedData/Shotgun-gfxenslogefzngcppvotdeekcsof/Build/Products/Debug-iphonesimulator/libCordova.a(CDVLogger.o)
ld: 2 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我的项目中有这些插件:

cordova-android-support-gradle-release@0.0.2
cordova-custom-config@2.0.3
cordova-plugin-dialogs@1.3.3
cordova-plugin-facebook4@1.9.1
cordova-plugin-inappbrowser@1.7.1
cordova-plugin-meteor-webapp@1.4.2
cordova-plugin-splashscreen@4.0.3
cordova-plugin-statusbar@2.2.3
cordova-plugin-vibration@2.1.5
de.appplant.cordova.plugin.local-notification@0.8.4
org.apache.cordova.dialogs@1.3.1
org.apache.cordova.vibration@2.1.3

我已经搜索了一段时间,尝试 meteor reset 或删除并重新添加 ios-platform,玩过构建设置等等,但似乎没有任何东西可以解决这个问题......

查看构建中的cordova_plugins.js,我可以看到:

{
  "id": "cordova-plugin-console.console",
  "file": "plugins/cordova-plugin-console/www/console-via-logger.js",
  "pluginId": "cordova-plugin-console",
  "clobbers": [
    "console"
  ]
},
{
  "id": "cordova-plugin-console.logger",
  "file": "plugins/cordova-plugin-console/www/logger.js",
  "pluginId": "cordova-plugin-console",
  "clobbers": [
    "cordova.logger"
  ]
},

可能是问题,但我不知道如何在流星构建中防止这种情况...

【问题讨论】:

标签: ios xcode cordova meteor ionic-framework


【解决方案1】:

我设法通过在 Build Phases > Compile Sources 中删除“CDVLogger”来使其工作。不过不确定这是不是完美的解决方案。

【讨论】:

  • 请看我下面的回答,了解处理该问题的正确方法。您的方法只能暂时解决问题。除非您删除插件,否则它会回来。
【解决方案2】:

cordova-plugin-console 功能似乎已移至 Cordova 主文件中。如果您使用的是较新版本的 Cordova,您最终会得到两个控制台记录器代码副本,并且您会收到 XCode 错误。

要解决这个问题,您需要运行:

cordova plugin remove cordova-plugin-console

然后确保在您的package.json 文件的dependenciesplugins 部分中没有任何条目。

我建议您随后为您的项目删除并重新安装 ios 平台,以确保一切正常,但您可能不需要这样做。

cordova platform remove ios
cordova platform add ios

我在这里找到了一些关于这个问题的评论:https://forum.ionicframework.com/t/getting-error-on-ios-build/109326/3

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,在 app/.meteor/cordova-plugins 中手动安装 cordova-plugin-console@1.1.0 对我有用。

    MDG 似乎正在努力在下一版本(Meteor 1.6.1)中修复 this issue

    【讨论】:

      【解决方案4】:

      我的应用程序是从 Ionic 1 升级的,所以也许这就是为什么我在 package.json 的三个部分中发现了对 cordova-plugin-console 的引用:dependenciespluginscordovaPlugins。他们都得走了。由于同样的错误,它仍然无法构建。

      config.xml 中又找到了一个引用为<plugin name="cordova-plugin-console" spec="1.0.5" />。那条线也必须走。

      简而言之,删除所有对 cordova-plugin-console 的引用。

      【讨论】:

        猜你喜欢
        • 2012-05-13
        • 2012-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-06
        • 2018-06-07
        • 2019-07-28
        • 1970-01-01
        相关资源
        最近更新 更多