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
260
「とりあえず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
550
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
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
110
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
390
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
1.2k
Introducing Stack Pull Request in GitHub
kkamegawa
0
100
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
130
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
390
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
620
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
400
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
390
リアルな遅延を測る仕様
kota_yata
1
130
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
1
2k
不幸な GC
chencmd
0
740
Featured
See All Featured
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
310
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Navigating Team Friction
lara
192
16k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
500
Deep Space Network (abreviated)
tonyrice
0
270
Exploring anti-patterns in Rails
aemeredith
3
470
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
810
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
480
We Are The Robots
honzajavorek
0
310
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.4k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
470
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ͰνϟοτΛ࣮
ͨ͠ͱӡ༻ͰͷݟΛ͓͢͠Δ༧ఆͰ ͢ʂ
ͥͻདྷ͍ͯͩ͘͞ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠