Kompiluj, kompiluj lub archiwizuj problemy z Xcode 4 (i zależnościami)

96

To pytanie rozwinęło się w ciągu ostatnich kilku tygodni, aby objąć bardziej ogólne problemy z (i aktualizowanie projektów ze starszych wersji s).

Jednak wiele problemów można rozwiązać, postępując zgodnie z tym samym zestawem instrukcji.

Jeśli masz którykolwiek z poniższych problemów, wypróbuj metody z zaakceptowanej odpowiedzi:

  • Xcode 4 nie archiwizuje aplikacji
  • Xcode 4 tworzy archiwum bezużyteczne
  • Xcode 4 nie tworzy pliku .ipa
  • Xcode 4 nie może się skompilować z powodu błędów preprocesora
  • Xcode 4 nie może znaleźć nagłówków
  • Kompletny kod Xcode 4 nie działa
  • Zależności projektu nie będą się kompilować
  • Dodanie zależności powoduje którykolwiek z powyższych problemów

Oryginalne pytanie

Tytuł: „Nie znaleziono pliku problemu leksykalnego lub preprocesora” w Xcode 4

Mam projekt w Xcode 4, który będzie dobrze zbudowany i będzie działał na urządzeniu i symulatorze, ale podczas próby zarchiwizowania błędów podczas wyszukiwania plików nagłówków powiązanych z biblioteką statyczną:

In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15:
In file included from /Volumes/Development/Path/LBProject/LBFDefines.h:23:
In file included from /Volumes/Development/Path/LBProject/Classes/LBProjectAppDelegate.h:11:
In file included from /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDirectoryManager.h:10:
/Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDataModel.h:11:9: fatal error: 'Merchant.h' file not found [1]
 #import "Merchant.h"
         ^
1 error generated. 

Xcode podaje błąd

lexical or preprocessor issue file not found 

Wiele osób w Google pokazuje ten problem, ale nie ma rozwiązania. Każdy znalazł rozwiązanie, a nawet wskazówkę.

Aktualizacja: Do user headerścieżki wyszukiwania są ustawione ${BUILT_PRODUCTS_DIR}we wszystkich konfiguracjach. Kompiluje się dobrze przy użyciu dowolnej konfiguracji, z wyjątkiem archiwizacji.

Aktualizacja 2: Merchant.h to klasa Core Data, która jest generowana automatycznie, a zatem wewnątrz .xcdatamodeldpakietu, jednak wszystkie nagłówki są kopiowane do publicznego katalogu nagłówków podczas budowania biblioteki.

Richard Stelling
źródło

Odpowiedzi:

119

Uwaga: Poniższe kroki rozwiążą 90% problemów z archiwum Xcode, jednak z komentarzy sugeruje się, aby najpierw spróbować zamknąć Xcode . Może to zaoszczędzić wiele godzin na dostosowywaniu ustawień.

  1. Sprawdź, czy „ścieżki nagłówka użytkownika” są poprawne (dodaj „” do ścieżek dla spacji, zarówno w projekcie, jak i zależnościach)
  2. Ustaw „Zawsze wyszukuj ścieżki użytkowników” na TAK
  3. Utwórz połączenie grupowe „Indeksowanie nagłówków” w swoim projekcie i przeciągnij nagłówki do tej grupy. NIE dodawaj do żadnych celów po wyświetleniu monitu. Obejmuje to wszystkie nagłówki w Twoim .xcdatamodeld. Aby je znaleźć, musisz kliknąć prawym przyciskiem myszy i wyświetlić zawartość pakietu.
  4. Dla wszystkich zależności ustaw ustawienie kompilacji „Pomiń instalację” na „Tak”
  5. Przeniesienie wszelkich nagłówków „Publicznych” w fazach kompilacji do „Projekt”
  6. Ustaw ustawienie kompilacji „Katalog instalacji” w miejscu docelowym na$(LOCAL_APPS_DIR)
  7. Zmień ustawienie kompilacji docelowej „skanuj wszystkie pliki źródłowe w poszukiwaniu dołączeń” na TAK. ( link )
  8. W przypadku nowszych wersji Xcode (> 4.2) możesz chcieć przeczytać to pytanie dotyczące obszarów roboczych.
  9. Ręcznie usuń pliki project.xcworkspace ze wszystkich projektów, do których istnieją odniesienia
Richard Stelling
źródło
28
Ostatnia sugestia to wszystko, czego potrzebowałem, aby rozwiązać ten problem. Zamknij i ponownie otwórz Xcode.
Chris Miles,
1
Tak, to samo dla mnie, po prostu musiałem ponownie uruchomić Xcode. Stało się to po zmianie nazwy i przeniesieniu plików w projekcie.
Maurizio
Ja też. Nie ma nic bardziej frustrującego niż błąd, który nie powinien istnieć. Świetnie, że tak łatwo można to rozwiązać.
maxedison
3
Uwaga dla Three20 użytkowników migrujących stare projekty z xcode3 do xcode4: (może) być konieczna zmiana preferencji xcode / location / advanced / -> Locations określone przez cel. Zobacz stackoverflow.com/questions/5261447/ ... po więcej
Ben G,
1
O cholera na numer 1. Cytaty! Środowisko $ (SRC_ROOT) oczywiście, "może" rozwiązać ścieżką ze spacjami. Nie mogłem zrozumieć, dlaczego skompresowanie mojego projektu i wyodrębnienie w innym miejscu spowodowało błąd kompilacji!
Erik Kerber
13

Miałem ten sam problem w XCode 4: "Problem leksykalny lub preprocesor Nie znaleziono pliku MyFile.h". Jednak MyFile.m nie była biblioteką statyczną, tylko klasą standardową. A MyFile.m i MyFile.h zostały odpowiednio uwzględnione i zindeksowane w projekcie.

Więc ... opuściłem XCode i Symulator, potem je zrestartowałem i problem zniknął.

richardsun
źródło
Miałem podobną sytuację, ale niechciany błąd wyświetlany z powodu nieprawidłowego odwoływania się do niepowiązanej właściwości, która była w tej samej klasie (w zasadzie zapomniałem użyć self.) - dziwny.
JARC,
11

Zauważyłem, że problem zniknął, gdy zmieniłem ustawienie kompilacji docelowej „skanuj wszystkie pliki źródłowe w poszukiwaniu dołączeń” z nie na tak.

doc taco
źródło
6

Udało mi się rozwiązać ten problem bez żadnych zmian w jakichkolwiek ustawieniach kompilacji, po prostu kopiując pliki .h do katalogu projektu w programie Finder. W ogóle NIE dodałem ich do projektu. Samo umieszczenie ich w katalogu systemu plików projektu wydawało się wystarczające, aby niejawne linkowanie Xcode działało poprawnie. Więcej szczegółów tutaj .

David Avendasora
źródło
+1 Dodałem link do pytania, w którym zaakceptował odpowiedź, dzięki za informację!
Richard Stelling,
4

Miałem taki dziwny problem. Zmiana opcji „Skanuj wszystkie pliki zasobów ...” na Tak nie pomogła. Rzuciłem okiem na Framework Search Paths i zauważyłem, że tak

  • $ (dziedziczone)
  • „$ (SRCROOT)”
  • „$ (SRCROOT) / moja / poprawna / ścieżka”

Wydawało się słuszne, ale wciąż zawodziło. Następnie spróbowałem zmienić kolejność 2 i 3 i nagle wszystko się udało. Więc nie jestem pewien, dlaczego tak się stało, ale chciałem dodać to do listy rzeczy do wypróbowania, jeśli pomoże to komuś innemu.

dizy
źródło
4

Moim rozwiązaniem była zmiana mojego

#import "HeaderFile.h"

do

#import <FrameworkName/HeaderFile.h>

i wszystko znów zaczęło działać. Niezwykłe było to, że po kilkukrotnej budowie nagle przestał działać.

slcott
źródło
Próbowałem wszystkiego innego z moim podprojektem i to była jedyna rzecz, która działała. Dziękuję Ci.
dirkoneill
W przypadku bibliotek statycznych nadal należy używać cudzysłowów. Nawiasy kątowe przeszukują ścieżki nagłówków systemu i nie będą przeszukiwać ścieżek nagłówków użytkowników, chyba że włączysz również opcję Zawsze przeszukuj ścieżki użytkownika , czego nie powinieneś, jeśli nie musisz.
devios1
2

Problem rozwiązał się sam, kiedy ustawiłem

Ustawienia kompilacji-> Projekt-> Wyszukaj ścieżki do Tak

Karolyn
źródło
2

Miałem to samo - 2 cele w moim projekcie ( Project i ProjectTest of GHUnit). Kiedy mój schemat został skonfigurowany do programu Project , podczas importowania <GHUnitIOS/GHUnit.h>wystąpił problem „nie znaleziono pliku spraw leksykalnego lub preprocesora” . Ale kiedy ustawiłem jako schemat ProjectTest , wszystko było OK. Więc dodałem też GHUnitIOS.frameworkw Project .

dobre życie
źródło
Miałem odwrotny problem. Zobacz moją odpowiedź: stackoverflow.com/a/16783389/629014
slcott
1

Wygląda na to, że ścieżki wyszukiwania nagłówków są niepoprawne i nie zostały poprawnie skonfigurowane w ustawieniach kompilacji dla aktywnego schematu. Sprawdź je i zaktualizuj swoje pytanie przy użyciu aktualnych ustawień.

Joshua Nozzi
źródło
1

Mam podobne problemy z symulatorem, ale nie z urządzeniem, a moje pola ścieżki wyszukiwania nagłówka są puste (wydaje się być domyślne). Wydaje się jednak, że zmiana obszarów roboczych rozwiązała problem. Może mógłbyś spróbować stworzyć nowy obszar roboczy, dodać do niego swój projekt i zobaczyć, czy to pomoże. Teraz badam, dlaczego.

Norman G.
źródło
1

Otrzymałem błąd „Nie znaleziono pliku” dla jednego konkretnego pliku .h w moim projekcie. Rozwiązałem problem, usuwając ten plik .h z projektu (wybierając opcję „Usuń odniesienia”) i dodając go ponownie.

cduhn
źródło
1

Dodając więcej wariantu: miałem dwa wystąpienia foo.mw Compile Sourcefazie kompilacji, co spowodowało, że dla niektórych wystąpił komunikat „Nie znaleziono nagłówka” foo.h.

wolna przestrzeń
źródło
1

Kolejna szansa:

W projekcie obszaru roboczego: obserwuj w sekcji Cel dla sekcji Fazy budowy. Jak mówi wiele podręczników, musisz mieć fazę kopiowania plików, aby skopiować wszystkie nagłówki w inne miejsce, ponieważ iOS Framework nie może zawierać plików nagłówkowych do udostępnienia (tak jest w moim przypadku).

Wybierz dla opcji Kopiuj pliki jako miejsce docelowe opcję „Katalog produktów”. Lub inny katalog podobny do twojego, w którym będą znajdować się nagłówki.

To zadziałało dla mnie. Prawdopodobnie katalog kompilacji dla archiwum (lub wydania) jest zupełnie inny niż oczekiwano w kompilacji dla debugowania.

Sprawdź również w ustawieniach obszaru roboczego katalog kompilacji.

XD

SubstanceMX
źródło
0

U mnie ten problem wystąpił po dodaniu nowych plików do projektu; puste pliki .m i .h pochodzące z NSObject. Oto jak to rozwiązałem:

  1. Zamknięto i ponownie uruchomiono xCode
  2. Usunięto dwa nowe pliki za pośrednictwem XCode
  3. Przekompilowano pomyślnie

Następnie dodałem je ponownie i też zadziałało.

Zdecydowanie błąd w xCode ...

g-dog
źródło