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
WkWebViewのお話
Search
taminif
August 26, 2017
Programming
770
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
250
「とりあえずAI」が招く悲劇〜私がAIで生産性を下げるまでの話〜 / The tragedy caused by "AI for now" - The story of how I used AI to reduce my productivity
taminif
1
330
PuppeteerとPlaywrightの15日間の演劇 / relation of Puppeteer and Playwright
taminif
3
2.3k
Redashの開発はじめました / How to get started Redash development
taminif
0
810
私の生活を変えたHeadless Chrome / Headless Chrome who changed my life
taminif
3
540
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
550
Other Decks in Programming
See All in Programming
Claude Team Plan導入・ガイド
tk3fftk
0
250
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.8k
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
3.9k
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
340
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
360
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
200
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
170
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
460
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
200
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
660
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
820
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.5k
Featured
See All Featured
It's Worth the Effort
3n
188
29k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
The Spectacular Lies of Maps
axbom
PRO
1
890
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
330
Everyday Curiosity
cassininazir
0
270
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
560
Design in an AI World
tapps
1
270
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
160
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ͰνϟοτΛ࣮
ͨ͠ͱӡ༻ͰͷݟΛ͓͢͠Δ༧ఆͰ ͢ʂ
ͥͻདྷ͍ͯͩ͘͞ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠