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
1
230
Zero Configuration
Zero Configuration on Apple Platform
Yuji Taniguchi
August 20, 2018
Tweet
Share
More Decks by Yuji Taniguchi
See All by Yuji Taniguchi
Zeroconf on iOS
natpenguin
2
1.3k
The ownership in iOS
natpenguin
0
370
Other Decks in Technology
See All in Technology
Claude Code 2026年 最新アップデート
oikon48
10
7.2k
SRE NEXT 2026 CfP レビュアーが語る聞きたくなるプロポーザルとは?
yutakawasaki0911
0
230
スクリプトの先へ!AIエージェントと組み合わせる モバイルE2Eテスト
error96num
0
150
越境する組織づくり ─ 多様性を前提にしたチームビルディングとリードの実践知
kido_engineer
2
180
Claude Code のコード品質がばらつくので AI に品質保証させる仕組みを作った話 / A story about building a mechanism to have AI ensure quality, because the code quality from Claude Code was inconsistent
nrslib
12
5k
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
860
楽しく学ぼう!コミュニティ入門 AWSと人が つむいできたストーリー
hiroramos4
PRO
1
190
AWS DevOps Agent vs SRE俺 / AWS DevOps Agent vs me, the SRE
sms_tech
3
530
マルチアカウント環境でSecurity Hubの運用!導入の苦労とポイント / JAWS DAYS 2026
genda
0
410
JAWSDAYS2026_A-6_現場SEが語る 回せるセキュリティ運用~設計で可視化、AIで加速する「楽に回る」運用設計のコツ~
shoki_hata
0
2.9k
Datadog の RBAC のすべて
nulabinc
PRO
3
440
マルチプレーンGPUネットワークを実現するシャッフルアーキテクチャの整理と考察
markunet
2
230
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
200
Paper Plane (Part 1)
katiecoart
PRO
0
5.4k
Balancing Empowerment & Direction
lara
5
940
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Optimising Largest Contentful Paint
csswizardry
37
3.6k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
60
42k
Raft: Consensus for Rubyists
vanstee
141
7.3k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
67
37k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
How to train your dragon (web standard)
notwaldorf
97
6.5k
sira's awesome portfolio website redesign presentation
elsirapls
0
190
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