Я пытаюсь создать базовое приложение для отправки сообщений между соседними устройствами iOS с помощью Multipeer Connectivity Framework. Я перепробовал много учебных пособий, но, похоже, в Xcode 11 просмотр соседних устройств и прием запросов не работает, как это было раньше.
Вот мой контроллер представления и методы делегата:
import UIKit
import MultipeerConnectivity
class ViewController: UIViewController,MCSessionDelegate,MCBrowserViewControllerDelegate {
var peerID: MCPeerID?
var session: MCSession?
override func viewDidLoad() {
super.viewDidLoad()
peerID = MCPeerID(displayName: UIDevice.current.name)
session = MCSession(peer: peerID!, securityIdentity: nil, encryptionPreference: .none)
session!.delegate = self
}
func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {
switch state {
case .connected: print("Connected to \(peerID.displayName)")
case .connecting: print("Connecting: \(peerID.displayName)")
case .notConnected: print("Not Connected: \(peerID.displayName)")
default: print("")
}
}
func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {
}
func session(_ session: MCSession, didReceive stream: InputStream, withName streamName: String, fromPeer peerID: MCPeerID) {
}
func session(_ session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, with progress: Progress) {
}
func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL?, withError error: Error?) {
}
func browserViewControllerDidFinish(_ browserViewController: MCBrowserViewController) {
browserViewController.dismiss(animated: true, completion: nil)
}
func browserViewControllerWasCancelled(_ browserViewController: MCBrowserViewController) {
browserViewController.dismiss(animated: true, completion: nil)
}
}
IВ пользовательский интерфейс добавлены 2 кнопки: одна для хостинга, а другая для присоединения. Вот методы:
@IBAction func hostBtnTapped(_ sender: Any) {
hostSession()
}
@IBAction func joinBtnTapped(_ sender: Any) {
joinSession()
}
Они вызывают:
func hostSession() {
let advertiser = MCAdvertiserAssistant(serviceType: "mg-testing", discoveryInfo: nil, session: session!)
advertiser.start()
}
func joinSession() {
let browser = MCBrowserViewController(serviceType: "mg-testing", session: session!)
browser.delegate = self
self.present(browser, animated: true, completion: nil)
}
Когда я компилирую и запускаю его, все выглядит хорошо. Я нажимаю «Хост» на моем первом устройстве и вхожу в режим «Присоединиться» на моем втором устройстве (отображается MCBrowserViewController
), но присоединяющееся устройство никогда не обнаруживает хост-устройство. В консоли нет вывода и нет ошибок. Индикатор «Поиск ...» на присоединяющемся устройстве горит постоянно, и никакие устройства поблизости не отображаются. Что может быть причиной этого? Как я могу решить это? Я использую Xcode 11.0 и iOS 12 и 13.