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
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
940
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
760
11年かかって やっとVibe Codingに 時代が追いつきましたね
yimajo
1
410
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
3
360
良いテストコードのために悪いテストコードを理解する - 不安定なテスト編: 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
予測不能な実行エージェントを安全にサクッと試せるサンドボックス環境の話
sansantech
PRO
1
140
"優秀な誰か"の下位互換にならないために
yut0naga1_fa
1
1.7k
AIに攻撃される前に、AIに攻撃させる
tsuchikazu
0
170
生成AIで高い生産性を求められて、 悩み、乗り越えた話
mot_techtalk
2
160
初対面のメンバーがチームを組み、Claude Codeでゼロからサービスをリリース
mkdev10
1
120
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
6
4.4k
[AWS 秋のクラウドオペレーション祭り 2026]AWS DevOps Agentで変わるリリースと運用対応 ~リリース管理機能と Directed actions のご紹介~
furuton
4
1.2k
メルペイ 会計システム概要と歴史
mewuto
0
200
Claude Code本は、どのように執筆チームで書かれたか
oikon48
1
360
Snapshot Testing in Practice: Predictable and Reliable SwiftUI Views
fespinoza
0
180
Loop Engineering これくらいでいい
mikanichinose
0
210
AI 時代の Azure エンジニアリング ~ 私たちは何を磨き、何を任せるのか ~
chack411
1
580
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
22k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
Unsuck your backbone
ammeep
672
58k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
4 Signs Your Business is Dying
shpigford
187
23k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
790
The Mindset for Success: Future Career Progression
greggifford
PRO
0
530
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
490
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
580
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
530
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.2k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
480
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 ϦτϥΠपΓ͕ະͩʹṖͳͷͰใڞ༗͠·͠ΐ͏
͝ਗ਼ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠ ථͷఔΑΖ͓͘͠ئ͍͠·͢