Parse for iOS:尝试运行应用程序时出错

时间:2013-03-17 03:17:33

标签: ios parse-platform

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

15 个答案:

答案 0 :(得分:137)

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

有几种解决方法 -

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

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

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

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

按照此处的讨论:

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

答案 1 :(得分:102)

这是一个比下载,编译和安装FB工具包更简单的解决方法,这种工具既庞大又繁琐。请注意,当然,您将无法在Parse中使用任何FB类型功能,如果触发任何期望使用这些虚拟符号的Parse代码,您将遇到严重问题。但是,如果你远离他们,我会认为你会好的。所以......

  1. 在应用程序中创建一个名为FBMissingSymbols

  2. 的对象
  3. 删除你不需要的.h

  4. 将其放入.m:

  5. 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
    

答案 2 :(得分: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

答案 3 :(得分:10)

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

ParseFacebookUtilsV4 和 ParseFacebookUtils

一旦我删除了ParseFacebookUtils,并保留了ParseFacebookUtilsV4,它就运行良好。

答案 4 :(得分:7)

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

  1. 添加" Social.framework" ," Account.framework"
  2. 添加" FacebookSDK.framework"
  3. 干杯......现在它可以.....并且不需要删除-ObjC。

答案 5 :(得分:3)

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

答案 6 :(得分:2)

@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

答案 7 :(得分:1)

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

因此,例如,如果您的代码中包含include:

#import <Parse/Parse.h>

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

Xcode Frameworks

答案 8 :(得分:1)

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

答案 9 :(得分:1)

它是2015年,我只是有同样的错误。不幸的是,上述答案都不适合我。但这样做了:

目标&gt;构建阶段&gt;链接二进制文件库 然后添加libstdc ++。6.dylib

这解决了我的问题。

答案 10 :(得分: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空白项目,则处理重复符号删除Bolt.framwork。 如果它仍然没有错误,那么删除帐户和社交框架并再次添加(如果您使用了Parse默认空白项目,则会出现这种情况)。

答案 11 :(得分:-1)

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

以下是我解决此问题的方法。转到pod项目并将“仅构建体系结构”项设置为NO。

重建pod项目然后链接错误消失了!帮助这可以帮助使用cocoapods的人。enter image description here

答案 12 :(得分:-1)

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

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

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

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

答案 13 :(得分:-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",
);

答案 14 :(得分:-1)

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

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