【问题标题】:error: unknown type name 'tls_protocol_version_t' after upgrading to xcode 11.1 & macOS 10.15 Catalina错误:升级到 xcode 11.1 和 macOS 10.15 Catalina 后未知类型名称“tls_protocol_version_t”
【发布时间】:2020-02-06 18:52:45
【问题描述】:

将我的 macOS 更新到 10.15 Catalina 并将 xcode 更新到 11.1。现在在构建我的代码时,我收到错误“错误:未知类型名称'tls_protocol_version_t'”。我清理了构建文件夹,重置了 xcode,清除了 xcode 缓存。似乎没有什么能解决问题。

完整的错误日志如下-

在 /My Repo/MyApp/trunk/App/App-Prefix.pch:8 中包含的文件中:

在 /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:错误:未知类型名称'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,一切正常。

标签: xcode macos xcode11 macos-catalina


【解决方案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;

【讨论】:

    【解决方案2】:

    我在 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,
     };
    

    【讨论】:

      【解决方案3】:

      我在一个相当旧的项目和 Xcode 11 中遇到了同样的问题。从另一个答案中为 tls_protocol_version_t 添加 typedef 确实有效,但显然不是理想的解决方案。

      注意到我在项目中有一个 Security.framework 的副本,它不是“相对于 SDK”而是“相对于组”(SystemConfiguration.framework/ 相同),所以我删除了这两个副本并重新包含在目标的 General > Frameworks 中设置。那还不够。我注意到Foundation 不存在,所以我也添加了它。那成功了。结论:检查你的框架!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-06
        • 2017-04-30
        • 2020-02-05
        相关资源
        最近更新 更多