【问题标题】:Parse for iOS: Errors when trying to run the appParse for iOS:尝试运行应用程序时出错
【发布时间】:2013-03-17 03:17:33
【问题描述】:

我一直在使用 Parse SDK,并按照快速指南进行操作。当我尝试运行时,我得到了这 8 个错误。关于为什么的任何想法?它看起来与我没有使用的 Parse 的 Facebook 部分有关。

 Undefined symbols for architecture armv7:
"_FBTokenInformationTokenKey", referenced from:
  -[PFFacebookTokenCachingStrategy accessToken] in Parse(PFFacebookTokenCachingStrategy.o)
  -[PFFacebookTokenCachingStrategy setAccessToken:] in Parse(PFFacebookTokenCachingStrategy.o)
 "_FBTokenInformationExpirationDateKey", referenced from:
  -[PFFacebookTokenCachingStrategy cacheTokenInformation:] in     Parse(PFFacebookTokenCachingStrategy.o)
  -[PFFacebookTokenCachingStrategy expirationDate] in Parse(PFFacebookTokenCachingStrategy.o)
  -[PFFacebookTokenCachingStrategy setExpirationDate:] in Parse(PFFacebookTokenCachingStrategy.o)
 "_OBJC_METACLASS_$_FBSessionTokenCachingStrategy", referenced from:
  _OBJC_METACLASS_$_PFFacebookTokenCachingStrategy in Parse(PFFacebookTokenCachingStrategy.o)
"_OBJC_CLASS_$_FBSessionTokenCachingStrategy", referenced from:
  _OBJC_CLASS_$_PFFacebookTokenCachingStrategy in Parse(PFFacebookTokenCachingStrategy.o)
"_FBTokenInformationUserFBIDKey", referenced from:
  -[PFFacebookTokenCachingStrategy facebookId] in Parse(PFFacebookTokenCachingStrategy.o)
  -[PFFacebookTokenCachingStrategy setFacebookId:] in Parse(PFFacebookTokenCachingStrategy.o)
"_OBJC_CLASS_$_FBRequest", referenced from:
  objc-class-ref in Parse(PFFacebookAuthenticationProvider.o)
"_OBJC_CLASS_$_FBSession", referenced from:
  objc-class-ref in Parse(PFFacebookAuthenticationProvider.o)
 ld: symbol(s) not found for architecture armv7
 clang: error: linker command failed with exit code 1 (use -v to see invocation)

【问题讨论】:

  • 看来您需要将 .m 文件添加到目标:stackoverflow.com/a/5300901/620197
  • 听起来好像如果存在这两个标志 -ObjC 和 -all_load 中的任何一个,则必须存在/安装 Facebook SDK ......或者如果你真的不需要它们,你可以删除这些标志,但我认为 restKit 需要它们,因此我需要它们。 parse.com/questions/…
  • 只需添加 bolt.framework 和 facebook.framework 和 -objc 标志。它对我有用。
  • ld: 未找到用于架构 armv7 的 Metal 的框架 clang: 错误: 链接器命令失败,退出代码为 1(使用 -v 查看调用)

标签: ios parse-platform


【解决方案1】:

这是与 Parse iOS 1.1.33 版本相关的某种错误,因为多人看到相同的错误 - 包括我自己。

有几种解决方法-

如果您没有使用需要 -ObjC 链接器标志的库,则可以从项目中删除 -ObjC:

构建设置 > 其他链接器标志 > 删除 -ObjC

或者,如果您正在使用需要该标志的库,您可以添加 Facebook SDK。

这两个选项都将消除错误。希望他们能解决这个问题,因为我的应用中不需要 Facebook SDK。

在此处关注讨论:

https://parse.com/questions/cocoapods-incompatibility

【讨论】:

  • 删除 -ObjC 并没有为我修复它。 dbquarrel 的回复如下。
  • 我删除了 -all_load 链接器标志并为我修复了它,因此您可以更新答案以包括该标志 C:
  • 在其他链接器标志中我之前有'-all_load',从'pod install'它建议将'其他链接器标志'设置为'$(继承)',它没有任何问题。跨度>
  • 您能否指出在哪里可以找到以及如何将 facebook SDK 添加到 Xcode 6.2 (iOS 8)?我有developers.facebook.com/docs/ios,在安装 Facebook.pkg 后我找不到FacebookSDK.framework 文件并且还有其他不必要的文件。
  • 如果去掉 -ObjC 链接器开关会出现问题。 libCordova.a 库在 NSString 上指定了一些类别,如果删除 -ObjC,这些类别将不会被加载。一种解决方法是从链接框架中删除 libCordova.a 并将其添加到其他链接器标志构建设置:-force_load $(BUILT_PRODUCTS_DIR)/libCordova.a
【解决方案2】:

这里有一个可能比下载、编译和安装 FB 工具包更简单的解决方法,因为它有点大而且很麻烦。请注意,当然,您将无法在 Parse 中使用任何 FB 类型功能,如果您触发任何期望使用这些虚拟符号的 Parse 代码,您将遇到严重问题。但是,如果你远离他们,我想你会没事的。所以...

  1. 在您的应用程序中创建一个名为 FBMissingSymbols 的对象

  2. 删除不需要的 .h

  3. 把这个放在 .m 中:

NSString *FBTokenInformationExpirationDateKey = @"";
NSString *FBTokenInformationTokenKey = @"";
NSString *FBTokenInformationUserFBIDKey = @"";
@interface FBAppCall:NSObject
@end
@implementation FBAppCall
@end
@interface FBRequest:NSObject
@end
@implementation FBRequest
@end
@interface FBSession:NSObject
@end
@implementation FBSession
@end
@interface FBSessionTokenCaching:NSObject
@end
@implementation FBSessionTokenCaching
@end
@interface FBSessionTokenCachingStrategy:NSObject
@end
@implementation FBSessionTokenCachingStrategy
@end

【讨论】:

  • 解决了我的问题。谢谢和+1
  • 快速简单!谢谢。 +1
  • 谢谢@dbquarrel,+1
  • 这是一个神奇的解决方案。如果你不想在你的应用程序中集成 FB,那就去吧。
  • 最简单的解决方案 :-)
【解决方案3】:

您必须删除旧的ParseFacebookUtils.framework 并保留新的ParseFacebookUtilsV4.framework 才能正常工作。

【讨论】:

  • 嘿,你正在滚动这个线程,这是正确的答案! /\
  • 这是为我解决的问题! Parse 网站上的任何开发者 cmets 或此处的其他答案都不起作用...如果可以的话 +9000!
  • 简单而完美。谢谢!
  • 是的……就是这样。为什么这个破旧的库仍然随 Parse SDK 一起提供?这不应该那么复杂。
【解决方案4】:

我喜欢 dbquarrel 的回答,但它不再起作用了,因为它缺少一些新的社会阶层。

所以做同样的事情,但是,添加这个:

NSString *FBTokenInformationExpirationDateKey = @"";
NSString *FBTokenInformationTokenKey = @"";
NSString *FBTokenInformationUserFBIDKey = @"";
NSString *SLServiceTypeTwitter = @"";
NSString *ACAccountTypeIdentifierTwitter = @"";
@interface FBAppCall:NSObject
@end
@implementation FBAppCall
@end
@interface FBRequest:NSObject
@end
@implementation FBRequest
@end
@interface FBSession:NSObject
@end
@implementation FBSession
@end
@interface FBSessionTokenCaching:NSObject
@end
@implementation FBSessionTokenCaching
@end
@interface FBSessionTokenCachingStrategy:NSObject
@end
@implementation FBSessionTokenCachingStrategy
@end
@interface ACAccountStore:NSObject
@end
@implementation ACAccountStore
@end
@interface SLRequest:NSObject
@end
@implementation SLRequest
@end
@interface SLComposeViewController:NSObject
@end
@implementation SLComposeViewController
@end

【讨论】:

  • 感谢更新!
  • 在您的应用程序中创建一个名为FBMissingSymbols的对象,删除.h(因为您不需要它),然后将上述内容放入FBMissingSymbols.m
  • 这个新的.m文件不需要在顶部包含#import <Foundation/Foundation.h>吗?
【解决方案5】:

检查并确保您没有添加两个版本的“ParseFacebookUtils”框架:

解析FacebookUtilsV4 和 解析FacebookUtils

一旦我删除 ParseFacebookUtils,并保留 ParseFacebookUtilsV4,它就可以正常工作。

【讨论】:

  • 这正是问题所在。删除后,所有 9 个错误都消失了!谢谢
【解决方案6】:

我的解决方案肯定会起作用,您可以在其他链接器标志中使用 -ObjC。

  1. 添加“Social.framework”、“Account.framework”
  2. 添加“FacebookSDK.framework”

干杯......现在它可以工作......并且不需要删除 -ObjC。

【讨论】:

  • 这是一个非常简单且很棒的答案。但就我而言,唯一的问题是我没有添加 Facebook.framework 并且它仍然没有错误地构建了应用程序。但无论如何,+1 以获得简单的解决方案。
  • 对我来说只是添加了“Social.framework”、“Account.framework”。谢谢,就像一个魅力:)
【解决方案7】:

听起来您可能需要添加“Accounts.Framework”和/或“Social.Framework”。

【讨论】:

    【解决方案8】:

    对@blueHula 答案的补充。 Parse 已将 Facebook SDK 从其框架中移除,这意味着从某些特定版本(可能是 1.1.33)集成 parse.framework 应该伴随着独立集成 FB SDK。

    请参考此链接using the parse ios sdk without including the facebook sdk

    关键是使用-force_load $(SRCROOT)/path/libname.a链接必要的第三方库,而不是使用-all_load-ObjC

    【讨论】:

      【解决方案9】:

      这是一个链接器错误...您的项目中没有包含所需的框架,而您在其中一个包含的头文件中引用了该框架。

      因此,例如,如果您的代码中有一个包含:

      #import <Parse/Parse.h>
      

      它可能需要一个支持框架,并且您必须将它包含在您的应用程序中。您是否在 Xcode 中包含了 parse.framework

      【讨论】:

        【解决方案10】:

        我有相同的用途,唯一的第三方是 PayPal SDK。删除 -ObjC 后一切正常。 (始终在更改设置之前备份您的项目)

        【讨论】:

          【解决方案11】:

          现在是 2015 年,我也遇到了同样的错误。不幸的是,以上答案都不适合我。但这确实:

          目标 > 构建阶段 > 将二进制文件与库链接 然后添加 libstdc++.6.dylib

          这解决了我的问题。

          【讨论】:

          • 似乎解决了部分问题
          【解决方案12】:

          有许多框架需要将 -ObjC 标志设置为其他链接标志,而 Parse 不允许您这样做。要解决此问题,您可以执行以下操作之一。我已经展示了需要 -ObjC 标志的 Google Maps SDK 示例,但由于 Parse 在同一个项目中,我不能直接使用它:

          解决方案 1 - 使用 force_load 标志

          不要将 -ObjC 标志设置为其他链接标志,而是使用 force_load 标志来加载特定的框架或库。

          -force_load $(SRCROOT)/GoogleMaps.framework/Versions/A/GoogleMaps
          

          解决方案 2 - 使用 Facebook SDK

          只需将 Facebook SDK 添加为单独的框架,这将允许您使用 -ObjC 标志。还要确保您已添加 Accounts.frameworkSocial.framework。如果您已添加 Bolt.framework 并使用 Parse 空白项目,则处理重复符号删除 Bolt.framwork。 如果仍然有一些错误,请删除 Accounts and Social 框架并再次添加(如果您使用了 Parse 默认空白项目,就会出现这种情况)。

          【讨论】:

            【解决方案13】:

            我被这个问题困扰了很多天。我使用 cocoapods 来管理所有第三个 SDK。

            这是我解决此问题的方法。转到 pod 项目并将“仅构建架构”项设置为 NO。

            重建 pod 项目,然后链接错误消失了! help 这可以帮助正在使用 cocoapods 的人。

            【讨论】:

              【解决方案14】:

              我遇到了同样的问题。我通过从这里下载以前的版本(1.1.32)解决了:

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

              (在我的情况下,我需要 -ObjC 标志)

              编辑:似乎该版本不适用于 64 位架构。

              【讨论】:

                【解决方案15】:

                这可以从位于的项目文件中删除 &lt;projectname&gt;/cordova/&lt;projectname&gt;/platforms/ios/&lt;projectname&gt;.xcodeproj/project.pbxproj

                在文件中搜索-ObjC,有多个位置。它看起来像这样:

                OTHER_LDFLAGS = (
                    "-weak_framework",
                    CoreFoundation,
                    "-weak_framework",
                    UIKit,
                    "-weak_framework",
                    AVFoundation,
                    "-weak_framework",
                    CoreMedia,
                    "-weak-lSystem",
                    "-force_load",
                    "\"$(BUILT_PRODUCTS_DIR)/libCordova.a\"",
                    "-ObjC",
                );
                

                【讨论】:

                  【解决方案16】:

                  安装 cocoaPods 并将其添加到您的 Podfile:

                  pod 'Facebook-iOS-SDK'
                  pod 'Parse'
                  pod 'ParseFacebookUtils'
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2019-04-02
                    • 2017-07-15
                    • 2012-12-17
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-09-26
                    • 2012-10-17
                    • 1970-01-01
                    相关资源
                    最近更新 更多