Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Working as an iOS Developer at Classmethod
Kato Jun
August 14, 2018
Programming
0
390
Working as an iOS Developer at Classmethod
Kato Jun
August 14, 2018
Tweet
Share
More Decks by Kato Jun
See All by Kato Jun
love-swift-vol8
katoj
0
1.1k
Other Decks in Programming
See All in Programming
WindowsコンテナDojo: 第4回 Red Hat OpenShift Localを使ってみよう
oniak3ibm
PRO
0
190
Introduction to Property-Based Testing @ COSCUP 2022
cybai
1
150
Register-based calling convention for Go functions
cjamhe01385
0
420
How GitHub Supports Vim License Detection, The Five Years Journey
othree
1
390
SRE NEXT 2022に学ぶこれからのSREキャリア
fukubaka0825
2
400
NestJS_meetup_atamaplus
atamaplus
0
230
クラウド KMS の活用 / TOKYO BLOCKCHAIN TECH MEETUP 2022
odanado
PRO
0
190
Isar勉強会
hoddy3190
0
570
設計の考え方とやり方
masuda220
PRO
56
32k
WindowsコンテナDojo:第6回 Red Hat OpenShift入門
oniak3ibm
PRO
0
180
Enzyme から React Native Testing Library に移行した経緯 / 2022-07-20
tamago3keran
1
160
FullStack eXchange, July 2022
brucel
0
200
Featured
See All Featured
It's Worth the Effort
3n
172
26k
Building Your Own Lightsaber
phodgson
95
4.7k
Unsuck your backbone
ammeep
659
55k
Code Reviewing Like a Champion
maltzj
506
37k
Learning to Love Humans: Emotional Interface Design
aarron
261
37k
What the flash - Photography Introduction
edds
63
10k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
21
1.4k
Raft: Consensus for Rubyists
vanstee
127
5.5k
Making the Leap to Tech Lead
cromwellryan
113
7.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
344
17k
VelocityConf: Rendering Performance Case Studies
addyosmani
316
22k
A Philosophy of Restraint
colly
192
15k
Transcript
8PSLJOHBTBO J04%FWFMPQFS BU$MBTTNFUIPE ,BUP+VO 1
"CPVUNF !2 wՃ౻५ wϞόΠϧΞϓϦαʔϏε෦ wJ04ΤϯδχΞ w$.ೖͬͯڧ wࡀʢࡀͷ່͕͍·͢ʣ
"HFOEB !3 wϞόΠϧΞϓϦαʔϏε෦ʹ͍ͭͯ wJ04ΤϯδχΞͷࣄ wҭࣇͱΫϥεϝιου wΫϥεϝιουͷจԽ w88%$Ͱൃද͞ΕͨؾʹͳΔ৽ػೳ
ϞόΠϧΞϓϦαʔϏε෦ ʢϓϦαʔʣͱʁ !4
ϓϦαʔͷ͓ࣄ !5 wࣄۀձ༷͚ࣾͷϞόΠϧΞϓϦʢJ04 "OESPJEʣͱͦͷόοΫΤϯυγεςϜ ʢ"84ʣΛ։ൃ w্هΛߦ͏͜ͱͰ͓٬༷ͷࣄۀɾϏδωεʹ ߩݙ͢Δɻ
͜ΜͳΞϓϦ࡞ͬͯ·͢ !6
͜ΜͳΞϓϦ࡞ͬͯ·͢ !7
͜ΜͳΞϓϦ࡞ͬͯ·͢ !8
Ҋ݅ͷ༰ɾن༷ʑ !9 w࠷ۙҎ্ͷൺֱతنͷେ͖ͳҊ͕݅ ૿͖͑ͯͨˠνʔϜ։ൃˠͭ·ΓνʔϜ֎ Θͣίϛϡχέʔγϣϯ͕ͱͯେࣄ wΞϓϦ͚ͩͷҊ݅͋Γ·͢ wҊ݅ʹґΒͣɺ͓٬༷ʹຬ͍ͯͨͩ͘͜͠ ͱ͕େࣄ
J04ΤϯδχΞͷࣄ !10
ྫ͑͜Μͳ͜ͱ !11 w͓٬༷ઌʹ๚ͯ͠ཁٻͷώΞϦϯά wٕज़తͳ؍͔Βཁ݅ఆٛʹࢀՃ wJ04ΤϯδχΞͷ؍͔ΒΞϓϦΛઃܭ w࣮ͪΖΜςετ w"OESPJEΤϯδχΞσβΠφʔαʔόʔαΠυΤϯδ χΞͱͷڠۀ
J04ΤϯδχΞͷ ؍͕େࣄ !12
J04ΤϯδχΞͷ؍ͱʁ !13 wJ04͔Β͜͏ͳΓ·͢Αʁ͜Μͳ͜ͱͰ͖ ·͢Αʁ wͦͷΓํ͏ݹ͍Ͱ͢Αʁ wࠓ͑Δ͚ͲඇਪʹͳΔͷͰผͷํ๏ߟ ͑ͳ͖ΌͰ͢Αʁ
ࣄΛ͢Δ্Ͱ ৺͕͚͍ͯΔ͜ͱ !14
ීஈ৺͕͚͍ͯΔ͜ͱ !15 w࣮ݱ͢Δํ๏͕ෳ͋Δ߹ͦΕͧΕͷϝ ϦοτσϝϦοτΛग़͓ͯ͠٬༷ʹબΜͰΒ ͏ʢͦͷ࣌ͪ͜ΒͷΦεεϝ999Ͱ͢Αͱ ͑Δʣ wʮ͜ΕͬͯͰ͖Δͷʁʯͬͯฉ͔Εͨ࣌ʹɺͰ ͖ΔͰ͖ͳ͍͚ͩ͡Όͳ͘ɺ࣮ݱ͢ΔͨΊͷલ ఏඞཁͳใɺײΛ͑Δ
ҭࣇͱΫϥεϝιου !16
உੑͷҭٳऔಘˋ !17 wˋͬͯݴ͏ͱӕͬΆ͘ฉ͑͜Δ͚ͲϚδ Ͱ͢ wࢲҭٳऔΓ·ͨ͠ʢϲ݄͚ؒͩͬͨͲɺͬ ͱऔΕΑ͔ͬͨʣ wपΓͷਓੵۃతʹҭࣇͯ͠·͢
͜Μͳ࣌ʹɺ͋͊Ϋϥεϝιου ͰΑ͔ͬͨͳ͊ͱࢥ͏ !18 wࢠڙ͕ٸʹΛग़͕ܴͯࣗ͑͠ʹߦ͔ͳ͘ ͯͳΒͳ͘ͳͬͨ wޕલதग़ࣾͯ͠ޕޙՈͰϦϞʔτϫʔΫ͢ ΔɺͳͲॊೈͳۈ͕Մೳ wݸਓͷ༧ఆͱࣄͷ༧ఆͷ߹͕͚͍ͭ͢
ΫϥεϝιουͷจԽ !19
ϒϩάʢ%FWFMPQFST*0ʣ !20
%FWFMPQFST*0ͱʁ !21 wࣾһ͕͍ͭͰ͖ͳ࣌ʹΞτϓοτͰ͖ Δ wϊϧϚͳ͍ wॻ͖͍ͨ࣌ʹॻ͖͍ͨ༰Λॻ͖͍ͨΑ͏ʹ ॻ͘
ϦϞʔτϫʔΫ !22
ϦϞʔτϫʔΫ !23 w௨ۈ࣌ؒͷɺࣄ͕Ͱ͖Δ wઇͷͳͲަ௨ػ͕ؔ͑ͳ͍߹ಛʹخ͍͠ wࣄ͕ऴΘͬͨΒ͙͢ʹՈͷࣄ͕Ͱ͖Δ w੍ͱͯ͠ϦϞʔτϫʔΫ͕͋ΔͷૉΒ͍͠ wͨͩ͠Ξτϓοτ͕͋Δ͜ͱ͕લఏ
Πϕϯτɾษڧձ !24
Πϕϯτɾษڧձ !25 wۀ࣌ؒதͰϒϩάΛॻ͚ ษڧձΠϕϯτʹߦ͚Δ wւ֎ΧϯϑΝϨϯεʹߦ͚Δ✈ wࠓ88%$ʹॳΊͯߦ͖·ͨ͠ʂ wνέοτɺߤඅɺϗςϧશ ֹձࣾෛ୲
!26
!27
!28
!29
!30
!31
!32
!33
ॳΊͯͷ88%$ !34 wJ04ΤϯδχΞͳͷͰճߦͬͯΈ͔ͨͬͨ wηογϣϯΛத৺ʹա͕ͨ͝͠໘ന͔ͬͨ w"QQMFͷΤϯδχΞʹ࣭Ͱ͖ΔϥϘʹ ػձ͕͋ΕߦͬͯΈ͍ͨ wߦ͔ͤͯ͘Εͨձࣾʹײँ
ࠓͨ͘͞Μͷ Ξοϓσʔτ͕͋Γ·ͨ͠ !35 w"3,JU w$PSF.- w/FUXPSL'SBNFXPSL w/BUVSBM-BOHVBHF w4JSJ4IPSUDVUT w"VUIFOUJDBUJPO4FSWJDFT wͳͲͳͲ
ࠓͨ͘͞Μͷ Ξοϓσʔτ͕͋Γ·ͨ͠ !36 w"3,JU w$PSF.- w/FUXPSL'SBNFXPSL w/BUVSBM-BOHVBHF w4JSJ4IPSUDVUT w"VUIFOUJDBUJPO4FSWJDFT wͳͲͳͲ
͓அΓ !37 w/%"ʹྀ͠ɺ9DPEFը໘ͷεΫϦʔϯ γϣοτࡌ͍ͤͯ·ͤΜ wJ04ϕʔλ൛Ͱͷಈ࡞֬ೝ݁ՌͳͷͰɺਖ਼ ࣜϦϦʔε࣌ʹڍಈ͕มΘΔՄೳੑ͕͋Γ ·͢
4JSJ4IPSUDVUTͱʁ !38 wϢʔβʔ͕ҰߦͳͬͨॲཧΛγεςϜʹొ w4JSJ͕Λֶशͯ͠εϙοτϥΠτݕࡧɺϩο ΫεΫϦʔϯͳͲʹαδΣετ w4JSJʹΑΔͰಛఆͷૢ࡞Λ࣮ߦ wಠࣗͷىಈϑϨʔζΛొ͢Δ͜ͱՄೳ
͜Ε·Ͱͷ4JSJ,JUͱԿ͕ҧ͏ͷʁ !39 w͜Ε·Ͱ4JSJͰ࣮ߦͰ͖Δૢ࡞͕ݶΒΕ͍ͯ ͨʢFY-JTUTBOE/PUFTυϝΠϯͰϝϞΛ࡞ ͢Δ*OUFOUͳͲʣ w4JSJ4IPSUDVUTͰΧελϜ*OUFOUͷ࡞ɺ طଘ*OUFOUͷΧελϚΠζ͕Մೳɺͭ·Γ4JSJ ͕༗ޮʹ͑Δγʔϯ͕૿͑ΔՄೳੑ͕͋Δ
4IPSUDVUTͷ"1*छྨ͋Δ !40 w/46TFS"DUJWJUZ w*OUFOUT
/46TFS"DUJWJUZ !41 wΞϓϦΛىಈͯ͠Կ͔Λදࣔ͢Δ߹ wطʹ)BOEP⒎ͳͲͰ͍ͬͯΔ߹Έࠐ Έ͍͢ w*OUFOUTʹൺ࣮͕͍ͯܰ
*OUFOUT !42 wΞϓϦΛىಈ͢Δ͜ͱͳ͘ॲཧΛ࣮ߦͰ͖Δ wͷϨεϙϯεͷΧελϚΠζɺΧελϜ6* ͷఏڙ͕Մೳ wϢʔβʔମݧతʹϦονͳͷ͕࡞Մೳ
*OUFOUT !43 wΞϓϦΛىಈ͢Δ͜ͱͳ͘ॲཧΛ࣮ߦͰ͖Δ wͷϨεϙϯεͷΧελϚΠζɺΧελϜ6* ͷఏڙ͕Մೳ wϢʔβʔମݧతʹϦονͳͷ͕࡞Մೳ
4IPSUDVUTͷ"1*छྨ͋Δ !44 w/46TFS"DUJWJUZ w*OUFOUT
࠷খͷ࣮ํ๏ ʢԿ͔ҙͷॲཧΛߦ͏ *OUFOUTʣ !45
*OUFOUT&YUFOTJPOΛՃ !46 w9DPEFͰϓϩδΣΫτϑΝΠϧΛબ͠ɺ 5"3(&54ͷࠨԼͷ ϘλϯΛΫϦοΫ͠ɺ *OUFOUT&YUFOTJPOΛՃ wΧελϜ6*Λද͍ࣔͨ͠߹ʮ*ODMVEF6* &YUFOTJPOʯʹνΣοΫ͢Δ
γϣʔτΧοτʢ*OUFOUʣΛఆٛ !47 wJOUFOUEFpOJUJPOϑΝΠϧΛ։͘ͱ࠷ॳԿ ͳ͍ۭͷঢ়ଶ wը໘ࠨԼͷ ϘλϯΛΫϦοΫͯ͠ʮ/FX *OUFOUʯΛબ
$VTUPN*OUFOU !48 w$BUFHPSZʢ֘͢ΔΧςΰϦΛબɻFYྉ ཧΛจ͢Δ4IPSUDVUͷ߹ʮ0SEFSʯΛ બʣ wࠓճʮ%PʯΛબ
$VTUPN*OUFOU !49 w5JUMF w%FTDSJQUJPO w%FGBVMU*NBHF w$POpSNBUJPOͷ6TFSDPOpSNBUJPOSFRVJSFEνΣοΫϘο Ϋεʢ࣮ߦ͢ΔલʹϢʔβʔͷ֬ೝΛߦ͏͔Ͳ͏͔ɻྫ͑ ྉཧΛจ͢Δ߹ͳͲνΣοΫΛ͚ͭͯ֬ೝ͢Δ ͖ʣ
1BSBNFUFST !50 w*OUFOUͷॲཧ͕ඞཁͱ͢ΔύϥϝʔλʔΛఆ ٛ wύϥϝʔλʔͷ໊લͱܕΛఆٛ wࠓճUBTL/BNFͱ͍͏4USJOHύϥϝʔλʔ Λͭఆٛ
4IPSUDVU5ZQFT !51 w1BSBNFUFSTͰఆٛͨ͠ύϥϝʔλʔΛΈ߹Θͤͯ ࡞͢Δ4IPSUDVUʢ4JSJͷϦΫΤετʣͷύλʔϯ wࠓճ5JUMFΛʮ%P\UBTL/BNF^ʯͱఆٛ w#BDLHSPVOEͷ4VQQPSUTCBDLHSPVOEFYFDVUJPOͷ νΣοΫϘοΫεʢόοΫάϥϯυ࣮ߦ͢Δ͔Ͳ͏ ͔ͷઃఆʣ
3FTQPOTFΛఆٛ !52 w4IPSUDVUΛ࣮ߦͨ݁͠Ռʢ4JSJ͔ΒͷϨεϙ ϯεʣͷܗࣜΛఆٛ w1SPQFSUJFTͰ1BSBNFUFSTͱಉ͡Α͏ʹϓϩ ύςΟͷ໊લͱܕΛఆٛ wࠓճ1BSBNFUFSTͱಉ༷ɺUBTL/BNFͱ͍͏ 4USJOHϓϩύςΟΛͭఆٛ
3FTQPOTFΛఆٛ !53 w3FTQPOTF5FNQMBUFT w4IPSUDVUͷ࣮ߦ݁ՌΛϢʔβʔʹ͑Δࡍͷϝοηʔ δςϯϓϨʔτΛఆٛ w$PEFʢॲཧޭࣦഊΛද͢ʣͱϝοηʔδΛఆٛ wࠓճ$PEF͕TVDDFTTͷ5FNQMBUFʹɺఆٛͨ͠ϓ ϩύςΟΛ͍ɺ*WFpOJTIFE\UBTL/BNF^ͱఆٛ
JOUFOUEFpOJUJPOϑΝΠϧ͔Β ίʔυ͕ࣗಈੜ !54 wϏϧυ͢ΔͱରԠ͢ΔΫϥε͕ࣗಈੜ͞Ε Δ
͜͜·Ͱ͕ 4IPSUDVUͷఆٛ !55
γϣʔτΧοτΛఏڙ !56 wࣗಈੜͨ͠ΫϥεΛͬͯγϣʔτΧοτΛγεςϜʹରͯ͠ఏڙ͢Δ w%P4PNFUIJOH*OUFOU͕JOUFOUEFpOJUJPOϑΝΠϧ͔Βࣗಈੜͨ͠*OUFOUΛද͢Ϋϥε w*OUFOUΛ࡞ͯ͠ඞཁใΛηοτͨ͠Βɺ*/*OUFSBDUJPOΛ࡞ͯ͠EPOBUF͢Δ͚ͩ let intent = DoSomethingIntent() intent.taskName
= "a certain task" let interaction = INInteraction(intent: intent, response: nil) interaction.donate { error in // handler error }
γϣʔτΧοτΛϋϯυϧ !57 wࣗಈੜͨ͠ΫϥεΛͬͯγϣʔτΧοτΛγεςϜʹରͯ͠ఏڙ͢Δ w*/&YUFOTJPOΛܧঝͨ͠ΫϥεͰIBOEMFS GPS ϝιουΛΦʔόʔϥΠυ wΠϯςϯτͷछྨʹԠͯ͡దͳϋϯυϥʔΦϒδΣΫτΛฦ͢ॲཧΛ͍ͯ͠Δ class IntentHandler: INExtension
{ override func handler(for intent: INIntent) -> Any? { switch intent { case is DoSomethingIntent: return DoSomethingIntentHandler() default: return nil } } }
γϣʔτΧοτΛϋϯυϧ !58 w࣮ࡍʹΠϯςϯτΛϋϯυϧ͢ΔΫϥεΛ࣮ w%P4PNFUIJOH*OUFOU)BOEMJOHࣗಈੜͨ͠ϓϩτίϧ wDPOpSN JOUFOUDPNQMFUJPO ϝιου͕ఆٛ͞Ε͍ͯ·͕ͨ͠ɺͪ͜Βͷ࣮ҙ wΠϯςϯτͷछྨʹԠͯ͡దͳϋϯυϥʔΦϒδΣΫτΛฦ͢ॲཧΛ͍ͯ͠Δ class DoSomethingIntentHandler:
NSObject, DoSomethingIntentHandling { func handle(intent: DoSomethingIntent, completion: @escaping (DoSomethingIntentResponse) -> Void) { guard let taskName = intent.taskName else { completion(DoSomethingIntentResponse(code: .failure, userActivity: nil)) return } // do something. let response = DoSomethingIntentResponse.success(taskName: taskName) completion(response) } }
͜͜·Ͱग़དྷΔͱʁ !59 wΞϓϦΛಈ͔ͯ͠ɺγϣʔτΧοτΛEPOBUF ͢ΔͱɺઃఆΞϓϦͷγϣʔτΧοτҰཡʹ දࣔ͞ΕΔ wಠࣗͷىಈϑϨʔζΛԻՄೳ
4JSJ4IPSUDVUT ͬͯΈ͍ͯͩ͘͞ !60
·ͱΊ !61
·ͱΊ !62 wΫϥεϝιουͷϞόΠϧΞϓϦαʔϏε෦Ͱ༷ʑͳҊ݅ɾࣄ͕ Ͱ͖·͢☺ wϒϩάॻ͖͍ͨਓɺษڧձʹొஃ͍ͨ͠ਓɺւ֎Πϕϯτߦ͖͍ͨਓɺ ߦ͚·͢Α wϦϞʔτϫʔΫͳͲɺ੍͏·͘׆༻͠Α͏ wࢠҭ͍ͯ͢͠Α w4JSJ4IPSUDVUTָ͍͠Α
5IBOLTʂ !63