parsingiOS:尝试运行应用程序时出错

我一直在使用Parse SDK,并按照quickstep指南。 当我尝试运行时,我得到这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) 

这是一些与parsingiOS 1.1.33版本相关的错误,因为多人看到相同的错误 – 我自己包括在内。

有几个解决方法 –

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

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

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

这两个选项将消除错误。 希望他们解决这个问题,因为我没有必要在我的应用程序的Facebook SDK。

按照这里的讨论:

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

这是一个比下载,编译和安装这个庞大笨重的FB套件更简单的解决方法。 请注意,当然,您将无法使用Parse中的任何FBtypesfunction,并且如果触发任何期望使用这些虚拟符号的parsing代码,则会遇到严重问题。 但是,如果你远离他们,你会没事的我想。 所以…

  1. 在您的应用程序中创build一个名为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 

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

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

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

 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 

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

parsingFacebookUtilsV4和ParseFacebookUtils

一旦我删除了ParseFacebookUtils,并保持ParseFacebookUtilsV4它工作正常。

我的解决scheme肯定会工作,你可以在其他链接器标志中使用-ObjC。

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

干杯….现在它的作品…..并且不需要删除-ObjC。

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

与@blueHula的答案相辅相成。 Parse已经从其框架中删除了Facebook SDK,意味着从某个版本(也许1.1.33)开始,集成parse.framework应该独立地集成FB SDK。

请参阅此链接使用parsingios sdk,而不包括脸书sdk

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

这是一个链接器错误…你没有在你的项目中包含一个你需要的框架,你在其中一个包含的头文件中引用它。

所以,举个例子,如果你有一个包含在你的代码中:

 #import <Parse/Parse.h> 

这可能需要一个支持框架,你必须将其包含在你的应用程序中。 你是否在Xcode中join了parse.framework

Xcode框架

我有同样的用途,唯一的第三方是我的PayPal SDK。 删除-ObjC后,一切都build好了。 (在更改设置之前,始终要对项目进行备份)

这是2015年,我只是有同样的错误。 不幸的是,上面的答案都没有为我工作。 但是这样做了:

目标>构build阶段>链接二进制与库, 然后添加libstdc ++。6.dylib

这解决了我的问题。

有许多框架需要设置-ObjC标志为其他链接标志,而Parse不允许你继续进行,如果你这样做。 为了解决这个问题,你可以做以下的事情之一。 我已经展示了需要-ObjC标志的Google Maps SDK示例,但是由于在同一个项目中parsing,我不能直接使用它:

解决scheme1 ​​ – 使用force_load标志

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

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

解决scheme2 – 使用Facebook SDK

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

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

这是我如何解决这个问题。 转到pod项目并将项目“仅构build架构”设置为否。

重buildpod项目,然后链接错误消失了! 帮助这可以帮助使用椰子树的人。 在这里输入图像描述

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

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

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

编辑:看来,版本不适用于64位体系结构。

这可以从位于<projectname>/cordova/<projectname>/platforms/ios/<projectname>.xcodeproj/project.pbxproj的项目文件中删除,

search-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", ); 

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

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