无法发出用于桥接 header 的预编译 header
Failed to emit precompiled header for bridging header
我从GitHub下载了一个项目,然后pod了下面的文件,其中一些是OBJ-C写的,我用了一个桥header。
pod ‘SnapKit’
pod ‘MJRefresh’
pod ‘Alamofire’
pod ‘Kingfisher’
pod ‘MBProgressHUD’
pod ‘pop’
pod ‘EVReflection’
pod ‘StreamingKit’
pod ‘iCarousel’
pod ‘ReflectionView’
当我运行项目用Xcode9.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'
我用谷歌搜索过,但没有这样的 issue.The 错误意味着它需要一个 PCH 文件?
这是我的 .pch
header 配置:
解决不了。
如何制作?
在为 Encrypted Core Data 添加 cocoa pods 后,我也遇到了完全相同的问题 (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
以上都在我的项目的目标构建设置中。
请查看这些 SO 答案:
1 Inherit Header Search Paths
2 Inherit User Search Paths
确保打开正确的项目工作区,否则,Podfile
可能没有编译所需的所有资源。
我在之前运行良好的项目中看到了同样的错误。
我发现我不小心打开了 ProjectName.xcodeproj
文件而不是 ProjectName.xcworkspace
文件。打开 xcworkspace
文件,很快,项目又开始工作了!
在我的例子中,我在我的一个项目文件中遇到了相同的编译器错误和其他错误,例如 "Unknown type",所以我只是将其添加到有问题的文件中,它立即解决了。
#import <UIKit/UIKit.h>
您可以试试这个解决方案。我已经通过这种方式解决了同样的问题。
产品 > 方案 > 编辑方案 > Select "Build" 在左侧菜单 > 查找隐式依赖关系
在构建选项卡下,勾选 'Find implicit dependencies':
然后清理并重新构建。
对我来说,这个问题是在我向现有项目添加新的构建配置和方案时发生的。
解决方案是 运行 pod install
在新创建的方案上。之后项目就搭建成功了。
我的经验是 Xcode 无法找到项目中导入的 pods/frameworks 的头文件。
我的项目经验:
更新 Xcode9.2 - 9.3,其中许多 cocoapods 由于隐式定义现在不可用或已过时而必须更新。
我已经将 Podfile 更改为现在包含 'use_frameworks!'。在此之后并在处理其他编译问题之后,我发现了您遇到的错误。我相信添加'use_frameworks!在 iOS 8 之前阻止某些 pods 正确编译。我采取的纠正此问题的步骤:
- 我尝试使用 cocoa
pod deintegrate
删除 Pods/ 目录
- 然后我用 Xcode 打开项目并清理构建文件夹和项目。 (删除派生数据文件夹中的内容)
然后我再次 pod install
,但问题仍然存在。
最终,我删除了 Podfile 中的 use_frameworks 行,然后重复步骤 1-3,项目现在能够找到丢失的头文件,问题再也没有出现过。
删除 Podfile.lock
并重新 运行 pod install
为我解决了这个问题。
我遇到了同样的情况,请确保 文件 A 包含在 YourProjectName-Bridging-Header.h 中
- 如果它使用其他一些 class(s),那么其他 classes 也包含在 File A
之前
就我而言,我在文件夹名称 "Supporing FIles" 中输入了错误,而不是 "Supporting Files"。
请注意,如果您的桥接 header 导入 Objective-C 代码本身会通过 [=10 导入您应用的 Swift 模块 ,这也可能发生=].解决方案是为您的 Swift 类型使用前向声明,并在 .m
文件中导入项目 Swift 模块。
@class MySwiftClass
或...
typedef NS_ENUM(NSInteger, MySwiftEnumType)
MySwiftEnumType
是最低级别的名称,即使是 类。所以 Swift enum MyClass.MySwiftEnumType
变成 MySwiftEnumType
有很多理由和事情可以做,比如:
- 重新启动 Xcode、清理、构建
- 删除 Pods 目录和 pod 安装
- 检查丢失的文件是否已添加到您的 pod 文件中
- 检查丢失的文件是否添加到你桥接header
- 像这里一样更改 header 设置 iOS - Build fails with CocoaPods cannot find header files
唯一对我有用的是Xcode 9 - failed to emit precompiled header中接受的答案。
platform :ios, '11.0'
in podfile 应该匹配 项目中的目标
就我而言,我使用的是错误的方案(左上角菜单)。
我更新新的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中你需要添加这个。希望这有帮助。
我已经尝试了答案中提到的所有上述步骤,但对我没有任何效果,问题基本上出在项目的部署目标版本和 podfile 中。
在我的项目部署目标中是 10.0,而在我的 podfile 中是 11.0。
对于 Xcode 11,我遇到了 "Security.framework" 的问题。我删除了这个依赖,然后重新添加它。最终解决了其他问题
我在重命名现有的 Xcode 项目配置后遇到了这个错误,我在其中导入了另一个 Xcode 项目。
要修复它,您还必须在导入的项目中重命名相同的配置。
就我而言;
在 Target/Build 设置下/
Product_Name 部分不同于 $(TARGET_NAME)
当我更改它$(TARGET_NAME)时,它已解决。
由于我已经在这个问题上停留了 2 个工作日,所以我想为您分享我的问题,因为未来的搜索者可能会遇到我的问题
我在 运行 command line 时收到提到的错误,我发现我正在编写的命令是针对 运行ning .xcodeproj
,但是 运行 a .xcworkspace
你必须写下面的命令
xcodebuild -workspace PROJECTNAME.xcworkspace clean archive
-archivePath build/PROJECTNAME -scheme SCHEMENAME
XCode可以在一些目标中建立成功,但其他目标不能。
最后发现Header Search Paths不一样。 (路径:Target > Build Settings > Search Paths > Header Search Paths > add item)
我复制并粘贴了成功目标的路径。我做到了。太棒了。
我在为模拟器而非硬件设备编译时遇到了这个问题。有两个编译错误,如:
- 错误:无法发出用于桥接的预编译 header 'Bridging-Header-97bd5f.pch' header 'Bridging-Header.h'
- 无法在桥接 Header 中找到 ActionSheetPicker_3_0/ActionSheetPicker.h(但已在此处声明)
经过数小时的研究和尝试,结果发现,项目中没有有效的体系结构集可以为模拟器编译。
在 Project -> Build Settings -> User-Defined -> VALID_ARCHS
添加体系结构 x86_64
以启用模拟器编译。
就我而言,一切都很好。我刚刚忘记在添加到桥接头文件的导入中添加“.h”
是
import 'Test'
必填
import 'Test.h'
在我的例子中,我发现这是因为我没有在 Release 选项卡中配置 Framework Search Paths
。这是屏幕截图:
添加这个路径后就可以了
我从GitHub下载了一个项目,然后pod了下面的文件,其中一些是OBJ-C写的,我用了一个桥header。
pod ‘SnapKit’
pod ‘MJRefresh’
pod ‘Alamofire’
pod ‘Kingfisher’
pod ‘MBProgressHUD’
pod ‘pop’
pod ‘EVReflection’
pod ‘StreamingKit’
pod ‘iCarousel’
pod ‘ReflectionView’
当我运行项目用Xcode9.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'
我用谷歌搜索过,但没有这样的 issue.The 错误意味着它需要一个 PCH 文件?
这是我的 .pch
header 配置:
如何制作?
在为 Encrypted Core Data 添加 cocoa pods 后,我也遇到了完全相同的问题 (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
以上都在我的项目的目标构建设置中。
请查看这些 SO 答案:
1 Inherit Header Search Paths
2 Inherit User Search Paths
确保打开正确的项目工作区,否则,Podfile
可能没有编译所需的所有资源。
我在之前运行良好的项目中看到了同样的错误。
我发现我不小心打开了 ProjectName.xcodeproj
文件而不是 ProjectName.xcworkspace
文件。打开 xcworkspace
文件,很快,项目又开始工作了!
在我的例子中,我在我的一个项目文件中遇到了相同的编译器错误和其他错误,例如 "Unknown type",所以我只是将其添加到有问题的文件中,它立即解决了。
#import <UIKit/UIKit.h>
您可以试试这个解决方案。我已经通过这种方式解决了同样的问题。
产品 > 方案 > 编辑方案 > Select "Build" 在左侧菜单 > 查找隐式依赖关系
在构建选项卡下,勾选 'Find implicit dependencies':
然后清理并重新构建。
对我来说,这个问题是在我向现有项目添加新的构建配置和方案时发生的。
解决方案是 运行 pod install
在新创建的方案上。之后项目就搭建成功了。
我的经验是 Xcode 无法找到项目中导入的 pods/frameworks 的头文件。
我的项目经验:
更新 Xcode9.2 - 9.3,其中许多 cocoapods 由于隐式定义现在不可用或已过时而必须更新。
我已经将 Podfile 更改为现在包含 'use_frameworks!'。在此之后并在处理其他编译问题之后,我发现了您遇到的错误。我相信添加'use_frameworks!在 iOS 8 之前阻止某些 pods 正确编译。我采取的纠正此问题的步骤:
- 我尝试使用 cocoa
pod deintegrate
删除 Pods/ 目录
- 然后我用 Xcode 打开项目并清理构建文件夹和项目。 (删除派生数据文件夹中的内容)
然后我再次
pod install
,但问题仍然存在。最终,我删除了 Podfile 中的 use_frameworks 行,然后重复步骤 1-3,项目现在能够找到丢失的头文件,问题再也没有出现过。
删除 Podfile.lock
并重新 运行 pod install
为我解决了这个问题。
我遇到了同样的情况,请确保 文件 A 包含在 YourProjectName-Bridging-Header.h 中
- 如果它使用其他一些 class(s),那么其他 classes 也包含在 File A 之前
就我而言,我在文件夹名称 "Supporing FIles" 中输入了错误,而不是 "Supporting Files"。
请注意,如果您的桥接 header 导入 Objective-C 代码本身会通过 [=10 导入您应用的 Swift 模块 ,这也可能发生=].解决方案是为您的 Swift 类型使用前向声明,并在 .m
文件中导入项目 Swift 模块。
@class MySwiftClass
或...
typedef NS_ENUM(NSInteger, MySwiftEnumType)
MySwiftEnumType
是最低级别的名称,即使是 类。所以 Swift enum MyClass.MySwiftEnumType
变成 MySwiftEnumType
有很多理由和事情可以做,比如:
- 重新启动 Xcode、清理、构建
- 删除 Pods 目录和 pod 安装
- 检查丢失的文件是否已添加到您的 pod 文件中
- 检查丢失的文件是否添加到你桥接header
- 像这里一样更改 header 设置 iOS - Build fails with CocoaPods cannot find header files
唯一对我有用的是Xcode 9 - failed to emit precompiled header中接受的答案。
platform :ios, '11.0'
in podfile 应该匹配 项目中的目标
就我而言,我使用的是错误的方案(左上角菜单)。
我更新新的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中你需要添加这个。希望这有帮助。
我已经尝试了答案中提到的所有上述步骤,但对我没有任何效果,问题基本上出在项目的部署目标版本和 podfile 中。
在我的项目部署目标中是 10.0,而在我的 podfile 中是 11.0。
对于 Xcode 11,我遇到了 "Security.framework" 的问题。我删除了这个依赖,然后重新添加它。最终解决了其他问题
我在重命名现有的 Xcode 项目配置后遇到了这个错误,我在其中导入了另一个 Xcode 项目。
要修复它,您还必须在导入的项目中重命名相同的配置。
就我而言;
在 Target/Build 设置下/
Product_Name 部分不同于 $(TARGET_NAME)
当我更改它$(TARGET_NAME)时,它已解决。
由于我已经在这个问题上停留了 2 个工作日,所以我想为您分享我的问题,因为未来的搜索者可能会遇到我的问题
我在 运行 command line 时收到提到的错误,我发现我正在编写的命令是针对 运行ning .xcodeproj
,但是 运行 a .xcworkspace
你必须写下面的命令
xcodebuild -workspace PROJECTNAME.xcworkspace clean archive -archivePath build/PROJECTNAME -scheme SCHEMENAME
XCode可以在一些目标中建立成功,但其他目标不能。
最后发现Header Search Paths不一样。 (路径:Target > Build Settings > Search Paths > Header Search Paths > add item)
我复制并粘贴了成功目标的路径。我做到了。太棒了。
我在为模拟器而非硬件设备编译时遇到了这个问题。有两个编译错误,如:
- 错误:无法发出用于桥接的预编译 header 'Bridging-Header-97bd5f.pch' header 'Bridging-Header.h'
- 无法在桥接 Header 中找到 ActionSheetPicker_3_0/ActionSheetPicker.h(但已在此处声明)
经过数小时的研究和尝试,结果发现,项目中没有有效的体系结构集可以为模拟器编译。
在 Project -> Build Settings -> User-Defined -> VALID_ARCHS
添加体系结构 x86_64
以启用模拟器编译。
就我而言,一切都很好。我刚刚忘记在添加到桥接头文件的导入中添加“.h”
是
import 'Test'
必填
import 'Test.h'
在我的例子中,我发现这是因为我没有在 Release 选项卡中配置 Framework Search Paths
。这是屏幕截图:
添加这个路径后就可以了