簡體   English   中英

Parse for iOS:嘗試運行應用程序時出錯

[英]Parse for iOS: Errors when trying to run the app

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

這是與Parse iOS 1.1.33版本相關的某種錯誤,因為多人看到了同樣的錯誤 - 我自己也包括在內。

有幾種解決方法 -

如果您沒有使用需要-ObjC鏈接器標志的庫,則可以從項目中刪除-ObjC:

構建設置>其他鏈接器標志>刪除-ObjC

或者如果您使用的是需要該標志的庫,則可以添加Facebook SDK。

這兩個選項都將消除錯誤。 希望他們解決這個問題,因為我不需要在我的應用程序中使用Facebook SDK。

按照這里的討論:

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

這是一個比下載,編譯和安裝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

您必須刪除舊的ParseFacebookUtils.framework並保留新的ParseFacebookUtilsV4.framework才能使其正常工作。

我喜歡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

檢查並確保您沒有添加兩個版本的“ParseFacebookUtils”框架:

ParseFacebookUtilsV4和ParseFacebookUtils

一旦我刪除ParseFacebookUtils,並保持ParseFacebookUtilsV4它工作正常。

我的解決方案肯定會工作,您可以在其他鏈接器標志中使用-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。

使用解析ios sdk參考此鏈接,不包括facebook sdk

關鍵的一點是使用-force_load $(SRCROOT)/path/libname.a必要的第三方庫鏈接,而不是使用-all_load-ObjC

這是一個鏈接器錯誤...您沒有在項目中包含所需的框架,您在其中一個包含的頭文件中引用了該框架。

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

#import <Parse/Parse.h>

它可能需要一個支持框架,您必須將其包含在您的應用程序中。 你是否在Xcode中包含了parse.framework

Xcode框架

我有同樣的用途,我唯一的第三方是PayPal SDK。 刪除后-ObjC一切都很好。 (在更改設置之前,始終備份您的項目)

它是2015年,我只是有同樣的錯誤。 不幸的是,上述答案都不適合我。 但這樣做:

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

這解決了我的問題。

有許多框架需要將-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默認空白項目,則會出現這種情況)。

很多天我一直困擾着這個問題。 我使用cocoapods來管理所有第三個SDK。

以下是我解決此問題的方法。 轉到pod項目並將“僅構建體系結構”項設置為NO。

重建pod項目然后鏈接錯誤消失了! 幫助這可以幫助使用cocoapods的人。 在此輸入圖像描述

我有同樣的問題。 我從這里下載了以前的版本(1.1.32)解決了:

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

(在我的情況下,我需要-ObjC標志)

編輯:似乎該版本不適用於64位架構。

這可以從位於<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",
);

安裝cocoaPods並將其添加到您的Podfile:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM