Xcode MyProjectName-Bridging-Header.h tidak ada

118

Saya ingin mulai menggunakan Swift dalam proyek Objective-C saya. Jadi saya menambahkan kelas swift:

import Foundation
@objc class System : NSObject {
    @objc func printSome() {
        println("Print line System");
    }
}

Dan mengimpornya ke dalam file .m:

#import "MyProjectName-Swift.h"

Saat membangun proyek saya, saya mendapatkan kesalahan berikut:

Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist

CATATAN: Di bawah "Build Settings-> Swift Compiler - Code Generation-> Objective-C Briding Header" diatur ke MyProjectName-Bridging-Header.h

Apa yang harus saya lakukan untuk mengatasi masalah ini?

Bantuan apa pun sangat dihargai.

EDIT: File Bridging-Header: #if ditentukan (__ has_include) && __has_include () # include #endif

#include <objc/NSObject.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if defined(__has_include) && __has_include(<uchar.h>)
# include <uchar.h>
#elif __cplusplus < 201103L
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
#endif
#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif

#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"

#if defined(__has_feature) && __has_feature(modules)
#endif

#pragma clang diagnostic pop
pengguna2408952
sumber
2
MyProjectName-Swift.hdan MyProjectName-Bridging-Header.hbekerja dalam arah yang berlawanan. MyProjectName-Swift.hdisediakan secara otomatis. MyProjectName-Bridging-Header.h, namun, disediakan secara semi-otomatis, yaitu Anda harus memastikannya ada. Jadi, apakah Anda yakin dapat melihatnya MyProjectName-Bridging-Header.hdi navigator proyek Anda? Jika tidak, buat dan tambahkan file dengan nama itu ke proyek Anda. Kemudian periksa lagi bahwa jalan untuk itu dalam Pengaturan Build benar (itu harus mencakup direktori proyek Anda: MyProjectName/MyProjectName-Bridging-Header.h.
milos
Sudahkah Anda memeriksa nama modul produk Anda tidak kosong? (Pengaturan Bangun -> Pengemasan -> Nama Modul Produk)
Nina
Nina, ya nama modul saya adalah "MyProjectName" dan bukan sesuatu
ells
milos, saya pikir Xcode seharusnya menghasilkan file briding ini secara otomatis. Jadi tidak, saya tidak memiliki file itu dalam proyek saya.
pengguna2408952
1
Sudahkah Anda menentukan Bridging-Header.h secara manual? Begitu, ada kesalahan ejaan 'Briding'
Nina

Jawaban:

191

Jika file penghubung dibuat pada tingkat yang sama dengan kelas lainnya, Anda mungkin perlu menambahkan jalur relatif, seperti yang ditunjukkan gambar ini. Perhatikan di sini bahwa file penghubung dibuat pada tingkat yang sama dengan kelas lainnya: masukkan deskripsi gambar di sini

Saya memiliki nama yang dimasukkan dengan benar di Build Settings, masukkan deskripsi gambar di sini

tetapi kompilator tidak menemukan file tersebut. masukkan deskripsi gambar di sini

Oleh karena itu, jika saya menambahkan jalur relatif dari akar proyek (yaitu, saya tambahkan ./ProjectName/BridgerFileName.h), masukkan deskripsi gambar di sini

sekarang kompilasi dan saya dapat memanggil metode di kelas Objective C saya: masukkan deskripsi gambar di sini

James Toomey
sumber
4
Bagi saya itu tidak bisa diperbaiki sama sekali. Tampaknya Xcode tidak bereaksi terhadap bidang Header penghubung Objective-C yang diperbarui.
Darius Miliauskas
Butuh waktu lama bagiku untuk menemukannya, tapi akhirnya. Terima kasih, kesalahan telah diperbaiki :)
Anders Sørensen
Ditunjukkan dengan baik! Dan ya, jangan lupa untuk melakukan ini di Setelan Pembuatan Proyek Anda dan juga di setelan Bangun Target.
Akash Bhardwaj
72

Saya menemukan bahwa setelah membuat file header bridging secara manual dan memilih nama dan lokasi default, header bridging akan ditempatkan di direktori proyek, yang berada di bawah direktori root.

Ini membutuhkan nilai berikut untuk pengaturan: T Target> [Your App Target]> Build Settings> Swift Compiler - Code Generation> Objective-C Bridging Header :

$(SRCROOT)/$(PROJECT_NAME)/$(PROJECT_NAME)-Bridging-Header.h 

Perhatikan bahwa jika proyek Anda adalah swift module (kerangka kerja), seperti yang ditunjukkan di komentar, Anda mungkin lebih suka:

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
Don Vaughn
sumber
2
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hakan lebih umum :)
gaussblurinc
1
ini harus menjadi satu-satunya jawaban!
Luca Davanzo
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hhingga folder proyek saya, saya mendapatkan jalur yang benar tetapi menambahkan /$(PROJECT_NAME)tidak membawa saya ke jalur yang diinginkan.
iPeter
Catatan untuk orang lain yang mungkin memiliki masalah yang sama - Ketika saya menyalin / menempel komentar @gaussblurinc, ada beberapa karakter aneh yang disalin di bagian 'Header' dari string tersebut. Setelah menyalin / menempelkan string yang sama dari jawaban, itu berfungsi dengan baik.
Adam Johns
46

Bagi mereka yang menghapus Bridging Header

Saya pergi ke arah sebaliknya karena kebanyakan jawaban lain di sini. Saya telah menggunakan Bridging Header sebelumnya, tetapi saya tidak membutuhkannya lagi. Setelah saya menghapusnya dari proyek saya, saya mulai mendapatkan kesalahan yang disebutkan dalam pertanyaan. Saya melakukan langkah-langkah berikut untuk menyelesaikan masalah saya.

  1. Pergi ke T Target> [Your App Target]> Build Settings> Swift Compiler - General> Objective-C Bridging Header dan hapus jalurnya. (Terima kasih kepada @Donamite untuk idenya.) (Anda bisa mulai mengetik "menjembatani" ke dalam kotak pencarian untuk menemukannya.)
  2. Hapus tanggal turunan. Pergi ke Xcode> Preferences> Locations dan klik panah abu-abu di samping folder Derived Data. Kemudian hapus folder proyek Anda.

masukkan deskripsi gambar di sini

Suragch
sumber
22

Di Swift 4.1

proyek Anda, Anda tidak memiliki bridging-Header.hfile, tetapi proyek Anda memiliki jalur itu. Untuk ini, Anda perlu menghapus jalur itu ...

Buka targetsfile dan pilih Build Settings, ----> Swift Compiler - General, dan hapus file bridging-Header.h. Ikuti tangkapan layar di bawah ini ....masukkan deskripsi gambar di sini

Hapus bridging-Header.hfile di Swift Compiler - General

masukkan deskripsi gambar di sini

Sekarang kamu seperti ini ...

masukkan deskripsi gambar di sini

iOS
sumber
14

Untuk menambahkan File Jembatan di proyek Swift.

Langkah 1. Buka File> Tambahkan Kakao dengan File Objective-C (Untuk Tujuan Sementara)

masukkan deskripsi gambar di sini

Langkah 2. Kemudian pop up berikut akan munculmasukkan deskripsi gambar di sini

Sekarang tekan tombol Create Bridging Header

SELESAI
ANDA AKAN MENDAPATKAN FILE BRIGDE DI BUNDLE
TERIMA KASIH

Maninderjit Singh
sumber
13

Berikut adalah langkah-langkah untuk membuat Bridging header.

  1. File-> New-> iOS-> Header File , Beri nama file bridging seperti "yourProjectName-Bridging-Header.h"

  2. Build-Settings-> Objective-C Bridging Header , Beri nama file bridging header seperti "ProjectName-Bridging-Header.h"

    CATATAN: File header penghubung harus ditempatkan di folder root utama dari proyek tempat file ".xcodeproj" berada. Jika tidak, pindahkan file header Bridging ke folder root proyek. Dengan cara ini Xcode dapat mengakses file jembatan.

  3. Buat proyek, dan impor file yang diperlukan di header Bridging.

Wisnuvardhan
sumber
12

Bagi saya, itu membantu untuk menggunakan $ (SRCROOT) / $ (PROJECT_NAME) / di depan jalur file header penghubung saya

Srinivas Padidala
sumber
1
Ini adalah jawaban yang valid. Seharusnya tidak ditandai. Anda dapat menggunakan $ (SRCROOT) dan $ (PROJECT_NAME) sebagai panduan untuk mendapatkan jawaban yang benar tetapi Anda mungkin tidak dapat menyalin dan menempel setiap solusi.
Hobbes the Tige
Solusi yang disajikan dalam jawaban ini sebenarnya telah memperbaiki masalah saya, terima kasih Srinivas Padidala
Wilson
Lakukanlah. $ (SRCROOT) / $ (PROJECT_NAME) /YourProjectName-Bridging-Header.h berfungsi untuk saya ............ Tempel $ (SRCROOT) / $ (PROJECT_NAME) / apa adanya ..... jangan tambahkan nama Proyek Anda di tempat $ (PROJECT_NAME)
ioSana
6

Bagi saya itu membantu untuk digunakan $(SRCROOT)di depan jalur header penghubung Objective-C saya.

$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h
Antoine
sumber
5

Ikuti langkah-langkah di bawah ini:

  1. Hapus file header penghubung. . . (Mungkin Anda membuatnya secara manual) dan;
  2. Buat file Swift baru di Project Objective-C. . . (Bukan impor, buat dulu)

Mungkin kedua hal ini akan membantu menyelesaikan masalah Anda.

iHart
sumber
5

Yang berikut berhasil untuk saya:

  1. File header penghubung harus ditempatkan di folder root utama dari proyek tempat file ".xcodeproj" berada. Pindah ke direktori proyek dan seret dan lepas header penghubung ke root jika berada di dalam folder lain.
  2. Memperbaiki kesalahan ejaan pada nama header.
  3. Hapus Data Berasal
  4. Target -> Build Settings -> Swift Compiler: General -> Tambahkan nama Header Obj C.
  5. Bersihkan dan jalankan kembali.
AG
sumber
2

Membuat File Bridging Header Secara Manual

Pertama-tama hapus file header Bridging yang dibuat oleh Xcode. Dan Pilih proyek Anda, goto> Build Settings> Cari kata kunci. Swift Compiler - Pembuatan Kode. Klik pada Objective-C Bridging Header, hapus jalur itu. Sekarang bersihkan Proyek Anda.

Sekarang pilih proyek Anda> Jendela di bilah navigasi. Pilih Proyek dan hapus data turunan Anda dari sana.

Sekarang buat file baru, pilih Source dan kemudian pilih File Header dan buat file header Bridging Anda. Nama file haruslah nama proyek Anda -Bridging-Header.h dan kemudian buatlah

Pilih proyek Anda, goto> Build Settings> Cari kata kunci. Swift Compiler - Pembuatan Kode. Klik pada Objective-C Bridging Header dan sekarang tambahkan path pada Objective-C Bridging Header seperti projectname-Bridging-Header.h

Sekarang impor kelas Anda ke file header bridging dan Anda dapat mengkompilasinya dengan mudah.

File header penghubung Anda terlihat seperti ini saat Anda membuat file secara manual.

Mandeep Singh
sumber
0

Yang membantu saya adalah memindahkan file secara manual ke jalur yang disebutkan dalam pesan kesalahan. Begitu:

  1. Saya menghapus file (dipindahkan ke sampah)
  2. Memindahkannya dari sampah ke jalur dalam pesan kesalahan
  3. Nanti saya juga harus membersihkan proyek tersebut
jreft56.dll
sumber