Build Configuration による機能出し分けを型定義の力を借りて実現していく

F96c86f99fc0bdb82ec3289768ec5b95?s=47 Minami Baba
September 20, 2020

Build Configuration による機能出し分けを型定義の力を借りて実現していく

iOSDC Japan 2020 2020/09/21 10:50〜 Track D レギュラートーク(20分)
https://fortee.jp/iosdc-japan-2020/proposal/94728417-2462-49d8-8de9-93e2270b7344

F96c86f99fc0bdb82ec3289768ec5b95?s=128

Minami Baba

September 20, 2020
Tweet

Transcript

  1. גࣜձࣾσΟʔɾΤψɾΤʔ খྛ ೆ࣮ Build ConfigurationʹΑΔ ػೳग़͠෼͚Λ ܕఆٛͷྗΛआΓ࣮ͯݱ͍ͯ͘͠ iOSDC Japan 2020

    - day2
  2. ͍·΍͍ͬͯΔ͜ͱ w DeNAൃͷϑΝϯυʹͯ৽نࣄۀ্ཱͪ͛ w ελʔτΞοϓ౤ࢿ΍ࣾ಺͔ΒͷىۀࢧԉΛߦ͍ͬͯΔ w ΦϯϥΠϯϑΟοτωεαʔϏεʮ8'JUOFTTʯ w ϓϩʹΑΔϘσΟϝΠΫࢦಋΛεϚϗͰड͚Δ͜ͱ͕ग़དྷΔ

  3. ň8'JUOFTTʼnͷγεςϜతಛ௃ w ͭͷΞϓϦ͔Β੒Γཱ͍ͬͯΔ w ʮ͓٬༷ΞϓϦʯͱʮτϨʔφʔΞϓϦʯ w ڞ௨͢Δػೳ͕ଟ͘ଘࡏ͢Δ w ͍͔ͭ͘ͷػೳࠩ෼΋͋Δ w

    ҰͭͷϦϙδτϦ্Ͱ։ൃ w ඞཁʹԠͯ͡ػೳΛग़͠෼͚͍ͯ͘ํ਑ w ॲཧͷڞ௨Խ͸͠΍͍͕͢ɺ࣮૷͕ෳࡶʹͳΓ΍͍͢ ϩάΠϯ ϥΠϑϩάӾཡ νϟοτ ϥΠϑϩά ه࿥ ΞυόΠε ࡞੒ ઃఆը໘ ͓٬༷ΞϓϦ τϨʔφʔΞϓϦ ͍͔ʹͯ͠ػೳग़͠෼͚Λ ࣮૷͍͔ͯ͘͠
  4. ʲࣄલ஌ࣝʳ ҰͭͷϦϙδτϦʹͯ ෳ਺ΞϓϦΛ։ൃ͢Δํ๏

  5. ҰͭͷϦϙδτϦʹͯෳ਺ΞϓϦΛ։ൃ ᶃBuild Configurations Λෳ਺࡞੒ w ConfigurationΛ௥Ճ͠Ϗϧυ࣌ʹબ୒ w ConfigurationຖʹΞϓϦ໊ͳͲΛࢦఆ ᶄOther Swift

    FlagsͰ࣮૷ग़͠෼͚ w ConfigurationຖʹFlagΛઃఆ w ͜ͷFlagΛ༻͍࣮ͯ૷Λग़͠෼͚Δ Configurations ઃఆ Ϗϧυ࣌ͷબ୒ ࡞੒׬ྃʂ Other Swift Flags ઃఆ ࣮૷ͷग़͠෼͚
  6. ʲຊ୊ʳ ػೳग़͠෼͚Λ Ͳ͏࣮૷͍͔ͯ͘͠

  7. αϯϓϧΞϓϦ w l॓୊؅ཧΞϓϦ w ʮੜె޲͚ΞϓϦʯͱʮઌੜ޲͚ΞϓϦʯ w IUUQTHJUIVCDPNNJOBNJJ04%$4BNQMF ઌੜΞϓϦ ੜెΞϓϦ ઌੜΞϓϦ

    ઌੜΞϓϦ ڞ௨
  8. ػೳग़͠෼͚ᶃ ϩάΠϯޙʹදࣔ͞ΕΔը໘ ੜెΞϓϦ ઌੜΞϓϦ

  9. ํ਑ᶃ'MBHͰը໘Λग़͠෼͚ Ϙλϯ͕ԡ͞ΕͨΒ ϩάΠϯ"1*Λݺͼग़͢ λϒόʔΛ༻͍ͯ ը໘Λදࣔ 'MBHΛ༻͍ͯදࣔ͢Δ ը໘Λग़͠෼͚Δ ϩάΠϯˠϩάΠϯ׬ྃޙͷॲཧ

  10. ํ਑ᶃ'MBHͰը໘Λग़͠෼͚ Ϙλϯ͕ԡ͞ΕͨΒ ϩάΠϯ"1*Λݺͼग़͢ λϒόʔΛ༻͍ͯ ը໘Λදࣔ 'MBHΛ༻͍ͯදࣔ͢Δ ը໘Λग़͠෼͚Δ ੜెҰཡը໘ ޡ࣮ͬͨ૷Λͨ͠৔߹Ͱ΋ ͦͷ͜ͱʹؾ͖ͮʹ͍͘

    ໰୊ͳ͘දࣔ͞ΕΔ ϩάΠϯˠϩάΠϯ׬ྃޙͷॲཧ
  11. ํ਑ᶄෆ۩߹ΛΫϥογϡͰදݱ ΫϥογϡʹΑͬͯ ࣮ߦ࣌ʹؾ͖ͮ΍͍͢ ੜెΞϓϦͰը໘͕ දࣔ͞Εͨ৔߹ʹ Ϋϥογϡ͢ΔΑ͏ʹ ޡ࣮ͬͨ૷Λͨ͠৔߹ ࣮ߦ࣌·Ͱؾ෇͘͜ͱ͕ग़དྷͳ͍ ੜెҰཡը໘͕දࣔ͞ΕΔࡍͷॲཧ

  12. ํ਑ᶅෆ۩߹ΛܕνΣοΫͰ๷͙ ܕఆٛ ੜెҰཡը໘Λੜ੒͢Δॲཧ ΞΧ΢ϯτछผΛ දݱ͢ΔͨΊͷܕΛఆٛ ը໘Λੜ੒͢Δࡍʹ 5FBDIFS"DDPVOUܕΛ Ҿ਺ͱͯ͠ٻΊΔ ϩάΠϯ"1*ݺͼग़࣌͠ͷॲཧ ϩάΠϯ׬ྃ࣌ʹ

    ฦ͢ܕΛग़͠෼͚Δ ࠓ೔఻͍͑ͨ͜ͱ
  13. ϩάΠϯ׬ྃ࣌ʹ ΞΧ΢ϯτछผʹԠͨ͡ "DDPVOUܕΛड͚औΔ Ωϟετ͞Εͨ 5FBDIFS"DDPVOUܕͰ ը໘Λੜ੒ ϩάΠϯˠϩάΠϯ׬ྃޙͷॲཧ DVSSFOU"DDPVOUΛ TXJUDIจͰܕνΣοΫ ํ਑ᶅෆ۩߹ΛܕνΣοΫͰ๷͙

  14. ϩάΠϯ׬ྃ࣌ʹ ΞΧ΢ϯτछผʹԠͨ͡ "DDPVOUܕΛड͚औΔ DVSSFOU"DDPVOUΛ TXJUDIจͰܕνΣοΫ Ωϟετ͞Εͨ 5FBDIFS"DDPVOUܕͰ ը໘Λੜ੒ ίϯύΠϧΤϥʔ ޡ࣮ͬͨ૷Λͨ͠৔߹

    ίϯύΠϧΤϥʔʹͳΔ ϩάΠϯˠϩάΠϯ׬ྃޙͷॲཧ ํ਑ᶅෆ۩߹ΛܕνΣοΫͰ๷͙
  15. ػೳग़͠෼͚Λ ܕఆٛͷྗΛआΓͯ ҆શʹ࣮ݱʂ

  16. ػೳग़͠෼͚ᶄ ॓୊࡞੒͸ઌੜ͔͠ߦ͑ͳ͍ ઌੜΞϓϦ ੜెΞϓϦ ઌੜΞϓϦ

  17. ݱঢ়ͷ࣮૷ᶃ॓୊࡞੒ը໘ͷݺͼग़͠ ॓୊࡞੒ը໘΁ભҠ͢ΔϘλϯͷॲཧ ॓୊࡞੒ը໘΁ͷಋઢ͸ ੜెΞϓϦͰ͸ ඇදࣔʹͳΔΑ͏ʹ Ϙλϯ͕ԡ͞ΕͨΒ ॓୊࡞੒ը໘Λදࣔ

  18. ݱঢ়ͷ࣮૷ᶃ॓୊࡞੒ը໘ͷݺͼग़͠ ॓୊࡞੒ը໘΁ͷಋઢ͸ ੜెΞϓϦͰ͸ ඇදࣔʹͳΔΑ͏ʹ Ϙλϯ͕ԡ͞ΕͨΒ ॓୊࡞੒ը໘Λදࣔ ॓୊࡞੒ը໘΁ભҠ͢ΔϘλϯͷॲཧ ޡ࣮ͬͨ૷Λͨ͠৔߹ ࣮ߦ࣌·Ͱؾ෇͘͜ͱ͕ग़དྷͳ͍

  19. ݱঢ়ͷ࣮૷ᶄ॓୊࡞੒"1*ͷݺͼग़͠ อଘϘλϯ͕ԡ͞ΕͨΒ ॓୊࡞੒"1*Λݺͼग़͢ ॓୊࡞੒Λอଘ͢ΔϘλϯͷॲཧ ޡ࣮ͬͨ૷Λͨ͠৔߹ ࣮ߦ࣌·Ͱؾ෇͘͜ͱ͕ग़དྷͳ͍

  20. վળᶃ"1*ͷݺͼग़͠ઌ "1*Λݺͼग़͢ࡍʹ 5FBDIFS"DDPVOUܕΛ Ҿ਺ͱͯ͠ٻΊΔ ʮ࣍͸Ͳ͜Λमਖ਼͍ͯ͜͠͏ɾɾɾʯ ։ൃͷਐΊํʹ໎͍͕ੜ͡Δ ॓୊࡞੒"1*Λݺͼग़͢ϝιου

  21. "1*ͷݺͼग़͠ݩʹͯΤϥʔൃੜ ॓୊࡞੒"1*Λ ݺͼग़͍ͯ͠Δ෦෼ʹͯ Τϥʔൃੜ ࣍ʹमਖ਼͢΂͖෦෼Λ ίϯύΠϧΤϥʔ͕ڭ͑ͯ͘ΕΔ ॓୊࡞੒Λอଘ͢ΔϘλϯͷॲཧ

  22. ॓୊࡞੒Λอଘ͢ΔϘλϯͷॲཧ վળᶄ"1*ͷݺͼग़͠ݩ Τϥʔ͕ফ͑ΔΑ͏ʹ DVSSFOU"DDPVOUΛ ౉ͯ͋͛͠Δ ॓୊࡞੒ը໘Λੜ੒͢Δॲཧ ͦͷͨΊʹ͸ը໘ʹ DVSSFOU"DDPVOUΛ ౉͢ඞཁ͕͋Δ

  23. ը໘ݺͼग़͠ݩʹͯΤϥʔൃੜ ॓୊࡞੒ը໘Λ ݺͼग़͍ͯ͠Δ෦෼ʹͯ Τϥʔൃੜ ࣍ʹमਖ਼͢΂͖෦෼Λ ίϯύΠϧΤϥʔ͕ڭ͑ͯ͘ΕΔ ॓୊࡞੒ը໘΁ભҠ͢ΔϘλϯͷॲཧ

  24. ػೳग़͠෼͚Λ ܕఆٛͷྗΛआΓͯ ҆શʹޮ཰తʹ࣮ݱʂ