80

我一直在使用 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)
4

16 回答 16

137

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

有几个解决方法-

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

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

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

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

关注这里的讨论:

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

于 2013-03-17T19:46:15.967 回答
102

这是一个可能比下载、编译和安装 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
于 2013-09-05T01:08:35.617 回答
26

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

于 2015-04-29T15:33:57.913 回答
23

我喜欢 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
于 2014-05-29T01:09:04.833 回答
10

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

ParseFacebookUtilsV4 和 ParseFacebookUtils

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

于 2015-06-07T22:27:40.373 回答
7

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

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

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

于 2014-06-14T18:01:59.840 回答
3

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

于 2013-03-17T10:26:37.167 回答
2

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

请使用 parse ios sdk 参考此链接,不包括 facebook sdk

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

于 2013-06-05T10:12:05.667 回答
1

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

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

#import <Parse/Parse.h>

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

Xcode 框架

于 2013-03-17T03:32:58.163 回答
1

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

于 2013-05-28T16:15:38.827 回答
1

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

Target > Build Phases > Link Binary With Libraries 然后添加 libstdc++.6.dylib

这为我解决了这个问题。

于 2015-07-16T22:06:21.423 回答
0

有许多框架需要将 -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 空白项目然后处理重复符号 remove Bolt.framwork。如果仍然有一些错误,则删除 Accounts and Social 框架并再次添加(如果您使用了 Parse 默认空白项目,则会出现这种情况)。

于 2015-01-29T07:06:01.997 回答
-1

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

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

重建 pod 项目,然后链接错误消失了!help this 可以帮助正在使用 cocoapods 的人。在此处输入图像描述

于 2014-01-16T07:23:04.030 回答
-1

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

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

(就我而言,我需要 -ObjC 标志)

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

于 2014-05-21T14:28:51.303 回答
-1

这可以从位于 <projectname>/cordova/<projectname>/platforms/ios/<projectname>.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",
);
于 2014-07-22T21:13:22.533 回答
-1

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

pod 'Facebook-iOS-SDK'
pod 'Parse'
pod 'ParseFacebookUtils'
于 2015-07-06T18:41:04.450 回答