加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

当协议的可空性发生变化时,支持多个iOS SDK版本

发布时间:2020-12-14 19:34:24 所属栏目:百科 来源:网络整理
导读:MCSessionDelegate协议在iOS 11中已更改 - (void) session:(MCSession *)session didFinishReceivingResourceWithName:(NSString *)resourceName fromPeer:(MCPeerID *)peerID atURL:(NSURL *)localURL withError:(nullable NSError *)error; 至 - (void) se
MCSessionDelegate协议在iOS 11中已更改

- (void)                    session:(MCSession *)session
 didFinishReceivingResourceWithName:(NSString *)resourceName
                           fromPeer:(MCPeerID *)peerID
                              atURL:(NSURL *)localURL
                          withError:(nullable NSError *)error;

- (void)                    session:(MCSession *)session
 didFinishReceivingResourceWithName:(NSString *)resourceName
                           fromPeer:(MCPeerID *)peerID
                              atURL:(nullable NSURL *)localURL
                          withError:(nullable NSError *)error;

这导致在Swift中实现此委托时使用

func session(_ session: MCSession,didFinishReceivingResourceWithName resourceName: String,fromPeer peerID: MCPeerID,at localURL: URL?,withError error: Error?) {}

不会在Xcode 8上编译;和

func session(_ session: MCSession,at localURL: URL,withError error: Error?) {}

不会在Xcode 9上编译.

在这两种情况下,Xcode都显示以下错误:

Parameter of ‘session(_:didFinishReceivingResourceWithName:fromPeer:at:withError:)’ has different optionality than required by protocol ‘MCSessionDelegate’

如何在两个版本上编译?

解决方法

我不明白为什么这是一个问题.

如果使用Xcode 8构建,则可以使用旧方法签名,构建应用程序并将其提交到AppStore.该应用程序将针对iOS10 SDK构建,并将在iOS10和iOS11设备上运行.

当您切换到Xcode 9时,您可以切换到新方法签名,并且(当Xcode 9不在测试版时)提交到AppStore.该应用程序是针对iOS11 SDK构建的,可以在iOS11设备上运行.

唯一的困难是你可能想要同时使用Xcode 8(现在发布应用程序更新)和Xcode 9(在iOS11发布后准备应用程序版本)的短暂时期.你需要在你的git repo中有一个单独的iOS11分支 – 但是无论如何你都会这样做,对吧?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读