web-dev-qa-db-fra.com

Erreur de compilation XCTest.framework

J'utilise l'API DropBox Core dans mon application et par conséquent, je dois inclure le framework XCTest, car si je n'ai pas ajouté le framework XCTest, mon application ne peut pas se connecter à dropbox. Cependant, lorsque j'ajoute le framework, obtenir une erreur lors de la construction du simulateur. Il n'y a rien de mal avec mon code! Voici l'erreur:

Ld /Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Products/Debug-iphonesimulator/SnapDrop!.app/SnapDrop! normal i386
    cd "/Users/Zach/Desktop/SnapDrop!"
    setenv IPHONEOS_DEPLOYMENT_TARGET 6.1
    setenv PATH "/Applications/Xcode5-DP6.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode5-DP6.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Applications/Xcode5-DP6.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -Arch i386 -isysroot /Applications/Xcode5-DP6.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk -L/Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Products/Debug-iphonesimulator -F/Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Products/Debug-iphonesimulator -F/Users/Zach/Downloads/dropbox-ios-sdk-1.3.5 -F/Users/Zach/Downloads/dropbox-ios-sync-sdk-1-1.1.0 -F/Applications/Xcode5-DP6.app/Contents/Developer/Library/Frameworks -F/Users/Zach/Desktop -filelist /Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Intermediates/SnapDrop!.build/Debug-iphonesimulator/SnapDrop!.build/Objects-normal/i386/SnapDrop!.LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -mios-simulator-version-min=6.1 -framework iAd -framework AssetsLibrary -framework QuartzCore -framework SystemConfiguration -framework Security -framework CFNetwork -framework XCTest -framework Dropbox -framework DropboxSDK -framework CoreGraphics -framework UIKit -framework Foundation -Xlinker -dependency_info -Xlinker /Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Intermediates/SnapDrop!.build/Debug-iphonesimulator/SnapDrop!.build/Objects-normal/i386/SnapDrop!_dependency_info.dat -o /Users/Zach/Library/Developer/Xcode/DerivedData/SnapDrop!-fchnxyvnqyeefscfhmohrzxtiqeb/Build/Products/Debug-iphonesimulator/SnapDrop!.app/SnapDrop!

ld: building for iOS Simulator, but linking against dylib built for MacOSX file '/Applications/Xcode5-DP6.app/Contents/Developer/Library/Frameworks/XCTest.framework/XCTest' for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Que devrais-je faire? Si mon framework est corrompu, pouvez-vous me dire comment le réinstaller? J'ai essayé de supprimer et de réinstaller Xcode sans succès.

34
user2703123

Je suis d'accord avec Mike Weller. Vous ne devriez probablement pas créer de lien avec le framework XCTest dans votre code d'application actuel. Supprimer la structure XCTest. Examinez les erreurs de l'éditeur de liens et supprimez les éléments qui référencent le cadre. Laver, rincer, répéter.

Si vous avez une cible de test, c'est différent. Ce qui peut facilement se produire lors de la migration de SenTestKit vers XCTest, c’est le mauvais chemin de recherche dans la structure, ce qui entraîne une liaison avec la structure Mac OS X et non la structure iOS. Ça ne marche pas. 

Un moyen simple de voir quels sont les paramètres de chemin de recherche Framework corrects consiste à créer un projet factice, à ouvrir les paramètres de construction de la cible Tests, puis à filtrer le "Chemin de recherche Framework".

Je pense que les chemins corrects de la vanille sont:

$(SDKROOT)/Developer/Library/Frameworks     (non-recursive)
$(inherited)                                (non-recursive)
$(DEVELOPER_FRAMEWORKS_DIR)                 (non-recursive)
51
Ray Fix

Ajoutant aux solutions possibles pour ce problème: 

Assurez-vous de ne pas inclure le fichier MyApplicationTests.m
dans la liste "Compiler les sources" du projet non-testeurs. 

Cela peut se produire lorsque vous avez nettoyé des dossiers sur le disque.
et déplacé les choses manuellement par exemple.

Project > Targets > MyApplication > Build Phases > Compile Sources

Le symptôme le plus évident est que vous obtenez l'erreur XCTest
lorsque vous essayez d'exécuter votre application sur l'iPhone (ou le simulateur). 

XCTest ne doit pas être inclus dans votre code d'application habituel, comme indiqué
dans les autres réponses aussi.

9
Webdevotion

Je viens de supprimer le fichier "XCTest.Framework" de Project Navigator> Cibles> 'Nom du projet'> Phases de construction. Ensuite, "Produit" (menu déroulant)> Nettoyer. L'a fait pour moi!

2
anthoprotic

Si vous avez une cible de test, vous devez également vous assurer que son Base SDK est défini sur iOS 7.0 (ou mieux: Latest iOS).

1
Dirty Henry

Je devrais ajouter une petite note:

Mon projet avait tous les chemins corrects (ces trois par défaut) mais l'ordre était différent. Définir le bon ordre (en faisant glisser le chemin avec la souris dans la liste) a résolu le problème.

1
avuthless

Aucune de ces réponses ne fonctionne pour moi, je reçois toujours l'erreur,

ld: avertissement: Liaison automatique fournie '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/XCTest.framework/XCTest' , il manque l'architecture requise i386 dans le fichier /Applications/Xcode.app/Contents/Developer/Library/Frameworks/XCTest.framework/XCTest (2 tranches)

J'ai utilisé l'option de refactor de XCode 6, converti mes SenTests fonctionnant correctement en XCTests. 

Cependant, lorsque je définis les chemins de recherche du cadre sur,

$(SDKROOT)/Developer/Library/Frameworks and 
$(inherited)

ça a marché. 

0
karim

Vérifiez vos chemins de recherche dans le cadre de votre cible principale et de votre cible de test ... J'ai eu beaucoup de merde dans la mienne

plus facile si vous créez un nouveau projet ios à vue unique . lancez le test pour voir s'il peut s'exécuter - par défaut, il échoue puis vérifiez le chemin d'accès à la structure Searhc dans la cible principale et les cibles de test . projet

voir la réponse par moi brian.clear ici

Avertissement concernant l'éditeur de liens Apple (id): création pour MacOSX, mais liaison contre dylib construite pour iOS

0
brian.clear

Vous pouvez créer votre projet de structure, qui sera un projet de pod sans fichiers de test. Décochez simplement les tests lors de la création du projet.

0
Prakash Raj