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

UITestを活用しまだまだ不安定なSwiftUIアプリを安定的に実務運用する / iOSDC 2021

nanashiki
September 18, 2021

UITestを活用しまだまだ不安定なSwiftUIアプリを安定的に実務運用する / iOSDC 2021

スタディサプリEnglishでは社内向けのiOSアプリをフルSwiftUIで1から開発し、去年の秋から約1年間運用しております。

ただSwiftUIはWWDC2019で登場してからまだ2年でOSのバージョンやXcode(iOS SDK)のバージョンによって挙動が大きく変わったり、Viewの書き方によって自分が触ってない子Viewにまで影響してしまうなど不安定な部分が多いです。

本トークでは不安定なSwiftUIアプリを運用していく際に直面した課題やそれらの課題をUITestを使って解決し安定的に運用することができるにした方法を話します。

Demo app: https://github.com/nanashiki/MiniSNS-iOS

nanashiki

September 18, 2021
Tweet

More Decks by nanashiki

Other Decks in Programming

Transcript

  1. ΞδΣϯμ 6*5FTU  9$6*5FTUͷجຊతͳૢ࡞  6*5FTUͷछྨ &&ͱ.PDL ͱϝϦσϝ 4XJGU6*ͱ6*5FTU 

    4XJGU6*ΞϓϦ΁ͷ6*5FTUಋೖ  6*5FTUͰ٧·ͬͨ఺ͱղܾํ๏  ӡ༻ͯ͠Έͯͷײ૝ͳͲ  4XJGU6*ಋೖͷϝϦσϝ  ೥ಋೖͯ͠Έͯͷײ૝  4XJGU6*ͷෆ҆ఆڍಈ঺հ 4XJGU6*Ͱͷ։ൃ  9DPEF1SFWJFXT  .PDLىಈ 4DIFNF
  2. ΞδΣϯμ 6*5FTU  9$6*5FTUͷجຊతͳૢ࡞  6*5FTUͷछྨ &&ͱ.PDL ͱϝϦσϝ 4XJGU6*ͱ6*5FTU 

    4XJGU6*ΞϓϦ΁ͷ6*5FTUಋೖ  6*5FTUͰ٧·ͬͨ఺ͱղܾํ๏  ӡ༻ͯ͠Έͯͷײ૝ͳͲ  4XJGU6*ಋೖͷϝϦσϝ  ೥ಋೖͯ͠Έͯͷײ૝  4XJGU6*ͷෆ҆ఆڍಈ঺հ 4XJGU6*Ͱͷ։ൃ  9DPEF1SFWJFXT  .PDLىಈ 4DIFNF
  3. 4XJGU6*Λ೥ಋೖͯ͠Έͯͷײ૝  શମͱͯ͠͸ಋೖͯ͠Έͯྑ͔ͬͨ😀఺͘Β͍ͷຬ଍౓  4UPSZ#PBSEʹൺ΂֨ஈʹϨϏϡʔ͠΍͍͢ ෳ਺ਓͰ࡞ۀͯ͠΋͋Δఔ౓҆શ  ίʔυͰ"VUP-BZPVUॻ͘ํ๏ʹൺ΂ίʔυͷهड़ྔ͕͔ͳΓݮΓɺಡΈ΍͍͢  ৽ٕज़Ͱ·ͩΞʔΩςΫνϟͳͲཱ֬ͨ͠΋ͷ͕ͳ͘৭ʑࢼָ͍ͤͯ͠

    ෆ҆ఆ΍஫ҙ͢΂͖᠘ͬΆ͍ڍಈͷ෦෼΋ଟ͍ͷͰ஫ҙ  એݴతͰॻ͖΍͍͢൓໘ɺҙਤͤͣଞͷ෦෼Λյͯ͠͠·͏͜ͱ͕͋Δ  J04ͷϚΠφʔόʔδϣϯΞοϓͰେ͖͘ڍಈ͕มΘΔ͜ͱ͕͋Δ  6*,JUͱҧ͍ރΕͯͳ͍  ભҠܥ͸ಛʹ஫ҙ
  4. BMFSUͷ᠘  J04 ᶃ "MFSUͷΈදࣔ͞ΕΔ ᶄ "MFSUͷΈදࣔ͞ΕΔ ᶅ "MFSU "MFSUͲͪΒ΋දࣔ͞ΕΔ

    ᶆ "MFSU "MFSUͲͪΒ΋දࣔ͞Εͳ͍ ͲΕͰ͠ΐ͏͔ʁ "MFSU͸λοϓͯ͠΋ ແ൓Ԡ
  5. BMFSUͷ᠘  J04 ᶃ "MFSUͷΈදࣔ͞ΕΔ ᶄ "MFSUͷΈදࣔ͞ΕΔ ᶅ "MFSU "MFSUͲͪΒ΋දࣔ͞ΕΔ

    ᶆ "MFSU "MFSUͲͪΒ΋දࣔ͞Εͳ͍ ͲΕͰ͠ΐ͏͔ʁ "MFSU͸දࣔ͞ΕΔ
  6. TIFFU GVMM4DSFFO$PWFS  J04 ᶃ 4IFFUͷΈදࣔ͞ΕΔ ᶄ 4IFFUͷΈදࣔ͞ΕΔ ᶅ 4IFFU

    4IFFUͲͪΒ΋දࣔ͞ΕΔ ᶆ 4IFFU 4IFFUͲͪΒ΋දࣔ͞Εͳ͍ ͲΕͰ͠ΐ͏͔ʁ
  7. TIFFU GVMM4DSFFO$PWFS  J04 ᶃ 4IFFUͷΈදࣔ͞ΕΔ ᶄ 4IFFUͷΈදࣔ͞ΕΔ ᶅ 4IFFU

    4IFFUͲͪΒ΋දࣔ͞ΕΔ ᶆ 4IFFU 4IFFUͲͪΒ΋දࣔ͞Εͳ͍ ͲΕͰ͠ΐ͏͔ʁ
  8. TIFFU GVMM4DSFFO$PWFS  J04 ᶃ 4IFFUͷΈදࣔ͞ΕΔ ᶄ 4IFFUͷΈදࣔ͞ΕΔ ᶅ 4IFFU

    4IFFUͲͪΒ΋දࣔ͞ΕΔ ᶆ 4IFFU 4IFFUͲͪΒ΋දࣔ͞Εͳ͍ ͲΕͰ͠ΐ͏͔ʁ 4IFFU දࣔ͞ΕΔ
  9. TIFFU GVMM4DSFFO$PWFS  J04 ᶃ 4IFFUͷΈදࣔ͞ΕΔ ᶄ 4IFFUͷΈදࣔ͞ΕΔ ᶅ 4IFFU

    4IFFUͲͪΒ΋දࣔ͞ΕΔ ᶆ 4IFFU 4IFFUͲͪΒ΋දࣔ͞Εͳ͍ ͲΕͰ͠ΐ͏͔ʁ 4IFFU දࣔ͞ΕΔ
  10. TIFFU GVMM4DSFFO$PWFS  J04 ᶃ 4IFFUͷΈදࣔ͞ΕΔ ᶄ 4IFFUͷΈදࣔ͞ΕΔ ᶅ 4IFFU

    4IFFUͲͪΒ΋දࣔ͞ΕΔ ᶆ 4IFFU 4IFFUͲͪΒ΋දࣔ͞Εͳ͍ ਖ਼ղ͸
  11. TIFFU GVMM4DSFFO$PWFS BMFSUͷ᠘  J04 ᶃ 4IFFUͷΈදࣔ͞ΕΔ ᶄ 4IFFUͷΈදࣔ͞ΕΔ ᶅ

    4IFFU 4IFFUͲͪΒ΋දࣔ͞ΕΔ ᶆ 4IFFU 4IFFUͲͪΒ΋දࣔ͞Εͳ͍ ͲΕͰ͠ΐ͏͔ʁ
  12. TIFFU GVMM4DSFFO$PWFS BMFSUͷ᠘  J04 ᶃ 4IFFUͷΈදࣔ͞ΕΔ ᶄ 4IFFUͷΈදࣔ͞ΕΔ ᶅ

    4IFFU 4IFFUͲͪΒ΋දࣔ͞ΕΔ ᶆ 4IFFU 4IFFUͲͪΒ΋දࣔ͞Εͳ͍ ͲΕͰ͠ΐ͏͔ʁ
  13. TIFFU GVMM4DSFFO$PWFS BMFSUͷ᠘  J04 ᶃ 4IFFUͷΈදࣔ͞ΕΔ ᶄ 4IFFUͷΈදࣔ͞ΕΔ ᶅ

    4IFFU 4IFFUͲͪΒ΋දࣔ͞ΕΔ ᶆ 4IFFU 4IFFUͲͪΒ΋දࣔ͞Εͳ͍ ͲΕͰ͠ΐ͏͔ʁ 4IFFU͸λοϓͯ͠΋ ແ൓Ԡ
  14. TIFFU GVMM4DSFFO$PWFS BMFSUͷ᠘  J04 ᶃ 4IFFUͷΈදࣔ͞ΕΔ ᶄ 4IFFUͷΈදࣔ͞ΕΔ ᶅ

    4IFFU 4IFFUͲͪΒ΋දࣔ͞ΕΔ ᶆ 4IFFU 4IFFUͲͪΒ΋දࣔ͞Εͳ͍ ͲΕͰ͠ΐ͏͔ʁ 4IFFU͸ දࣔ͞ΕΔ
  15. TIFFU GVMM4DSFFO$PWFS BMFSUͷ᠘  J04 ᶃ 4IFFUͷΈදࣔ͞ΕΔ ᶄ 4IFFUͷΈදࣔ͞ΕΔ ᶅ

    4IFFU 4IFFUͲͪΒ΋දࣔ͞ΕΔ ᶆ 4IFFU 4IFFUͲͪΒ΋දࣔ͞Εͳ͍ ਖ਼ղ͸
  16. ΞδΣϯμ 6*5FTU  9$6*5FTUͷجຊతͳૢ࡞  6*5FTUͷछྨ &&ͱ.PDL ͱϝϦσϝ 4XJGU6*ͱ6*5FTU 

    4XJGU6*ΞϓϦ΁ͷ6*5FTUಋೖ  6*5FTUͰ٧·ͬͨ఺ͱղܾํ๏  ӡ༻ͯ͠Έͯͷײ૝ͳͲ  4XJGU6*ಋೖͷϝϦσϝ  ೥ಋೖͯ͠Έͯͷײ૝  4XJGU6*ͷෆ҆ఆڍಈ঺հ 4XJGU6*Ͱͷ։ൃ  9DPEF1SFWJFXT  .PDLىಈ 4DIFNF
  17. &&6*5FTU ϝϦοτ σϝϦοτ  .PDLͱҧ͍࣮ࡍͷ௨৴෦෼ΛؚΊΞϓϦશମͷςετ͕Մೳ  ։ൃαʔόʹͭͳ͕͍ͬͯΔΞϓϦΛͦͷ··࢖͑Δ  Ұൠతʹ͸ͪ͜Βͷํ͕ಋೖ͸ָ 

    ւ֎αʔόͷ$*؀ڥͳͲͰ௨৴͕҆ఆͤͣʹΑ͘མͪ҆ఆͤ͞Δͷ͕೉͍͠  ։ൃ؀ڥͰϗʔϜը໘ʹશ໘ʹ͓஌ΒͤͳͲग़͢ͱςετ͕མͪΔ  ։ൃαʔό͕EFQMPZͳͲͰམ͍ͪͯΔͱ͖͸J04ͷςετ͕མͪͯ͠·͏  ։ൃαʔόʹڧ͘ґଘ͠ςετΛ҆ఆӡ༻͢Δͷ͕೉͍͠ 
  18. .PDL6*5FTU ϝϦοτ  Πϯϑϥ΍αʔό΋͘͠͸ςετ؀ڥωοτϫʔΫ͕҆ఆ͠ͳ͍໰୊͕ى͜Βͳ͍  J04಺ͷΈͰ׬݁͢Δ  ॳճͷΈͷঢ়ଶ΍ڧ੍ΞοϓσʔτͳͲͷςετ͕༰қ  ֘౰ͷ.PDLσʔλΛ࡞Ε͹͍͍ͷΈ

    σϝϦοτ  1045ͯ͠ߋ৽͢Δ"1*ͳͲͷςετ͸೉͍͠  ࣮ࡍͷαʔόͱͷૄ௨ͷ֬ೝ͸Ͱ͖ͳ͍ͷͰ+40/ͷܕ͕߹͍ͬͯΔͳͲͷ୲อʹ͸ͳΒͳ͍  .PDLΛࠩ͠ࠐΊΔػߏΛ࡞Δඞཁ͕͋Γಋೖোน͸ߴ͍ 
  19. ΞδΣϯμ 6*5FTU  9$6*5FTUͷجຊతͳૢ࡞  6*5FTUͷछྨ &&ͱ.PDL ͱϝϦσϝ 4XJGU6*ͱ6*5FTU 

    4XJGU6*ΞϓϦ΁ͷ6*5FTUಋೖ  6*5FTUͰ٧·ͬͨ఺ͱղܾํ๏  ӡ༻ͯ͠Έͯͷײ૝ͳͲ  4XJGU6*ಋೖͷϝϦσϝ  ೥ಋೖͯ͠Έͯͷײ૝  4XJGU6*ͷෆ҆ఆڍಈ঺հ 4XJGU6*Ͱͷ։ൃ  9DPEF1SFWJFXT  .PDLىಈ 4DIFNF
  20. ΞδΣϯμ 6*5FTU  9$6*5FTUͷجຊతͳૢ࡞  6*5FTUͷछྨ &&ͱ.PDL ͱϝϦσϝ 4XJGU6*ͱ6*5FTU 

    4XJGU6*ΞϓϦ΁ͷ6*5FTUಋೖ  6*5FTUͰ٧·ͬͨ఺ͱղܾํ๏  ӡ༻ͯ͠Έͯͷײ૝ͳͲ  4XJGU6*ಋೖͷϝϦσϝ  ೥ಋೖͯ͠Έͯͷײ૝  4XJGU6*ͷෆ҆ఆڍಈ঺հ 4XJGU6*Ͱͷ։ൃ  9DPEF1SFWJFXT  .PDLىಈ 4DIFNF
  21. 6*5FTUӡ༻ͯ͠Έͯ  ભҠͳͲ͕όάͬͯͳ͍͜ͱ͕୲อ͞Ε҆৺ײ͕ੜ·Εͨ  .PDLΛ࢖͍ͬͯΔ͜ͱʹΑΓ$*Ͱຊདྷ௨Δ΂͖6*5FTU͕མͪΔ͜ͱ ͸΄΅ͳ҆͘ఆͯ͠ӡ༻Ͱ͖͍ͯΔ  ্ख͍͍ͬͯ͘Δ఺ վળ఺ 

    9DPEFͷΞοϓσʔτͰ6*5FTU͕յΕΔ͜ͱ͕ଟ͍  ΫΤϦͷॻ͖ํͳͲ·ͩ·ͩվળͰ͖ͦ͏  $*͕͔͔࣌ؒΔ ॏཁͳը໘͸ຖճɺͦ͏Ͱ΋ͳ͍ը໘͕ϦϦʔεϒϥϯνͷΈͳͲ ෼͚͍ͨ