Failed to import bridging header

[亡魂溺海] 提交于 2019-11-27 12:41:43
xemacobra

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.

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.

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!

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.

The answer is really very simple.

Make sure you are adding your bridging header path in SWIFT_OBJC_BRIDGING_HEADER under the target section instead of the project section.

If you use CocoaPods this could save your time. 1) The first what you need to do is to check your Podfile it will be like:

target 'YourProjTests' do
    inherit! :search_paths
end

target 'YourProjUITests' do
    inherit! :search_paths
end

2) Open baseproj configuration and set for test targets correct Pods-Proj.debug , see attached image:

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.


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.


Karlygash Zhuginisova

If you have these lines in you bridging header:

#ifndef Bridging_Header_h
#define Bridging_Header_h

#endif /* Bridging_Header_h */

Just delete them, it will solve the problems of Foundation and UIKit.

One case is that if import <Chartboost+Extention/Chartboost+Extention.h> ,

The right way is to import <Chartboost**_**Extention/Chartboost+Extention.h> ,

Just because Pod build will change the framework name of Chartboost+Extention into Chartboost_Extention

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!