关于ios:无法为桥接头发出预编译头

Failed to emit precompiled header for bridging header

我从GitHub下载了一个项目,然后pod下面的文件,其中一些是由OBJ-C编写的,我使用了一个桥头。

1
2
3
4
5
6
7
8
9
10
pod ‘SnapKit’
pod ‘MJRefresh’
pod ‘Alamofire’
pod ‘Kingfisher’
pod ‘MBProgressHUD’
pod ‘pop’
pod ‘EVReflection’
pod ‘StreamingKit’
pod ‘iCarousel’
pod ‘ReflectionView’

当我使用Xcode 9.0 beta 2运行项目时,遗憾的是错误日志如下:

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'

我用google搜索,但没有这样的问题。错误意味着它需要一个PCH文件?
这是我的.pch标头配置:
enter image description here
它解决不了。

怎么做?


在为加密核心数据添加可可豆荚之后,我也遇到了完全相同的问题(Xcode9 beta 6)。
这是我的PodFile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 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

解:
1我将$(inherited) non-recursive添加到Search Path -> Header Search Paths
2然后将${PODS_ROOT} recursive添加到Search Path -> User Header Search Paths
以上都是我项目中的目标构建设置。

请看看这些SO答案:
1继承标头搜索路径
2继承用户搜索路径


请注意,如果您的桥接标头导入的Objective-C代码本身通过myproject-Swift.h导入应用程序的Swift模块,也会发生这种情况。解决方案是使用Swift类型的前向声明,并在.m文件中导入项目Swift模块。

@class MySwiftClass或......

typedef NS_ENUM(NSInteger, MySwiftEnumType)

MySwiftEnumType是即使对于班级也是最低级别的名称。所以Swift enum MyClass.MySwiftEnumType变得只是MySwiftEnumType


确保打开正确的项目工作区,否则PodFile可能没有编译所需的所有资源。

我在以前工作正常的项目中看到了同样的错误。

我发现我不小心打开了ProjectName.xcodeproj文件而不是ProjectName.xcworkspace文件。打开xcworkspace文件和presto,项目再次运行!


对我来说,当我向现有项目添加新的构建配置和方案时,会出现此问题。

解决方案是在新创建的方案上运行pod install。之后,项目成功构建。


你可以尝试这个解决方案。我通过这种方式解决了同样的问题。

产品>方案>编辑方案>在左侧菜单上选择"构建">查找隐式依赖项

在构建选项卡下,选中"查找隐式依赖项":

Find implicit dependencies

然后再打扫干净并再次构建。


我已经尝试了答案中提到的所有上述步骤,但没有任何对我有用,问题基本上是项目的部署目标版本和podfile。

在我的项目中,部署目标是10.0,而在我的podfile中,它是11.0。

Scr1

scr2


对于我的情况,我在文件夹名称"Supporing FIles"而不是"Supporting Files"中输入了拼写错误。


在我的情况下,我在我的一个项目文件中有相同的编译器错误和其他错误,如"未知类型",所以我只是将其添加到有问题的文件中,它立即解决了。

#import


有很多理由和事情可以做,例如:

  • 重启Xcode,清理,构建
  • 删除Pods目录和pod安装
  • 检查丢失的文件是否已添加到您的pod文件中
  • 检查丢失的文件是否添加到您的桥接标题
  • 像这里改变标题设置iOS - 构建失败,CocoaPods无法找到头文件

唯一适合我的是Xcode 9中接受的答案 - 未能发出预编译的头文件。

podfile中的platform :ios, '11.0'应与项目中的目标匹配


删除Podfile.lock并重新运行pod install为我修复此问题。


我的经验是,Xcode无法找到项目中导入的pod / frameworks的头文件。

我的项目经验:
更新Xcode9.2 - 9.3由于隐式定义现在不可用或过时,许多cocoapods必须更新。
我已将Podfile更改为现在包含'use_frameworks!'。在此之后以及处理其他编译问题后,我发现了您遇到的错误。我相信添加'use_frameworks!阻止了一些在iOS 8之前支持的pod正确编译。我采取的步骤来纠正这个问题:

  • 我尝试使用cocoa pod deintegrate删除Pods /目录
  • 然后我用Xcode打开项目并清理构建文件夹和项目。 (删除派生数据文件夹中的内容)
  • 然后我再次pod install,但问题仍然存在。

  • 最后,我删除了Podfile中的use_frameworks行,然后重复步骤1-3,项目现在能够找到丢失的头文件,问题再也没有自我呈现。


  • 对于Xcode 11,我遇到了"Security.framework"的问题。 我删除了这个依赖项,然后重新添加它。 最终解决了其他问题


    我更新了新的Xcode后,我也受此影响。 经过几个小时的调查,我发现如果你有多个目标,你现在必须在Xcode 10中的pod文件中添加更多目标。所以你的代码应该是这样的:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    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

    我发现在Xcode 9中你不需要添加,但在Xcode 10中你需要添加它。 希望这可以帮助。


    就我而言,我正在构建错误的方案(左上菜单)。


    我有相同的场景,请确保您已包含在YourProjectName-Bridging-Header.h中的文件A.

    • 如果它使用其他一些类,那么那些其他类也包含在该文件A之前