Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Working as an iOS Developer at Classmethod

B1ff34ce71b6f15fc9ee0361aedffa66?s=47 Kato Jun
August 14, 2018

Working as an iOS Developer at Classmethod

B1ff34ce71b6f15fc9ee0361aedffa66?s=128

Kato Jun

August 14, 2018
Tweet

More Decks by Kato Jun

Other Decks in Programming

Transcript

  1. 8PSLJOHBTBO J04%FWFMPQFS BU$MBTTNFUIPE ,BUP+VO 1

  2. "CPVUNF !2 wՃ౻५ wϞόΠϧΞϓϦαʔϏε෦ wJ04ΤϯδχΞ w$.ೖͬͯ೥൒ڧ wࡀʢࡀͷ່͕͍·͢ʣ

  3. "HFOEB !3 wϞόΠϧΞϓϦαʔϏε෦ʹ͍ͭͯ wJ04ΤϯδχΞͷ࢓ࣄ wҭࣇͱΫϥεϝιου wΫϥεϝιουͷจԽ w88%$Ͱൃද͞ΕͨؾʹͳΔ৽ػೳ

  4. ϞόΠϧΞϓϦαʔϏε෦ ʢϓϦαʔʣͱ͸ʁ !4

  5. ϓϦαʔͷ͓࢓ࣄ !5 wࣄۀձ༷ࣾ޲͚ͷϞόΠϧΞϓϦʢJ04 "OESPJEʣͱͦͷόοΫΤϯυγεςϜ ʢ"84ʣΛ։ൃ w্هΛߦ͏͜ͱͰ͓٬༷ͷࣄۀɾϏδωεʹ ߩݙ͢Δɻ

  6. ͜ΜͳΞϓϦ࡞ͬͯ·͢ !6

  7. ͜ΜͳΞϓϦ࡞ͬͯ·͢ !7

  8. ͜ΜͳΞϓϦ࡞ͬͯ·͢ !8

  9. Ҋ݅ͷ಺༰ɾن໛΋༷ʑ !9 w࠷ۙ͸൒೥Ҏ্ͷൺֱతن໛ͷେ͖ͳҊ͕݅ ૿͖͑ͯͨˠνʔϜ։ൃˠͭ·ΓνʔϜ಺֎ ໰Θͣίϛϡχέʔγϣϯ͕ͱͯ΋େࣄ wΞϓϦ͚ͩͷҊ݅΋͋Γ·͢ wҊ݅ʹґΒͣɺ͓٬༷ʹຬ଍͍ͯͨͩ͘͜͠ ͱ͕େࣄ

  10. J04ΤϯδχΞͷ࢓ࣄ !10

  11. ྫ͑͹͜Μͳ͜ͱ !11 w͓٬༷ઌʹ๚໰ͯ͠ཁٻͷώΞϦϯά wٕज़తͳ؍఺͔Βཁ݅ఆٛʹࢀՃ wJ04ΤϯδχΞͷ؍఺͔ΒΞϓϦΛઃܭ w࣮૷͸΋ͪΖΜςετ΋ w"OESPJEΤϯδχΞσβΠφʔαʔόʔαΠυΤϯδ χΞͱͷڠۀ

  12. J04ΤϯδχΞͷ ؍఺͕େࣄ !12

  13. J04ΤϯδχΞͷ؍఺ͱ͸ʁ !13 wJ04͔Β͜͏ͳΓ·͢Αʁ͜Μͳ͜ͱͰ͖ ·͢Αʁ wͦͷ΍Γํ͸΋͏ݹ͍Ͱ͢Αʁ wࠓ͸࢖͑Δ͚Ͳඇਪ঑ʹͳΔͷͰผͷํ๏ߟ ͑ͳ͖ΌͰ͢Αʁ

  14. ࢓ࣄΛ͢Δ্Ͱ ৺͕͚͍ͯΔ͜ͱ !14

  15. ීஈ৺͕͚͍ͯΔ͜ͱ !15 w࣮ݱ͢Δํ๏͕ෳ਺͋Δ৔߹͸ͦΕͧΕͷϝ ϦοτσϝϦοτΛग़͓ͯ͠٬༷ʹબΜͰ΋Β ͏ʢͦͷ࣌ͪ͜ΒͷΦεεϝ͸999Ͱ͢Αͱ఻ ͑Δʣ wʮ͜ΕͬͯͰ͖Δͷʁʯͬͯฉ͔Εͨ࣌ʹɺͰ ͖ΔͰ͖ͳ͍͚ͩ͡Όͳ͘ɺ࣮ݱ͢ΔͨΊͷલ ఏ΍ඞཁͳ৘ใɺ޻਺ײΛ఻͑Δ

  16. ҭࣇͱΫϥεϝιου !16

  17. உੑͷҭٳऔಘ཰ˋ !17 wˋͬͯݴ͏ͱӕͬΆ͘ฉ͑͜Δ͚ͲϚδ Ͱ͢ wࢲ΋ҭٳऔΓ·ͨ͠ʢϲ݄͚ؒͩͬͨͲɺ΋ͬ ͱऔΕ͹Α͔ͬͨʣ wपΓͷਓ΋ੵۃతʹҭࣇͯ͠·͢

  18. ͜Μͳ࣌ʹɺ͋͊Ϋϥεϝιου ͰΑ͔ͬͨͳ͊ͱࢥ͏ !18 wࢠڙ͕ٸʹ೤Λग़ͯࣗ͠෼͕ܴ͑ʹߦ͔ͳ͘ ͯ͸ͳΒͳ͘ͳͬͨ wޕલதग़ࣾͯ͠ޕޙ͸ՈͰϦϞʔτϫʔΫ͢ ΔɺͳͲॊೈͳۈ຿͕Մೳ wݸਓͷ༧ఆͱ࢓ࣄͷ༧ఆͷ౎߹͕͚ͭ΍͍͢

  19. ΫϥεϝιουͷจԽ !19

  20. ϒϩάʢ%FWFMPQFST*0ʣ !20

  21. %FWFMPQFST*0ͱ͸ʁ !21 wࣾһ͕͍ͭͰ΋޷͖ͳ࣌ʹΞ΢τϓοτͰ͖ Δ৔ wϊϧϚ͸ͳ͍ wॻ͖͍ͨ࣌ʹॻ͖͍ͨ಺༰Λॻ͖͍ͨΑ͏ʹ ॻ͘

  22. ϦϞʔτϫʔΫ !22

  23. ϦϞʔτϫʔΫ !23 w௨ۈ࣌ؒͷ෼ɺ࢓ࣄ͕Ͱ͖Δ wઇͷ೔ͳͲަ௨ػ͕ؔ࢖͑ͳ͍৔߹͸ಛʹخ͍͠ w࢓ࣄ͕ऴΘͬͨΒ͙͢ʹՈͷࣄ͕Ͱ͖Δ w੍౓ͱͯ͠ϦϞʔτϫʔΫ͕͋Δͷ͸ૉ੖Β͍͠ wͨͩ͠Ξ΢τϓοτ͕͋Δ͜ͱ͕લఏ

  24. Πϕϯτɾษڧձ !24

  25. Πϕϯτɾษڧձ !25 wۀ຿࣌ؒதͰ΋ϒϩάΛॻ͚͹ ษڧձ΍Πϕϯτʹߦ͚Δ wւ֎ΧϯϑΝϨϯεʹ΋ߦ͚Δ✈ wࠓ೥88%$ʹॳΊͯߦ͖·ͨ͠ʂ  wνέοτ୅ɺ౉ߤඅɺϗςϧ୅શ ֹձࣾෛ୲

  26. !26

  27. !27

  28. !28

  29. !29

  30. !30

  31. !31

  32. !32

  33. !33

  34. ॳΊͯͷ88%$ !34 wJ04ΤϯδχΞͳͷͰճ͸ߦͬͯΈ͔ͨͬͨ wηογϣϯΛத৺ʹա͕ͨ͝͠໘ന͔ͬͨ w"QQMFͷΤϯδχΞʹ௚઀࣭໰Ͱ͖ΔϥϘʹ ͸ػձ͕͋Ε͹ߦͬͯΈ͍ͨ wߦ͔ͤͯ͘Εͨձࣾʹײँ

  35. ࠓ೥΋ͨ͘͞Μͷ Ξοϓσʔτ͕͋Γ·ͨ͠ !35 w"3,JU w$PSF.- w/FUXPSL'SBNFXPSL w/BUVSBM-BOHVBHF w4JSJ4IPSUDVUT w"VUIFOUJDBUJPO4FSWJDFT wͳͲͳͲ

  36. ࠓ೥΋ͨ͘͞Μͷ Ξοϓσʔτ͕͋Γ·ͨ͠ !36 w"3,JU w$PSF.- w/FUXPSL'SBNFXPSL w/BUVSBM-BOHVBHF w4JSJ4IPSUDVUT w"VUIFOUJDBUJPO4FSWJDFT wͳͲͳͲ

  37. ͓அΓ !37 w/%"ʹ഑ྀ͠ɺ9DPEF΍ը໘ͷεΫϦʔϯ γϣοτ͸ࡌ͍ͤͯ·ͤΜ wJ04ϕʔλ൛Ͱͷಈ࡞֬ೝ݁ՌͳͷͰɺਖ਼ ࣜϦϦʔε࣌ʹ͸ڍಈ͕มΘΔՄೳੑ͕͋Γ ·͢

  38. 4JSJ4IPSUDVUTͱ͸ʁ !38 wϢʔβʔ͕Ұ౓ߦͳͬͨॲཧΛγεςϜʹొ࿥ w4JSJ͕܏޲Λֶशͯ͠εϙοτϥΠτݕࡧɺϩο ΫεΫϦʔϯͳͲʹαδΣετ w4JSJʹΑΔ੠Ͱಛఆͷૢ࡞Λ࣮ߦ wಠࣗͷىಈϑϨʔζΛొ࿥͢Δ͜ͱ΋Մೳ

  39. ͜Ε·Ͱͷ4JSJ,JUͱ͸Կ͕ҧ͏ͷʁ !39 w͜Ε·Ͱ͸4JSJͰ࣮ߦͰ͖Δૢ࡞͕ݶΒΕ͍ͯ ͨʢFY-JTUTBOE/PUFTυϝΠϯͰϝϞΛ࡞ ੒͢Δ*OUFOUͳͲʣ w4JSJ4IPSUDVUTͰ͸ΧελϜ*OUFOUͷ࡞੒ɺ طଘ*OUFOUͷΧελϚΠζ͕Մೳɺͭ·Γ4JSJ ͕༗ޮʹ࢖͑Δγʔϯ͕૿͑ΔՄೳੑ͕͋Δ

  40. 4IPSUDVUTͷ"1*͸छྨ͋Δ !40 w/46TFS"DUJWJUZ w*OUFOUT

  41. /46TFS"DUJWJUZ !41 wΞϓϦΛىಈͯ͠Կ͔Λදࣔ͢Δ৔߹ wطʹ)BOEP⒎ͳͲͰ࢖͍ͬͯΔ৔߹͸૊Έࠐ Έ΍͍͢ w*OUFOUTʹൺ΂࣮ͯ૷͕͍ܰ

  42. *OUFOUT !42 wΞϓϦΛىಈ͢Δ͜ͱͳ͘ॲཧΛ࣮ߦͰ͖Δ w੠ͷϨεϙϯεͷΧελϚΠζɺΧελϜ6* ͷఏڙ͕Մೳ wϢʔβʔମݧతʹϦονͳ΋ͷ͕࡞੒Մೳ

  43. *OUFOUT !43 wΞϓϦΛىಈ͢Δ͜ͱͳ͘ॲཧΛ࣮ߦͰ͖Δ w੠ͷϨεϙϯεͷΧελϚΠζɺΧελϜ6* ͷఏڙ͕Մೳ wϢʔβʔମݧతʹϦονͳ΋ͷ͕࡞੒Մೳ

  44. 4IPSUDVUTͷ"1*͸छྨ͋Δ !44 w/46TFS"DUJWJUZ w*OUFOUT

  45. ࠷খͷ࣮૷ํ๏ ʢԿ͔೚ҙͷॲཧΛߦ͏ *OUFOUTʣ !45

  46. *OUFOUT&YUFOTJPOΛ௥Ճ !46 w9DPEFͰϓϩδΣΫτϑΝΠϧΛબ୒͠ɺ 5"3(&54ͷࠨԼͷ ϘλϯΛΫϦοΫ͠ɺ *OUFOUT&YUFOTJPOΛ௥Ճ wΧελϜ6*Λද͍ࣔͨ͠৔߹͸ʮ*ODMVEF6* &YUFOTJPOʯʹνΣοΫ͢Δ

  47. γϣʔτΧοτʢ*OUFOUʣΛఆٛ !47 wJOUFOUEFpOJUJPOϑΝΠϧΛ։͘ͱ࠷ॳ͸Կ΋ ͳ͍ۭͷঢ়ଶ wը໘ࠨԼͷ ϘλϯΛΫϦοΫͯ͠ʮ/FX *OUFOUʯΛબ୒

  48. $VTUPN*OUFOU !48 w$BUFHPSZʢ֘౰͢ΔΧςΰϦΛબ୒ɻFYྉ ཧΛ஫จ͢Δ4IPSUDVUͷ৔߹͸ʮ0SEFSʯΛ બ୒ʣ wࠓճ͸ʮ%PʯΛબ୒

  49. $VTUPN*OUFOU !49 w5JUMF w%FTDSJQUJPO w%FGBVMU*NBHF w$POpSNBUJPOͷ6TFSDPOpSNBUJPOSFRVJSFEνΣοΫϘο Ϋεʢ࣮ߦ͢ΔલʹϢʔβʔͷ֬ೝΛߦ͏͔Ͳ͏͔ɻྫ͑ ͹ྉཧΛ஫จ͢Δ৔߹ͳͲ͸νΣοΫΛ͚ͭͯ֬ೝ͢Δ΂ ͖ʣ

  50. 1BSBNFUFST !50 w*OUFOUͷॲཧ͕ඞཁͱ͢ΔύϥϝʔλʔΛఆ ٛ wύϥϝʔλʔͷ໊લͱܕΛఆٛ wࠓճ͸UBTL/BNFͱ͍͏4USJOHύϥϝʔλʔ Λͭఆٛ

  51. 4IPSUDVU5ZQFT !51 w1BSBNFUFSTͰఆٛͨ͠ύϥϝʔλʔΛ૊Έ߹Θͤͯ ࡞੒͢Δ4IPSUDVUʢ4JSJ΁ͷϦΫΤετʣͷύλʔϯ wࠓճ͸5JUMFΛʮ%P\UBTL/BNF^ʯͱఆٛ w#BDLHSPVOEͷ4VQQPSUTCBDLHSPVOEFYFDVUJPOͷ νΣοΫϘοΫεʢόοΫάϥ΢ϯυ࣮ߦ͢Δ͔Ͳ͏ ͔ͷઃఆʣ

  52. 3FTQPOTFΛఆٛ !52 w4IPSUDVUΛ࣮ߦͨ݁͠Ռʢ4JSJ͔ΒͷϨεϙ ϯεʣͷܗࣜΛఆٛ w1SPQFSUJFTͰ1BSBNFUFSTͱಉ͡Α͏ʹϓϩ ύςΟͷ໊લͱܕΛఆٛ wࠓճ͸1BSBNFUFSTͱಉ༷ɺUBTL/BNFͱ͍͏ 4USJOHϓϩύςΟΛͭఆٛ

  53. 3FTQPOTFΛఆٛ !53 w3FTQPOTF5FNQMBUFT w4IPSUDVUͷ࣮ߦ݁ՌΛϢʔβʔʹ఻͑Δࡍͷϝοηʔ δςϯϓϨʔτΛఆٛ w$PEFʢॲཧ੒ޭࣦഊΛද͢ʣͱϝοηʔδΛఆٛ wࠓճ͸$PEF͕TVDDFTTͷ5FNQMBUFʹɺఆٛͨ͠ϓ ϩύςΟΛ࢖͍ɺ*WFpOJTIFE\UBTL/BNF^ͱఆٛ

  54. JOUFOUEFpOJUJPOϑΝΠϧ͔Β ίʔυ͕ࣗಈੜ੒ !54 wϏϧυ͢ΔͱରԠ͢ΔΫϥε͕ࣗಈੜ੒͞Ε Δ

  55. ͜͜·Ͱ͕ 4IPSUDVUͷఆٛ !55

  56. γϣʔτΧοτΛఏڙ !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. γϣʔτΧοτΛϋϯυϧ !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. γϣʔτΧοτΛϋϯυϧ !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. ͜͜·Ͱग़དྷΔͱʁ !59 wΞϓϦΛಈ͔ͯ͠ɺγϣʔτΧοτΛEPOBUF ͢ΔͱɺઃఆΞϓϦͷγϣʔτΧοτҰཡʹ දࣔ͞ΕΔ wಠࣗͷىಈϑϨʔζΛ࿥ԻՄೳ

  60. 4JSJ4IPSUDVUT ࢖ͬͯΈ͍ͯͩ͘͞ !60

  61. ·ͱΊ !61

  62. ·ͱΊ !62 wΫϥεϝιουͷϞόΠϧΞϓϦαʔϏε෦Ͱ͸༷ʑͳҊ݅ɾ࢓ࣄ͕ Ͱ͖·͢☺ wϒϩάॻ͖͍ͨਓɺษڧձʹొஃ͍ͨ͠ਓɺւ֎Πϕϯτߦ͖͍ͨਓɺ ߦ͚·͢Α wϦϞʔτϫʔΫͳͲɺ੍౓͸͏·͘׆༻͠Α͏ wࢠҭͯ΋͠΍͍͢Α w4JSJ4IPSUDVUTָ͍͠Α

  63. 5IBOLTʂ !63