多人连接框架不再连接



这个有点奇怪,所以我会尽力解释。我正在开发Baby的第一个iPad应用程序(Swift),在读了几本好书、教程等之后,我已经走了相当远。

有两个应用程序需要进行通信。一个在我的macbook上运行(我称之为osx_app),另一个在ipad上运行。osx_app有一个实现MCSessionDelegate的类,并包含广告客户(MCAdvertiserAssistant)和会话对象作为属性。当用户点击"开始托管"菜单项时,会话代理子类启动广告商并等待ipad_app连接。

同时,ipad_app有一个实现MCSessionDelegate并将会话对象作为属性的类。主视图控制器实现MCBrowserViewControllerDelegate,并使用MCSessionDelegate实现器对象中的MCSession创建浏览器。

所需的行为是ipad_app在浏览器中看到osx_app并进行连接。osx_app显示对话框并接受。建立连接,打印日志条目,打开一个打开的文件对话框,将pdf发送到ipad_app。

这就是奇怪的部分。我做到了。我运行了连接,发送了文件,一切都很顺利,但我没有实现ipad_app,这是一个精简的测试应用程序,我正在使用它来学习MC框架。我在iphone模拟器上测试了几次,在我的iphone 5s上又测试了一次,效果非常好。

然后,当我将代码移植到现有的ipad_app代码时,它不起作用。在每个连接状态下,我都会做一个简单的打印语句来查看发生了什么,据我所知,ipad_app尝试连接,osx_app转动轮子一分钟,然后断开连接。两个控制台都记录"设备连接"one_answers"设备未连接"事件。

有时ipad_app会说它已经连接到osx_app,但osx_app的日志仍然只写着"正在连接"。最奇怪的是,现在我的精简MWE代码,一个完美工作的代码,不再工作了!我没有对osx_app做任何事情!前几次成功只是侥幸吗?

总之,我上下搜索了有关这方面的问题和答案,只发现少数人报告了类似的问题,但他们要么没有解决,要么他们的解决方案不起作用。我试过使用真实的设备,切换模拟器,相互排除wifi和蓝牙,看看其中一个是否更好,禁用加密,禁用防火墙。

我觉得也许我对OSX和iOS编程太不熟悉了,以至于我以一种不应该的方式传递了一个对象?我甚至不知道。

天哪,我想通了。在ipad_app中,我将MCSessionDelegate方法session:didReceiveCertificate:fromPeer:certificateHandler实现为存根。我首先重写了MCF的内容,这样我就使用了一个自定义的广告商和浏览器,而不是助手和UI,但这不起作用,所以我搜索了相关内容,找到了这个

多人连接:接受邀请(使用内置浏览器VC)

我从ipad_app中删除了存根,它成功了!

最新更新