Skip to content

Simple MultipeerConnectivity between iOS, visionOS, macOS, and/or tvOS devices

License

Notifications You must be signed in to change notification settings

johnhaney/AutoMultipeer

Repository files navigation

AutoMultipeer

Provides a simple interface for establishing MultipeerConnectivity between iOS, visionOS, macOS, and/or tvOS devices

Example sending messages,

manager.send(message, mode: .unreliable)

Sending raw data (pack your own messages):

manager.send(data, mode: .unreliable)

Example receiving messages,

for await message in manager.messages() {
  // do something with each message
}

Receiving data:

for await data in manager.data() {
  // do something with each data
}

example usage simple chat app:

import SwiftUI
import AutoMultipeer

struct ContentView: View {
    @State var chatMessages: [String] = []
    @State var message: String = ""
    @State var manager = MultipeerManager(serviceName: "devicechat")
    var body: some View {
        VStack {
            List {
                ForEach(chatMessages, id: \.self) { message in
                    Text(message)
                }
            }
            .padding()
            TextField("Send…", text: $message)
                .onSubmit {
                    do {
                        let message = self.message
                        try manager.send(message, mode: .reliable)
                        self.message = ""
                        chatMessages.append(message)
                    } catch {}
                }
        }
        .task {
            let messages: AsyncStream<String> = manager.messages()
            for await message in messages {
                chatMessages.append(message)
            }
        }
    }
}

extension String: MultipeerMessagable {}

Important: Xcode Project settings required:

For all platforms, add Bonjour support to your app's Info section with your protocol (DeviceChat example below):

	<key>NSBonjourServices</key>
	<array>
		<string>_devicechat._tcp</string>
		<string>_devicechat._udp</string>
	</array>

When you create the MultipeerManager() pass the protocol part (for DeviceChat, that's devicechat).

For macOS apps, add either client, server, or both under your app's Signing & Capabilities.

About

Simple MultipeerConnectivity between iOS, visionOS, macOS, and/or tvOS devices

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages