Mendapatkan kesalahan "Tidak ada modul seperti itu" menggunakan Xcode, tetapi kerangka itu ada


344

Saat ini saya sedang coding di Swift, dan saya punya kesalahan:

Tidak ada modul Sosial seperti itu

Tapi saya tidak mengerti, karena modulnya ada di proyek saya, dinyatakan dalam "Framework dan Perpustakaan Tertaut" dan dalam "Binari Tertanam".

Kerangka kerjanya ada di Objective-C, jadi saya menulis Bridge Header untuk itu.

Tolong, bagaimana saya bisa membuat Xcode mengenali kerangka kerja?

Modul kesalahan

Proyek

Kerangka Tautan, Perpustakaan

Jembatan tajuk


20
Tidak terlalu mr. sudah jelas tetapi apakah Anda sudah mencoba pembersihan dan pembangunan penuh?
Kalel Wade

28
Jika header framework sudah termasuk dalam file header bridging maka Anda tidak perlu mengimpornya dalam file sumber Swift.
Martin R

2
Anda juga mungkin harus menggunakan tanda kutip untuk impor:#import "Social/Social.h"
Martin R

3
kesalahan yang sama dengan CocoaPod 'tidak ada kesalahan modul' dalam xcode.
AsimRazaKhan

1
Saya mengubah Target Penempatan dari 11 menjadi 10, tetapi melupakannya di Podfile platform :ios, '10.0'. Itu solusinya.
Artur Guseynov

Jawaban:


321

Saya tidak yakin mengapa ini terjadi, tetapi salah satu cara untuk memecahkan masalah Anda adalah dengan masuk ke pengaturan build Anda dan mendefinisikan Path Framework Search Paths ke folder yang berisi frameworks yang dimaksud. Jika kerangka kerja ditempatkan di direktori proyek Anda, cukup mengatur jalur pencarian kerangka kerja $(SRCROOT)dan mengaturnya menjadi rekursif.


5
Terima kasih. Saya harus melakukan ini di pengaturan membangun proyek saya daripada pengaturan target saya membangun
Pulsar

8
Triknya bagi saya adalah menemukan jalur ke kerangka untuk digunakan dalam Jalur Pencarian Kerangka. $ {TARGET_BUILD_DIR} /YourFrameworkName.framework bekerja dengan baik untuk saya. Lihat juga stackoverflow.com/questions/32816507/…
Chris Prince

11
Harus melakukan ini Project Build Settingssebagai gantinya Target Build Settings.
Maxim Mikheev

378
Saya memperbaikinya dengan pergi ke kamar mandi. Ketika saya kembali, itu bekerja. Saya cukup yakin saya mencoba segala yang ada di utas ini, tidak tahu persis apa yang berhasil. Saya juga berdoa di beberapa titik.
nmdias

2
CATATAN TENTANG FIX: $ (SRCROOT) hanya berfungsi untuk saya ketika saya menambahkannya ke Path Framework Search UNTUK PROYEK PODS.
addzo

546

Dalam hal ini hari Jumat sore atau kapan saja setelah 01:00:

Membuka xcodeprojbukannya xcworkspaceakan menyebabkan kesalahan seperti ini ...


2
Saya mencoba ini sebagai cawan suci. Lucu. Siapa tahu tetapi keluar kemudian membuka kembali ruang kerja benar-benar bekerja juga. Bersihkan, lalu bangun.
mondousage

3
9pm menggunakan fastlane, tentukan gym (proyek: ---) bukan gym (workspace: ----) Terima kasih!
RickiG

1
Ini terjadi pada saya setelah Xcode macet dan saya memilih aplikasi 'buka kembali' dari laporan bug. Saya akan tahu lebih baik lain kali.
Cap

Saya menginstal ulang XCODE dan saya mendapatkan kesalahan ini karena saya membuka aplikasi melalui proyek yang baru dibuka. Tutup proyek, File -> Open -> pilih file xcworkspace dan semuanya bekerja.
Dpedrinha

Juga berlaku untuk membangun di baris perintah (masalah kami): xcodebuild -workspace yourproject.workspace Anda.
Ben Butzer

57

Pastikan bahwa penamaan konfigurasi Anda di sub proyek cocok dengan yang ada di proyek "induk". Jika penamaan konfigurasi tidak sama persis (peka huruf besar kecil), Xcode akan membatalkan proses arsip dan menunjukkan kesalahan "Tidak ada modul seperti itu ..."

Artinya, jika Anda memiliki proyek "induk" dengan konfigurasi bernama "AppStore" Anda harus memastikan bahwa semua sub - proyek juga memiliki nama konfigurasi ini.

Lihat screenshot saya yang terlampir.

Pengaturan konfigurasi dalam proyek "induk"

Pengaturan konfigurasi dalam sub proyek 1

Pengaturan konfigurasi dalam sub proyek ke-2


1
Dalam kasus saya, subproyek hanya Debugdan Distributiondan proyek induknya sedang berusaha membangun untuk Release. Solusi adalah membuat salinan Distributiondalam proyek anak dan mengganti nama salinan itu Release.
olivaresF

2
Hal ini membuat saya menemukan masalah, tetapi saya menyelesaikannya dengan menambahkan ke jalur kerangka pencarian dalam konfigurasi khusus saya karena saya tidak ingin menyentuh sub proyek pihak ke-3 :)
DeFrenZ

Itu memperbaiki masalah! Bagus :)
alicanbatur

Terima kasih! Saya sudah memiliki 3 konfigurasi di proyek utama saya. Jadi, saya sudah melakukan hal yang sama untuk framework dan itu membantu.
daxh

Adakah petunjuk tentang cara membuat Xcode membangun konfigurasi spesifik dari subproyek bersarang? Jangan ingin mengganti nama subproyek konfigurasi, karena terlalu terhubung untuk menambahkan konfigurasi baru ke proyek utama
Dren

44

Saya tidak yakin mengapa jawaban Martin R dalam komentar untuk pertanyaan itu sangat diabaikan:

Pastikan Anda mencoba melompati impor kerangka kerja karena sudah ditambahkan dengan header penghubung .

Semoga ini membantu


37

Saya memiliki masalah yang sama menggunakan Cocoapods dan Swift . Saya tidak melihat baris berikut di Podfile:

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

Jadi, yang harus saya lakukan adalah mengubahnya menjadi:

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

... aaand berhasil :)


Ya bagi saya use_frameworks bahkan tidak ada di Podfile saya, jadi saya menambahkannya
PhoenixB


18

Saya juga mengalami masalah ini. Cara memperbaikinya bagi saya adalah bahwa skema Arsip antara kedua proyek tidak cocok. Saya memiliki xcworkspace dengan proyek kerangka kerja dan proyek aplikasi. Masalahnya adalah bahwa dalam skema Arsip untuk aplikasi saya, saya menggunakan Konfigurasi Bangun yang berbeda dari kerangka yang digunakan untuk skema Arsip itu. Saya mengatur Konfigurasi Konfigurasi untuk Dirilis, dan itu memperbaiki masalah.


Ini berhasil untuk saya. Saya mengatur proyek utama saya Membangun Konfigurasi kembali ke Rilis (dari Distribusi) dan sekarang cocok dengan sub proyek. Semua bekerja Terima kasih!
Charlie Seligman

1
Kerangka kerja kami tidak memiliki konfigurasi AdHoc yang kami gunakan untuk proyek - yang berarti tidak membangun bersama dengan proyek.
Johan

15

Langkah-langkah berikut ini berhasil untuk saya.

  1. Keluar xcode
  2. Jalankan "pod update"di terminal
  3. Buka .xcworkspacedan bangun kembali.

1
Langkah-langkah ini berhasil untuk saya ... Terima kasih ... Saya menjalankan "Pod install" tetapi tidak mendapatkan "Modul XXX tidak ditemukan .." tetapi setelah keluar dari XCode dan kemudian membuka kembali Workspace membantu saya ..
Aks

Masalah saya adalah setelah menambahkan konfigurasi bangunan baru dan skema saya mendapat "Modul tidak ditemukan ..." Keluar dari Xcode tidak berfungsi, setelah pod installberhasil
William Hu

Ini berhasil untuk saya. Adakah penjelasan mengapa ini memperbaiki masalah?
Nico Cernek

Ini berhasil untuk saya. Setelah membuka kembali projectname.xcworkspace, perlu membersihkan dan membangun kembali untuk membuatnya berfungsi.
Prashant

14

Dalam kasus saya, setelah banyak upaya untuk mencari tahu apa yang saya lakukan salah dengan mengimpor kerangka kerja saya akhirnya menemukan bahwa kerangka itu sendiri masalahnya. Jika Anda tidak mendapatkan kerangka kerja dari sumber tepercaya, Anda harus memeriksa kerangka tersebut dan memastikan bahwa kerangka itu berisi folder Modul dengan file module.modulemap di dalamnya. Jika module.modulemap tidak ada, Anda akan mendapatkan kesalahan "Tidak ada modul 'MyFramework'".

Contoh memperlihatkan struktur direktori dari SwiftyJSON.framework

Jika folder Modul tidak ada folder "MyFramework.swiftmodule" maka kerangka akan ditemukan tetapi Xcode tidak akan tahu tentang isinya sehingga Anda akan mendapatkan kesalahan yang berbeda.


2
Untuk beberapa alasan ini tidak ditampilkan dalam xcode 9.1 bahkan ketika itu ada. Klik kanan pada framework Anda> Show In Finder> dan pastikan modulemap Anda ada di sana. Jika Anda menggunakan kerangka kerja manual dalam proyek pod, bangun kembali pod Anda jika Anda baru saja menambahkan kerangka kerja manual atau memperbarui yang sudah ada.
Christopher Larsen

1
Terima kasih! Saya memang membuat file sendiri dan berhasil: framework module NAME {header header "NAME.h" export * module * {export *}}
Sjoerd Perfors

12

Dengan asumsi Framework benar-benar ada dan ada di path, dll ... hapus direktori ~ / Library / Developer / Xcode / DerivedData / ModuleCache (dan bersihkan proyek dan hapus data turunan spesifik proyek untuk ukuran yang baik).

Ketika Anda melakukan pembersihan standar, direktori ModuleCache tidak dapat dibangun kembali.


1
Saya hanya melakukannya seperti yang Anda katakan, dan itu tidak berhasil: /
alexandresecanove

1
Maka Anda mungkin menghadapi masalah berbeda yang hanya tampak sama dengan yang saya temui. : - /
Brad Brighton

Saya mengalami masalah yang sama dengan Cocoapod dan menghapus file di ModuleCache melakukan trik untuk saya.
HolySamosa

10

Yang bekerja untuk saya adalah ini solusi untuk pertanyaan lain. Menutup Xcode dan membuka kembali proyek sebagai ruang kerja.
Buka folder proyek Anda dan buka .xcodeworkspace file.
Setelah Anda membuka ruang kerja (bukan proyek), Pod akan muncul sebagai proyek tingkat atas di Project Navigator.



7

Saya juga mengalami kesalahan yang sama beberapa hari yang lalu. Inilah cara saya mengatasi masalah:

Kesalahannya adalah "modul tidak ditemukan"

  • Buat Podfile di direktori proyek root Anda
  • Instal cocoapods (manajer dependensi untuk proyek Swift dan iOS)
  • Jalankan instal pod
  • Pergi ke Pengaturan Bangun Proyek:

    • Temukan Header penghubung Objective-c di bawah Kompiler Swift - Pembuatan Kode (Jika Anda tidak menemukan kompiler Swift di sini, mungkin tambahkan file Swift baru ke proyek)
    • Seret dan letakkan file header perpustakaan dari sisi kiri ke header bridging (lihat gambar terlampir)masukkan deskripsi gambar di sini
  • Buat file header bridging baru: mis. TestProject-Bridging-Header.h dan letakkan di bawah Swift Compiler → Objective-C Generated Interface Header Name (ref, lihat gambar di atas)

  • Dalam file TestProject-Bridging-Header.h, tulis #import "Mixpanel / Mixpanel.h"
  • Dalam file Swift Anda kode harus: Import Mixpanel (yaitu nama perpustakaan)

Itu saja.


Jawaban ini membantu. Ketika mencoba mengaturnya untuk MBProgress, saya akhirnya mengikuti petunjuk di ios-support.blogspot.com/2017/04/… , yang sangat mirip.
Vette

6

Oke, bagaimana masalah yang sama diselesaikan bagi saya adalah mengatur lokasi data turunan relatif ke direktori ruang kerja daripada menjaganya agar tetap default. Buka preferensi dalam xcode. Buka tab lokasi di preferensi dan atur Data yang diperoleh ke Relatif. Semoga ini bisa membantu.


Ini hanya berfungsi sekali, maka ketika saya menjalankan pergi ke masalah yang sama tidak menemukan modul.
nycdanie

5

Saya mendapatkan kesalahan yang sama untuk

import Firebase

Tetapi kemudian saya menyadari bahwa saya tidak menambahkan pod ke bagian target utama tetapi hanya menambah target Test dan TestUI di Podfile.

Dengan perintah itu

pod init

untuk proyek cepat xcode, Podfile berikut dihasilkan

# 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

Jadi, perlu memastikan bahwa seseorang menambahkan pod ke placeholder yang sesuai.


5

Jika Anda membangun platform seperti tvOS, pastikan Anda memiliki simulator Apple TV (yaitu pencocokan).

Membangun aplikasi tvOS dengan simulator iOS yang dipilih memberi saya kesalahan ini. Menghabiskan bagian yang lebih baik dari satu jam mencari segala macam masalah pembangunan ... doh.


1
Hal yang sama berlaku jika Anda memilih "Mac Saya" ketika membangun proyek iOS. Saya tidak tahu mengapa Xcode bahkan mengizinkan ini ... 😒
Klaas

Terima kasih! Sangat jelas sekarang, tetapi kesalahan itu membuat saya mencari solusi yang lebih rumit!
Dan Messing

5

Dalam kasus saya aplikasi IPHONEOS_DEPLOYMENT_TARGET diatur ke 9.3 sedangkan dalam kerangka kerja saya yang baru dibuat itu diatur ke 10.2

Penyelesai dependensi implisit mengabaikan kerangka kerja baru saya karena persyaratan platform target lebih tinggi daripada persyaratan aplikasi.

Setelah menyesuaikan kerangka kerja Target Penempatan iOS agar sesuai dengan target penempatan aplikasi saya, kerangka kerja berhasil dikompilasi dan ditautkan.


Terima kasih. Setelah menghabiskan beberapa jam, saya menemukan target penyebaran adalah masalahnya.
niks

4

Saya mendapatkan kesalahan yang sama karena saya menambahkan beberapa framework menggunakan Cocoapods. Jika kami menggunakan Pods di proyek kami, kami harus menggunakannya xcodeworkspacesebagai gantinya xcodeproject. Untuk menjalankan proyek melalui xcodebuild, saya menambahkan -workspace <workspacename>parameter dalam xcodebuildperintah dan berfungsi dengan baik.


Jika Anda memiliki pertanyaan BARU, silakan tanyakan dengan mengklik tombol Ajukan Pertanyaan . Jika Anda memiliki reputasi yang cukup, Anda dapat membatalkan pertanyaan. Atau, "beri bintang" sebagai favorit dan Anda akan diberi tahu tentang jawaban baru.
Alessandro Cuttin

@pawan singh Anda telah menghemat beberapa jam untuk saya, terima kasih!
Dmitry Senkovich

3

Saya menemukan bahwa Import Pathsdi dalam Build Settingsitu salah untuk modul custom (MySQL). Setelah menunjuk ke arah yang benar, pesan itu hilang.


@ rplankenhorn Nah, tepat di tempat Anda meletakkannya di komputer Anda. Jalankan findjika Anda tidak mengetahuinya.
qwerty_so

3

Saya memperbaiki ini dengan

Sasaran -> Umum -> Kerangka kerja tertaut dan perpustakaan

Tambahkan kerangka kerja yang seharusnya ada di bagian atas Workspacefolder. Nyeri di pantat.


3

Saya baru saja menghapus cocoapod saya. Kemudian, saya melakukan instal pod untuk menghapusnya. Kemudian, saya baru saja menambahkannya kembali ke podfile saya dan menginstalnya kembali. Itu membuatnya bekerja. Tidak yakin kenapa.


3

Saya sudah menginstal pod. Build berfungsi tanpa masalah ketika saya membuat aplikasi di perangkat saya, tetapi arsip tidak berfungsi. Saya hanya menjalankan:

pod install

tidak ada pod baru yang dipasang, hanya file .xcodeproj yang dibuat ulang dan arsip mulai berfungsi


3

Dalam Xcode 10.1 solusi bagi saya adalah mengubah sistem build pada Workspace Settings di menu File. Secara default diatur ke Sistem Build Baru , mengubahnya ke Sistem Build Legacy dan yang melakukan trik.

masukkan deskripsi gambar di sini


Terima kasih sobat, kamu menyelamatkan hariku! +1
DungeonDev

3

Ada beberapa kesalahan konfigurasi yang berpotensi timbulnya masalah,

  1. Harap konfirmasi bahwa Anda telah membuka file .xcworkspacetetapi tidak .xcodeproj. Pastikan juga Anda telah membangun Socialterlebih dahulu sebelum membangun TriviaApp.
  2. Pastikan Target Penempatan iOS disetel sama untuk semua modul dengan aplikasi utama. Misalnya TriviaApp, target penyebaran diatur ke 9.0, Socialtarget penempatan juga perlu diatur 9.0.
  3. Pastikan modul utama Anda ( TriviaApp) dan kerangka kerja Anda yang digunakan ( Social) memiliki konfigurasi yang sama. yaitu Jika Proyek Anda memiliki tiga konfigurasi, Debug, Release, ReleasePremiumdari kerangka Sosial Anda juga perlu memiliki tiga konfigurasi Debug, Release, ReleasePremium. Pastikan juga bahwa konfigurasi arsip diset sama untuk keduanya TriviaAppdan Social. yaitu jika TriviaAppskema arsip Anda diatur ke ReleasePremium, Socialskema arsip Anda juga perlu diatur ReleasePremium.
  4. Harap pastikan bahwa Anda tidak perlu mengimpor Socialdi setiap .swiftfile ketika sudah ditambahkan di Bridging-Header.h.
  5. Dalam kasus masalah datang dari file Pod, pastikan Anda telah tanda komentar #use_frameworks!menjadi use_frameworks!dari Anda Podfile. Kadang-kadang menginstal ulang pod berfungsi jika Socialmemiliki ketergantungan pada pod.
  6. Jika tidak ada langkah-langkah di atas yang berfungsi, hapus folder data turunan Anda dan coba buat kembali.

Wow, saya tidak akan pernah berhasil tanpa bantuan Anda. Memang, saya memiliki konfigurasi khusus yang ditambahkan ke proyek utama saya, tetapi hilang dari kerangka kerja.
Iulian Onofrei

@lulian senang mengetahui hal itu membantu
Sazzad Hissain Khan

2

Jika Anda menggunakan Kartago, kerangka kerja dalam pengaturan bangunan biasanya tetap ada

$(PROJECT_DIR)/Carthage/Build/iOS

Jika Anda menjalankan carthage update --platform ios --no-build(untuk menghemat waktu) file di dalam folder Build tidak akan diolah kembali, maka modul tidak akan tersedia untuk XCode.

Dalam kasus saya, saya telah lari carthage update --platform ios, maka masalah saya terpecahkan.


2

Dalam General => Linked Frameworks and Libraries, saya menambahkan saya ./Pods/Pods.xcodeprojdan itu berhasil


2

Bagi saya Build Active Architecture Only disetel ke Ya untuk konfigurasi yang dipilih. Ini berhasil:

Pilih "Pods" dari navigator proyek kiri> Pilih "Bangun Pengaturan"> Bangun Arsitektur Aktif Saja ke Tidak


1

Jika semua metode di atas tidak bekerja untuk Anda seperti dalam kasus saya. Tidak ada masalah di hari sebelumnya tetapi di pagi berikutnya saya menghadapi kesalahan yang sama. Saya baru saja menghapus kerangka kerja dengan menghapus referensi dan menambahkannya lagi. Saya tahu ini mungkin terdengar konyol, tetapi voila berhasil.


1

Saya memiliki masalah yang sama dengan memuat FacebookSDK, saya menambahkan ~ / Documents / FacebookSDK (cari di mana kerangka kerja Anda) ke jalur pencarian Kerangka dalam pengaturan Build dan setelah itu saya dapat mengimpor modul FBSDKShareKit


1

Untuk apa nilainya (saya baru menggunakan Xcode 7.2 / Swift 2), tapi saya perhatikan bahwa hanya memiliki file .swift dari perpustakaan di direktori proyek secara otomatis memberi Anda akses ke sana dan tidak perlu menggunakan pernyataan.

Contoh: Saya menggunakan SwiftyJSON dan hanya memiliki file SwiftyJSON.swift dalam proyek itu yang saya butuhkan. The usingPernyataan itu benar-benar memberikan saya error 'tidak ada modul seperti' dan mengambil itu diselesaikan itu, dan bekerja dengan baik.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.