无法为桥接标头发出预编译的标头

Rin*_*ngo 27 compiler-errors ios swift 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’
Run Code Online (Sandbox Code Playgroud)

当我使用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-桥接-Header.h"

我用google搜索,但没有这样的问题.错误意味着它需要一个PCH文件?这是我的.pch标题配置: 在此输入图像描述 它解决不了.

怎么做?

D4t*_*aya 19

在为加密核心数据添加可可豆荚之后,我也遇到了完全相同的问题(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
Run Code Online (Sandbox Code Playgroud)

解决方案:
1我添加$(inherited) non-recursiveSearch Path -> Header Search Paths
2然后 在我的项目的目标构建设置中添加${PODS_ROOT} recursiveSearch Path -> User Header Search Paths
上述两个.

请查看以下SO答案:
1继承标题搜索路径
2继承用户搜索路径

  • @Ringo 将此作为答案并检查它是否正确,以便其他人可以从您的发现中受益。 (2认同)

Har*_*ngh 17

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

@class MySwiftClass 要么...

typedef NS_ENUM(NSInteger, MySwiftEnumType)

MySwiftEnumType是类的最低级别名称.所以Swift enum MyClass.MySwiftEnumType变得公正MySwiftEnumType

  • 假设存在同样的问题,则存在循环引用问题,就像 Obj-C 标头可能发生的情况一样。要修复此问题,请在引用 swift 类的 Obj-C 头文件中删除 #import "myproject-Swift.h" (将其移至 `.m` 文件)。并为 ObjC 类定义中引用的 swift 类创建前向声明“@class MySwiftClass” (3认同)
  • @HariKaramSingh 就是这样!非常感谢!Xcode 应该从 stackoverflow 获取错误描述:) (2认同)

BAP*_*BAP 13

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

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

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


Ali*_*ens 11

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

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


Zgp*_*ace 7

XCode在某些目标上可以构建成功,但在其他目标上则不能。
最后我发现Header Search Paths不一样。(路径:目标>构建设置>搜索路径>标题搜索路径>添加项目)
我从成功的目标复制并粘贴了路径。我做到了。太棒了。

在此输入图像描述


Oka*_*kan 6

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

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

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

查找隐式依赖项

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

  • 现在默认情况下始终选中此选项。 (2认同)

小智 5

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

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

Scr1

2号

  • 这是我的问题。很简单!然而花了几个小时试图弄清楚为什么它不起作用。‍♂️ (3认同)

Mar*_*ang 5

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

  • 错误:无法为桥接标头“Bridging-Header.h”发出预编译标头“Bridging-Header-97bd5f.pch”
  • 在桥接头中找不到 ActionSheetPicker_3_0/ActionSheetPicker.h(但它在那里声明)

经过数小时的研究和尝试和错误,结果是,项目中没有设置有效的架构来编译模拟器。

Project -> Build Settings -> User-Defined -> VALID_ARCHS添加架构x86_64启用模拟器编译。

  • 我发誓每隔一个月我都会来到这里,获胜者的答案是不同的。今天就是这个,谢谢。 (3认同)