为 iOS 解析: 试图运行应用程序时的错误

我一直在使用 Parse SDK,并遵循了快步指南。当我尝试运行时,我得到了这8个错误。知道为什么吗?它看起来像是与我没有使用的解析的 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)
34814 次浏览

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

因此,例如,如果在代码中有一个 include:

#import <Parse/Parse.h>

它可能需要一个支持框架,你必须在你的应用程序中包含它。你有没有把 Xcode 境内的 abc 0包括在内?

Xcode Frameworks

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

这是与 ParseiOS1.1.33版本有关的某种 bug,因为多个人看到了相同的错误——包括我自己。

有一对夫妇的变通方法-

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

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

或者如果你正在使用一个需要这个标志的库,你可以添加 Facebook SDK。

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

关注这里的讨论:

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

我也有同样的用途,而我唯一的第三方是 PayPal SDK。在删除 -OBC 之后,一切都构建正常。(在更改设置之前,始终对项目进行备份)

@ bluHula 对答案的补充。 Parse 已经从它的框架中移除了 Facebook SDK,这意味着从某个特定版本(可能是1.1.33)集成 Parse.Framework 应该伴随着独立集成 FB SDK。

请参考此链接 使用解析 ios sdk 而不包括 facebook sdk

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

这里有一个可能比下载、编译和安装 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

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

以下是我如何解决这个问题。转到吊舱项目,并设置项目“构建架构只”为 NO。

重建吊舱项目,然后链接错误消失了! 帮助这可以帮助有人谁是使用 cocoapods。enter image description here

我也遇到了同样的问题,我从这里下载了之前的版本(1.1.32)来解决这个问题:

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

(在我的例子中,我需要 -OBC 标志)

编辑: 这个版本似乎不适用于64位体系结构。

我喜欢德布哈特的回答,但是它已经不起作用了,因为它缺乏一些新的社会阶层。

因此,做同样的事情,但相反,添加这一点:

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

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

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

干杯... . 现在它的工作... . . 不需要删除-目标。

中的项目文件中删除 <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",
);

有许多框架需要将 -Objecc 标志设置为 Other 链接标志,而 Parse 不允许您这样做。为了解决这个问题,你可以做以下事情之一。我已经展示了一个 Google Maps SDK 的例子,它需要 -OBC 标志,但是由于 Parse 在同一个项目中,我不能直接使用它:

解决方案1-使用强制负载标志

使用 force _ load 标志来加载特定的框架或库,而不是将 -ObjectFlag 设置为 Other 链接标志。

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

解决方案2-使用 Facebook SDK

只需添加 Facebook SDK 作为一个单独的框架,这将允许您使用-OBC 标志。还要确保你已经添加了 Accounts.frameworkSocial.framework。如果您已经添加了 Bolt.Framework 并使用 Parse 空白项目,那么可以删除 Bolt.framwork来处理重复符号。 如果仍然有很少的错误,然后删除帐户和社会框架,并添加它再次(这将是这种情况下,如果您使用解析默认空白项目)。

你必须删除旧的 ParseFacebookUtils.framework和保持新的 ParseFacebookUtilsV4.framework得到它的工作。

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

ParseFacebookUtilsV4 还有 ParseFacebookUtils

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

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

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

现在是2015年,我也犯了同样的错误。不幸的是,以上的答案对我都不起作用。但这个确实做到了:

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

这为我解决了问题。