Występuje błąd „Brak takiego modułu” przy użyciu Xcode, ale istnieje tam framework


344

Obecnie koduję w Swift i mam błąd:

Brak takiego modułu Społecznościowy

Ale nie rozumiem, ponieważ moduł jest w moim projekcie, zadeklarowany w „Powiązanych ramach i bibliotekach” oraz „Wbudowanych plikach binarnych”.

Frameworki są w Objective-C, więc napisałem dla nich nagłówek Bridge.

Proszę, w jaki sposób mogę sprawić, by Xcode rozpoznał ramę?

Moduł błędu

Projekt

Linkes Frameworks, Biblioteki

Mostek chodnikowy


20
Nie być zbyt mr. oczywiste, ale czy próbowałeś już całkowicie wyczyścić i zbudować?
Kalel Wade,

28
Jeśli nagłówek frameworka jest już zawarty w pliku nagłówkowym pomostowym, nie trzeba go importować do pliku źródłowego Swift.
Martin R

2
W przypadku importu może być konieczne użycie znaków cudzysłowu:#import "Social/Social.h"
Martin R

3
ten sam błąd z CocoaPods „brak takiego błędu modułu” w xcode.
AsimRazaKhan

1
Zmieniłem Cel wdrożenia z 11 na 10, ale zapomnij o tym w Podfile platform :ios, '10.0'. To było rozwiązanie.
Artur Guseynov

Odpowiedzi:


321

Nie jestem pewien, dlaczego tak się dzieje, ale jednym ze sposobów rozwiązania tego problemu jest przejście do ustawień kompilacji i zdefiniowanie Ścieżek przeszukiwania ram do folderu zawierającego te ramy. Jeśli frameworki zostaną umieszczone w katalogu projektu, wystarczy ustawić ścieżkę wyszukiwania frameworka $(SRCROOT)i ustawić rekurencję.


5
Dzięki. Musiałem to zrobić w ustawieniach kompilacji projektu, a nie w ustawieniach kompilacji docelowej
Pulsar

8
Sztuczka dla mnie polegała na znalezieniu ścieżki do frameworka do użycia w ścieżkach wyszukiwania frameworka. $ {TARGET_BUILD_DIR} /YourFrameworkName.framework działa dla mnie dobrze. Zobacz także stackoverflow.com/questions/32816507/…
Chris Prince

11
Musiałem to zrobić Project Build Settingszamiast Target Build Settings.
Maxim Micheev

378
Naprawiłem to, idąc do łazienki. Kiedy wróciłem, działało. Jestem prawie pewien, że próbowałem wszystkiego w tym wątku, nie wiem dokładnie, co wykonał. W pewnym momencie też się modliłem.
nmdias

2
UWAGA DOTYCZĄCA POPRAWKI: $ (SRCROOT) działał tylko dla mnie, gdy dodałem go do Ścieżki Wyszukiwania Ramy DLA PROJEKTU PODS.
addzo

549

Jeśli jest piątek po południu lub w dowolnym momencie po 1 w nocy:

Otwarcie xcodeprojzamiast xcworkspacespowoduje błąd taki jak ten ...


2
Próbowałem tego jako świętego Graala. Zabawny. Kto wie, ale zamknięcie i ponowne otwarcie przestrzeni roboczej również zadziałało. Oczyść, a następnie buduj.
poniedziałek

3
21:00 za pomocą Fastlane, określono siłownię (projekt: ---) zamiast siłowni (obszar roboczy: ----) Dzięki!
RickiG

1
Stało się tak po tym, jak Xcode się zawiesił i wybrałem aplikację „otwórz ponownie” z raportu o błędzie. Następnym razem poznam lepiej.
Znaczek

Ponownie zainstalowałem XCODE i otrzymywałem ten błąd, ponieważ otwierałem aplikację za pośrednictwem ostatnio otwartych projektów. Zamknął projekt, Plik -> Otwórz -> wybierz plik xcworkspace i wszystko działało.
Dpedrinha

Dotyczy to także budowania z linii poleceń (nasz problem): xcodebuild -workspace twójprojekt.workspace.
Ben Butzer

57

Upewnij się, że nazwy twoich konfiguracji w podprojektach odpowiadają nazwom projektu „nadrzędnego”. Jeśli nazwa konfiguracji nie pasuje dokładnie (wielkość liter ma znaczenie), Xcode przerwie proces archiwizacji i wyświetli błąd „Brak takiego modułu ...”

Oznacza to, że jeśli masz projekt „nadrzędny” z konfiguracją o nazwie „AppStore”, musisz upewnić się, że wszystkie podprojekty również mają tę nazwę konfiguracji.

Zobacz moje załączone zrzuty ekranu.

Konfiguracja konfiguracji w projekcie „nadrzędnym”

Konfiguracja konfiguracji w 1. podprojekcie

Konfiguracja konfiguracji w drugim podprojekcie


1
W moim przypadku, podprojektem miał tylko Debuga Distributioni jego projekt rodzic stara się zbudować dla Release. Rozwiązaniem było zrobienie kopii Distributionw projekcie podrzędnym i zmiana nazwy tej kopii Release.
olivaresF

2
Doprowadziło mnie to do znalezienia problemu, ale rozwiązałem go, dodając do ścieżek wyszukiwania frameworka w moich niestandardowych konfiguracjach, ponieważ nie chciałem dotykać podprojektu innej firmy :)
DeFrenZ,

Dziękuję Ci! W moim głównym projekcie miałem 3 konfiguracje. Zrobiłem to samo dla frameworka i pomogło.
daxh

Jakieś wskazówki na temat tego, jak Xcode zbudować specyficzną konfigurację zagnieżdżonego podprojektu? Nie chcę zmieniać nazw podprojektów config, ponieważ staje się zbyt związany z dodawaniem nowych konfiguracji do głównego projektu
Dren

Działa to dla mnie, ponieważ mój projekt miał 3 konfiguracje, których nazwy zmieniono z domyślnych konfiguracji „Debugowanie” i „Wydanie”. Zaktualizowałem swój framework, aby miał te same 3 konfiguracje, zbudowałem go i wszystko działało zgodnie z oczekiwaniami.
Yuri

44

Nie jestem do końca pewien, dlaczego odpowiedź Martina R w komentarzach do pytania jest tak lekceważona:

Upewnij się, że próbowałeś po prostu pominąć import frameworka, ponieważ jest on już dodany z nagłówkiem pomostowym .

Mam nadzieję że to pomoże


38

Miałem ten sam problem podczas używania Cocoapods i Swift . Nie zauważyłem następujących wierszy w Podfile:

# Uncomment this line if you're using Swift
# use_frameworks!

Wszystko, co musiałem zrobić, to zmienić na:

# Uncomment this line if you're using Swift
use_frameworks!

... i zadziałało :)


Tak, dla mnie use_frameworks nie było nawet w moim Podfile, więc dodałem go
PhoenixB


18

Miałem również ten problem. Dla mnie poprawka polegała na tym, że schematy Archiwum między dwoma projektami nie pasowały. Mam XCworkspace z projektem ramowym i projektem aplikacji. Problem polegał na tym, że w schemacie archiwizacji dla mojej aplikacji korzystałem z innej konfiguracji kompilacji niż w schemacie archiwizacji. Ustawiłem obie konfiguracje kompilacji na Wydanie i to rozwiązało problem.


To zadziałało dla mnie. Mój główny projekt Build Config ustawiłem ponownie na Release (z Distribution), więc teraz pasuje do podprojektu. Wszystko działa. Dziękuję Ci!
Charlie Seligman,

1
Nasz framework nie miał konfiguracji AdHoc, której użyliśmy w projekcie - co oznaczało, że nie zbudował się razem z projektem.
Johan

15

Poniższe kroki działały dla mnie.

  1. Zamknij xcode
  2. Uruchom "pod update"w terminalu
  3. Otwórz .xcworkspacei buduj ponownie.

1
Te kroki zadziałały dla mnie… Dzięki… Uruchomiłem „Instalacja pod”, ale nie dostałem „Modułu XXX nie znaleziono…”, ale po wyjściu z XCode i ponownym otwarciu Workspace pomogło mi…
Aks

Mój problem polega na dodaniu nowej konfiguracji kompilacji i schematu Mam komunikat „Nie znaleziono modułu ...” Quit Xcode nie działa, po pod installtym jak działa.
William Hu

To zadziałało dla mnie. Jakieś wyjaśnienie, dlaczego to rozwiązuje problem?
Nico Cernek

To zadziałało dla mnie. Po ponownym otwarciu projectname.xcworkspace należy wyczyścić i przebudować ponownie, aby działał.
Prashant,

14

W moim przypadku, po wielu próbach ustalenia, co robiłem źle, importując framework, w końcu odkryłem, że sam szkielet był problemem. Jeśli nie otrzymujesz frameworka z zaufanego źródła, powinieneś sprawdzić frameworkę i upewnić się, że zawiera on folder Modules z plikiem module.modulemap. Jeśli moduł.modulemap nie jest obecny, pojawi się błąd „Brak takiego modułu„ MyFramework ””.

Przykład pokazujący strukturę katalogów SwiftyJSON.framework

Jeśli w folderze Modules brakuje folderu „MyFramework.swiftmodule”, wówczas szkielet zostanie znaleziony, ale Xcode nie będzie wiedział o jego zawartości, więc wystąpią różne błędy.


2
Z jakiegoś powodu nie jest to pokazane w xcode 9.1, nawet jeśli jest obecny. Kliknij prawym przyciskiem myszy swoją ramę> Pokaż w Finderze> i upewnij się, że jest tam Twoja mapa modularna. Jeśli używasz ręcznego frameworka w projekcie strąków, przebuduj swoje strąki, jeśli właśnie dodałeś nowy manualny framework lub zaktualizowałeś już istniejący.
Christopher Larsen,

1
Dzięki! Sam utworzyłem plik i zadziałał: moduł frameworka NAME {nagłówek parasolowy „NAME.h” eksport * moduł * {eksport *}}
Sjoerd Perfors

12

Zakładając, że Framework naprawdę istnieje i znajduje się na ścieżce itp.… Usuń katalog ~ / Library / Developer / Xcode / DerivedData / ModuleCache (i wyczyść projekt i usuń dane pochodne właściwe dla projektu).

Podczas standardowego czyszczenia katalog ModuleCache nie jest odbudowywany.


1
Właśnie to zrobiłem, jak mi powiedziałeś, i to nie działa: /
alexandresecanove

1
Być może masz do czynienia z innym problemem, który wyglądał tak samo jak ten, z którym się spotkałem. : - /
Brad Brighton,

Miałem ten sam problem z Cocoapod i usunięcie plików w ModuleCache załatwiło sprawę.
HolySamosa,

10

Dla mnie zadziałało to rozwiązanie innego pytania. Zamykanie Xcode i ponowne otwieranie projektu jako obszaru roboczego.
Przejdź do folderu projektu i otwórz .xcodeworkspace plik.
Po otwarciu obszaru roboczego (zamiast projektu) kapsuły powinny pojawiać się jako projekt najwyższego poziomu w Nawigatorze projektów.


9

Upewnij się, że Find implicit Dependenciesopcja Budowanie w schemacie jest włączona!


7

Kilka dni temu napotkałem ten sam błąd. Oto jak rozwiązałem problem:

Błąd to „moduł nie został znaleziony”

  • Utwórz plik Podfile w katalogu głównym projektu
  • Zainstaluj cocoapods (menedżer zależności dla projektów Swift i iOS)
  • Uruchom instalację pod
  • Przejdź do ustawień kompilacji projektu:

    • Znajdź nagłówek mostkujący Cel-c w kompilatorze Swift - Generowanie kodu (jeśli nie znajdziesz tutaj kompilatora Swift, prawdopodobnie dodaj nowy plik Swift do projektu)
    • Przeciągnij i upuść plik nagłówka biblioteki z lewej strony do nagłówka pomostowego (patrz obraz w załączeniu)wprowadź opis zdjęcia tutaj
  • Utwórz nowy plik nagłówka pomostowego: np. TestProject-Bridging-Header.h i umieść w Swift Compiler → Nazwa nagłówka interfejsu wygenerowanego przez Objective-C (zob. Obrazek powyżej)

  • W pliku TestProject-Bridging-Header.h napisz #import „Mixpanel / Mixpanel.h”
  • W pliku Swift kod powinien brzmieć: Importuj Mixpanel (tj. Nazwę biblioteki)

To wszystko.


Ta odpowiedź pomogła. Próbując skonfigurować to dla MBProgress, skończyłem zgodnie ze wskazówkami na ios-support.blogspot.com/2017/04/… , co było bardzo podobne.
Vette

6

Ok, jak udało mi się rozwiązać ten sam problem, to ustawić położenie danych pochodnych względem katalogu obszaru roboczego zamiast pozostawić go domyślnym. Przejdź do preferencji w xcode. Przejdź do zakładki lokalizacji w preferencjach i ustaw Dane pochodne na Względne. Mam nadzieję, że to pomoże.


Działa to tylko raz, a kiedy uruchamiam, przechodzi do tego samego problemu, że nie znalazłem modułu.
nycdanie 21.04.16

5

Otrzymałem ten sam błąd dla

import Firebase

Ale potem zauważyłem, że nie dodawałem kapsuły do ​​głównej sekcji celu, a jedynie dodawałem do celów Test i TestUI w Podfile.

Za pomocą polecenia

pod init

dla szybkiego projektu xcode generowany jest następujący plik podfile

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'MyApp' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for MyApp

  target 'MyAppTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'MyAppUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

Więc upewnij się, że dodajesz strąki do każdego odpowiedniego symbolu zastępczego.


5

Jeśli budujesz platformę taką jak tvOS, upewnij się, że masz wybrany symulator Apple TV (tj. Dopasowywanie).

Zbudowanie aplikacji tvOS z wybranym symulatorem iOS dało mi dokładnie ten błąd. Spędziłem większą część godziny, szukając różnego rodzaju problemów z kompilacją ... doh.


1
To samo dotyczy wybrania opcji „Mój Mac” podczas tworzenia projektu iOS. Nie wiem, dlaczego Xcode pozwala na to nawet ... Kla
Klaas

Dziękuję Ci! Teraz to oczywiste, ale błąd sprawił, że szukałem bardziej skomplikowanych rozwiązań!
Dan Messing

5

W moim przypadku aplikacja IPHONEOS_DEPLOYMENT_TARGET została ustawiona na 9,3, podczas gdy w moim nowo utworzonym środowisku ustawiono ją na 10,2

Modyfikator domyślnych zależności zignorował moją nową strukturę, ponieważ wymagania platformy docelowej są wyższe niż wymagania aplikacji.

Po dostosowaniu frameworku docelowego wdrażania systemu iOS, aby pasował do mojego celu wdrożenia aplikacji, środowisko zostało pomyślnie skompilowane i połączone.


Dzięki. Po marnowaniu kilku godzin odkryłem, że problemem jest wdrożenie.
niks

4

Otrzymałem ten sam błąd, ponieważ dodałem kilka frameworków Cocoapods. Jeśli używamy kapsuł w naszym projekcie, powinniśmy użyć xcodeworkspacezamiast xcodeproject. Aby uruchomić projekt przez xcodebuild, dodałem -workspace <workspacename>parametr w xcodebuildpoleceniu i działał idealnie.


Jeśli masz NOWE pytanie, zadaj je, klikając przycisk Zadaj pytanie . Jeśli masz wystarczającą reputację, możesz głosować za pytaniem. Możesz też „oznaczyć” gwiazdką jako ulubioną, a będziesz otrzymywać powiadomienia o wszelkich nowych odpowiedziach.
Alessandro Cuttin,

@awan singh, zaoszczędziłeś mi kilka godzin, dziękuję!
Dmitrij Senkovich

3

Okazało się, że Import Pathsw Build Settingsmylił dla niestandardowego (MySQL) modułu. Po wskazaniu tego we właściwym kierunku wiadomość zniknęła.


@rplankenhorn Cóż, dokładnie tam, gdzie umieściłeś je na swoim komputerze. Uruchom a findjeśli go nie znasz.
qwerty_so,

3

Naprawiłem to za pomocą

Cele -> Ogólne -> Powiązane frameworki i biblioteki

Dodaj strukturę, która powinna znajdować się na górze w Workspacefolderze. Coś uciążliwego.


3

Właśnie usunąłem cocoapod. Następnie zrobiłem instalację pod, aby go usunąć. Następnie dodałem go z powrotem do mojego pliku pod i ponownie go zainstalowałem. Dzięki temu działało. Nie pewny dlaczego.


3

Zainstalowałem już strąki. Kompilacja działała bez żadnych problemów po skompilowaniu aplikacji na moim urządzeniu, ale archiwum nie działało. Po prostu biegam:

pod install

nie zainstalowano żadnych nowych modułów, po prostu plik .xcodeproj został zregenerowany i archiwum zaczęło działać


3

W Xcode 10.1 rozwiązaniem była dla mnie zmiana systemu kompilacji w Ustawieniach obszaru roboczego w menu Plik. Domyślnie jest ustawiony na Nowy system kompilacji , zmieniono go na starszy system kompilacji i to załatwiło sprawę.

wprowadź opis zdjęcia tutaj


Dziękuję kolego, uratowałeś mi dzień! +1
DungeonDev

3

Istnieje kilka potencjalnych błędnych konfiguracji, z których może wynikać problem,

  1. Potwierdź, że otworzyłeś plik, .xcworkspaceale nie .xcodeprojplik. Upewnij się także, że Socialnajpierw zbudowałeś kompilację TriviaApp.
  2. Upewnij się, że cel wdrażania iOS jest ustawiony tak samo dla wszystkich modułów z aplikacją główną. Na przykład, czy TriviaAppcel wdrażania jest ustawiony na 9.0, Socialcel wdrożenia również musi być ustawiony na 9.0.
  3. Upewnij się, że twój główny moduł ( TriviaApp) i używany framework ( Social) mają ten sam zestaw konfiguracji. czyli jeśli projekt ma trzy konfiguracje, Debug, Release, ReleasePremiumniż ramach Społecznej również trzeba mieć trzy konfiguracje Debug, Release, ReleasePremium. Upewnij się także, że konfiguracja archiwum jest taka sama dla obu TriviaAppi Social. tzn. jeśli twój TriviaAppschemat archiwizacji jest ustawiony na ReleasePremium, twój Socialschemat archiwizacji również musi być ustawiony na ReleasePremium.
  4. Upewnij się, że nie trzeba importować Socialdo każdego .swiftpliku, jeśli jest już dodany do pliku Bridging-Header.h.
  5. W przypadku emisji pochodzi z plików POD, upewnij się Odkomentowano #use_frameworks!się use_frameworks!od ciebie Podfile. Czasami ponowna instalacja Socialzasobnika działa, jeśli jest zależna od zasobników.
  6. Jeśli żaden z powyższych kroków nie działa, usuń folder danych pochodnych i spróbuj ponownie zbudować.

Wow, nigdy bym tego nie wymyślił bez twojej pomocy. Rzeczywiście, dodałem niestandardową konfigurację do mojego głównego projektu, ale brakowało jej w frameworku.
Iulian Onofrei

@ulian chętnie wiedział, że to pomogło
Sazzad Hissain Khan

2

Jeśli używasz Kartaginy, frameworki w ustawieniach budynków zwykle pozostają

$(PROJECT_DIR)/Carthage/Build/iOS

Jeśli uruchomisz carthage update --platform ios --no-build(aby zaoszczędzić czas) pliki w folderze Build nie zostaną ponownie utworzone, moduły nie będą dostępne dla XCode.

W moim przypadku uciekłem carthage update --platform ios, a następnie mój problem został rozwiązany.


2

W General => Linked Frameworks and Libraries, dodałem mój ./Pods/Pods.xcodeproji to załatwiło sprawę


2

Dla mnie Kompilacja Tylko architektura aktywna została ustawiona na Tak dla wybranej konfiguracji. To załatwiło sprawę:

Wybierz „Pods” z lewego nawigatora projektu> Wybierz „Ustawienia kompilacji”> Kompiluj aktywną architekturę tylko na Nie


1

Jeśli wszystkie powyższe metody nie zadziałały tak jak w moim przypadku. Poprzedniego dnia nie było problemu, ale następnego ranka napotkałem ten sam błąd. Właśnie usunąłem ramy, usuwając odniesienia i ponownie je dodałem. Wiem, że to może zabrzmieć głupio, ale voila zadziałało.


1

Miałem podobny problem z ładowaniem FacebookSDK, dodałem ~ / Documents / FacebookSDK (szukaj tam, gdzie są twoje frameworki) do ścieżek wyszukiwania frameworka w Ustawieniach kompilacji, a potem mogłem zaimportować moduł FBSDKShareKit


1

Za to, co jest warte (jestem nowy w tym, używając Xcode 7.2 / Swift 2), ale zauważyłem, że samo posiadanie pliku .swift z biblioteki w katalogu projektu automatycznie daje ci do niego dostęp i nie potrzebuje instrukcji using.

Przykład: używam SwiftyJSON i po prostu posiadanie pliku SwiftyJSON.swift w projekcie było wszystkim, czego potrzebowałem. usingOświadczenie zostało rzeczywiście daje mi błąd „nie ma takiego modułu” i wyjmując go rozwiązać, i to działa dobrze.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.