Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Zero Configuration
Search
Yuji Taniguchi
August 20, 2018
Technology
270
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Zero Configuration
Zero Configuration on Apple Platform
Yuji Taniguchi
August 20, 2018
More Decks by Yuji Taniguchi
See All by Yuji Taniguchi
Zeroconf on iOS
natpenguin
2
1.4k
The ownership in iOS
natpenguin
0
390
Other Decks in Technology
See All in Technology
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
940
DBについての基礎説明(MySQL編) - コロプラ 2026年度 新卒研修
colopl
0
160
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
120
S3 Filesで挑む! 八戸せんべい汁の食べ頃問題
usanchuu
0
140
その Valkey 使いこなしていますか?
onk
PRO
5
1.8k
React改造してみた
tsukina_7mochi
0
150
DGX Spark でどこまでハッキングができるのか?
kash1064
3
1.4k
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
5
1.2k
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
1
230
[EMNLP26] RIGEL: Self-Distilled Score Adaptation for Image and Video Captioning Evaluation
keio_smilab
PRO
0
110
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
130
生成AI時代、PMは事業責任者に進化するともっと面白い〜PMだからこそ事業構造を動かせる時代に〜
kakehashi
PRO
0
230
Featured
See All Featured
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
Building an army of robots
kneath
307
47k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
WENDY [Excerpt]
tessaabrams
14
40k
Abbi's Birthday
coloredviolet
4
10k
A designer walks into a library…
pauljervisheath
211
25k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
BBQ
matthewcrist
90
10k
Transcript
Zero Configuration Nagoya iOS meetup Vol. 4
Introduction • Software Engineer at merpay • Twitter : @_natpenguin
• GitHub : natpenguin
Agenda • What is the Zero Configuration? • Zero Configuration
on Apple Platform • Coding on iOS
Zero Configuration Networking (Zeroconf)
Zero Configuration Networking connecting
Zero Configuration Networking connected
Zeroconf • Avahi (Linux / BSD) • Bonjour • Windows
CE 5.0 (LLMNR) • UPnP • AirPlay / AirPrint • DLNA …
Application developer IP Address Domain Don’t need to know
Bonjour
History
AppleTalk
AppleTalk • 1984 • Published phase 2 1989 • Internet(TCP/IP)
• Rendezvous on Mac OS X Jaguar(v10.2) 2002 • Bonjour on Mac OS X Tiger(v10.4) 2005 • Deleted from Mac OS X Snow Leopard(v10.6) 2009
Coding
Server NetService
Server let domain = "local." let type = “_awesome._tcp." let
name = "Awesome Service" let port: Int32 = 10000
Server let domain = "local." let type = “_awesome._tcp." let
name = "Awesome Service" let service = NetService(domain: domain, type: type, name: name, port: port) let port: Int32 = 10000
Server let domain = "local." let type = “_awesome._tcp.” let
name = "Awesome Service" service.publish() let service = NetService(domain: domain, type: type, name: name, port: port) let port: Int32 = 10000
https://www.iana.org/assignments/ service-names-port-numbers/ service-names-port-numbers.xhtml Type
Client NetServiceBrowser
Client let domain = "local." let type = “_awesome._tcp."
Client let domain = "local." let type = “_awesome._tcp." browser.searchForServices(ofType:
type, inDomain: domain)
Client browser.searchForServices(ofType: type, inDomain: domain) func netServiceBrowser(_ browser: NetServiceBrowser, didFind
service: NetService, moreComing: Bool) let domain = "local." let type = “_awesome._tcp."
Client extension ViewController: NetServiceBrowserDelegate { func netServiceBrowser(_ browser: NetServiceBrowser, didFind
service: NetService, moreComing: Bool) { // do something... } }
Client browser.delegate = self browser.searchForServices(ofType: type, inDomain: domain) extension ViewController:
NetServiceBrowserDelegate { func netServiceBrowser(_ browser: NetServiceBrowser, didFind service: NetService, moreComing: Bool) { // do something... } }
Client extension ViewController: NetServiceBrowserDelegate { func netServiceBrowser(_ browser: NetServiceBrowser, didFind
service: NetService, moreComing: Bool) { service.resolve(withTimeout: 10.0) } }
Client extension ViewController: NetServiceBrowserDelegate { func netServiceBrowser(_ browser: NetServiceBrowser, didFind
service: NetService, moreComing: Bool) { service.resolve(withTimeout: 10.0) } } func netServiceDidResolveAddress(_ sender: NetService)
Client extension ViewController: NetServiceDelegate { func netServiceDidResolveAddress(_ sender: NetService) {
// do something... } } service.resolve(withTimeout: 10.0) service.delegate = self
Client more BSD Socket CFSocket NSStream
Command $ dns-sd -B <Type> $ dns-sd -L <Service Name>
<Type> <Domain> $ dns-sd -G <protocol> <Hostname> $ dns-sd -H Browsing Resolving a service instance Getting IP Address Help
Command $ dns-sd -B _printer._tcp Browsing a printer service
Command $ dns-sd -B _printer._tcp Browsing a printer service Browsing
for _printer._tcp DATE: ---Mon 20 Aug 2018--- 3:21:58.151 ...STARTING... Timestamp A/R Flags if Domain Service Type Instance Name 3:21:58.151 Add 2 8 local. _printer._tcp. Printer Service
iOS12
Network.framework
Network.framework let name = "Awesome Service" let type = "_awesome._tcp."
let domain = "local." let parameters = NWParameters.tcp let port = NWEndpoint.Port(integerLiteral: 10000) listener.service = NWListener.Service(name: name, type: type, domain: domain) guard let listener = try? NWListener(using: parameters, on: port) else { fatalError("Listener can't be initialized") }
Let’s enjoy