【问题标题】:Wizcorp/phonegap-facebook-plugin: building ios failedWizcorp/phonegap-facebook-plugin:构建 ios 失败
【发布时间】:2016-02-06 16:23:46
【问题描述】:

当我尝试运行 ionic build ios 或尝试为 ionic 创建的 xcode 项目构建存档我收到此错误

**FacebookConnectPlugin.m**:27:44: 错误:'CDVPlugin' 没有可见的@interface 声明选择器'initWithWebView:' self = (FacebookConnectPlugin *)[super initWithWebView:theWebView]; ~~~~~ ^~~~~~~~~~~~~~~ /Applications/MAMP/htdocs/hybrid-mobile-app/platforms/ios/qudratApp/Plugins/phonegap-facebook-plugin/FacebookConnectPlugin.m:238:28: 警告:常数 2 与布尔表达式的比较总是 false [-Wtautological-constant-out-of-range-compare] 如果 (!command.arguments == 2) { ~~~~~~~~~~~~~~~~~~ ^ ~ 1 个警告和 1 产生错误。

** 构建失败 **

以下构建命令失败:CompileC build/qudratApp.build/Debug-iphonesimulatorqudratApp.build/Objects-normal/i386/FacebookConnectPlugin.o qudratApp/Plugins/phonegap-facebook-plugin/FacebookConnectPlugin.m 普通 i386 目标-c com.apple.compilers.llvm.clang.1_0.compiler (1 失败)错误:命令的错误代码65:xcodebuild with args: -xcconfig,/Applications/MAMP/htdocs/hybrid-mobile-app/platforms/ios/cordova/build-debug.xcconfig,-project,qudratApp.xcodeproj,ARCHS=i386,-target,qudratApp,-configuration,Debug,- sdk,iphonesimulator,build,VALID_ARCHS=i386,CONFIGURATION_BUILD_DIR=/Applications/MAMP/htdocs/hybrid-mobile-app/platforms/ios/build/emulator,SHARED_PRECOMPS_DIR=/Applications/MAMP/htdocs/hybrid-mobile-app/platforms/ ios/build/sharedpch

【问题讨论】:

  • 您对这个问题很满意吗?我在第二天,仍然没有运气。我们的错误看起来确实略有不同,但与 @interface for 'CDVPlugin' 的错误大致相同。
  • 不,不走运,我现在已经从 ios 中删除了 facebook,直到我得到修复,你的错误到底是什么

标签: ios facebook ionic-framework


【解决方案1】:

我通过本地克隆副本安装了 phonegap 插件 facebook,并在安装后将 FacebookSDK.framework 重新添加到 Xcode,但这些对我都不起作用。我解决的方法是安装https://github.com/jeduan/cordova-plugin-facebook4

  1. 移除 phonegap 插件:

    ionic plugin rm phonegap-facebook-plugin

  2. 克隆下一个插件:

    git clone https://github.com/jeduan/cordova-plugin-facebook4.git

  3. 手动添加插件:

    cordova -d plugin add PATH/cordova-plugin-facebook4 --variable APP_ID="*****" --variable APP_NAME="*****"

对我来说就是这样。

【讨论】:

  • 这对我也很有效,节省了很多时间:)
  • 仅供参考,您可以让插件添加为您完成所有下载工作。例如cordova plugin add cordova-plugin-facebook4 --variable APP_ID="*****" --variable APP_NAME="*****"
【解决方案2】:

你可以通过两种方式解决这个问题:

1- 将[super initWithWebView:theWebView] 替换为[super init]

2- 在 FacebookConnectPlugin.m 中添加编译器标志以禁用 ARC,编译器标志为 -fno-objc-arc

从我的角度来看,我推荐第二种解决方案,因为它不会影响代码。

如果您正在寻找分步解决方案,请在 Xcode 中执行以下操作。

  1. 选择您的主要项目。
  2. 选择你的目标
  3. 进入构建阶段
  4. 展开编译资源点击选择“FacebookConnectPlugin.m”
  5. 在“FacebookConnectPlugin.m”的右侧,您可以添加 以下编译器标志

    -fno-objc-arc

现在,如果您想详细了解问题:

FacebookConnectPlugin.m 是在非 ARC 环境下构建的,他控制了他的内存消耗。但是 Xcode 不允许这样做,因为它使用 ARC 来控制整个应用程序的内存消耗。所以这个冲突的解决方案是修改 FacebookConnectPlugin.m 代码以使用 ARC,或者只是通过添加编译器标志告诉 Xcode 你负责这个类的内存管理。

【讨论】: