image.png

Multipeer Connectivity | Apple Developer Documentation

MultipeerConnectivity 는 주변에 있는 Apple 기기끼리 인터넷 연결 없이도 직접 통신(P2P)를 할 수 있게 해주는 프레임워크이다.

→ SwiftUI에선 이걸 자체적으로 지원하지는 않고 ViewModel이라던지 별도의 객체로 감싸서 사용한다고 한다.

Wi-Fi와 P2P Wi-Fi, Bluetooth를 사용하므로 같은 공간에 있는 기기들끼리 채팅, 게임, 파일 전송 같은 로컬 멀티 플레이 또는 공유 기능을 만들 때 사용한다.

💁‍♂️ 짚고 넘어가기

  1. iOS에서는 프레임워크 전송을 위해 Wi-Fi , P2P Wi-Fi, Bluetooth를 사용한다.

  2. macOS 및 tvOS에서는 Wi-Fi, P2P Wi-Fi, 이더넷 을 사용한다.

    → 두 기기가 같은 Wi-Fi 네트워크에 있으면 Wi-Fi를, 그렇지 않으면 P2P Wi-Fi 또는 Bluetooth를 자동으로 선택한다.

    → 즉, 로컬 네트워크를 사용하기 때문에 Info.plistNSLocalNetworkUsageDescription 를 선언해야한다.

    → 또한, 이때 내부적으로 Bonjour 프로토콜을 사용하기 때문에 NSBonjourServices 도 선언해야한다.


🪛 구성 요소

📌 MCPeerID

MCPeerID | Apple Developer Documentation

MCPeerID는 각 기기(기기에서 실행 중인 앱 인스턴스)를 고유하기 식별하는 ID, 혹은 세션 내에서 고유하게 식별하는 클래스를 의미한다.

보통은 사용자의 기기 이름을 사용한다고 한다.

private let peerID = MCPeerID(displayName: UIDevice.current.name)

📌 MCSession

MCSession | Apple Developer Documentation

연결된 피어들 간의 실제 데이터 송수신을 담당하는 세션 객체이다.

MCSession을 통해 메세지나 데이터 스트림, 리소스를 전송할 수 있다.