[英]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。
按照這里的討論:
這是一個比下載,編譯和安裝FB工具包更簡單的解決方法,它有點大而且繁瑣。 請注意,當然,您將無法在Parse中使用任何FB類型功能,如果觸發任何期望使用這些虛擬符號的Parse代碼,您將遇到嚴重問題。 但是,如果你遠離他們,我會認為你會好的。 所以...
在應用程序中創建一個名為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的答案,但它不再適用,因為它缺少一些新的社交課程。
所以做同樣的事情,但相反,添加這個:
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。
干杯....現在它工作.....並且不需要刪除-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
?
我有同樣的用途,我唯一的第三方是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.framework
和Social.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.