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
15分でわかる バックグラウンドアップロード
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
yimajo
September 17, 2017
Technology
3k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
15分でわかる バックグラウンドアップロード
iosdc2017 の発表資料です
yimajo
September 17, 2017
More Decks by yimajo
See All by yimajo
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
390
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
930
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
750
11年かかって やっとVibe Codingに 時代が追いつきましたね
yimajo
1
410
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
3
350
良いテストコードのために悪いテストコードを理解する - 不安定なテスト編: iOSアプリ開発ユニットテストの場合
yimajo
22
6.9k
TCAの Shared Stateって どういう仕組みになってんの?
yimajo
0
2.8k
Swift 5.9 からの Observation はiOS17 未満 からも使えて struct の変更検知もできるんすかね?
yimajo
2
1.2k
不安定なテストは200種類あんねん
yimajo
3
1.3k
Other Decks in Technology
See All in Technology
ビジネスを止めない技術的負債の返済のための戦略とその手法 - 技術的負債と向き合う / Complexity and Simplicity
soudai
PRO
2
430
AIは爆速なのに、私が詰まっていた話 ― 音声入力と鳴くマスコットでボトルネックを削る
yama3133
0
310
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
leveragestech
PRO
0
130
Claude Designがめちゃくちゃ便利なので使ってほしい
diggymo
0
200
AI Native Platform Engineering 〜PlatformとAgileで“作る速さ”を“価値”へ〜
uya116
0
600
SQL Server 2025 最適化されたロック
odashinsuke
0
120
大阪オフィスに Unitree Go2 がやってきたので Physical AI やってみた
dafujii
0
230
FinTech 1-2 : Overview of FinTech
ks91
PRO
0
130
IR Today: Theory, Practice, and Agents
dtunkelang
0
320
「とりあえず動く」の先へ。 AI時代のチーム開発と内部設計/2026-slsdays
slsops
0
110
企業の現実世界をグラフで写し取る
sansantech
PRO
0
240
AI感のないAWS構成図をAIエージェントに描かせたい!
sagochiko
2
500
Featured
See All Featured
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
570
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
Unsuck your backbone
ammeep
672
58k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
710
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
540
HDC tutorial
michielstock
2
930
Building an army of robots
kneath
307
47k
Side Projects
sachag
456
43k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
A designer walks into a library…
pauljervisheath
211
25k
The SEO identity crisis: Don't let AI make you average
varn
0
570
Transcript
ͰΘ͔Δ όοΫάϥϯυΞοϓϩʔυ גࣜձࣾΩϡϦΦγςΟιϑτΣΞ J04%$D !ZJNBKP ࠓળۣ ձૣҴాେֶཧֶ෦ૣҴాΩϟϯύε߸ؗձٞࣨ
ෳ͋Δηογϣϯͷத͔ΒબΜͰ͖ ͋Γ͕ͱ͏͍͟͝·͢
wࢿྉޙ΄ͲΣϒ্ʹެ։ͯ͠ϋογϡλάΛ͚ͯπΠʔτΛ ͠·͢!ZJNBKPJPTEDD wࢿྉͷࡱӨࣗ༝Ͱ͕͢ɺը͞Ε͍ͯΔͣͳͷͰ:PV5VCFͰݟ ฦͤΔͣͰ͢ wฏຌͳൃදͳͷͰؾܰʹฉ͍͍ͯͩ͘͞
ͳͥࠓճόοΫάϥϯυͰͷ Ξοϓϩʔυʹ͍ͭͯ ͢ͷ͔ ❓
υΩϡϝϯτ͕গͳ͍
αϯϓϧίʔυ͔ͳΓগͳ͍
όοΫάϥϯυ࣌ͷ ಈ࡞͕σόοάͮ͠Β͍
͜ͷൃදͰʜ
όοΫάϥϯυࣗ ମͷ͓͞Β͍͠·͢
༷ͷ͔ΓͮΒ ͍Λղઆ͠·͢
σόοάʹඞਢͳπʔ ϧΛհ͠·͢
͡ΊͯͰ ࠷Ͱ҆શͳํ๏͕Θ͔Δͱࢥ ͍·͢
͋ΒͨΊ͓ͯ͠ͳ͕͖ w ࣗݾհ w όοΫάϥϯυΞοϓϩʔυͬͯԿʁ w ϓϩδΣΫτͷಋೖͱ։ൃཱͪπʔϧ
ࣗݾհ
͋ΒͨΊͯࣗݾհ wגࣜձࣾΩϡϦΦγςΟιϑτΣΞ wϒʔεεϙϯαʔ w!ZJNBKPʢࠓળۣʣ wJ04͘Β͍͔ΒΞϓϦ͘Β͍
༨ஊΛ͠·͢
͜ͷ෦ೖޱͷઆ໌ ಡΜͩਓ͍·͢ʁ ʮ͜ͷ෦ૣҴాཧֶ෦ͷઃऀɺ ໌ଠه೦ձٞࣨͰ͢ʯ ʢ࣮෦͝ͱʹ໊લ͕͋Γ·͢ʣ
͜ͷձೖޱͷ૾ˠ ໌ଠʢ͚ͨ͏ͪ Ί͍ͨΖ͏ɺ ҆72݄28ʮ18603݄20ʯ ੜ·Ε — ত3ʮ1928ʯ3݄23ʣɺ ݱࡏͷߴݝ ॓ໟࢢग़ͷ໌࣏ɾେਖ਼ظͷ ࣮ۀՈɾऺٞӃٞһɻ ૣҴాେֶཧֶ෦ઃཱऀɻ
ࠓճͷൃදऀˠ @yimajoʢ͍·͡ΐ͏Α͠ͷΓɺ 1981ੜ·Εʣɺ ݱࡏͷߴݝ࢛ສेࢢग़ɻ தֶ࣌΄΅डݧษڧΛ͠ͳ͔ͬͨͨΊ ࣗۙ͘ͷਐֶߍʹਐ·ͣɺ ߴݝ॓ໟߴߍʹਐֶɺ ϒʔεεϙϯαʔ݉εϐʔΧʔ
͕͢͞ӡӦɺΘ͔ͬͯ·͢Ͷ
ӡӦ ʮͨͩͷۮવͰ͢ʯ
ຊ
ͦͦ όοΫάϥϯυΞοϓϩʔυ ͬͯԿʁ
w J04Ҏ߱ͷόοΫάϥϯυΞοϓϩʔυॲཧ w #BDLHSPVOE5SBOTGFS4FSWJDF༻ͷ"1*ͱͯ͠/463-4FTTJPO ͰॲཧΛ࣮Ͱ͖·͢
Ͳ͏͍͏ͱ͖͏ w ଞͷΞϓϦΛ͍ͬͯΔؒࣗͷΞϓϦͰൺֱతେ͖ͳϑΝΠϧ ΛΞοϓϩʔυͰ͖Δ w 4IBSF&YUFOTJPOͰJ04ඪ४ͷࣸਅBQQͳͲଞΞϓϦ͔Βίϯςϯ πΛબΜͰαʔόʔʹΞοϓϩʔυ͢Δࡍʹར༻͢Δͱศར
͔͠͠ ࠷ॳʹݴ͓ͬͯ͘ͱ
บ͕ڧ͍
৭ʑͬͯͳ͍ͱ
ѻ͍ͮΒ͍
όοΫάϥϯυͬͯԿʁ w ΞϓϦ͕ϑΥΞάϥϯυͰͳ͍ͱ͖Ͱ ಈ࡞Ͱ͖Δ w ϑΥΞάϥϯυͰͳ͍ͱݴͬͯɺ 4VTQFOEFEͱ͍͏ঢ়ଶ/PU3VOOJOHͱ ͍͏ঢ়ଶଘࡏͦ͠ͷঢ়ଶಈ࡞͠·ͤΜ w 4VTQFOEFE#BDLHSPVOEͱߦ͖དྷ͠·
͢
όοΫάϥϯυ௨৴ॲཧ ʹؔ͢Δྺ࢙ͷ͓͞Β͍ ݹ͔͘Β͋ΔJ04࣌ͱJ04͔Βͷҧ͍
J04͔࣌ΒͷόοΫάϥϯυ ॲཧԆ w ༗ݶͳλεΫͷԆॲཧʢ&YFDVUJOH'OJUF-FOHUI5BTLTʣ ͱ͍͏ͷ͕͋Γ͜ͷॲཧόοΫάϥϯυঢ়ଶͰॲཧΛߦ͏ w ௨৴͠Α͏ͱࢥ͑Ͱ͖Δ
88%$ ʢJ04Ќൃද࣌ʣ ͷਤΛݟͯΈΔ
J04͔ΒJ04ͷόοΫάϥϯυ࣮ߦ 88%$8IBUTOFXNVMUJUBTLJOHΑΓ όοΫάϥϯυͰλεΫͷ ॲཧԆ࿈ଓ͍ͯͨ͠ ը໘ΛϩοΫͯ͠ J1IPOFΛεϦʔϓ͍ͯ͠ͳ͔ͬͨ όοςϦʔෛՙ͕ߴ͔ͬͨ
J04Ҏ߱ͷόοΫάϥϯυ࣮ߦ 88%$8IBUTOFXNVMUJUBTLJOHΑΓ όοΫάϥϯυͰλεΫͷ ॲཧԆඈͼඈͼʹͳΔ ը໘ΛϩοΫ͢Δͱ J1IPOF4MFFQ͢Δ
J04ͷ࣌ܥྻͰݟΔόοΫάϥϯυ௨৴ J04 J04 ʮ༗ݶλεΫͷॲཧԆʯͰ ͚ͩಈ࡞Մೳ ʮ༗ݶλεΫͷॲཧԆʯͰ ͚ͩಈ࡞Մೳ #BDLHSPVOE5SBOTGFS 4FSWJDF
͜͜·Ͱͷ·ͱΊ w J04͔ΒJ04ؒॲཧԆͰ͖ʹͰ͖ͨ w σόΠεͷෛՙ͕ܹ͍͠ w J04Ҏ߱ॲཧԆΛʹ͘͠ݸผʹઐ༻ͷ"1*Λ ͏Α͏ʹͳͬͨ
όοΫάϥϯυΞοϓ ϩʔυͷ༷ʹ͍ͭͯ
؆୯ͳಛ w ΞοϓϩʔυJ04্ͷΩϡʔʹੵ·Ε੍ޚ͞ΕΔ w ύϑΥʔϚϯε࠷దԽͷͨΊʹγεςϜͷ࠷ྑͰ εέδϡʔϦϯά͞ΕΔ w ࣦഊͨ͠ΒࣗಈϦτϥΠ͞ΕΔ
"QQMF͕ఏ͍ࣔͯ͠ΔόοΫά ϥϯυ௨৴ͷ੍ʹ͍ͭͯ
w /463-4FTTJPOΫϩʔδϟͰͳ͘EFMFHBUFΛ ͏ w Ξοϓϩʔυ͢ΔϑΝΠϧ%BUBΫϥε͔ΒϑΝ Πϧͱͯ͠ग़ྗͯ͠ύεΛ͢ w όοΫάϥϯυ༻ʹͳΔ͘ϢχʔΫͳ*%Λ࡞ ͢Δ ੍
ͳ͔ͥ
ΞϓϦ J04 EFMFHBUFͱͯ͠Πϯελϯε͢ EFMFHBUFͷϝιουݺͼग़͠ σʔϞϯϓϩηε Ξοϓϩʔυ͢ΔϑΝΠϧ w ΞϓϦ͕όοΫάϥϯυͷঢ়ଶͰ Ξοϓϩʔυ͢ΔͨΊɺJ04σʔϞϯ ϓϩηεʹ௨৴ΛͤΔ
ࢀߟ<ॻ੶>্Λࢦ͢ϓϩάϥϚʔͷͨΊͷJ1IPOFΞϓϦ։ൃςΫχοΫJ04ฤ w σʔϞϯϑΝΠϧύεʹΞΫηε ͦ͠ͷϑΝΠϧΛΞοϓϩʔυ͢Δ w ྃ௨σʔϞϯ͕EFMFHBUFϝ ιουΛݺͼग़͢
w ͓ͦΒ͘ɺJ04ͷϓϩηε͕௨৴Λࣝผ͢ΔͨΊ w ͦͷͨΊɺಉ͡*%Λෳಉ࣌ʹͬͯ௨৴͍͚ͯ͠ͳ͍ w ௨৴͕ऴΘ͔ͬͯΒͦͷ*%Λ͍·Θ͢ͷͳ͍ ʢͱࢥ͏ʣ όοΫάϥϯυ*%ΛҰҙʹ ܾΊΔඞཁ͕͋Δཧ༝
ϓϩδΣΫτͷಋೖ
·ͣ͡Ίʹ όοΫάϥϯυͷίʔυྫ
ओཁͳΫϥεͱEFMFHBUF w 63-3FRVFTU w 63-4FTTJPO w 63-4FTTJPO%FMFHBUF w 63-4FTTJPO$POpHVSBUJPO w
63-4FTTJPO5BTL w 63-4FTTJPO%FMFHBUF
/// - Parameter: /// - fileURL: Ξοϓϩʔυ͢ΔσʔλΛϩʔΧϧͰϑΝΠϧԽͨ͠URL /// - identifier:
ϢχʔΫͳID func upload(fileURL: URL, identifier: String) { let config = URLSessionConfiguration.background(withIdentifier: identifier) let session = URLSession(configuration: config, delegate: self, delegateQueue: nil) let request = makeRequest(with: fileURL) let task = session.uploadTask(with: request, fromFile: fileURL) task.resume() } // 1: URLSessionConfigurationΛ࡞ // 2: URLSessionΛ࡞ // 3: URLRequestΛ࡞(ϦΫΤετύϥϝʔλΛΈཱͯΔͨΊϚϧνύʔτͳURLRequestΛ࡞ͬͯฦ͢) // 4: URLSession͔ΒUploadTaskΛऔΓग़͢ʢΞοϓϩʔυ͢ΔϑΝΠϧͷॴ͕ඞཁʣ Ξοϓϩʔυͷखଓ͖
/// Ξοϓϩʔυਐḿ࣌ʹݺͼग़͞ΕΔ func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent:
Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) { /// ΞοϓϩʔυࡁΈͷbyteͰਐḿΛͱΔ… /// task͔ΒΩϟϯηϧͰ͖Δ… } /// Ξοϓϩʔυྃ࣌ʹݺͼग़͞ΕΔ func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { /// task͔ΒεςʔλείʔυΛऔΓग़ͨ͠Γ… /// ྃॲཧ… } ݺͼग़͞ΕΔ%FMFHBUF
͜ΕͰόοΫάϥϯυͰ ΞοϓϩʔυͰ͖·͢
"QQMFͷαϯϓϧίʔυ w /463-4FTTJPOͰ#BDLHSPVOE5SBOTGFSʹΑ Δμϯϩʔυ w ը૾Λμϯϩʔυ͢ΔͷΈ w ͜ΕΛΞοϓϩʔυʹ࣮Λม͑ಈ࡞Λ֬ೝ͢ Δ w
௨৴ϥΠϒϥϦʹཔΒͳ͍΄͏͕ޙʑॿ͔Δʢޙ ड़ʣ 4JNQMF#BDLHSPVOE5SBOTGFS
ʹཱͭπʔϧ w /FUXPSL-JOL$POEJUJPOFSʢ௨৴ঢ়گΛѱ͘ग़དྷ Δʣ w $IBSMFTʢ1SPYZπʔϧʣ w 4XJGUZCFBWFSʢϩάϥΠϒϥϦʣ
w .BDʹΠϯετʔϧ͢ΔϓϩΩγαʔόʔ $IBSMFT w J1IPOFͱಉ͡8J'JͷNBDʹೖΕΔ w 8FC"1*ͷϦΫΤετΛΤϯυϙΠϯτͰ USFFදࣔͯ͘͠ΕΔ w ϦΫΤετ͕࣌ؒΔͷͰαʔόʔଆʹ
͍߹ΘͤΔࡍʹҰؾʹָʹͳͬͨ w D63-ίϚϯυΛੜͰ͖Δ
w αʔόʹϩάΛૹͬͯͦΕΛઐ༻ͷ.BD BQQͰ֬ೝͰ͖Δˠ w Ԇ͕͋ΔͷͰ͋·Γʹཱͨͳ͍ 4XJGUZ#FBWFS w όοΫάϥϯυʹೖΔλΠϛϯάΛϩά Ͱ֬ೝ w
όοΫάϥϯυதͷಈ࡞ΛςΩετग़ྗ
όοΫάϥϯυΞοϓϩʔυ ·ΓͲ͜Ζ
όοΫάϥϯυಈ࡞࣌ͷ UJNFPVU*OUFSWBM'PS3FRVFTUͷ ͕࣌ؒมߋͰ͖ͳ͍ ఘΊͯΔ
λΠϜΞτؔ࿈ͷϓϩύςΟ w UJNFPVU*OUFSWBM'PS3FRVFTU w ϦΫΤετͷλΠϜΞτɻ৽͍͠σʔλΛड ͚औΔͨͼʹϦηοτ͞ΕΔʢ͔ΓͮΒ͍ʣ w UJNFPVU*OUFSWBM'PS3FTPVSDF w Ϧιʔεʹର͢ΔλΠϜΞτɻ͜ͷ࣌ؒͷؒϦ
τϥΠΛ܁Γฦ͠ɺ͜ΕΛ͑ͯ௨৴ΛߦΘͳ͍
UJNFPVU*OUFSWBM'PS3FRVFTUͬͯ͜͏͍͏͜ͱʁ ϦΫΤετ࣌ؒ αʔόͰͷॲཧ࣌ؒ Ϩεϙϯε ࣌ؒ όοΫάϥϯυ࣌ ඵ Ҏ͡Όͳ͍ͱ λΠϜΞτʁ ϦΫΤετ
UJNF
UJNFPVU*OUFSWBM'PS3FTPVSDFͬͯ͜͏͍͏͜ͱ ϦτϥΠ ϦΫΤετ ϦτϥΠ λΠϜΞτΛ͑Δͱ ϦτϥΠऴΘΓ UJNF
ΜͰͳ͍উखͳϦτϥΠ UJNFPVU*OUFSWBM'PS3FTPVSDFΛͯ͘͠ରԠ
UJNFPVU*OUFSWBM'PS3FTPVSDF ͷσϑΥϧτؒ ͗͢
J04͔Βͷ
w ௨৴ͷεέδϡʔϦϯά༻ͷ"1*͕૿͍͑ͯΔ w ௨৴ࢹࣗ͠ಈͰ։࢝ΛΒͤͨΓ w όοΫάϥϯυ࣌ʹࢦఆͨ࣌ؒ͠Ҏ߱ʹ௨৴͢Δ 88%$"EWBODFTJO/FUXPSLJOH 1BSU
͍͞͝ʹ·ͱΊ w όοΫάϥϯυΞοϓϩʔυJ04͔Β͋ΔόοΫάϥϯυॲཧͷԆ ͱࠞಉͦ͠͏ʹͳΔ͕ผ w ผϓϩηεͰಈ࡞͢ΔͷͰ9DPEFҎ֎ͷπʔϧઈରͬͨ΄͏͕͍͍ w ϦτϥΠपΓ͕ະͩʹṖͳͷͰใڞ༗͠·͠ΐ͏
͝ਗ਼ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠ ථͷఔΑΖ͓͘͠ئ͍͠·͢