Mam kilka projektów, które próbuję zbudować za pomocą Xcode 6 Beta 2. Wszystkie projekty mają jakąś bibliotekę używającą XCTest (Kiwi / XCTest i Specta), które nie są budowane w Xcode 6, ponieważ XCTest / XCTest.h nie może być znalezionym.
fatal error: 'XCTest/XCTest.h' file not found
#import <XCTest/XCTest.h>
Zauważyłem, że XCTest.framework nie znajduje się już na liście faz budowania "Link Libraries with Binaries", ale to jest w porządku, ponieważ kiedy tworzę nowy projekt z Xcode 6, wydaje się, że biblioteka jest podłączana automatycznie.
Być może ma to jakieś znaczenie, wszystkie moje zależności wymagające XCTest są przenoszone przez Cocoapods.
Czy jest coś, o czym nie wiem, co muszę zaktualizować w swoim projekcie?
Przenosiłem pliki w projekcie. Wszystko, co musisz zrobić, to wybrać pliki testowe
xxxTests.m
itp. Ifile inspector
wybraćtarget
jako,test
a nie jako zwykły cel.źródło
Zauważyłem, że XCTest jest dostępny tylko dla celu testowego (w Xcode 6). Jeśli używasz XCTest do innego celu (z jakiegokolwiek powodu), zobaczysz
XCTest.h not found
błąd.źródło
Ten błąd pojawia się po dodaniu pliku, w którym XCTest jest używany poza celem testowym. Aby naprawić to w AppCode, możesz kliknąć prawym przyciskiem myszy podejrzany plik i wybrać `` Zarządzaj celami '', a następnie upewnić się, że zaznaczony jest tylko cel testowy.
źródło
@squarefrog ma właściwą odpowiedź, ale będziesz musiał to robić ręcznie za każdym razem, gdy aktualizujesz swoje pody :(
Jeśli dodasz to do swojego pliku podfile, automatycznie doda to dodatkową ścieżkę. Np. Jeśli chcesz dodać
$(PLATFORM_DIR)/Developer/Library/Frameworks
doFRAMEWORK_SEARCH_PATHS
Specta:post_install do |installer| target = installer.project.targets.find { |t| t.to_s == "Pods-Tests-Specta" } if (target) target.build_configurations.each do |config| s = config.build_settings['FRAMEWORK_SEARCH_PATHS'] s = [ '$(inherited)' ] if s == nil; s.push('$(PLATFORM_DIR)/Developer/Library/Frameworks') config.build_settings['FRAMEWORK_SEARCH_PATHS'] = s end else puts "WARNING: Pods-Tests-Specta target not found" end end
źródło
"Pods-Tests-Specta"
aby dopasować ustawienia projektu, lub po prostu użyj pętli zasugerowanej przez @squarefrog, aby iterować po każdym celu.installer.project.targets.each do |target
aby zapętlić wszystkie cele i zastosować zmianę.Po pewnym czasie napotkałem ten sam problem, zaimportowałem framework XCTest z faz kompilacji i rozwiązałem problem.
Fazy kompilacji-> XCTest.Framework> wyczyść i uruchom. Mam nadzieję, że komuś to pomoże.
w celach informacyjnych ... Importuj XCTest do istniejącego projektu
źródło
W chwili pisania tego tekstu najnowsza wersja Cocoapods (0.33.1) nie zawiera rozwiązania problemu.
Ale najnowocześniejsza wersja tak.
Postępuj zgodnie z tym przewodnikiem, aby ustawić najnowszą wersję Cocoapods ze źródła. Nazywam mój
pod-dev
(omówiony w przewodniku), aby odróżnić go od wersji strąków z klejnotem.Zaletą tego podejścia jest to, że nie potrzebujesz dodatkowych skryptów w swoim pliku Podfile. Musisz tylko pamiętać, aby zrobić
pod-dev install
zamiast zwykłegopod install
.źródło
Najlepszym sposobem na przeprowadzenie testu XCTest jest dodanie go z Nawigatora testów (piąta ikona w lewym panelu).
W ten sposób nowy
xx.m
plik testowy nie jest przeznaczony dla (w prawym okienku) aplikacji (w lewym okienku> Element docelowy, rozszerzenie opakowania: aplikacja), ale pakiet (rozszerzenie opakowania: xctest)'XCTest/XCTest.h' file not found
, to dlatego, że Twój plik musiał być przeznaczony dla aplikacji.źródło
To najłatwiejsze rozwiązanie, jakie znalazłem. Żadne zmiany w projekcie nie są konieczne. Ta zmiana będzie obowiązywać do następnej aktualizacji Xcode:
cd /Applications/Xcode6-Beta7.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/Developer/Library/Frameworks ln -s ../../../../../Library/Frameworks/XCTest.framework
źródło
W przypadku projektu bez Cocoapods (czyli nie odpowiadającego bezpośrednio na pytanie PO, ale być może pomocnego dla mnie lub innych w przyszłości) mieliśmy ten sam problem. Zostało to rozwiązane poprzez zastąpienie naszych poprzednich pozycji OCTest przez XCTest. Na przykład plik MyApp.xcodeproj / project.pbxproj ma tę różnicę (skróconą);
- path = MyAppUnitTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + path = MyAppUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
źródło