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
WkWebViewのお話
Search
taminif
August 26, 2017
Programming
780
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WkWebViewのお話
Cocoa勉強会関西 #74で発表した資料です。
taminif
August 26, 2017
More Decks by taminif
See All by taminif
React Native New Architecture 移行実践報告
taminif
1
290
「とりあえずAI」が招く悲劇〜私がAIで生産性を下げるまでの話〜 / The tragedy caused by "AI for now" - The story of how I used AI to reduce my productivity
taminif
1
340
PuppeteerとPlaywrightの15日間の演劇 / relation of Puppeteer and Playwright
taminif
3
2.3k
Redashの開発はじめました / How to get started Redash development
taminif
0
820
私の生活を変えたHeadless Chrome / Headless Chrome who changed my life
taminif
3
560
WebSocketをiOSに持ち込んで辛い思いをした経験がありますか!? / have you painful experience in web socket?
taminif
3
6.3k
LINEで馬券を購入する / Purchase a betting ticket at LINE
taminif
1
1.7k
SkyWayで一年間運用してきたけどWebRTCってつらいんじゃないの
taminif
2
1k
オンライン英会話とSkyWay
taminif
0
560
Other Decks in Programming
See All in Programming
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
910
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
130
プロダクトコードからライブラリの境界を見つける
elmetal
PRO
0
100
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
520
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
620
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
13
6.6k
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.5k
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
120
JRuby: Past, Present, and Future
headius
0
220
Jetpack Compose Mechanisms
skydoves
2
370
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
740
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
304
22k
The Cult of Friendly URLs
andyhume
79
7k
Paper Plane (Part 1)
katiecoart
PRO
2
11k
From π to Pie charts
rasagy
1
390
Why Our Code Smells
bkeepers
PRO
340
58k
Side Projects
sachag
456
43k
Optimizing for Happiness
mojombo
378
71k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Test your architecture with Archunit
thirion
2
2.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
480
Product Roadmaps are Hard
iamctodd
55
13k
Transcript
WKWebViewͷ͓ ୈ74ճ Cocoaษڧձؔ 2017/08/26 େౡ ޫو@sbntaminif
ࣗݾհ • ΣϒϦΦגࣜձࣾWEBΤϯδχΞ • ΞϓϦΤϯδχΞ ʢࣗশʣ • ීஈژͰಇ͍͍ͯ·͢
WKWebViewͱ
WKWebViewͱ • ΣϒίϯςϯπΛදࣔ͢ΔΦϒδΣΫτ • MacOS10.10/iOS8.0͔Β༻Մೳ • ಛఆͷΣϒαΠτΛಡΈࠐΉΑ͏ͳΞϓ ϦͳΜ͔·ͣ͜ΕΛ͏ͱࢥ͍·͢ɻ
ಛʹWEBΤϯδχΞʹ ೃછΈͷ͋ΔViewͩͱ ࢥ͍·͢
UIWebView͔Β มΘΔͷͰ͢
มΘΔͱʁ • iOS8.0·ͰΣϒίϯςϯπΛදࣔ͢ ΔViewʹUIWebViewͱ͍͏ͷ͕͋ͬͨ ͕ɺެࣜͷυΩϡϝϯτʹWKWebViewΛ ༻͢ΔΑ͏هࡌ͕͋Δ • ࠓճUIWebViewͱͷൺֱΛ͢ΔΘ͚Ͱ ͍͟͝·ͤΜ
WKWebViewͷ ਪ͠ϙΠϯτ
ͦͷ1 ᙱ͍ॴʹख͕ಧ͘ ૢ࡞
ᙱ͍ॴʹख͕ಧ͘ • ϩʔυͷ։࢝/ऴྃɺϖʔδͷਐΉ/Δͷ ૢ࡞͕ίʔυ্Ͱૢ࡞Մೳ • ಡΈࠐΈঢ়گϖʔδભҠϦετͷऔಘ͕ Մೳ • DelegateΛηοτ͢Δ͜ͱͰૢ࡞࣌ʹॲ ཧΛηοτՄೳ
ೋͭͷDelegate • WKUIDelegate • WKWebViewΛ࡞/ऴྃͨ͠λΠϛϯ άɺAlertͷUIܥͷૢ࡞Λ୲ • WKNavigationDelegate • ΣϒίϯςϯπͷಡΈࠐΈ࣌ͷૢ࡞Λ
୲
ಛʹਪ͠ͳͷ͕ WKNavigationDelegate
ਤͰઆ໌
ϒϥβʹΑΔHTTP௨৴ ϒϥβ αʔόʔ ϦΫΤετ Ϩεϙϯε ϦΫΤετϔομʔ ϦΫΤετϘσΟ Ϩεϙϯεϔομʔ ϨεϙϯεϘσΟ
WKWebViewʹΑΔHTTP௨৴ ϒϥβ αʔόʔ ϦΫΤετ Ϩεϙϯε EFDJEF1PMJDZ'PS OBWJHBUJPO"DUJPO EJE4UBSU1SPWJTJPOBM/BWJHBUJPO ϦμΠϨΫτ࣌͜͜ͰΔ EJE3FDFJWF4FSWFS3FEJSFDU'PS1SPWJTJPOBM/BWJHBUJPO
ϦμΠϨΫτ࣌ͷΈ EJE'BJM1SPWJTJPOBM/BWJHBUJPO Τϥʔൃੜ࣌ͷΈ EFDJEF1PMJDZ'PS OBWJHBUJPO3FTQPOTF EJE$PNNJU EJE'JOJTI EJE3FDFJWF શͯ8,/BWJHBUJPO%FMFHBUFͷؔ
WKWebViewʹΑΔHTTP௨৴ ϒϥβ αʔόʔ ϦΫΤετ Ϩεϙϯε EFDJEF1PMJDZ'PS OBWJHBUJPO"DUJPO EFDJEF1PMJDZ'PS OBWJHBUJPO3FTQPOTF EFDJEF1PMJDZ'PSͰ
ಡΈࠐΈΛڐՄ͢Δ͔Ωϟϯηϧ͢Δ͔Λ ઃఆͰ͖Δ ϦΫΤετͩͱVSMϑΥʔϜૹ৴ ϨεϙϯεͩͱϨεϙϯείʔυ.*.&λΠϓ ͰఆͰ͖Δ
ͦͷ2 JavaScriptͷ࣮ߦ
JavaScriptͷ࣮ߦ • ಡΈࠐΜͩΣϒίϯςϯπʹରͯ͠ ҙͷJavaScriptΛ࣮ߦͰ͖Δ • ElementΛऔಘ͠ɺσʔλΛSwiftଆͰ༻ ͢Δ͜ͱ͕Ͱ͖Δ
JavaScriptͷ࣮ߦλΠϛϯ άೋछྨ͋Γ·͢
ೋछྨͷ࣮ߦλΠϛϯά • WKWebViewੜޙɺWKWebView͕࣋ͭ evaluateJavaScriptͱ͍͏ؔ • WKWebViewConfigurationΛੜ͠ɺͦ ͜ʹJavaScriptΛηοτͯ͠WKWebView ͷੜʹ༻͢Δ͜ͱͰಡΈࠐΈ࣌ʢલ/ ޙʣʹ࣮ߦ
(JavaScriptͰ͕͢) WEBεΫϨΠϐϯά Έ͍ͨͳ͜ͱՄೳͰ͢
ͦͷ3 ಡΈࠐΜͩϦιʔεͷ දࣔ
ΣϒίϯςϯπΛදࣔ͢Δ ViewͳͷͰɺΣϒϖʔδΛ ಡΈࠐΉͷવͰ͕͢
ϩʔΧϧʹஔͨ͠HTMLΛ ಡΈࠐΈɺදࣔͤ͞Δ͜ͱ ՄೳͰ͢
ϩʔΧϧϑΝΠϧΛಡΈࠐΉ let termsOfUsePath = Bundle.main.path(forResource: "privacyPolicy.html", ofType: nil)! let termsOfUseHtmlData
= try! Data(contentsOf: URL(fileURLWithPath: termsOfUsePath)) termsOfUseHtml = String(data: termsOfUseHtmlData, encoding: String.Encoding.utf8) webView.loadHTMLString(termsOfUseHtml, baseURL: URL(string: TermsOfUseViewController.TERMS_OF_USE_URL)!) #VOEMFͰಡΈग़ͨ͠จࣈྻ Λ8,8FC7JFXʹϩʔυ
WKWebViewͷ ೦ϙΠϯτ
ͦͷ1 StoryboardະରԠ
StoryboardະରԠ • UIWebView͕͍ͬͯΔͨΊ͔ɺ StoryboardͰWKWebViewΛஔ͢Δ͜ ͱ͕Ͱ͖·ͤΜɻ
શͯίʔυͰରԠ͢Δ ඞཁ͕͋Δͷ ͪΐͬͱෆศͰ͢
ͩͬͨͷͰ͕͢ɻɻ
ͦͷ2 WebRTCʹରԠ͍ͯ͠ͳ͍ (?)
WebRTCͱ • W3C͕ఏএ͢ΔP2PϦΞϧλΠϜίϛϡχ έʔγϣϯΛ࣮ݱ͢Δٕज़ • ϓϥάΠϯͳ͠ͰϒϥβؒͷΓͱΓ͕Մ ೳ • ςΩετόΠφϦͳͲͷσʔλܗࣜө૾ ԻͳͲͷStreamܗࣜͷΓͱΓ͕Մೳ
ͦͦiOSʹ ରԠ͍ͯ͠Δͷ?
ݱ࣌ͰରԠ͍ͯ͠·ͤΜ • ChromeFireFoxͳͲChroniumϕʔεͷϒϥ βͰ͔࣮͠͞Ε͍ͯ·ͤΜͰͨ͠ɻ • iOSWebKitϕʔεͳͷͰະରԠͰ͕͢ɻɻ • iOS11ͰSafariʹ࣮͞ΕΔ͜ͱ͕༧ఆ͞Εͯ ͍·͢ʂ
Կ͕ඞཁͳͷ͔
σόΠεʹΞΫηε͢ΔͨΊͷ API(getUserMedia)͕ϒϥβʹ ࣮͞Ε͍ͯΔඞཁ͕͋Δ • ֎෦σόΠεʢΧϝϥ/ϚΠΫʣΛ༻͢Δڐ ՄΛϒϥβ͕͍࣋ͬͯΔ͔֬ೝ͠ɺͦͷ StreamΛऔಘͯ͠ฦ͠·͢ɻ • Safariʹ࣮͞ΕΔ͜ͱͰɺWebRTCʹରԠ ͠·͢ɻʢɿ͜Ε͚ͩඞཁͱ͍͏͜ͱͰ
ͳ͍Ͱ͢ʣ
ͨͩ͠ɺ೦ͳ͕Β
WKWebViewͰ ରԠ͞Εͳ͍Έ͍ͨͰ͢ • ͢ͰʹBeta൛Ͱࢼ͞Εͨํ͕͍Βͬ͠Ό͍· ͨ͠ https://stackoverflow.com/questions/45055329/ does-webkit-in-ios-11-beta-support-webrtc
·ͩBeta൛ͳͷͰਖ਼ࣜʹ Θ͔Γ·ͤΜ͕ɺରԠ͞Ε Δ͜ͱΛظ͍ͨ͠Ͱ͢
·ͱΊ
·ͱΊ WKWebViewศརʂʂ ͩͱࢥ͍·͢ɻɻ
࠷ޙʹએͰ͢ iOSDC 2017ʹొஃ͠·͢ʂ • ʮӳձαʔϏεͷͨΊʹ࡞ͨ͠ϏσΦ νϟοτΞϓϦͷٕज़ʯͱ͍͏ςʔϚͰ࠾ ͞Ε·ͨ͠ʂ • ΞϓϦͰWebRTCΛ༻ͯ͠ϏσΦ௨Λ ࣮ͨ͠ɺFirebaseͰνϟοτΛ࣮
ͨ͠ͱӡ༻ͰͷݟΛ͓͢͠Δ༧ఆͰ ͢ʂ
ͥͻདྷ͍ͯͩ͘͞ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠