Saya menggunakan Xcode 6,
1) Pertama saya membuat perpustakaan dinamis (CoreLibrary). Perpustakaan ini berisi file RequestPoster.h.
2) Lalu saya membuat Kerangka Sentuhan Kakao dan menambahkan perpustakaan dinamis ini (CoreLibrary).
3) Kemudian kerangka kerja ini ditambahkan pada proyek saya dan memberikan kesalahan dalam file RequestPoster.h (CoreLibrary).
Kesalahan: Sertakan header non-modular di dalam kelas modul framework:
ifaddrs.h, arpa / inet.h, sys / types.h>
File-file ini tidak ditemukan dalam proyek.
ifaddrs
, mereka terikat untuk mengimpor ifaddrs.h./usr/include/libproc.h
?Pastikan file header tersedia untuk umum sebagai bagian dari header publik framework.
Kerangka Kerja Goto -> Target -> Bangun Fase dan seret untuk memindahkan file header yang relevan dari Project ke Public. Semoga itu bisa membantu!
sumber
Anda dapat mengatur Izinkan Non-modular termasuk dalam Modul Kerangka dalam Pengaturan Bangun untuk target yang terpengaruh ke YA. Ini adalah pengaturan bangunan yang perlu Anda edit:
CATATAN : Anda harus menggunakan fitur ini untuk mengungkap kesalahan yang mendasarinya, yang saya temukan sering disebabkan oleh duplikasi kurung siku global yang disertakan dalam file dengan beberapa hubungan dependen, yaitu:
Jika pengaturan Izinkan Non-modular termasuk dalam Modul Bingkai untuk YA menghasilkan kesalahan "X adalah referensi yang ambigu" atau semacamnya, Anda harus dapat melacak duplikat yang menyinggung dan menghilangkannya. Setelah Anda membersihkan kode Anda, atur Izinkan Non-modular termasuk dalam Modul Bingkai kembali ke NO .
sumber
Saya memiliki masalah yang sama dan menyelesaikannya dengan hanya membuat file header publik.
Jika Anda mengerjakan beberapa modul di proyek Anda. Maka file header Anda harus publik untuk digunakan di bagian lain dari proyek. Yang Anda butuhkan adalah memilih file header itu, dan dalam tampilan Utilities proyek. Ubah file dari Project / Private ke Public. Lihat gambar di bawah ini:
sumber
"Termasuk header non-modular di dalam modul framework"
Ketika Anda mendapatkan kesalahan ini solusinya dalam beberapa keadaan bisa dengan hanya menandai file yang Anda coba impor sebagai "publik" di inspektur file "Target Membership". Standarnya adalah "Project", dan ketika diatur dengan cara ini dapat menyebabkan kesalahan ini. Itulah yang terjadi pada saya ketika mencoba mengimpor header Google Analytic ke dalam suatu kerangka kerja, misalnya.
sumber
Sebenarnya cara yang lebih mudah untuk memperbaikinya adalah dengan memindahkan
#import
pernyataan ke bagian atas.m
file sebagai gantinya (alih-alih memilikinya di.h
file header Anda ). Dengan cara ini tidak akan mengeluh bahwa itu termasuk file header non-modular. Aku punya masalah ini di manaAllow non-module includes
diatur untukYES
melakukan TIDAK bekerja untuk saya, jadi dengan memindahkan ke file implementasi, berhenti mengeluh. Ini sebenarnya cara yang lebih disukai untuk mengimpor dan memasukkan file header. Setelah Anda melakukan ini, mengatur kembali iniNO
harus berfungsi.Idealnya kita harus berusaha dan bertujuan untuk
Allow non-module includes
menetapkanNO
. Menyetel iniYES
dalam banyak kasus berarti Anda melakukan sesuatu yang salah. Pengaturan diterjemahkan menjadi "Izinkan mengimpor file header acak pada disk yang bukan bagian dari modul". Ini berlaku untuk kasus penggunaan yang sangat sedikit dalam praktek, dan pengaturan ini harus selaluNO
(yaitu nilai default).sumber
Jika Anda mengembangkan kerangka kerja Anda sendiri:
MENGAPA ini terjadi?
Jika ada file header publik yang Anda sebutkan di module.modulemap Anda memiliki pernyataan impor yang tidak disebutkan dalam modulemap, ini akan memberi Anda kesalahan. Karena mencoba mengimpor beberapa header yang tidak dideklarasikan sebagai modular (dalam module.modulemap), itu merusak modularitas kerangka kerja.
BAGAIMANA saya bisa memperbaikinya?
Cukup sertakan header yang memberikan kesalahan pada module.modulemap Anda dan buat lagi!
MENGAPA TIDAK hanya mengatur memungkinkan non-modular ke YA?
Karena ini bukan solusi di sini, dengan Anda memberi tahu proyek Anda "kerangka kerja ini seharusnya modular tetapi tidak. Gunakan entah bagaimana, saya tidak peduli." Ini tidak memperbaiki masalah modularitas perpustakaan Anda.
Untuk informasi lebih lanjut, periksa posting blog ini atau lihat dokumen dentang .
sumber
Jika Anda memerlukan ini untuk target CocoaPods tambahkan baris ini di
Podfile
:sumber
Allow Non-modular Includes in Framework Modules
hanya bekerja dalam kode objc. tidak bekerja dengan cepat.Setelah periode penelitian, saya menemukan bahwa swift dapat mengirimkan parameter peringatan ke dentang, jadi setel
OTHER_SWIFT_FLAGS
ke-Xcc -Wno-error=non-modular-include-in-framework-module
mencegah kesalahan impor swift.hanya untuk seseorang yang memiliki masalah yang sama
sumber
Saya memiliki masalah yang sama dan tidak ada yang membantu saya. Jadi saya berharap jawaban saya akan bermanfaat bagi seseorang. Dalam kasus saya masalahnya ada di pengaturan ALWAYS_SEARCH_USER_PATHS. Ketika diatur ke proyek TIDAK dibangun dan bekerja ok. Tetapi sejauh salah satu pod mengharuskannya disetel ke YA, saya menerima pesan kesalahan
Setelah beberapa cangkir kopi dan meneliti sepanjang hari, saya menemukan bahwa menurut masalah yang diketahui dari catatan rilis Xcode 7.1 Beta 2 :
Saya menggunakan XCode 7.3, tetapi sepertinya bug ini belum diperbaiki.
sumber
masalah yang sama membuat gila. akhirnya, saya menemukan meletakkan 'impor xxx.h' dalam implementasi, bukan antarmuka dapat memperbaiki masalah. Dan jika Anda menggunakan Cocoapods untuk mengelola proyek Anda. Anda dapat menambahkan
dalam file 'xxx.podspec' Anda.
sumber
Jika Anda melihat kesalahan ini di header payung ketika membangun kerangka kerja dinamis , pastikan Anda mengimpor file Anda sebagai:
#import "MyFile.h"
dan tidak seperti
#import <MyFramework/MyFile.h>
.sumber
Saya menemukan masalah ini juga dan awalnya mengira itu adalah masalah CocoaPods, tapi itu adalah masalah di pengaturan pembuatan aplikasi di mana seseorang (mungkin saya) telah menetapkan
${PODS_ROOT}
di Header Search Paths dan mengaturnya untuk menjadirecursive
pencarian. Ini memungkinkannya menemukan header yang tidak dimaksudkan untuk digunakan saat membangun aplikasi. Setelah saya atur ini untuk menggunakannon-recursive
semuanya baik-baik saja. menggunakanrecursive
pencarian adalah hack yang mengerikan untuk mencoba menemukan header yang tepat. Pelajaran yang dipetik.sumber
Ini semacam masalah yang mengganggu bagi saya. Tampaknya tidak ada saran yang membantu kasus khusus saya, karena saya perlu menyertakan header "non-modular" dalam file header file individual saya. Pekerjaan di sekitar saya menggunakan menempel panggilan impor di file header awalan.
sumber
Saya akhirnya memindahkan Header Payung ke bawah daftar Header setelah memeriksa solusi di atas, dan yang bekerja di Xcode 9.3.
sumber
Saya menyelesaikannya dengan menghapus
Modules
folder dari framework.Jelajahi lokasi kerangka kerja Anda yang ada di Proyek Aplikasi menggunakan finder
Masuk ke
Test.framework
folder (Dalam kasus di atas akanCoreLibrary.framework
) & HapusModules
folder.Bersihkan dan Bangun ulang aplikasi, itu akan menyelesaikan masalah.
sumber
Dalam kasus saya, saya lupa menambahkan file .h dan .m di bagian "s.source_files" file .podspecs.
setelah menambahkan ini di dalamnya berfungsi dengan baik.
sumber
coba
@import FrameworkName
bukan#import "FrameworkName.h"
sumber
Saya bisa menghapus puluhan kesalahan ini dengan menggunakan Git clean. Inilah perintahnya:
git clean -dffx && git reset --hard
sumber