修复 Xcode 16 编译报错:Use of private header netinet6/in6.h

4 阅读1分钟

错误信息

Use of private header from outside its module: 'netinet6/in6.h'

具体路径:

Pods/AFNetworking/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m:26:9
Pods/AFNetworking/AFNetworking/AFNetworking/AFHTTPSessionManager.m:32:9

原因分析

新版 Xcode(Xcode 16+)升级了 SDK,将 <netinet6/in6.h> 标记为模块私有头文件(private header),禁止从模块外部直接 #import

而 AFNetworking 的这两个文件中包含:

#import <netinet6/in6.h>

由于 <netinet/in.h> 已经间接包含了 IPv6 相关的类型定义,这行 #import 实际上是多余的,删除即可。

解决方案

临时方案(不推荐)

直接手动删除对应文件中的 #import <netinet6/in6.h> 这一行。

缺点:执行 pod install 后 Pods 目录会重新生成,修改被覆盖。

永久方案:在 Podfile 的 post_install 中自动修复

Podfilepost_install 钩子中加入以下代码,每次 pod install 后自动扫描并修复所有受影响的文件:

post_install do |installer|
  # ... 其他配置 ...

  # 修复新版 Xcode SDK 中 netinet6/in6.h 私有头文件问题
  Dir.glob('Pods/**/*.{m,mm}').each do |file|
    content = File.read(file)
    if content.include?("#import <netinet6/in6.h>")
      content.gsub!("#import <netinet6/in6.h>\n", '')
      File.chmod(0644, file)
      File.write(file, content)
      puts "✅ 已修复 #{file} 的 netinet6/in6.h 问题"
    end
  end
end

关键点说明

问题解法
硬编码路径不准确(曾写错一层目录)改用 Dir.glob('Pods/**/*.{m,mm}') 全局扫描
漏掉 AFHTTPSessionManager.m全局扫描自动覆盖所有文件
Permission denied 写入失败写入前执行 File.chmod(0644, file) 解除只读限制

执行效果

pod install 成功后,终端会输出:

✅ 已修复 Pods/AFNetworking/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m 的 netinet6/in6.h 问题
✅ 已修复 Pods/AFNetworking/AFNetworking/AFNetworking/AFHTTPSessionManager.m 的 netinet6/in6.h 问题

参考

  • AFNetworking 使用的是 fork 仓库版本,tag AFNetworking-4.0.1.1
  • 官方 AFNetworking 已停止维护,此问题预计不会在上游修复
  • 此 post_install 脚本对其他包含相同问题的三方库同样有效