iOS 용 구문 분석 : 앱 실행시 오류


80

저는 Parse SDK로 작업 해 왔으며 빠른 단계 가이드를 따랐습니다. 실행하려고하면 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)

: 당신이 대상으로하는 .m 파일을 추가해야 할 것 같습니다 stackoverflow.com/a/5300901/620197
마이크 D

2
두 플래그 -ObjC 및 -all_load 중 하나가있는 경우 Facebook SDK가 있어야 / 설치되어 있어야합니다. 또는 실제로 필요하지 않은 경우 해당 플래그를 제거 할 수 있지만 restKit에 필요하다고 생각합니다. 그러므로 나는 그것들이 필요합니다. parse.com/questions/…
topwik

-objc flag.its가 나를 위해 작동하는 bolt.framework 및 facebook.framework를 추가하십시오.
Shauket Sheikh 2015-01-12

LD : 프레임 워크는하지 아키텍처있는 ARMv7 연타를 위해 금속을 발견 : 오류 : 링커 명령 (호출을보기 위해 사용 -v) 종료 코드 1로 실패
산지 브 샤르마

답변:


137

이것은 여러 사람이 동일한 오류를보고 있기 때문에 Parse iOS 1.1.33 릴리스와 관련된 일종의 버그입니다.

몇 가지 해결 방법이 있습니다.

-ObjC 링커 플래그가 필요한 라이브러리를 사용하지 않는 경우 프로젝트에서 -ObjC를 제거 할 수 있습니다.

빌드 설정> 기타 링커 플래그> remove -ObjC

또는 해당 플래그가 필요한 라이브러리를 사용하는 경우 Facebook SDK를 추가 할 수 있습니다.

두 옵션 모두 오류를 제거합니다. 내 앱에 Facebook SDK가 필요하지 않기 때문에이 문제를 해결하기를 바랍니다.

여기에서 토론을 따르십시오.

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


-ObjC를 제거해도 문제가 해결되지 않았습니다. 아래 dbquarrel의 응답은 그래도했습니다.
shim

2
나는 -all_load 링커 플래그를 제거하고 당신이 답을 업데이트 할 수 있도록 또한 플래그 C 포함 즉, 나를 위해 그것을 고정 :
A'sa 디킨스

1
다른 링커 플래그에서는 '-all_load'전에 'pod install'에서 'other linker flag'를 '$ (inherited)'로 설정하도록 제안했지만 아무런 문제없이 작동했습니다.
turbo

Xcode 6.2 (iOS 8)에 Facebook SDK를 어디서 찾고 추가하는 방법을 알려 주시겠습니까? Facebook.pkg를 설치 한 후 파일을 찾을 수없고 다른 불필요한 파일이 있는 developers.facebook.com/docs/iosFacebookSDK.framework있습니다.
Incpetor

-ObjC 링커 스위치를 제거하면 문제가 있습니다. libCordova.a 라이브러리는 -ObjC가 제거되면로드되지 않는 NSString의 일부 범주를 지정합니다. 해결 방법은 링크 된 프레임 워크에서 libCordova.a를 제거하고이를 기타 링커 플래그 빌드 설정에 추가하는 것입니다. -force_load $ (BUILT_PRODUCTS_DIR) /libCordova.a
Nijil Nair

102

크고 번거로운 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

6
내 문제를 해결했습니다. 감사합니다. +1
Ali Sufyan 2013

2
빠르고 간단합니다! 감사. +1
David Da Silva Contín 2014

1
감사합니다 @dbquarrel, 한
iBhavik

2
이것은 마법의 솔루션입니다 .. 앱에서 FB 통합을 원하지 않으면 그것을 선택하십시오.
Bharat

1
가장 쉬운 솔루션 :-)
Muzammil

27

이전을 삭제하고 ParseFacebookUtils.frameworkParseFacebookUtilsV4.framework것을 유지 해야 작동합니다.


3
이 스레드를 스크롤하고 있습니다. 정답입니다! / \
Raphael Oliveira

이것이 나를 위해 고친 것입니다! Parse의 웹 사이트에 대한 개발자 의견이나 여기에서 다른 답변이 작동하지 않았습니다 ... 가능하다면 +9000!
WendiKidd 2015-06-25

쉽고 완벽합니다. 감사!
Lapidus 2015 년

네…이게 다입니다. 이 오래된 busted 라이브러리가 여전히 Parse SDK와 함께 제공되는 이유는 무엇입니까 ?? 이것은 그렇게 복잡해서는 안됩니다.
thefaj

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
업데이트 해주셔서 감사합니다!
sridvijay

라는 응용 프로그램에서 객체를 생성합니다 FBMissingSymbols(당신이 그것을 필요 없어요 때문에)을 .H를 삭제 한 다음에 위를 넣어FBMissingSymbols.m
네이트 리

이 새 .m파일 이 #import <Foundation/Foundation.h>맨 위에 포함 되어야 하지 않습니까?
AdamT 2015 년

10

다음과 같은 두 가지 버전의 "ParseFacebookUtils"프레임 워크가 추가되지 않았는지 확인하십시오.

ParseFacebookUtilsV4 및 ParseFacebookUtils

ParseFacebookUtils를 제거하고 ParseFacebookUtilsV4를 유지하면 정상적으로 작동했습니다.


이것이 바로 문제였습니다. 제거되면 9 개의 오류가 모두 사라졌습니다! 감사합니다
Nick89

7

내 솔루션은 확실히 작동하며 다른 링커 플래그에서 -ObjC를 사용할 수 있습니다.

  1. "Social.framework", "Account.framework"추가
  2. "FacebookSDK.framework"추가

건배 .... 이제 작동합니다 ..... -ObjC를 제거 할 필요가 없습니다.


이것은 정말 간단하고 훌륭한 대답입니다. 하지만 제 경우에는 Facebook.framework를 추가하지 않았고 여전히 오류없이 앱을 빌드했습니다. 그러나 어쨌든 간단한 해결책은 +1.
hp iOS Coder

저에게는 "Social.framework", "Account.framework"만 추가되었습니다. 감사합니다, 매력처럼 작동합니다 :)
evya aug

3

'Accounts.Framework'및 / 또는 'Social.Framework'를 추가해야하는 것 같습니다.


2

@blueHula의 답변을 보완합니다. Parse는 프레임 워크에서 Facebook SDK를 제거했습니다. 즉, 일부 특정 버전 (1.1.33)에서 parse.framework를 통합하려면 FB SDK를 독립적으로 통합해야합니다.

facebook sdk를 포함하지 않고 parse ios sdk를 사용 하여이 링크 참조하십시오.

핵심은 및 -force_load $(SRCROOT)/path/libname.a사용하는 대신 필요한 타사 라이브러리와 연결하는 데 사용하는 것입니다.-all_load-ObjC


1

링커 오류입니다. 포함 된 헤더 파일 중 하나에서 참조하는 프로젝트에 필요한 프레임 워크가 포함되어 있지 않습니다.

예를 들어 코드에 포함이있는 경우 :

#import <Parse/Parse.h>

지원 프레임 워크가 필요할 수 있으며 앱에 포함해야합니다. parse.frameworkXcode 내에 from 을 포함 시켰습니까?

Xcode 프레임 워크


1

저도 같은 용도로 사용했고 제가 가진 유일한 타사는 PayPal SDK였습니다. -ObjC를 제거한 후 모든 것이 잘 구축되었습니다. (설정을 변경하기 전에 항상 프로젝트를 백업하십시오)


1

2015 년이고 같은 오류가 발생했습니다. 불행히도 위의 답변 중 어느 것도 나를 위해 일하지 않았습니다. 그러나 이것은 :

Target> Build Phases> Link Binary With Libraries 그런 다음 libstdc ++. 6.dylib 추가

이것은 나를 위해 문제를 해결했습니다.


문제의 일부를 수정하는 것 같습니다
SKYnine 2011

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.framework하고 Social.framework. Bolt.framework를 추가하고 Parse blank project를 사용하는 경우 중복 심볼 제거를 처리합니다 Bolt.framwork. 여전히 오류가 거의 없으면 계정 및 소셜 프레임 워크를 제거하고 다시 추가합니다 (Parse 기본 빈 프로젝트를 사용한 경우에 해당됨).


-1

나는이 문제를 며칠 동안 괴롭혔다. 세 번째 SDK를 모두 관리하기 위해 cocoapods를 사용했습니다.

이 문제를 해결 한 방법은 다음과 같습니다. pod 프로젝트로 이동하여 "build architecture only"항목을 NO로 설정합니다.

포드 프로젝트를 다시 빌드하면 링크 오류가 사라집니다! 코코아 포드를 사용하는 사람을 도울 수 있습니다.여기에 이미지 설명 입력



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

-1

cocoaPods를 설치하고 Podfile에 추가하십시오.

pod 'Facebook-iOS-SDK'
pod 'Parse'
pod 'ParseFacebookUtils'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.