错误信息
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 中自动修复
在 Podfile 的 post_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 脚本对其他包含相同问题的三方库同样有效