W ramach niestandardowej zawierającej zarówno Objective-C i Swift kodu, kompilator Swift rzuca się następujący błąd:
[build_path]/unextended-module.modulemap:2:19: error: umbrella header 'bugtest.h' not found
umbrella header "bugtest.h"
^
<unknown>:0: error: could not build Objective-C module 'bugtest'
ios
swift
ios-frameworks
Tim Bodeit
źródło
źródło
W Xcode 7 Beta, z Swift 2, stanie się to również, jeśli nagłówek struktury nie zostanie zadeklarowany jako „Publiczny”
Na przykład miałem Cocoa Touch Framework z widocznością „Projekt” dla pliku nagłówkowego i błędem „Umbrella Header ... not found” dla wszystkich plików Swift w moim projekcie, gdy miałem nagłówek „Public”, błąd zniknął
źródło
Może się to zdarzyć na 4 różne sposoby, ignorując błędy w poprzednich wersjach Xcode
DEFINES_MODULE
nie jest ustawiony naYES
CLANG_ENABLE_MODULES
nie jest ustawiony naYES
źródło
Stanie się tak, gdy
Always Search User Paths
ustawienie zostanie włączone dla elementu docelowego Framework.Ustawienie go na
No
rozwiąże ten błąd.IMHO to jest błąd w Swift Compiler i złożyłem radar w Apple.
Zobacz rdar: // 21038443
źródło
Dla mnie - poziom dostępu był publiczny, ale nie udało się również znaleźć parasola. Przeniosłem sekcję „Nagłówki” w „Fazy kompilacji” na górę i zaczęło działać. Skrypt do podfile:
Nie mam pojęcia, dlaczego tak się dzieje. Próbowałem na fałszywych projektach - nie dzieje się. Tylko na dużych z wieloma zależnościami. Coś z kompilacją PRZED skopiowaniem nagłówków parasolowych.
źródło
Podfile
plik: błąd składni, nieoczekiwany koniec danych wejściowych, oczekiwanie keyword_end.Zdecydowanie musisz ustawić swój framework jako publiczny:
źródło
W moim przypadku ustawienie „Użyj map nagłówka” na „NIE” rozwiązało problem
źródło
Jeszcze jedno rozwiązanie: po zmianie nazwy folderu stara lokalizacja może nadal znajdować się na liście w pliku projektu dla pliku .h, nawet jeśli zaktualizowałeś lokalizację za pomocą paska bocznego Xcode. Ta stara lokalizacja powoduje błąd nagłówka parasolki.
Proste rozwiązanie: usuń odniesienie do pliku .h i dodaj je ponownie. (a potem pamiętaj, aby ponownie upublicznić!)
źródło
Zauważyłem, że przy włączonym schemacie New Swift Build System i Parallelize Build pojawią się błędy jak w tym pytaniu. Rozwiązaniem było połączenie z frameworkami, które zostały zaimportowane w szybkich plikach źródłowych. (Myślę, że wcześniej aplikacja się budowała, ponieważ tak się złożyło, że frameworki były połączone z czymś, co zostało wcześniej zbudowane w kolejce kompilacji szeregowej).
Napisałem skrypt, aby przejść przez wszystkie importy we wszystkich obiektach docelowych w obszarze roboczym i upewnić się, że ich struktury zostały połączone w tym celu.
https://github.com/Jon889/SwiftImportChecker
źródło
Jest tu już kilka doskonałych odpowiedzi. @ Shadow_x99's był bardzo pomocny. Gdybym jednak mógł uzupełnić o własne doświadczenie.
Nagłówek parasolowy jest identyfikowany automatycznie w procesie budowania. Nie jest określony w ustawieniach kompilacji celu ani nie jest dziedziczony z ustawień projektu.
Aby uniknąć tego błędu, który - od XCode 7 - wygląda następująco;
warning: no umbrella header found for target 'MyTarget', module map will not be generated
należy podjąć dwa ważne kroki.
Po pierwsze, nagłówek parasolki musi mieć taką samą nazwę jak cel . Więc jeśli celem jest nazwana struktura
MyTarget
, musi istnieć nagłówek o nazwieMyTarget.h
.Po drugie, w fazach budowania
MyTarget
- jak wspomniano w tej odpowiedzi - ten plik nagłówkowy musi być wymieniony w sekcji publicznej, jak opisano szczegółowo powyżej.źródło
Miałem ten sam problem i żadna z sugerowanych odpowiedzi nie pomogła w moim przypadku, więc zostawiam to tutaj na wypadek, gdyby ktoś miał ten sam problem.
Dodałem „Uruchom skrypt” w „Fazach kompilacji”, ale ostatecznie go usunąłem i wtedy zacząłem otrzymywać błąd.
Moje rozwiązanie wymagało wyczyszczenia projektu, przebudowania struktury, a następnie poprawnego zbudowania projektu aplikacji.
źródło
Z mojego doświadczenia wynika, że musisz wybrać cele, które powodują błąd, a nie cel projektu.
Następnie skompiluj, a po skompilowaniu będzie dostępny w miejscu docelowym projektu.
źródło
Jeśli używasz Xcode 7.1 i CocoaPods 0.39, wydaje się, że nastąpiła szybka zmiana w kompilatorze, która wpływa na niektóre CocoaPods (Nimble, Quick itp.) Wypróbuj niektóre z rozwiązań określonych w tym wątku: https://github.com/ CocoaPods / CocoaPods / Issues / 4420 jednak, jeśli żadne z nich nie działa, spróbuj użyć Xcode 7.0.1 lub 7.2 beta. Możesz je pobrać tutaj: https://developer.apple.com/downloads/ .
Edycja: w moim przypadku, aby rozwiązać problem, musiałem również obniżyć wersję CocoaPods do 0.38.2.
Późniejsza edycja: wydaje się, że nie jest związana z Xcode 7.1. Samo obniżenie wartości CocoaPods do 0.38.2 powinno pomóc:
źródło
Twój plik nagłówkowy musi znajdować się w sekcji [Fazy kompilacji / Nagłówki / Publiczne].
Jeśli twój plik nagłówkowy znajduje się już w sekcji [Fazy kompilacji / Nagłówki / Publiczne], wiele razy wykonanie poniższych czynności rozwiązało mój problem:
źródło
Rozwiązałem to zmieniając nazwę mojego module.modulemap na moduleXYZ.modulemap i zmieniając nazwę pliku modulemap w ustawieniach projektu
źródło
W moim przypadku właśnie zbudowałem określony framework z jego schematem. A potem odbuduj cały projekt i rozwiązał problem
źródło
upewnij się, że „ścieżki importu” w ustawieniach kompilacji zawierają plik, który próbujesz dołączyć ...
źródło
Usuń te pliki z katalogu projektu.
.xcworkspace
pods/
ipodfile.lock
zaktualizuj kapsułę i skompiluj projekt.
źródło
Naprawiłem to, ustawiając tryb kompilacji problematycznych ustawień kompilacji frameworka na przyrostowe.
źródło
W moim przypadku problem był spowodowany usunięciem skryptu nagłówków w fazie budowy
Usunięcie tego skryptu rozwiązało problem.
źródło
Żadna z 9 odpowiedzi nie pomogła mi, więc próbowałem stworzyć nowy projekt, który mógłbym wysłać do Apple w celu zgłoszenia błędu. Byłem zaskoczony, że nie mogłem odtworzyć problemu. Sprawdziłem ustawienia kompilacji i były one równoważne. Najwyraźniej to jakiś błąd.
Jeśli nic innego nie pomoże , spróbuj utworzyć nowy projekt i zaimportować przynajmniej niektóre klasy Objective C & Swift z bieżącego projektu, porównaj ustawienia kompilacji związane z platformą z wartościami domyślnymi z nowego projektu i ostatecznie przenieś wszystkie pliki do nowy projekt.
źródło
Pracowałem nad tym przez cały dzień, ale warto, próbowałem tutaj wszystkich sposobów , ale nie rozwiązałem tego. Stworzyłem nowy projekt, eksperyment i dowiedziałem się, że ścieżka wyszukiwania nagłówka użytkownika została ustawiona jako rekursywna $ {SRCROOT} i zmieniłem ją na nierekurencyjną $ {SRCROOT} , zmieniłem ścieżkę nagłówka mostkowania (np.
#import "SVProgressHUD.h"
->#import "Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"
), błąd zniknął.źródło