Failed to emit precompiled header for bridging header

三世轮回 提交于 2019-12-17 07:27:45

问题


I downloaded a project from GitHub, then pod the following files, some of which are written by OBJ-C and I used a bridge header.

pod ‘SnapKit’
pod ‘MJRefresh’
pod ‘Alamofire’
pod ‘Kingfisher’
pod ‘MBProgressHUD’
pod ‘pop’
pod ‘EVReflection’
pod ‘StreamingKit’
pod ‘iCarousel’
pod ‘ReflectionView’

When I run the project with Xcode 9.0 beta 2, but unfortunately the error log as follows :

error: failed to emit precompiled header '/var/folders/kd/4gh0_kxx3jx4thjb_sssmmcw0000gn/T/EvoRadio-Bridging-Header-97bd5f.pch' for bridging header '/Users/ringo/Downloads/EvoRadio-master/EvoRadio/Resources/EvoRadio-Bridging-Header.h'

I have googled, but no such issue.The error means it needs a PCH file? This is my .pch header configuration: It can't solve it.

How to make it?


回答1:


I also got exact same issue (Xcode9 beta 6) after I added cocoa pods for Encrypted Core Data.
This is my PodFile:

# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
pod 'EncryptedCoreData', :git => 'https://github.com/project-imas/encrypted-core-data.git'

target 'Root' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for Root

  target 'RootTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'RootUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

Solution:
1 I added $(inherited) non-recursive to Search Path -> Header Search Paths
2 Then added ${PODS_ROOT} recursive to Search Path -> User Header Search Paths
Both the above in my projects' target build settings.

Please have a look at these SO answers:
1 Inherit Header Search Paths
2 Inherit User Search Paths




回答2:


Note this can also happen if your bridging header imports Objective-C code that itself imports your app's Swift module via myproject-Swift.h. The solution is to use forward declarations for your Swift types and import the project Swift module in the .m file.

@class MySwiftClass or...

typedef NS_ENUM(NSInteger, MySwiftEnumType)

MySwiftEnumType is the lowest level name even for classes. So Swift enum MyClass.MySwiftEnumType becomes just MySwiftEnumType




回答3:


Make sure you're opening the proper project workspace, otherwise, the Podfile may not have all the resources it needs to compile.

I saw this same error on a project that had been working fine previously.

I discovered that I had accidentally opened the ProjectName.xcodeproj file rather than the ProjectName.xcworkspace file. Opened the xcworkspace file and presto, project was working again!




回答4:


For me, this problem occurred when I added new build configuration and scheme to the existing project.

The solution was to run pod install on newly created scheme. After that, project was built successfully.




回答5:


You can try this solution. I have solved the same problem by this way.

Product > Scheme > Edit Scheme > Select "Build" on Left Menu > Find implicit dependencies

Under the build tab, check 'Find implicit dependencies':

Then make a clean and build again.




回答6:


I have tried all of the above steps mentioned in the answers but nothing worked for me, the problem was basically with the deployment target version for the project and in the podfile.

In my project deployment target was 10.0 while in my podfile it was 11.0.




回答7:


In my case I had the same compiler error with additional errors like "Unknown type" in one of my project files, So I just added this to the problematic file, and it solved it instantly.

#import <UIKit/UIKit.h>




回答8:


For my case I had a typo in folder name "Supporing FIles" instead of "Supporting Files".




回答9:


My experience with this is that Xcode is unable to find header files for pods/frameworks imported in the project.

My Project experience with this: Updating Xcode9.2 - 9.3 where many cocoapods had to be updated due to implicit definitions now unavailable or being outdated.
I had changed the Podfile to now include 'use_frameworks!'. Following this and after dealing with other compile issues I found the error you are experiencing. I believe adding 'use_frameworks! was preventing some pods with support prior to iOS 8 from compiling correctly. Steps I took to correct this issue:

  1. I tried deleting the Pods/ directory using cocoa pod deintegrate
  2. I then open project with Xcode and cleaned the build folder and the project. (delete content within derived data folder)
  3. I then pod install again but the issue persisted.

  4. Ultimately I removed the use_frameworks line in Podfile and then repeated steps 1-3 and the project was now able to find the missing header files and the issue never presented it self again.




回答10:


Deleting Podfile.lock and re-running pod install fixed this for me.




回答11:


There are so many reasons and things can do, like:

  • Restart Xcode, Clean, Build
  • Remove Pods directory and pod install
  • Check the missing file is added to your pod file
  • Check the missing file is added to you bridging header
  • Change the header settings like here iOS - Build fails with CocoaPods cannot find header files

The only one works for me is the accepted answer in Xcode 9 - failed to emit precompiled header.

platform :ios, '11.0' in podfile should match the target in the project




回答12:


I had same scenario, make sure for the file A that you have included in YourProjectName-Bridging-Header.h

  • if it uses some other class(s), then those other classes are also included before that File A



回答13:


In my case, I was building with the wrong scheme (Top-Left menu).




回答14:


I also suffered from this after I updated new Xcode. After several hours of investigation, i found that if you have multiple targets, you now have to add more targets in pod file in Xcode 10. So your code should be like this:

platform :ios, '9.0'

target 'EvoRadio' do

pod ‘SnapKit’
pod ‘MJRefresh’
pod ‘Alamofire’
pod ‘Kingfisher’
pod ‘MBProgressHUD’
pod ‘pop’
pod ‘EVReflection’
pod ‘StreamingKit’
pod ‘iCarousel’
pod ‘ReflectionView’

target 'EvoRadio2ndtarget'   # add your second target

end

I found that in Xcode 9 you don't need to add, but in Xcode 10 you need to add this. Hope this helps.




回答15:


For Xcode 11 I had an issue with the "Security.framework". I removed this dependency, then re added it. Ultimately fixed the other problems



来源:https://stackoverflow.com/questions/45779591/failed-to-emit-precompiled-header-for-bridging-header

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