升级至macOS 10.15 Catalina与Xcode11.1后编译报错:未知类型'tls_protocol_version_t'
tls_protocol_version_t未知类型错误 我之前也碰到过类似的编译问题,结合你给出的错误日志来看,这个问题的核心是系统框架NSURLSession.h引用的tls_protocol_version_t类型没有被正确识别,下面是几个经过验证的解决方案:
1. 确认项目已链接Security框架
这个类型是在Security框架的<Security/SecureTransport.h>中定义的,NSURLSession在10.15的SDK里依赖它,但你的项目可能没正确链接该框架:
- 打开Xcode项目,进入Targets → 你的App → Build Phases → Link Binary With Libraries
- 点击
+按钮,搜索并添加Security.framework
2. 调整头文件引入顺序(针对PCH文件)
从错误日志看,问题出在PCH引入Cocoa.h时触发的,你可以尝试在PCH文件最顶部先引入Security框架的头文件,确保类型提前被定义:
// 在App-Prefix.pch的最开头添加 #import <Security/SecureTransport.h> // 再保留原来的引入 #import <Cocoa/Cocoa.h> // ...其他头文件
3. 检查SDK和部署目标设置
确保项目的SDK和部署目标与系统版本匹配:
- 进入Targets → Build Settings
- 确认
Base SDK设置为MacOSX10.15 - 确认
macOS Deployment Target设置为10.15或更高(因为TLSMinimumSupportedProtocolVersion是10.15才新增的API)
4. 彻底清理衍生数据
普通的清理可能不够彻底,试试删除Xcode的衍生数据:
- 打开Xcode,点击菜单Xcode → Preferences → Locations
- 点击
Derived Data旁边的箭头,打开文件夹后删除对应项目的文件夹 - 重启Xcode后重新编译项目
5. 排查自定义头文件冲突
检查项目中是否存在自定义的头文件或宏定义,可能和系统头文件产生了冲突:
- 搜索项目中是否有命名为
SecureTransport.h的自定义文件 - 检查是否有宏定义覆盖了系统类型名称
你的完整错误日志:
In file included from /My Repo/MyApp/trunk/App/App-Prefix.pch:8:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h:12:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:128:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSURLSession.h:744:11: error: unknown type name 'tls_protocol_version_t'
@property tls_protocol_version_t TLSMinimumSupportedProtocolVersion API_AVAILABLE(macos(10.15), ios(13.0), watchos(6.0), tvos(13.0));
内容的提问来源于stack exchange,提问作者Tushar

