2015-04-02 25 views
8

Sono totalmente bloccato cercando di eseguire un progetto sul simulatore utilizzando AFNetworking. Ho usato questa dipendenza prima su altri progetti, quindi non capisco cosa sta andando storto qui. In primo luogo, l'errore quando si tenta di eseguire il progetto:AFNetworking non verrà compilato

Undefined symbols for architecture x86_64: 
    "_OBJC_CLASS_$_AFHTTPSessionManager", referenced from: 
     _OBJC_CLASS_$_SharedNetworkObject in SharedNetworkObject.o 
    "_OBJC_CLASS_$_AFJSONResponseSerializer", referenced from: 
     objc-class-ref in SharedNetworkObject.o 
    "_OBJC_METACLASS_$_AFHTTPSessionManager", referenced from: 
     _OBJC_METACLASS_$_SharedNetworkObject in SharedNetworkObject.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Sono sicuro che questo è parte del problema, ma non so come risolverlo:

enter image description here

Questo è il file incriminato .h:

#import <Foundation/Foundation.h> 
#import <AFNetworking/AFNetworking.h> 
#import "SharedSessionKey.h" 

@interface SharedNetworkObject : AFHTTPSessionManager 

+ (SharedNetworkObject *) sharedNetworkObject; // class method to return the singleton object 

@end 

può essere interessante notare che quando si digita la linea di importazione per AFNetworking, la linea riempie dopo un paio di caratteri, quindi so che esiste una certa consapevolezza della presenza della dipendenza di AFNetworking.

Ho installato la dipendenza utilizzando CocoaPods. Qui è la mia Podfile:

# Uncomment this line to define a global platform for your project 
platform :ios, '8.0' 

source 'https://github.com/CocoaPods/Specs.git' 

target 'WeRun' do 
pod "AFNetworking", "2.5.2" 
end 

target 'WeRunTests' do 

end 

E, naturalmente sto lavorando in .xcworkspace (non .xcodeproj).

più una cosa, il mio file xcconfig assomiglia a questo, che corrisponde con altri AFNetworking successo costruisce:

GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" 
OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" 
OTHER_LDFLAGS = -ObjC -l"Pods-MyApp-AFNetworking" -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" 
OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) 
PODS_ROOT = ${SRCROOT}/Pods 

Non so che altro cercare. Ho rimosso completamente il pod e reinstallato, solo per trovare lo stesso errore. Qualcuno può aiutarmi a capirlo? Grazie!

+0

https://github.com/AFNetworking/AFNetworking/issues/2324 – Klevison

+0

Imposta architettura di compilazione attiva solo su sì – Jassi

+0

@Jassi - non ha funzionato. – Alex

risposta

24

Ho passato un paio d'ore a combattere con lo stesso identico problema, esaminando tutti i risultati di Google che ho trovato.Costruire per il dispositivo funzionava, ma non era la costruzione del simulatore.

qui sono i passi che finalmente risolto il problema per me:

  1. Cancella cache XCode:

    rm -rf ~/Library/Developer/Xcode/DerivedData/ 
    
  2. Cancella cache CocoaPods e reinstallare le dipendenze:

    rm -rf "${HOME}/Library/Caches/CocoaPods" 
    rm -rf "`pwd`/Pods/" 
    pod update 
    
  3. Infine andare al progetto "Pod" e impostare il Build Active Architectures Only a No anche per la configurazione "Debug".

+0

Molto utile. Grazie. – SAHM

+0

ha funzionato come un fascino! –

+0

funziona, grazie! questa dovrebbe essere la risposta corretta. – Marku

0

Non fornire la versione dopo AFNetworking nel file pod. E prova ancora. Assicurati di rimuovere anche la virgola.

+0

Grazie, ma non ha risolto il problema. – Alex

+0

Non ho numeri di versione nel mio Podfile. Ancora non funziona. – Questioner

0

Bene, ho risolto questo problema, ma non sono sicuro del motivo per cui ha funzionato. Stavo sperimentando con gli altri linker flag nelle impostazioni di compilazione. Ho cancellato la bandiera che è stata messa lì dall'installazione di CocoaPods (presumibilmente) e l'ho sostituita copiando la bandiera dal file .xcconfig. Nello specifico, ho aggiunto questo testo: -l"Pods-WeRun-AFNetworking" come seconda bandiera subito dopo -ObjC. Mi sembra esattamente ciò che avevo appena cancellato, quindi esisto davvero a suggerire questa come una "risposta", ma ora funziona, quindi qualcosa deve essere cambiato.

Se qualcuno può far luce su questo o dirmi che mi sto prendendo in giro, per favore fatemelo sapere. Grazie per i suggerimenti.

4

Ti suggerisco di aggiungere il flag $ (ereditato) nelle "Impostazioni di compilazione".

  • Toccare il progetto icona blu
  • Selezionare "Impostazioni Build" scheda
  • Sotto "Linking" troverete un ambiente chiamato "Altre Bandiere Linker"
  • aggiungere $ (ereditato) nella text
+0

Che non ha funzionato affatto. – Questioner

-2

Un metodo semplice. Scarica il file del repository. Trascina e rilascia il contenuto della cartella di rete AF (puoi creare gruppi se necessario) quindi usa la libreria. (Usa #import "AFnetworking.h")

0

ho avuto lo stesso problema, quando ho avuto -lc++ già impostato su Other linker flags per scopo l'utilizzo della libreria cpp.
Ho aggiunto questi due flag -ObjC -l"AFNetworking" su Other linker flags, che ha funzionato e compilato correttamente. Queste sono le due bandiere -ObjC e -l"AFNetworking". La scansione viene aggiunta contemporaneamente allo -ObjC -l"AFNetworking".

Problemi correlati