Używam Xcode 6,
1) Najpierw tworzę bibliotekę dynamiczną (CoreLibrary). Ta biblioteka zawiera plik RequestPoster.h.
2) Następnie tworzę Cocoa Touch Framework i dodałem tę bibliotekę dynamiczną (CoreLibrary).
3) Następnie ta struktura jest dodawana do mojego projektu i powoduje błąd w pliku RequestPoster.h (CoreLibrary).
Błąd: uwzględnij niemodułowy nagłówek w klasie modułu platformy:
ifaddrs.h, arpa / inet.h, sys / types.h>
Nie znaleziono tych plików w projekcie.
ifaddrs
, są one zobowiązane do zaimportowania ifaddrs.h./usr/include/libproc.h
?Upewnij się, że pliki nagłówkowe są publicznie dostępne jako część publicznych nagłówków struktury.
Idź do Framework -> Target -> Build Phases i przeciągnij, aby przenieść odpowiednie pliki nagłówkowe z Project do Public. Mam nadzieję, że to pomoże!
źródło
Możesz ustawić opcję Zezwalaj na niemodularne dołączanie w modułach struktury w ustawieniach kompilacji dla celu, na który ma to wpływ, na TAK. Oto ustawienie kompilacji, które musisz edytować:
UWAGA : Należy użyć tej funkcji, aby odkryć podstawowy błąd, który, jak stwierdziłem, jest często powodowany przez powielanie globalnych dołączeń w nawiasach kątowych w plikach z pewną zależnością, tj .:
Jeśli ustawienie Zezwalaj na niemodularne dołączanie w modułach ramek na TAK powoduje zestaw błędów „X jest niejednoznacznym odniesieniem” lub coś w tym rodzaju, powinieneś być w stanie wyśledzić szkodliwe duplikaty i je wyeliminować. Po wyczyszczeniu kodu ustaw opcję Zezwalaj na niemodularne dołączenia w modułach ramek z powrotem na NIE .
źródło
Miałem ten sam problem i rozwiązałem go, po prostu upubliczniając plik nagłówkowy.
Jeśli pracujesz nad wieloma modułami w swoim projekcie. Następnie plik nagłówkowy musi być publiczny, aby mógł być używany w innych częściach projektów. To, czego potrzebujesz, to wybrać ten plik nagłówkowy i w widoku Narzędzia projektu. Zmień plik z projektu / prywatnego na publiczny. Zobacz zdjęcie poniżej:
źródło
„Uwzględnij niemodułowy nagłówek wewnątrz modułu struktury”
Gdy pojawi się ten błąd, w niektórych przypadkach rozwiązaniem może być po prostu oznaczenie pliku, który próbujesz zaimportować, jako „publiczny” w inspektorze plików „Członkostwo docelowe”. Wartość domyślna to „Projekt” i ustawienie w ten sposób może spowodować ten błąd. Tak było na przykład podczas próby zaimportowania nagłówków Google Analytic do frameworka.
źródło
W rzeczywistości łatwiejszym sposobem naprawienia tego jest przeniesienie
#import
instrukcji na początek.m
pliku (zamiast umieszczania jej w.h
pliku nagłówkowym). W ten sposób nie będzie narzekać, że zawiera niemodułowy plik nagłówkowy. Miałem ten problem gdzieAllow non-module includes
ustawionyYES
tak nie działa na mnie, więc przesuwając go do pliku wdrażania, zatrzymał sędzią. W rzeczywistości jest to preferowany sposób importowania i włączania plików nagłówkowych. Gdy to zrobisz, ustawienie z powrotem naNO
powinno działać.Idealnie powinniśmy starać i dążyć do posiadania
Allow non-module includes
ustawionyNO
. Ustawienie tegoYES
w większości przypadków oznacza, że robisz coś źle. To ustawienie oznacza „Zezwalaj na importowanie losowych plików nagłówkowych na dysku, które w innym przypadku nie są częścią modułu”. Odnosi się to do bardzo niewielu przypadków użycia w praktyce, więc to ustawienie powinno zawsze byćNO
(tj. Wartość domyślna).źródło
W przypadku, gdy tworzysz własny framework:
Dlaczego to się dzieje?
Jeśli którykolwiek z publicznych plików nagłówkowych, o których wspominałeś w module.modulemap, zawiera instrukcje importu, które nie są wymienione w modulemap, spowoduje to błąd. Ponieważ próbuje zaimportować nagłówek, który nie jest zadeklarowany jako modułowy (w module.modulemap), łamie modułowość frameworka.
JAK to naprawić?
Po prostu dołącz nagłówek, który spowodował błąd w module.modulemap i zbuduj ponownie!
DLACZEGO NIE po prostu ustawić zezwolenie niemodułowe na TAK?
Ponieważ nie jest to tak naprawdę rozwiązanie, mówisz swojemu projektowi „ten framework miał być modułowy, ale tak nie jest. Użyj go jakoś, nie obchodzi mnie to”. Nie rozwiązuje to problemu modułowości biblioteki.
Więcej informacji można znaleźć w tym poście na blogu lub w dokumentacji clang .
źródło
Jeśli potrzebujesz tego dla celów CocoaPods, dodaj te wiersze w
Podfile
:źródło
Allow Non-modular Includes in Framework Modules
działa tylko w kodzie objc. nie działa szybko.Po okresie badań odkryłem, że swift może przekazać parametr ostrzeżenia do clang, więc ustawiono,
OTHER_SWIFT_FLAGS
aby-Xcc -Wno-error=non-modular-include-in-framework-module
powstrzymać błąd szybkiego importu.tylko dla kogoś, kto ma ten sam problem
źródło
Miałem ten sam problem i nic z góry mi nie pomogło. Mam więc nadzieję, że moja odpowiedź będzie dla kogoś pomocna. W moim przypadku problem był w ustawieniu ALWAYS_SEARCH_USER_PATHS. Kiedy był ustawiony na ŻADNY projekt został zbudowany i działał dobrze. Ale o ile jeden z podów wymagał ustawienia na TAK, otrzymałem błąd
Po kilku filiżankach kawy i całodziennych poszukiwaniach dowiedziałem się, że zgodnie ze znanymi wydaniami Xcode 7.1 Beta 2 :
Używałem jednak XCode 7.3, ale wygląda na to, że ten błąd nie został jeszcze naprawiony.
źródło
ten sam problem sprawia, że crazy. w końcu umieszczam 'import xxx.h' w implementacji zamiast interfejsu, może rozwiązać problem.A jeśli używasz Cocoapods do zarządzania swoim projektem. możesz dodać
w pliku „xxx.podspec”.
źródło
Jeśli widzisz ten błąd w nagłówku parasolowym podczas tworzenia struktury dynamicznej , pamiętaj, aby zaimportować plik jako:
#import "MyFile.h"
a nie jako
#import <MyFramework/MyFile.h>
.źródło
Natknąłem się również na ten problem i początkowo myślałem, że jest to problem z CocoaPods, ale był to problem w ustawieniach kompilacji aplikacji, w których ktoś (prawdopodobnie ja) ustawił
${PODS_ROOT}
ścieżki wyszukiwania nagłówków i ustawił to jakorecursive
wyszukiwanie. Umożliwiło to znalezienie nagłówków, które nie były przeznaczone do użycia podczas tworzenia aplikacji. Kiedy ustawiłem to na użycie,non-recursive
wszystko było w porządku. używanierecursive
wyszukiwania to okropny sposób na znalezienie odpowiednich nagłówków. Wyciągnięta lekcja.źródło
To był dla mnie trochę irytujący problem. Żadne sugestie nie wydawały się pomocne w moim konkretnym przypadku, ponieważ musiałem uwzględnić „niemodularne” nagłówki w moim indywidualnym pliku nagłówkowym. Obejście, którego użyłem, polegało na umieszczeniu wywołania importu w pliku nagłówka prefiksu.
źródło
Skończyło się na przeniesieniu Umbrella Header na dół listy Headers po sprawdzeniu powyższych rozwiązań i to zadziałało w Xcode 9.3.
źródło
Rozwiązałem to usuwając
Modules
folder z frameworka.Przejdź do lokalizacji struktury, która jest obecna w projekcie aplikacji, używając wyszukiwarki
Wejdź do
Test.framework
folderu (w powyższym przypadku będzieCoreLibrary.framework
) i UsuńModules
folder.Wyczyść i ponownie skompiluj aplikację, rozwiąże to problem.
źródło
W moim przypadku zapomniałem dodać plik .h i .m w sekcji "s.source_files" pliku .podspecs.
po dodaniu tego działa dobrze.
źródło
spróbuj
@import FrameworkName
zamiast#import "FrameworkName.h"
źródło
Udało mi się usunąć dziesiątki tych błędów za pomocą narzędzia Git clean. Oto polecenie:
git clean -dffx && git reset --hard
źródło