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。
按照这里的讨论:
这是一个比下载,编译和安装这个庞大笨重的FB套件更简单的解决方法。 请注意,当然,您将无法使用Parse中的任何FBtypesfunction,并且如果触发任何期望使用这些虚拟符号的parsing代码,则会遇到严重问题。 但是,如果你远离他们,你会没事的我想。 所以…
-
在您的应用程序中创build一个名为FBMissingSymbols的对象
-
删除.h你将不需要它
-
把这个放在.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。
- 添加“Social.framework”,“Account.framework”
- 添加“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
?
我有同样的用途,唯一的第三方是我的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.framework
和Social.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'