无法为桥接标题

时间:2017-08-20 07:30:14

标签: ios swift compiler-errors objective-c-swift-bridge

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

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运行项目时,遗憾的是错误日志如下:

  

错误:无法发出预编译的标头   ' /var/folders/kd/4gh0_kxx3jx4thjb_sssmmcw0000gn/T/EvoRadio-Bridging-Header-97bd5f.pch'   用于桥接标题   ' /Users/ringo/Downloads/EvoRadio-master/EvoRadio/Resources/EvoRadio-Bridging-Header.h'

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

如何制作?

20 个答案:

答案 0 :(得分:17)

在为Encrypted Core Data添加可可豆荚之后,我也遇到了完全相同的问题(Xcode9 beta 6)。
这是我的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

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

请看看这些答案:
1 Inherit Header Search Paths
2 Inherit User Search Paths

答案 1 :(得分:13)

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

@class MySwiftClass或...

typedef NS_ENUM(NSInteger, MySwiftEnumType)

MySwiftEnumType是最低级别的名称,即使对于类也是如此。因此Swift枚举MyClass.MySwiftEnumType就变成了MySwiftEnumType

答案 2 :(得分:12)

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

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

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

答案 3 :(得分:7)

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

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

答案 4 :(得分:5)

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

产品&gt;方案&gt;编辑方案&gt;选择左侧菜单上的“构建”&gt;查找隐式依赖项

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

Find implicit dependencies

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

答案 5 :(得分:3)

就我而言;

在“目标/构建设置”下

Product_Name部分与 $(TARGET_NAME)

不同

当我将其更改为$(TARGET_NAME)时,它已解决。

答案 6 :(得分:2)

在我的情况下,我有相同的编译器错误,其他错误如&#34; Unknown type&#34;在我的一个项目文件中,所以我只是将其添加到有问题的文件中,它立即解决了。

#import <UIKit/UIKit.h>

答案 7 :(得分:2)

XCode可以在某个目标中成功构建,而另一个目标则不能。
最后,我发现标题搜索路径不相同。 (路径:“目标”>“构建设置”>“搜索路径”>“标题搜索路径”>“添加项目”)
我复制并粘贴了成功目标的路径。我做到了。真棒。

enter image description here

答案 8 :(得分:2)

对于我来说,我在文件夹名称“ Supporing FIles”中有一个错字,而不是“ Supporting Files”。

答案 9 :(得分:1)

我只是在为模拟器而不是为硬件设备编译时遇到了这个问题。有两个编译错误,例如:

  • 错误:未能发出用于桥接头文件'Bridging-Header.h'的预编译头文件'Bridging-Header-97bd5f.pch'
  • 在桥接头中找不到ActionSheetPicker_3_0 / ActionSheetPicker.h(但已在此处声明)

经过数小时的研究和尝试,结果发现,该项目中没有设置有效的体系结构来编译模拟器。

x86_64处添加体系结构class ModelGeometry : public Qt3DRender::QGeometry { public: ModelGeometry(){ } ,以启用对模拟器的编译。

答案 10 :(得分:1)

有很多原因和事情可以做,例如:

对我唯一有用的是Xcode 9 - failed to emit precompiled header中被接受的答案。

播客文件中的

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

答案 11 :(得分:1)

删除Podfile.lock并重新运行pod install可以解决此问题。

答案 12 :(得分:1)

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

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

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

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

答案 13 :(得分:0)

在我的情况下,我使用错误的方案(顶部菜单)进行构建。

答案 14 :(得分:0)

在更新新的Xcode之后,我也遭受了这一痛苦。经过数小时的调查,我发现如果您有多个目标,则现在必须在Xcode 10的pod文件中添加更多目标。因此您的代码应如下所示:

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中需要添加。希望这会有所帮助。

答案 15 :(得分:0)

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

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

enter image description here

enter image description here

答案 16 :(得分:0)

对于Xcode 11,“ Security.framework”存在问题。我删除了此依赖项,然后重新添加了它。最终解决了其他问题

答案 17 :(得分:0)

重命名现有的Xcode项目配置(导入了另一个Xcode项目)后,出现此错误。

要修复此问题,还必须在导入的项目中重命名相同的配置。

答案 18 :(得分:0)

我有相同的情况,请确保您包含在 YourProjectName-Bridging-Header.h

中的文件A
  • 如果它使用其他一些类,则这些其他类也将包含在该文件A
  • 之前

答案 19 :(得分:0)

由于我在此问题上停留了2个工作日,因此我想与您分享我的问题,因为将来搜索者可能会遇到我的问题

使用命令行运行时遇到上述错误,并且发现我正在编写的命令是用于运行.xcodeproj的,但是要运行.xcworkspace,则必须编写以下命令

xcodebuild -workspace PROJECTNAME.xcworkspace清除存档 -archivePath建立/ PROJECTNAME-方案SCHEMENAME