Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Zero Configuration
Search
Yuji Taniguchi
August 20, 2018
Technology
260
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
380
Other Decks in Technology
See All in Technology
脱Jenkins、インターン生が挑んだCIツールGitHubActions移行
mixi_engineers
PRO
1
140
AI Agent を本番環境へ―― Microsoft Foundry × Azure Serverless で作る Enterprise-Ready な基盤
shibayan
PRO
1
560
ここは地獄!つらい朝会を体験することで、チームとしてのより良い振る舞いに気づくワークショップ / The stand-up meeting from hell in the game industry
scrummasudar
0
340
セキュリティ研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
12
12k
人とエージェントが高め合う協業設計
kintotechdev
0
970
Jitera Company Deck
jitera
0
590
Playwright × AI Agent でE2Eテストはどう変わるか AI駆動テストの可能性と実用検証の結果
taiga7543
2
890
「待ち時間」の消滅と「自我消耗」の加速:生成AI時代のエンジニアを救うメンタル・リソース管理
poropinai1966
0
230
AI x 開発生産性を取り巻く予算戦略と投資対効果
i35_267
8
3.4k
SRENEXT_2026_Chairs__Talks_in_Tamachi.sre.pdf
srenext
1
160
AIコード生成×サプライチェーン攻撃 — PHPが直面する“二重の信頼問題
shinyasaita
0
490
設計レビューとAIハーネスで向き合う AIが生み出した新しいボトルネックの対処法 / Design Reviews and AI Harnesses Against New Bottlenecks Created by AI
nstock
6
520
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
BBQ
matthewcrist
89
10k
Optimising Largest Contentful Paint
csswizardry
37
3.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
How to build a perfect <img>
jonoalderson
1
5.8k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Everyday Curiosity
cassininazir
0
260
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
570
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
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