2017-02-14 11 views
5

Mam projekt Xcode, który nie chce skompilować mojego głównego celu aplikacji, aby wygenerować produkt przed próbą użycia go jako hosta aplikacji podczas uruchamiania jednostki testy. Z Xcode próbuję uruchomić testy jednostkowe z ⌘ + U.Błąd testu jednostki Xcode 8: Nie można określić identyfikatora pakietu dla TEST_HOST

razu dostać okno w którym stwierdza: Could not determine bundle identifier for [app name] TEST_HOST

(Wymień [nazwa aplikacji] z rzeczywistym nazwa aplikacji)

Okno to zawiera także ścieżkę do mojego lokalnego produktów pochodnych danych katalogu: "/Users/***/Library/Developer/Xcode/DerivedData/Lowes-aymgdtrbrarmcidtkxoqxeafmxmj/Build/Products/Debug-iphonesimulator/[app name]"

Mam testy jednostkowe skonfigurowane z ustawieniem TEST_HOST wskazujące na $(BUILT_PRODUCTS_DIR)/[app name].app/[app name]. Docelowy cel jednostki ma docelową zależność od głównego celu aplikacji. Ustawienie BUNDLE_LOADER jest ustawione na $(TEST_HOST). Jeśli skompiluję główny cel aplikacji, najpierw przez naciśnięcie klawisza ⌘ + B, zostanie utworzona poprawna struktura katalogów i aplikacja, a następnie nastąpi próba uruchomienia pasków startowych ⌘ + U i przeprowadzenie testów jednostkowych poprawnie. Jeśli zrobię porządek i spróbuję ponownie, natychmiast zawiedzie. Nigdy wcześniej nie natknąłem się na tę kwestię i wydaje się, że pojawiły się one po konwersji aplikacji na Swift 3. Może to mieć lub nie mieć żadnego wpływu na problem, nie do końca pewne.

Przeczytałem kilka odpowiedzi tutaj i próbowałem wielu sugestii, ale wydaje się, że nie mają tego samego problemu rootowego co ja. Dla większości ludzi ustawienie aplikacji hosta na None i powrót do głównego celu rozwiązuje problem. Nie dotyczy to mnie.

Próbowałem świeże kas, ponownej konwersji aplikacji i celów testowych Swift 3, a także czyste folderu standardowego czystego/build/wycierania danych pochodnych. Żadne z nich nie wydaje się mieć żadnego skutku.

Czy ktoś jeszcze doświadczył tego problemu i znalazł rozwiązanie?

+0

Spróbuj wypróbować wersję przed konwersją, wyczyść projekt i pochodne dane, upewnij się, że buduje, konwertuj ponownie, wyczyść projekt i pochodne dane, kompilacja. – shallowThought

+0

Tak, wykonałem wszystkie te kroki w ramach rozwiązywania problemów. Teraz wydaje się, że Xcode po prostu nie chce najpierw zbudować celu aplikacji. –

+0

Może zaktualizuj swoje pytanie, podając szczegóły swoich nowych odkryć. Nie rozumiem problemu w Twoim komentarzu "wydaje się, że Xcode po prostu nie chce najpierw zbudować celu aplikacji". Nie buduje commit przed konwersją? – shallowThought

Odpowiedz

12

znalazłem uchwałę w tej sprawie. Może nie mieć zastosowania do każdego scenariusza, ale naprawił mój. W głównych ustawieniach projektu na karcie Informacje dostępna jest opcja wyboru konfiguracji do uruchomienia po uruchomieniu kompilacji linii poleceń. Mój został ustawiony na Release. Przerzucenie tego do debugowania poprawiło mój problem.

Xcode Project Settings, Info Tab

+1

Innym możliwym rozwiązaniem jest ustawienie "Bundle Loader" również w konfiguracji Release. –

+0

Naprawiono to dla mnie. Nadal działał, gdy zmieniłem go z powrotem na wersję Release. –

+1

@DanielLahyani Myślę, że twoje rozwiązanie jest poprawne, ale czy możesz wyjaśnić, dlaczego? Wielkie dzięki –

0

Usuwanie Test Host całkowicie od Build Settings swojej cel testu byłoby rozwiązać ten problem

+0

Próbowałem tego kroku, nie miało to wpływu na problem, którego doświadczyłem w związku z tym pytaniem. –

+0

Prawdopodobnie dlatego, że "Host testowy" jest faktycznie ustawiony na '$ (BUNDLE_LOADER)' (jest to wartość domyślna, jak sądzę), jeśli usuniesz wartość "Bundle Loader", która prawdopodobnie wykona pracę. –

0

Wydaje się, że ustawienie "Bundle Loader" w konfiguracji Release rozwiązuje problem.

Nie mogę w pełni zrozumieć, dlaczego, ale dla mnie ten błąd zawsze pojawiał się w naszym systemie CI, gdzie wykonujemy kompilację z wiersza poleceń. W ustawieniach projektu ustawiliśmy "Użyj Release dla kompilacji linii poleceń". Dlatego uważam, że nawet jeśli ustawiliśmy konfigurację kompilacji na Debugowanie za pomocą argumentów wiersza poleceń, xcodebuild ignoruje argument konfiguracji i częściowo wykorzystuje ustawienia "Release". Jest to prawdopodobnie błąd w systemie xcodebuild (myślę, że warto warty), jeśli ktokolwiek znajdzie lepsze wyjaśnienie, dlaczego rozwiązuje problem, który chciałbym o nim usłyszeć.

Mam nadzieję, że to pomoże.