升级到 Xcode 11.1 和 macOS 10.15 Catalina 后出现错误:未知的类型名称"tls_protocol_version_t"。

4

我将macOS升级到了10.15 Catalina,并且更新了到11.1的Xcode。现在在构建我的代码时,出现错误“error: unknown type name 'tls_protocol_version_t'”。我尝试清空构建文件夹、重置xcode和清除xcode缓存,但没有解决问题。

完整的错误日志如下:

在文件/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h:12中:

在文件/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));


我也尝试了Xcode 11,但出现了相同的问题。回退到Xcode 10.3后,一切正常运行。 - Tushar
3个回答

1

我不确定这是否正确,但我在App-Prefix.pch中添加了以下代码,问题得到解决。

typedef enum tls_protocol_version_t  {
  tls_protocol_version_TLSv10 = 0x0301,
  tls_protocol_version_TLSv11 = 0x0302,
  tls_protocol_version_TLSv12 = 0x0303,
  tls_protocol_version_TLSv13 = 0x0304,
  tls_protocol_version_DTLSv10 = 0xfeff,
  tls_protocol_version_DTLSv12 = 0xfefd
 } tls_protocol_version_t;

0

我在使用MacOS 10.15.3上的XCode 11.3.1时遇到了同样的问题:一个相当老的Objective-C应用程序无法再次构建,出现错误。

Unknown type name `tls_protocol_version_t`

给定。它使用预编译头文件,我尝试手动添加typedef定义,但结果只会导致更多错误。

最终我直接添加了typedef。

NSURLSession.h

即以 root 用户身份编辑

 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSURLSession.h

并在其后添加了以下typedef:

NSURLSessionTaskState

类型定义:

typedef CF_ENUM(uint16_t, tls_protocol_version_t) {
     tls_protocol_version_TLSv10 CF_SWIFT_NAME(TLSv10) = 0x0301,
     tls_protocol_version_TLSv11 CF_SWIFT_NAME(TLSv11) = 0x0302,
     tls_protocol_version_TLSv12 CF_SWIFT_NAME(TLSv12) = 0x0303,
     tls_protocol_version_TLSv13 CF_SWIFT_NAME(TLSv13) = 0x0304,
     tls_protocol_version_DTLSv10 CF_SWIFT_NAME(DTLSv10) = 0xfeff,
     tls_protocol_version_DTLSv12 CF_SWIFT_NAME(DTLSv12) = 0xfefd,
 };

0

我在一个相当老的项目和 Xcode 11 中遇到了同样的问题。从其他答案中添加 tls_protocol_version_t 的 typedef 确实起作用,但显然不是理想的解决方案。

我注意到我在项目中有一个副本 Security.framework,它不是“相对于 SDK”,而是“相对于组”(SystemConfiguration.framework/ 同样如此),所以我删除了两个并在目标的“常规 > 框架”设置中重新包含它们。但这还不够。我注意到 Foundation 不在那里,所以我也添加了它。这就解决了问题。结论:检查你的框架!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接