iOS M1电脑上 Pods 第三方后运行模拟器报错 ‘xx.h’ file not found

在podfile中添加钩子

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end
  end
end

执行 pod install 即可。

参考链接:M1芯片Mac搭建ios开发环境踩坑 - Mirari's Blog ,参考了方案2解决了问题,方案1没有效果。

当使用 `use_frameworks!` 后出现 `'TPBluetoothDevice.h' file not found` 错误时,通常是因为该头文件属于某个 Objective-C 静态库,并未正确暴露给 Swift 模块或未被正确集成到构建环境中。以下是详细的解决方法和最佳实践: ### 1. 确保模块头文件被正确导入 在使用 `use_frameworks!` 的情况下,CocoaPods 会将所有依赖构建为动态框架,每个 Pod 都是一个独立的模块。如果某个 Swift Pod 依赖的 Objective-C 库未正确生成模块映射,可能会导致头文件找不到的问题。可以通过在 Podfile 中添加 `use_modular_headers!` 来启用模块化头文件,确保 Objective-C 头文件能被正确识别: ```ruby use_frameworks! use_modular_headers! pod 'TPBluetoothDevice' ``` 这样可以为所有依赖启用模块化头文件,避免头文件找不到的问题[^1]。 ### 2. 检查 Objective-C 框架的模块定义 如果某个 Objective-C 库没有定义模块(即没有 `.modulemap` 文件),则 Swift 无法通过 `import` 导入其内容。可以在 Podfile 中为特定依赖启用模块化头文件: ```ruby pod 'TPBluetoothDevice', :modular_headers => true ``` 这样 CocoaPods 会为该库生成模块映射文件,使其头文件可以在 Swift 中通过模块导入。 ### 3. 清理并重新生成 Pod 配置 有时旧的 Pod 配置或缓存可能导致模块映射不完整,执行以下命令清理并重新生成配置: ```bash pod deintegrate pod cache clean --all pod install --repo-update ``` 这将确保所有 Pod 被重新解析和集成,模块映射文件也会被正确生成。 ### 4. 手动添加头文件搜索路径 如果模块映射仍然无法正确识别头文件,可以在 Xcode 的构建设置中手动添加头文件搜索路径: - 打开项目设置 → 选择目标 → Build Settings - 找到 `Header Search Paths`,添加以下路径: ```bash $(SRCROOT)/Pods/TPBluetoothDevice ``` 确保该路径在 `Recursive` 模式下被包含,以便编译器能正确找到嵌套的头文件。 ### 5. 使用 `SWIFT_INCLUDE_PATHS` 添加模块搜索路径 如果模块文件不在默认路径中,可以在构建设置中添加模块搜索路径以帮助 Swift 编译器定位模块: ```bash SWIFT_INCLUDE_PATHS = $(SRCROOT)/Pods/build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/TPBluetoothDevice ``` ### 6. 使用 `@_exported` 导出模块符号 如果 `TPBluetoothDevice` 是一个静态库,并且需要在 Swift 中被其他模块导入,可以在桥接头文件或 Swift 包装文件中使用 `@_exported` 关键字导出模块: ```swift @_exported import TPBluetoothDevice ``` 这样可以确保模块符号在链接时被正确导出。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值