AppleConnect is a small Swift wrapper around a Network TCP stream on the local network (using Bonjour for discovery).
Even though the transport is two-way, the API is built around a “service” that is offered by a single server and to which many clients can connect.
Setup for servers differs a little bit from that for clients. Once a connection is established, the channel is identical from both ends. All connections are encrypted using TLS-PSK derived from a shared key of your choosing.
For security, you should generate the shared key using cryptographically appropriate random data. Sharing this key should be done out-of-band and is out of scope for AppleConnect.
For user-facing applications, one way you might do this is by generating a code on one device and asking the user to confirm it on the second one.
A typical server should advertise its availability using Connection.advertise(forServiceType:name:key:)
. Attempts by clients to connect will show up as NWConnection
objects, which you can pass to Connection.init(connection:)
to complete the connection process.
A client should browse for servers it wants to connect to. Connection.endpoints(forServiceType:)
will asynchronously stream a list of available NWEndpoint
s, and once you’ve found an endpoint that you’d like to connect to, call Connection.init(endpoint:key:)
to establish the connection using the shared encryption key.
Both clients and servers can send data to each other using Connection.send(data:)
, and receive data by watching Connection.data
.
What is Networking? Networking brings together devices like computers, servers, routers, and switches so they…
Introduction In the world of Open Source Intelligence (OSINT), anonymity and operational security (OPSEC) are…
Introduction As cyber threats grow more sophisticated, organizations need more than just firewalls and antivirus…
Introduction When it comes to cybersecurity and ethical hacking, one of the most effective ways…
Introduction In the world of cybersecurity, knowledge is power. One of the most powerful skillsets…
Introduction In the vast ocean of the internet, the most powerful tool you already have…