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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
310
「とりあえずAI」が招く悲劇〜私がAIで生産性を下げるまでの話〜 / The tragedy caused by "AI for now" - The story of how I used AI to reduce my productivity
taminif
1
350
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
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
340
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
310
Seven New Principles of Software Engineering
yegor256
0
330
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
150
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
120
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.2k
Vue Fes Japan の “作る側”に関わってみて
naokihaba
1
190
Domain-Driven Transformation
hschwentner
2
2.3k
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
380
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
170
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
220
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.8k
Featured
See All Featured
Designing for Timeless Needs
cassininazir
1
530
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
420
How to Talk to Developers About Accessibility
jct
2
590
Why Our Code Smells
bkeepers
PRO
340
58k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
580
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
620
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Automating Front-end Workflow
addyosmani
1370
210k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
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ͰνϟοτΛ࣮
ͨ͠ͱӡ༻ͰͷݟΛ͓͢͠Δ༧ఆͰ ͢ʂ
ͥͻདྷ͍ͯͩ͘͞ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠