Xcode MyProjectName-Bridging-Header.h không tồn tại


118

Tôi muốn bắt đầu sử dụng Swift trong dự án Objective-C của mình. Vì vậy, tôi đã thêm một lớp nhanh chóng:

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

Và nhập nó vào một tệp .m:

#import "MyProjectName-Swift.h"

Khi xây dựng dự án của tôi, tôi nhận được lỗi sau:

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

LƯU Ý: Trong "Cài đặt bản dựng-> Trình biên dịch Swift - Tạo mã-> Tiêu đề trình chiếu mục tiêu-C" được đặt thành MyProjectName-Bridging-Header.h

Tôi nên làm gì để giải quyết vấn đề này?

Bất kỳ sự giúp đỡ nào cũng được đánh giá cao.

EDIT: Tập tin Bridging-Header: #if được xác định (__ has_include) && __has_include () # bao gồm #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

2
MyProjectName-Swift.hMyProjectName-Bridging-Header.hlàm việc theo hướng ngược lại. MyProjectName-Swift.hđược cung cấp tự động. MyProjectName-Bridging-Header.htuy nhiên, được cung cấp bán tự động, tức là bạn phải chắc chắn rằng nó ở đó. Vì vậy, bạn có chắc chắn rằng bạn có thể nhìn thấy MyProjectName-Bridging-Header.htrong điều hướng dự án của bạn? Nếu không, tạo và thêm một tệp có tên đó vào dự án của bạn. Sau đó kiểm tra lại xem đường dẫn đến nó trong Cài đặt bản dựng có chính xác không (nó sẽ bao gồm thư mục dự án của bạn : MyProjectName/MyProjectName-Bridging-Header.h.
milos

Bạn đã kiểm tra tên mô-đun sản phẩm của bạn không trống? (Cài đặt bản dựng -> Đóng gói -> Tên mô-đun sản phẩm)
Nina

Nina, vâng, tên mô-đun của tôi là "MyProjectName" và không phải là thứ gì đó
user2408952

milos, tôi nghĩ rằng Xcode được cho là tự động tạo tập tin này. Vì vậy, không tôi không có tập tin đó trong dự án của tôi.
dùng2408952

1
Bạn đã chỉ định thủ công Bridging-Header.h chưa? Tôi thấy, có một lỗi chính tả 'Briding'
Nina

Câu trả lời:


191

Nếu tệp bắc cầu được tạo ở cùng cấp độ với các lớp khác, bạn có thể cần thêm đường dẫn tương đối, như những hình ảnh này hiển thị. Lưu ý ở đây rằng tệp bắc cầu được tạo ở cùng cấp độ với các lớp khác: nhập mô tả hình ảnh ở đây

Tôi có tên được nhập chính xác trong Cài đặt bản dựng, nhập mô tả hình ảnh ở đây

nhưng trình biên dịch không tìm thấy tập tin. nhập mô tả hình ảnh ở đây

Do đó, nếu tôi thêm đường dẫn tương đối từ thư mục gốc của dự án (nghĩa là tôi thêm ./ProjectName/BridgerFileName.h), nhập mô tả hình ảnh ở đây

bây giờ nó biên dịch và tôi có thể gọi một phương thức trong lớp Objective C của mình: nhập mô tả hình ảnh ở đây


4
Đối với tôi nó không sửa chữa gì cả. Có vẻ như XCode không phản ứng với trường Tiêu đề Cầu nối Objective-C được cập nhật.
Darius Miliauskas 11/03/2015

Mất rất nhiều thời gian để tôi tìm thấy, nhưng cuối cùng. Cảm ơn, đã sửa lỗi :)
Anders Sørensen

Được chứng minh tốt! Và có, đừng quên thực hiện điều này trong cả Cài đặt xây dựng dự án cũng như trong cài đặt Target Build.
Akash Bhardwaj

72

Tôi thấy rằng sau khi tạo tệp tiêu đề bắc cầu theo cách thủ công và chọn tên và vị trí mặc định, tiêu đề bắc cầu sẽ được đặt trong thư mục dự án, nằm trong thư mục gốc.

Điều này yêu cầu giá trị sau cho cài đặt: Mục tiêu> [Mục tiêu ứng dụng của bạn]> Cài đặt bản dựng> Trình biên dịch Swift - Tạo mã> Tiêu đề cầu nối Objective-C :

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

Lưu ý rằng nếu dự án của bạn là một mô-đun (khung) nhanh chóng, như được chỉ ra trong các ý kiến, bạn có thể thích:

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

2
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hsẽ phổ biến hơn :)
gaussblurinc

1
đây sẽ là câu trả lời duy nhất
Luca Davanzo

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hđến thư mục dự án của tôi, tôi đang nhận được đường dẫn chính xác nhưng việc bổ sung /$(PROJECT_NAME)không đưa tôi đến đường dẫn mong muốn.
iPeter

Lưu ý cho những người khác có thể có cùng một vấn đề - Khi tôi sao chép / dán nhận xét @gaussblurinc, có một số ký tự lạ được sao chép trong phần 'Tiêu đề' của chuỗi. Sau khi sao chép / dán cùng một chuỗi từ câu trả lời, nó hoạt động tốt.
Adam Johns

45

Đối với những người đang xóa Tiêu đề Cầu nối

Tôi đã đi ngược lại như hầu hết các câu trả lời khác ở đây. Tôi đã sử dụng Bridging Header trước đây, nhưng tôi không cần nó nữa. Sau khi tôi xóa nó khỏi dự án của mình, tôi bắt đầu nhận được lỗi được đề cập trong câu hỏi. Tôi đã thực hiện các bước sau để giải quyết vấn đề của tôi.

  1. Chuyển đến Mục tiêu> [Mục tiêu ứng dụng của bạn]> Cài đặt bản dựng> Trình biên dịch Swift - Chung> Tiêu đề cầu nối khách quan-C và xóa đường dẫn. (Cảm ơn @Donamite về ý tưởng.) Bạn có thể bắt đầu nhập "bắc cầu" vào hộp tìm kiếm để tìm thấy nó.)
  2. Xóa ngày dẫn xuất. Chuyển đến Xcode> Tùy chọn> Vị trí và nhấp vào mũi tên màu xám của thư mục Dữ liệu đã tạo. Sau đó xóa thư mục dự án của bạn.

nhập mô tả hình ảnh ở đây


22

Trong Swift 4.1

dự án của bạn bạn không có bridging-Header.htập tin, nhưng dự án của bạn có đường dẫn đó. Đối với điều này, bạn cần xóa đường dẫn đó ...

Đi đến targetstệp và chọn Build Settings, ----> Swift Compiler - Generalvà xóa bridging-Header.h. Thực hiện theo các ảnh chụp màn hình bên dưới ....nhập mô tả hình ảnh ở đây

Xóa bridging-Header.htệp trong Swift Compiler - Chung

nhập mô tả hình ảnh ở đây

Bây giờ bạn đã như thế này ...

nhập mô tả hình ảnh ở đây


14

Để thêm File Bridge trong dự án Swift.

Bước 1. Chuyển đến Tệp> Thêm Ca cao với Tệp Mục tiêu-C (Dành cho Mục đích tạm thời)

nhập mô tả hình ảnh ở đây

Bước 2. Sau đó, cửa sổ bật lên sau sẽ xuất hiệnnhập mô tả hình ảnh ở đây

Bây giờ nhấn nút Tạo cầu nối

DONG
BẠN S GET NHẬN FILE BRIGDE TRONG BUNDLE CẢM
ƠN


13

Đây là các bước để tạo tiêu đề Bridging.

  1. Tệp-> Mới-> iOS-> Tệp tiêu đề , Đặt tên tệp cầu nối giống như "yourProjectName-Bridging-Header.h"

  2. Build-Settings-> Objective-C Bridging Header , Chỉ cần đặt tên tệp tiêu đề cầu nối giống như "ProjectName-Bridging-Header.h"

    LƯU Ý: Tập tin tiêu đề bắc cầu phải được đặt trong thư mục gốc chính của dự án nơi chứa tệp ".xcodeproj". Nếu không di chuyển tệp tiêu đề Bridging vào thư mục gốc của dự án. Bằng cách này, Xcode có thể truy cập tệp cầu nối.

  3. Xây dựng dự án và nhập các tệp cần thiết trong tiêu đề Bridging.


12

Đối với tôi, nó đã giúp sử dụng $ (SRCROOT) / $ (PROJECT_NAME) / trước đường dẫn tệp tiêu đề bắc cầu của tôi


1
Đây là một câu trả lời hợp lệ. Nó không nên được đánh dấu xuống. Bạn có thể sử dụng $ (SRCROOT) và $ (PRO DỰ_NAME) làm hướng dẫn để đi đến câu trả lời đúng nhưng có lẽ bạn không thể sao chép và dán mọi giải pháp.
Hobbes the Tige

Giải pháp được trình bày trong câu trả lời này thực sự đã khắc phục vấn đề của tôi, cảm ơn Srinivas Padidala
Wilson

Sử dụng cho nó. ..... không thêm tên Dự án của bạn thay cho $ (
PRO DỰ_NAME

6

Đối với tôi, nó đã giúp sử dụng $(SRCROOT)trước đường dẫn tiêu đề bắc cầu Objective-C của tôi.

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

5

Làm theo các bước dưới đây:

  1. Xóa tập tin tiêu đề bắc cầu. . . (Có thể bạn tạo thủ công) và;
  2. Tạo tệp Swift mới trong Dự án Objective-C. . . (Không nhập, đầu tiên tạo nó)

Có lẽ hai điều này sẽ giúp giải quyết vấn đề của bạn.


5

Sau đây làm việc cho tôi:

  1. Cầu nối tệp tiêu đề phải được đặt trong thư mục gốc chính của dự án nơi chứa tệp ".xcodeproj". Di chuyển đến thư mục dự án và kéo và thả tiêu đề bắc cầu vào root nếu nó nằm trong bất kỳ thư mục nào khác.
  2. Sửa lỗi chính tả trong tên tiêu đề.
  3. Xóa dữ liệu phái sinh
  4. Mục tiêu -> Cài đặt bản dựng -> Trình biên dịch Swift: Chung -> Thêm tên tiêu đề Obj C.
  5. Làm sạch và chạy lại.

2

Tạo tập tin tiêu đề bắc cầu thủ công

Trước hết hãy xóa tệp tiêu đề Bridging mà Xcode được tạo. Và chọn goto dự án của bạn> Xây dựng cài đặt> Tìm kiếm từ khóa. Trình biên dịch Swift - Tạo mã. Nhấp vào Tiêu đề Cầu nối Objective-C, xóa đường dẫn đó. Bây giờ làm sạch dự án của bạn.

Bây giờ chọn dự án của bạn> Cửa sổ trong thanh điều hướng. Chọn dự án và xóa dữ liệu dẫn xuất của bạn từ đó.

Bây giờ tạo một tệp mới, chọn Nguồn và sau đó chọn Tệp Tiêu đề và tạo tệp tiêu đề Cầu nối của bạn. Tên tệp phải là tên dự án của bạn -Bridging-Header.h và sau đó tạo nó

Chọn goto dự án của bạn> Xây dựng cài đặt> Tìm kiếm từ khóa. Trình biên dịch Swift - Tạo mã. Nhấp vào Tiêu đề Cầu nối Mục tiêu-C và bây giờ thêm đường dẫn trong Tiêu đề Cầu nối Mục tiêu-C này như tên dự án-Bridging-Header.h

Bây giờ nhập các lớp của bạn vào tệp tiêu đề bắc cầu và bạn có thể biên dịch mã của mình một cách dễ dàng.

Tệp tiêu đề bắc cầu của bạn trông như thế này khi bạn đang tạo tệp của mình theo cách thủ công.


0

Điều giúp tôi là di chuyển tệp theo cách thủ công đến đường dẫn được đề cập trong thông báo lỗi. Vì thế:

  1. Tôi đã xóa tập tin (chuyển vào thùng rác)
  2. Đã chuyển nó từ thùng rác sang đường dẫn trong một thông báo lỗi
  3. Sau này tôi cũng phải dọn dẹp dự án.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.