Vấn đề nhập khẩu Swift Bridging Header


123

Theo hướng dẫn, tôi đã tạo một tiêu đề bắc cầu và thêm vào dự án của mình. Thật không may, đã xảy ra lỗi sau:

: 0: error: không thể nhập tiêu đề Objective-C '--- path - to --- header / .... h'

Ảnh chụp màn hình 1

Trong cài đặt xây dựng, tôi đã thêm chuỗi đường dẫn tìm kiếm tiêu đề vào vị trí của tiêu đề bắc cầu, nhưng không có gì giúp được.

Có ai có kinh nghiệm vấn đề này?


Bạn có thể tự mình thêm tệp tiêu đề. Sử dụng Tệp mới .. để thêm tệp Objective-c .m trống mới. Điều này sẽ làm cho xcode cung cấp cho bạn một tệp cầu nối tiêu đề nơi bạn có thể thêm các mục nhập của mình. Sau đó, bạn có thể xóa tệp .m bạn vừa thêm
markhunte

Đúng, tôi cũng đã thử cách này, nhưng không có gì giúp được
Nikita Pronchik

Đây có phải là một dự án mới hoặc cùng một dự án bạn đã làm bằng tay?
markhunte

Đó là dự án mới, tôi đã quảng cáo trình bao bọc hỗ trợ Keychain, mà tôi đã từng viết trên OBJC
Nikita Pronchik

Lấy làm tiếc. Không chắc chắn những gì bạn có ý nghĩa bởi trình bao bọc hỗ trợ Keychain được thêm vào. Nhưng tôi nhận thấy bạn đang ở trên iOS, bạn có nhận được điều tương tự với một dự án OSX, đó là những gì tôi đã và đang sử dụng
markhunte

Câu trả lời:


153

Hãy cẩn thận để thêm các tập tin vào thư mục mà lỗi của bạn đang phàn nàn! Tôi đã mắc lỗi tương tự, nếu bạn tạo tệp từ Xcode, nó sẽ chuyển đến thư mục: Project-> Project-> Header.h

Và Xcode đang tìm Project-> Header.h

Điều đó có nghĩa là bạn cần đặt tệp vào thư mục dự án của bạn (ProjectName-> ProjectNameFolder)!

Hy vọng rằng sẽ giúp;)

CẬP NHẬT: Tôi không chắc chắn nếu tôi hiểu ý bạn, nhưng hãy thử điều này để giải quyết vấn đề của bạn:
1. Xóa tất cả các tệp bắc cầu mà bạn đã tạo cho đến bây giờ.
2. Chọn thư mục chính của dự án và nhấn tệp mới-> iOS-> Tệp tiêu đề.
3. Viết nhập khẩu của bạn trong tệp tiêu đề được tạo.
4. Chọn dự án bên trong Xcode-> Build Settings, nhập vào trường tìm kiếm: bắc cầu và nhập khóa SWIFT_OBJC_BRIDGING_HEADER tên của tệp tiêu đề của bạn hoặc đường dẫn đến nó!

Nếu bạn làm theo các bước này, tệp tiêu đề của bạn sẽ được tạo tại đúng vị trí!

: D Hy vọng rằng sẽ giúp!


Chà, tôi vừa thử phương pháp này, tiêu đề thực sự có thể nhìn thấy, nhưng thật không may, việc bắc cầu các lớp Obj-C vẫn vô hình (sau khi bao gồm chúng trong tiêu đề bắc cầu)
Nikita Pronchik

11
Đầu tiên, câu trả lời là "Cần đặt tệp ở cùng cấp độ xcodeproj", cuối cùng, nó nói "đảm bảo tệp là ... không cùng cấp với xcodeproj". Tại sao?
Boon

3
Tôi có nghĩa là tệp phải được đặt bên trong thư mục con của dự án, không cùng cấp với xcodeproj. Ví dụ: Trong thư mục của dự án của bạn, bạn có dự án, project.xcodeproj và dự án. Tệp phải nằm trong thư mục dự án :)
Renan Kosicki

5
Tôi đã thử tất cả mọi thứ nhưng nothnig làm việc cho tôi. Điều này rất khó chịu. Tôi đang làm việc với xcode 8 và swift 3. Bạn có thể giúp tôi không
Hardik Shah

1
Tôi bối rối khi bạn nói "Điều đó có nghĩa là bạn cần đặt tệp ở cùng cấp độ xcodeproj!" nhưng sau khi bạn nói "Đảm bảo rằng tệp được đặt bên trong thư mục chính của dự án không cùng cấp xcodeproj!" cái nào đây
bakalolo

68

Trong trường hợp của tôi, đây thực sự là một lỗi do tham chiếu vòng tròn. Tôi đã có một lớp được nhập trong tiêu đề bắc cầu và tệp tiêu đề của lớp đó đang nhập tiêu đề swift ( <MODULE_NAME>-Swift.h). Tôi đã làm điều này bởi vì trong tệp tiêu đề Obj-C tôi cần sử dụng một lớp được khai báo trong Swift, giải pháp đơn giản là sử dụng @classkhai báo.

Vì vậy, về cơ bản lỗi đã nói "Không thể nhập tiêu đề bắc cầu", lỗi <MODULE_NAME>-Swift.hkhông tìm thấy tệp nói trên, đó là lỗi chỉ vào tệp Tiêu đề Obj-C cụ thể (cụ thể là Trình điều khiển Chế độ xem).

Kiểm tra tệp này tôi nhận thấy rằng nó có -Swift.h được khai báo bên trong tiêu đề. Di chuyển nhập khẩu này để thực hiện giải quyết vấn đề. Vì vậy, tôi cần sử dụng một đối tượng, hãy gọi nó MyObjectđược xác định trong Swift, vì vậy tôi chỉ cần thay đổi tiêu đề để nói

@class MyObject;

1
Điều này là ngớ ngẩn nhưng việc chuyển nó sang tập tin thực hiện cũng làm việc cho tôi. Thật không may, tôi cần nó trong tiêu đề vì lớp của tôi thực hiện một đại biểu được xác định trong một tệp nhanh chóng. Nhưng vì obj-c không quan tâm nếu lớp của tôi thực sự triển khai đại biểu khi tôi thông qua, tôi sẽ giải quyết vấn đề này. Nhưng lý tưởng là có một cách khác
Oren

Bạn cũng có thể phải kiểm tra nhập khẩu của mục bạn đang đưa vào tiêu đề bắc cầu. Nếu bất kỳ lớp nào được nhập có tham chiếu đến tệp "-Swift.h", bạn sẽ phải chuyển khai báo sang .m.
Kyle Carruthers

30

Tìm đường dẫn tại:

Xây dựng cài đặt Trình biên dịch Swift Generation Tạo mã Head Tiêu đề cầu nối Objective-C

và xóa tập tin đó. Sau đó, bạn sẽ ổn thôi.


2
Bạn thắng. Tôi đã lãng phí quá nhiều thời gian cho việc này. Đơn giản và hiệu quả. Xcode đang làm một cái gì đó khó khăn với con đường này, như gắn nó vào $ (SRCROOT) đằng sau hậu trường. Tôi nghĩ rằng có một khoảng trống trên con đường của tôi có thể là một phần của vấn đề nhưng đây là viên đạn bạc.
jday

1
Làm thế nào để bạn xóa tập tin đó?
Jacky Wang

7
Trong Xcode 8 - thay vì "Tạo mã", nó nằm trong Swift Compiler - General.
Vivek Bansal

Cảm ơn bạn đã cứu tôi ... Cảm ơn rất nhiều
Vijay Rathod

18

Điều này có lẽ sẽ chỉ ảnh hưởng đến một tỷ lệ nhỏ người, nhưng trong trường hợp của tôi, dự án của tôi đã sử dụng CocoaPods và một trong những nhóm đó có thông số phụ với Cốc Cốc riêng. Giải pháp là sử dụng nhập khẩu góc đầy đủ để tham chiếu bất kỳ tệp nào trong nhóm phụ.

#import <HexColors/HexColor.h>

Thay vì

#import "HexColor.h"

2
Có gì khác biệt?
Daniel Gomez Rico

Đây là vấn đề đối với tôi. Tôi đã nhận được "Không thể nhập tiêu đề Cầu nối" và lỗi "Không thể tìm thấy XYZ.h". Thực hiện thay đổi này đã giải quyết nó cho tôi trên Xcode 6.4 và Swift 1.2.
Entalpi 16/07/2015

1
@danielgomezrico Một câu lệnh trỏ đến tệp trong thư mục con. Các điểm khác đến một tập tin không tồn tại.
Casey Murray

Giải pháp cho lỗi này đối với tôi khi sử dụng CocoaPods chỉ đơn giản là chạy lại cài đặt pod sau khi tạo cấu hình mới.
máy đánh chữ

16

Đối với tôi, việc xóa dữ liệu dẫn xuất đã sửa nó, tôi nhận thấy ngay cả khi tôi kiểm tra từ một cam kết cũ, vấn đề tương tự cũng xảy ra.

Bạn có thể tiếp cận biểu mẫu tùy chọn đó Window-> Project.


9

Đối với tôi, đó là vì tôi đã quên thêm nó vào Cài đặt bản dựng của Target.

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


Điều này có thể hữu ích nếu bạn chỉ thêm nó vào cài đặt xây dựng của dự án.
zekel

9

"chúng ta cần cho Xcode biết nơi tìm tệp tiêu đề mà chúng tôi liệt kê trong tiêu đề bắc cầu của chúng tôi . Tìm phần Đường dẫn tìm kiếm và thay đổi cài đặt cấp dự án cho Đường dẫn tìm kiếm của người dùng , thêm mục nhập đệ quy cho 'Pods' thư mục: Pods / ** " http://swiftalicio.us/2014/11/USE-cocoapods-from-swift/


6

Tôi cũng đã gặp vấn đề này và thật đáng buồn, đó chỉ là một lỗi trong SDK + Xcode. Tôi đã nói chuyện với một kỹ sư tại WWDC, về vấn đề này và một vài vấn đề khác mà tôi gặp phải với CloudKit. Những lỗi này sẽ được giải quyết trong hạt giống tiếp theo của Xcode.

Đây là phần thú vị về việc sử dụng phần mềm beta.


1
Vâng, thật là bực bội. Nhóm của tôi và tôi đang cố gắng tìm ra sự cố NSURL với CloudKit và chúng tôi không thể hiểu tại sao chúng tôi lại gặp lỗi, hóa ra đó là sự cố phía máy chủ của apple. chúng tôi thậm chí không thể làm bất cứ điều gì. lãng phí quá nhiều thời gian haha
douecraft bumby

5
Vấn đề thực sự có thể được giải quyết bằng cách đặt tiêu đề vào đúng vị trí. Điều làm việc cho tôi là gọi tiêu đề Project-Bridging-Header.h và đặt nó vào thư mục gốc của cây thư mục dự án của tôi (như là anh chị em của tệp dự án Xcode chính của tôi). Xem câu trả lời @ renan-kosicki
jb

1
Đã sửa lỗi trong bản cập nhật Xcode, điều này xảy ra do sự cố với betas sớm.
douecraft bumby

3

cho những người khác gặp khó khăn khi thêm lớp swift vào dự án object-c. đây là những gì làm việc cho tôi:

  1. tạo tập tin nhanh chóng MỚI. điều này sẽ khiến xcode nhắc nhở nếu bạn muốn xcode tạo tất cả các cài đặt cho dự án trộn swift-object-c bao gồm brigde-header.h cho bạn. nhấn có.
  2. bây giờ, thêm các tệp nhanh chóng hiện có của bạn mà bạn muốn sử dụng trong dự án của bạn.
  3. trong tệp triển khai, bạn sẽ sử dụng lớp swift thêm: #import "YourPROJECTNAME-swift.h". xcode này tạo cho bạn. nếu dự án xcode của bạn là myProject thì "myProject-swift.h"

và đó là nó. bây giờ tạo lớp swift trong mã của bạn giống như nó là object-c.


3

Tôi đã nhập vào một số tệp từ các tệp tiêu đề Bridgin từ cocoapods không đúng cách.

Thay vì nhập khẩu

#import <SomeCocoaPod/SomeCocoaPod.h>

tôi đã viết

#import "SomeCocoaPod.h"

Và đây là sai lầm lớn của tôi


2

Thêm một tệp Objective-C tạm thời vào dự án của bạn. Bạn có thể đặt cho nó bất kỳ tên nào bạn thích.

Chọn Có để định cấu hình tiêu đề bắc cầu Objective-C.

Xóa tệp Objective-C tạm thời bạn vừa tạo.

Trong tệp projectName-Bridging-Header.h vừa tạo, hãy thêm dòng này:

'#import <GoogleMaps / GoogleMaps.h>'

Chỉnh sửa tệp AppDelegate.swift:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    GMSServices.provideAPIKey("AIza....") //iOS API key

    return true
}

Theo liên kết để lấy mẫu đầy đủ


2

Đối với tôi, nó không chọn 'Sao chép các mục nếu cần' trong đường dẫn đích trong khi thêm khung. Chỉ cần thêm lại khung với tùy chọn này được chọn.


1

Sau vài ngày đấu tranh ban đầu, cuối cùng tôi cũng đã tích hợp thành công đăng ký Facebook vào ứng dụng iOS của mình. Dưới đây là các bước (Tôi giả sử bạn đã cài đặt Facebook SDK v4.1 trở lên trong các máy của mình):

  1. Thêm các khung Facebook - FBSDKCoreKit, FBSDKLoginKit trong dự án của bạn.
  2. Không thực hiện thay đổi nào trong cài đặt Build như FB SDK v4.1 trở lên không cần các tệp tiêu đề bắc cầu nữa.
  3. Nhập các tệp FBSDKCorekit, FBSDKLoginKit trong các tệp ViewControll.swift, AppDelegate.swift
  4. Thêm thông tin trong danh sách như được đề cập ở đây

  5. Xây dựng ứng dụng của bạn. Và wohoo! không có lỗi thời gian biên dịch.


2
Câu trả lời này sẽ tốt hơn nếu bạn bao gồm các chi tiết từ trang được liên kết. Nếu trang được liên kết thay đổi hoặc liên kết ngừng hoạt động, những người đọc câu trả lời này sẽ không biết phải làm gì khi họ đi qua bước 4.
TNT

1

Tôi có cùng một vấn đề vì lý do khác nhau, đây là trường hợp của tôi tôi, tôi xây dựng dự án cần bao gồm menu slide, tôi đang sử dụng lib SWRevealViewControll để tiếp cận điều đó

Khi tôi nhập các tệp thư viện, tôi thêm thư mục con (SWRevealViewControll) trong mục Hỗ trợ tệp cho các tệp .h && .m, nó gây ra hai lỗi, không thể nhập cầu nối và không tìm thấy SWRevealViewControll.h.

Làm thế nào tôi sửa nó

khi tôi di chuyển tệp trực tiếp sang Tệp hỗ trợ (xóa thư mục con), SWRevealViewControll.m sẽ tự động được thêm vào Build Ph Pha -> Nguồn biên dịch và sự cố đã biến mất

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


1

Tôi đã gặp phải loại lỗi đó, khi tôi thêm Tiện ích mở rộng hôm nay vào ứng dụng của mình. Mục tiêu xây dựng cho tiện ích mở rộng đã được tạo với cùng tên của tiêu đề bắc cầu với mục tiêu xây dựng của ứng dụng của tôi. Điều này dẫn đến lỗi, vì tiện ích mở rộng không thấy các tệp được liệt kê trong tiêu đề bắc cầu của ứng dụng của tôi.

Điều duy nhất bạn cần làm là xóa hoặc thay đổi tên của tiêu đề bắc cầu cho tiện ích mở rộng và tất cả sẽ ổn.

Hy vọng rằng điều này sẽ giúp.


0

Tôi thực sự đã tạo một tệp OSX Source Objective C trống trong dự án (nơi chứa tất cả các tệp nhanh chóng của tôi).

Tôi đã thêm các mục nhập và sau đó xóa tệp .m .


0

Trong số các bản sửa lỗi khác, tôi đã gặp lỗi khi cố gắng thực hiện Sản phẩm-> Lưu trữ. Hóa ra tôi đã có cái này:

Objective-C Bridging Header
  Debug (had the value)
  Release (had the value)
    Any architecture | Any SDK (this was blank - problem here!)

Sau khi đặt nó ở dòng cuối cùng, nó đã hoạt động.


0

Có vấn đề tương tự mà không thể được giải quyết bằng bất kỳ giải pháp trên. Dự án của tôi sử dụng CocoaPods. Tôi nhận thấy rằng cùng với các lỗi tôi đã nhận được một cảnh báo với thông báo sau:

Uncategorized: Target 'Pods' of project 'Pods' was rejected as an implicit dependency for 'Pods.framework' because its architectures 'arm64' didn't contain all required architectures 'armv7 arm64'

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

Vì vậy, giải pháp khá đơn giản. Đối với dự án Pods, thay đổi cờ Build Active Architecture Only thành No và lỗi ban đầu đã biến mất.


0

Đặt Tiêu đề Cầu nối tiền biên dịch thành Không khắc phục sự cố cho tôi.


Tại sao các downvote? Đó là một giải pháp hợp pháp cho một số người. Tôi đã đo điểm chuẩn khi thực hiện các bản dựng lặp đi lặp lại với dự án lớn này và không thấy sự khác biệt nào cả (Apple đã thấy tăng tốc lên tới 30%), nhưng lượng thời gian tôi mất để xóa các tệp xây dựng và xây dựng từ đầu là rất đáng kể
Alexandre G
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.