【问题标题】:Parse API 1.6.4 - cannot build projectParse API 1.6.4 - 无法构建项目
【发布时间】:2015-05-08 01:41:43
【问题描述】:

我下载了新的 iOS Parse API (1.6.4) 并尝试构建我的项目。当我这样做时,我收到此错误:

Undefined symbols for architecture arm64" "_BFTaskMultipleExceptionsException", referenced from:
  ___53+[PFObject(Private) deleteAllAsync:withSessionToken:]_block_invoke214 in Parse(PFObject.o)
  ___65+[PFObject(Private) _deepSaveAsync:withCurrentUser:sessionToken:]_block_invoke311 in Parse(PFObject.o) 
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

截图:

【问题讨论】:

  • 我还收到以下警告:“提供的自动链接 '(path)/Bolts.framework/Bolts',(path)/Bolts.framework/Bolts 的框架链接器选项不是 dylib”
  • 你说你下载了新版本。您的项目使用的是旧版本吗?
  • 是的。此外,当我删除新 API 并复制回旧 API (1.6.3) 时,它可以工作。
  • 您好像忘记添加 Bolts.framework,您可以再检查一下吗?
  • 好的,问题已经在这里报告为错误:developers.facebook.com/bugs/383331175179417 请关注。

标签: ios parse-platform arm64 bolts-framework


【解决方案1】:

Parse 1.6.4 和 Facebook SDK 3.23 的临时解决方法:

在导入之后和实现部分之前添加到您的 AppDelegate.m 或其他类后面的常量:

NSString *const BFTaskMultipleExceptionsException = @"BFMultipleExceptionsException";

@interface IPAppDelegate ()
@end

@implementation IPAppDelegate

它应该可以解决问题,直到它在 Parse/Facebook 端得到解决。

-- 更新:此解决方案仅适用于上面列出的 Facebook 和 Parse SDK 版本,这些版本现在已过时。

新的 Parse SDK 1.7.4 可以与新的 Facebook SDK 4.0 一起正常工作,应该不会出现这样的问题。

【讨论】:

  • 这会导致 1 个重复错误(这就是 AppDelegate 中的那个)。
  • 你检查框架版本了吗?您是否安装了额外的 Bolts 框架或 Facebook SDK 未附带的?
  • 我安装了最新的 Bolts,而不是 FacebookSDK 中的那个。但是 - FacebookSDK 中似乎有直接内置的 Bolts。
  • 是的,没错,但是 Facebook SDK 附带的那个不包含 SDK 中已经存在的符号。可以试试吗?
  • 此解决方案可以消除错误,但有一些副作用。在我的应用程序中实现此功能后,我在登录应用程序时在日志中发现了这一点:-[BFTask isFaulted]: unrecognized selector sent to instance 0x18b00da0 并且我的应用程序只是冻结但没有崩溃。有人知道如何处理吗?
【解决方案2】:

我能够找出任何需要 Parse iOS v1.6.3 的人的 URL。

https://parse.com/downloads/ios/parse-library/1.6.3

我可以确认使用 1.6.3 可以正确编译所有内容。

【讨论】:

  • 这个答案是唯一对我有帮助的。没有 -ObjC 标志等。Bolts 1.1.4 没有解决任何问题。谢谢!
  • 我很期待 1.6.4,因为 Local Datastore 的性能有所提高,所以无论如何我都必须等待。
  • 任何 url 下载 1.6.3 ?这个网址好像是最新版的?
  • 这个网址以前可以用,但今天无论如何它都会下载1.6.4。这是不幸的,因为我们都知道用 1.6.4 编译是不可能的
  • 看起来它链接回 1.6.3。
【解决方案3】:

放置

NSString *const BFTaskMultipleExceptionsException = @"BFMultipleExceptionsException";

在 Sergey Surkov 建议的 App Delegate 中,在导入和实现之间,然后在构建阶段添加 libstdc++.6.dylib 对我有用。也请查看https://stackoverflow.com/a/27628797/1036945

【讨论】:

    【解决方案4】:

    我在使用 Parse (1.7.4) 和 Facebook (4.2.0) 的最新 SDK 时遇到了完全相同的问题。该问题是由 Parse 和 Facebook SDK 中包含的 Bolts.framework 引起的。出于某种原因,Parse 中的 Bolts 框架总是比 Facebook SDK 中包含的更新。

    在多次尝试使用拖放方法和通过 Cocoapods 安装、删除和重新安装这些 SDK 之后,我终于通过以下步骤克服了这个问题:

    1. 我从我的项目中完全删除了 Parse、Facebook 和 Bolts 框架的所有实例;
    2. 我按照 Facebook 开发者页面上的步骤重新添加了 FBSDKCoreKit 框架(以及我项目需要的 ShareKit 和 LoginKit):https://developers.facebook.com/docs/ios/getting-started/ 确保不要将这些项目复制到您的项目中。
    3. 我使用拖放方法将 Parse 框架重新添加到项目中。我还添加了 ParseFacebookUtilsV4 框架,因为我需要它来通过 Facebook 登录创建用户。

    4. 这是解决所有问题的最重要步骤:我通过将 Parse 提供的 Bolts.framework 添加到项目中,但确保不要将其复制到项目中(就像使用 FBSDKCoreKit 框架一样,我取消了“将项目复制到目标组的文件夹。”选项。如果将其复制到项目文件夹,则项目将无法构建。

    这些步骤终于解决了我所有的问题。

    【讨论】:

    • 是的...第 4 步当然很重要!花了几个小时。
    【解决方案5】:

    如果您使用的是 cocoapods,请尝试pod update Bolts

    【讨论】:

      【解决方案6】:

      EDIT2:FacebookSDK 更新 3.23.2 解决了这个问题,并包含 Bolts 1.1.4:https://developers.facebook.com/resources/facebook-ios-sdk-3.23.2.pkg


      编辑: 从您的构建设置中删除 -ObjC "Other Linker Flag"。


      如果集成了 Facebook SDK,则 Parse 不需要 Bolts.framework。
      自 Facebook iOS SDK 3.14 起,bolts.framework 已包含在内。 https://developers.facebook.com/docs/ios/upgrading-3.x

      尝试删除您的 bolts.framework 手动实例。

      【讨论】:

      • 如果我删除 Bolts 框架,这些错误就会消失。但是 - 在我实现 Parse Local Datastore 时,由于缺少 Bolts 框架,我得到了不同的错误。 (...... [[query findObjectsInBackground] continueWithSuccessBlock:^id(BFTask *task) { ......) 注意:我在项目中链接了 FacebookSDK(以及在此类的标题中)。
      • 好吧想通了。从您的构建设置中删除 -ObjC "Other Linker Flag"。如果您使用 CocoaPods,这可能是个问题,否则它现在正在我这边工作。
      • 好的,但我需要 -ObjC for GoogleMaps SDK。
      • 您能解释一下如何删除 -ObjC "Other Linker Flag" 吗?我和你们所有人都在同一条船上将 Parse 与 Facebook SDK 集成。我已经删除了 Bolts.framework,现在遇到了上述同样的问题。我使用的是 Objectice-C,而不是 Swift。
      • @jdmorgenstein 如果你不知道如何删除它,你可能在构建时没有 -ObjC 标志。 :) 没关系。
      【解决方案7】:

      只是为了说明问题。

      该问题是由于 Facebook SDK Bolts 和 Parse bolts 框架之间的 Bolts 框架冲突引起的。解决此问题的一个临时解决方案是将 Cocoapods 用于您的 Facebook SDK 依赖项,这将在修复工作时有所帮助。

      Facebook 已确认该错误并已分配给适当的团队进行修复。

      请关注https://developers.facebook.com/bugs/383331175179417/ 获取更新。

      【讨论】:

        【解决方案8】:

        确保将 facebook sdk 框架和 bolts 框架(附带 fb sdk)导入到您的项目中。

        【讨论】:

          【解决方案9】:

          我遇到了类似的错误(“...不是 dylib”和“架构的未定义符号”),因为我将整个 parse 文件夹(“parse-library-1.7.4-2”)拖到了我的 xcode 项目中,当我应该只拖动我需要的框架(“Bolts.framework”和“Parse.framework”)时。删除 parse 文件夹,拖过两个框架,然后一切都按预期工作:)

          【讨论】:

            【解决方案10】:

            我遇到了完全相同的问题。将 Bolts 更新到 1.1.4 为我解决了这个问题(Bolts 之前是 1.1.3)。

            如果您使用 cocoapods,请将此行更改或添加到您的 podfile

            pod 'Bolts', '1.1.4'
            

            如果没有,请在此处下载:https://github.com/BoltsFramework/Bolts-iOS/releases

            【讨论】:

            • 这可行,但它与包含螺栓的 FacebookSDK 发生冲突。但是 - 我无法从我的项目中删除 Bolts(并且 - 我无法链接到 FacebookSDK 中使用的 Bolts)。结果:我得到 91 个重复项。
            • @mirap 我也有 Facebook SDK。我有它通过cocoapods。在不更新 Facebook SDK 的情况下更新 Bolts 没有问题。这是我的 podfile 配置: pod 'Facebook-iOS-SDK', '3.23.0' pod 'Bolts', '1.1.4'
            【解决方案11】:

            尝试下载最新的 SDK 并将所有 Parse 框架替换为最新版本。

            【讨论】:

              猜你喜欢
              • 2013-07-22
              • 2020-11-29
              • 2014-05-08
              • 2021-06-10
              • 2021-11-21
              • 2021-05-25
              • 2021-09-11
              • 2019-07-01
              • 1970-01-01
              相关资源
              最近更新 更多