Discover ways to use Bonjour, with UDP/TCP sockets, streams and find out how to talk via CoreBluetooth or the watch APIs.
iOS
This text was initially written again ultimately of 2015. The supply code is deprecated and never suitable with present Swift variations, so I eliminated it.
If you wish to discover ways to make a community connection between your gadgets utilizing Bonjour discovery service you might be on the suitable place. On this put up I’m going to indicate you the fundamentals, so for instance it is possible for you to to make a distant controller out of your watch or iOS system as a way to ship information on to any tvOS or macOS machines.
Multi-platform growth
If you wish to create an app that helps a number of platforms, you may need to goal macOS, iOS, watchOS, tvOS and shortly Linux as properly. The code snippet beneath goes that can assist you detecting the present platform that you’re working with.
#if os(iOS)
let platform = "iOS"
#elseif os(macOS)
let platform = "macOS"
#elseif os(watchOS)
let platform = "watchOS"
#elseif os(tvOS)
let platform = "tvOS"
#elseif os(Linux)
let platform = "linux"
#else
let platform = "unknown"
#endif
print(platform)
Community connection 101
Bonjour discovery service
Bonjour, also called zero-configuration networking, allows computerized discovery of gadgets and companies on a neighborhood community utilizing business customary IP protocols.
So principally with Bonjour you will discover community gadgets in your native community. This comes very useful in case you are making an attempt to determine the listing of gadgets which might be linked to your LAN. Utilizing NetService class will enable you to detect all of the gadgets with the out there companies that they assist. The entire Bonjour API is comparatively small and well-written. From the side of server aspect you simply need to create the NetService object, and hearken to the incoming connections via the NetServiceDelegate.
You must be on the identical WiFi community with all gadgets / simulators.
TCP connection
TCP gives dependable, ordered, and error-checked supply of a stream of octets (bytes) between functions working on hosts speaking by an IP community.
With the assistance of TCP you’ll be able to construct up a dependable community connection. There’s a Stream class in Basis that can assist you sending information forwards and backwards between gadgets. When you have a working connection type NetServiceDelegate, simply hearken to the stream occasions to deal with incoming information via the StreamDelegate. I do not need to go into the small print, simply obtain the instance code and test it out for your self.
UDP connection
With UDP, pc functions can ship messages, on this case known as datagrams, to different hosts on an Web Protocol (IP) community.
In case you take a look at the article about UDP you will clearly see that the primary distinction from TCP is that this protocol is not going to assure you security of the information supply. Information could arrives unordered or duplicated, it is your process to deal with these situations, however the UDP is quick. If you wish to construct a file switch app it is best to positively go together with TCP, however for instance controlling a real-time motion sport UDP is simply as ok.
CocoaAsyncSocket
This library is absolutely the winner for me and doubtless it’s the best choice for everybody who desires to arrange a community connection actually shortly, as a result of it requires method much less code than implementing delegates. After all you will nonetheless want the Bonjour layer above the entire thing, however that is simply advantageous to take care of.
In case you are utilizing CocoaAsyncSocket you will notice that the API is easy, solely after 5 minutes I may comparatively simply determine it out what is going on on and I used to be in a position to ship messages via the community. It helps all of the Apple platforms, you’ll be able to seamlessly combine it utilizing Carthage or CocoaPods.
CoreBluetooth APIs
I used to be not likely conversant in the CoreBluetooth framework API’s, that is the rationale why I principally simply adopted and ported this tutsplus.com code instance to Swift 4. Truthfully I felt that the API is someway overcomplicated with all these messy delegate features. If I’ve to selected between CoreBluetooth or CocoaAsyncSocket, I would go together with the final one. So sure, clearly I’m not a bluetooth professional, however this little mission was a very good first impression about how issues are working contained in the CB framework.
WatchConnectivity framework
If you wish to talk between iOS and watchOS you will most likely use the WatchConnectivity framework, particularly the WKSession class. It is actually not so difficult, with only a few traces of code you’ll be able to ship messages type the watch to the iPhone. You possibly can learn this tutorial, however when you obtain my last sources for this text, you will discover virtually the identical factor contained in the package deal.