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
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
残高管理から台帳サービスへの進化
artoy
1
210
Zero-Tap Sign-In対応、結局何をすればいいの?
mitohato14
0
820
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
1.2k
dotNET_vulnclicker_intro.pdf
deka_morita
0
150
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
120
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
380
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
7k
SFCで実現する病院・医療システムの動的組み立て式UI
koukimiura
1
120
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
370
sbt 2.0: takeoff
eed3si9n
0
170
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
180
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
250
Featured
See All Featured
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
490
GraphQLとの向き合い方2022年版
quramy
50
15k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
440
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
420
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
640
Unsuck your backbone
ammeep
672
58k
Music & Morning Musume
bryan
48
7.5k
WCS-LA-2024
lcolladotor
0
920
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
420
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
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ͰνϟοτΛ࣮
ͨ͠ͱӡ༻ͰͷݟΛ͓͢͠Δ༧ఆͰ ͢ʂ
ͥͻདྷ͍ͯͩ͘͞ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠