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
15分でわかる バックグラウンドアップロード
Search
yimajo
September 17, 2017
Technology
2.9k
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
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
890
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
710
11年かかって やっとVibe Codingに 時代が追いつきましたね
yimajo
1
390
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
3
340
良いテストコードのために悪いテストコードを理解する - 不安定なテスト編: iOSアプリ開発ユニットテストの場合
yimajo
22
6.8k
TCAの Shared Stateって どういう仕組みになってんの?
yimajo
0
2.7k
Swift 5.9 からの Observation はiOS17 未満 からも使えて struct の変更検知もできるんすかね?
yimajo
2
1.2k
不安定なテストは200種類あんねん
yimajo
3
1.2k
TCA v0.19.0からのSwitchStore/CaseLetが良い
yimajo
0
2.1k
Other Decks in Technology
See All in Technology
【CEDEC2026】コードレビュー支援ツール開発から学ぶ:LLMを用いた業務システムの実践的な運用設計と誤出力対策
cygames
PRO
0
670
【CEDEC2026】ゲームシナリオライターを支援するAIツール開発の実践 ― 設計とプロンプトの工夫 ―
cygames
PRO
1
790
JavaScript 研修 (2026)
recruitengineers
PRO
2
530
【Google Cloud Next Tokyo'26】Gemini Enterprise と Oracle AI Database で実現する、業務データ活用を実現する AI エージェント実装
shisyu_gaku
0
240
【CEDEC2026】『Relink』を拡張せよ - 『GRANBLUE FANTASY: Relink - Endless Ragnarok』の開発速度と品質を守るCI運用
cygames
PRO
0
150
攻撃と防御で学ぶAI時代のプロダクトセキュリティ演習
recruitengineers
PRO
9
2.7k
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
730
Genie Codeハンズオン基礎編
taka_aki
1
110
強化学習「理論」入門
enakai00
3
3.6k
今こそ聞きたいソフトウェア設計 ドメイン駆動設計再入門
masuda220
PRO
17
7.2k
Model Studio CLI × Token Plan
maigo999
0
160
DatadogのBits Chatが開発組織にもたらしたもの / What Bits Chat Has Brought Us
sms_tech
1
250
Featured
See All Featured
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
660
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
119
120k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Into the Great Unknown - MozCon
thekraken
41
2.7k
How to make the Groovebox
asonas
2
2.3k
The browser strikes back
jonoalderson
0
1.5k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
Docker and Python
trallard
47
4.1k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
200
Prompt Engineering for Job Search
mfonobong
0
400
sira's awesome portfolio website redesign presentation
elsirapls
0
320
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 ϦτϥΠपΓ͕ະͩʹṖͳͷͰใڞ༗͠·͠ΐ͏
͝ਗ਼ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠ ථͷఔΑΖ͓͘͠ئ͍͠·͢