Failed to import bridging header

38,894

Solution 1

I figured out 2 solutions!

1) This isn't the prettiest way to do it, but I copy and pasted all my code from my Chartboost.h file into my Bridging-Header.h file instead of importing . This worked. But I knew there was a better way, so I kept hunting...

2) The correct solution, I believe, is what I did next. My project's (not target) Framework Search Paths was empty. So, I went ahead and added the path to the Chartboost SDK like so: /Users/me/Desktop/Apps/SDKs/Chartboost
Now it builds and runs with no problem and I didn't have to copy and paste everything into the bridging header. All that was needed was

#import <Chartboost/Chartboost.h>

If anyone is having a similar issue, just read what I did in my question, and then follow it up with this answer.

Solution 2

I answered this in another post: Chartboost integration issues with XCode 6.1

EXPLANATION:

It seems like some pods and libraries don't bother importing the basic frameworks as they expect your code to already have them. This doesn't work with Swift as the way to import frameworks changed. All you need to do is to add the frameworks needed in your bridging header file.

ANSWER:

It depends on what errors the compiler throws. If it complains about NSObject, NSString, etc... you need to add #import <Foundation/Foundation.h> in the top of your bridging header file.

If it complains about UIView, UIButton, etc... you need to add #import <UIKit/UIKit.h> in the top of your bridging header file.

Solution 3

Had a nearly identical issue and found a solution that worked for me.

My problem was that the Bridging Header was not in ALL my targets.

Project Bridging Header


It was in my project but not my UnitTest target. So I added it to by my UITest and UnitTest and it started working without issue.

Testing Target


Solution 4

This is how I solved it (and works!):

  1. Create yourProjectName-Bridging-Header.h file at the root of your project
  2. Include in that file the .h of the classes you want to expose and use into your swift project
  3. Go to yourProject->Build Settings->Search Paths, and set to Yes the "Always Search User Paths" key.
  4. Set "User Header Search Paths" to your project root path.

That's it.

Apparently, Xcode miss out on third party folders when they are copied into your project

I am on Xcode 6.3 , swift 1.2.

Solution 5

The problem like your's puzzled me. But I found a solution.

#import <Foundation/Foundation.h>

You should put this code (↑) before your code. This is just my solution (↓).

#import <Foundation/Foundation.h>
#import <Chartboost/Chartboost.h>

Good luck!

Share:
38,894
Alan Scarpa
Author by

Alan Scarpa

I've made a whole bunch of iPhone apps. http://thescarpagroup.com

Updated on September 23, 2020

Comments

  • Alan Scarpa
    Alan Scarpa over 3 years

    I've read a lot of questions and answers that deal with a similar issue, but I have yet to find a solution. If anyone could shed some light, that would be wonderful.

    I created a Swift project and now I want to combine it with some Objective-C. My "failed to import bridging header" only occurs when I attempt to #import my Chartboost.h file. So, as long as I don't have anything in my bridging header file, Xcode finds it and gives me no issue. But once I add this:

    #import <Chartboost/Chartboost.h>
    

    I get the error along with 38 other errors saying "Swift Compiler Error - Function definition not allowed here".

    I've correctly imported my framework. And my framework search path is correct. And it's only when I import the Chartboost framework. UIKit and Foundation work fine.

    Here is what I did leading up to the issue....First, I created a new Obj-C file and then clicked "Yes when Xcode gave me a pop-up asking if it could configure a bridging header. This created "FunFacts-Bridging-Header.h"

    Then I made sure Objective-C Bridging Header path was correct under Swift Compiler - Code Generation.

    I even put in a very specific path /Users/me/Desktop/FunFacts/FunFacts-Bridging-Header.h and it still says "Failed to import".

    I've also set Defines Module to "Yes" (because I heard that may help). And my product module name is FunFacts.

    Why is FunFacts-Bridging-Header.h failing to import when I try to add #import ?