我从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-桥接-Header.h”
我用google搜索,但没有这样的问题。错误意味着它需要一个PCH文件?这是我的.pch
头配置:它无法解决它。
怎么做?
在为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
以上都是我项目中的目标构建设置。
请看看这些SO答案: 1 Inherit Header Search Paths 2 Inherit User Search Paths
有很多理由和事情可以做,例如:
唯一适合我的是Xcode 9 - failed to emit precompiled header接受的答案。
podfile中的platform :ios, '11.0'
应该与项目中的目标匹配
我有相同的场景,请确保您已包含在YourProjectName-Bridging-Header.h中的文件A.
就我而言,我正在构建错误的方案(左上菜单)。
我更新了新的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中你需要添加它。希望这可以帮助。
请注意,如果您的桥接标头导入的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
。之后,项目成功构建。
你可以尝试这个解决方案。我通过这种方式解决了同样的问题。
产品>方案>编辑方案>在左侧菜单上选择“构建”>查找隐式依赖项
在构建选项卡下,选中“查找隐式依赖项”:
然后再打扫干净并再次构建。
在我的情况下,我在我的一个项目文件中有相同的编译器错误和其他错误,如“未知类型”,所以我只是将其添加到有问题的文件中,它立即解决了。
#import <UIKit/UIKit.h>
对于我的情况,我在文件夹名称“Supporing FIles”而不是“Supporting Files”中输入了拼写错误。
我的经验是,Xcode无法找到项目中导入的pod / frameworks的头文件。
我的项目经验:更新Xcode9.2 - 9.3由于隐式定义现在不可用或过时,许多cocoapods必须更新。 我已将Podfile更改为现在包含'use_frameworks!'。在此之后以及处理其他编译问题后,我发现了您遇到的错误。我相信添加'use_frameworks!阻止了一些在iOS 8之前支持的pod正确编译。我采取的步骤来纠正这个问题:
pod deintegrate
删除Pods /目录pod install
,但问题仍然存在。删除Podfile.lock
并重新运行pod install
为我解决了这个问题。