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/ios 가 FacebookSDK.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.framework새 ParseFacebookUtilsV4.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.