Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
iOSDC 2016 talk
Search
USAMI Kosuke
August 19, 2016
Programming
3
3.2k
iOSDC 2016 talk
iOS アプリ開発の補助ツールのベストプラクティス
https://iosdc.jp/2016/c/node/40
USAMI Kosuke
August 19, 2016
Tweet
Share
More Decks by USAMI Kosuke
See All by USAMI Kosuke
Onsager代数とその周辺 / Onsager algebra tsudoi
usamik26
0
520
Apple HIG 正式名称クイズ結果発表 / HIG Quiz Result
usamik26
0
110
ゆめみ大技林製作委員会の立ち上げの話 / daigirin project
usamik26
0
280
@ViewLoadingプロパティラッパの紹介と自前で実装する方法 / @ViewLoading property wrapper implementation
usamik26
0
420
これからUICollectionViewを実践活用する人のためのガイド / Guide to UICollectionView
usamik26
1
680
Xcodeとの最近の付き合い方のはなし / Approach To Xcode
usamik26
2
610
UICollectionView Compositional Layout
usamik26
0
670
Coding Swift with Visual Studio Code and Docker
usamik26
0
440
Swift Extension for Visual Studio Code
usamik26
2
890
Other Decks in Programming
See All in Programming
約9000個の自動テストの 時間を50分->10分に短縮 Flakyテストを1%以下に抑えた話
hatsu38
24
12k
Golang と Erlang
taiyow
8
1.9k
Macとオーディオ再生 2024/11/02
yusukeito
0
270
macOS でできる リアルタイム動画像処理
biacco42
8
2.2k
Kubernetes for Data Engineers: Building Scalable, Reliable Data Pipelines
sucitw
1
200
Tuning GraphQL on Rails
pyama86
2
1.2k
Snowflake x dbtで作るセキュアでアジャイルなデータ基盤
tsoshiro
2
460
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
410
OpenTelemetryでRailsのパフォーマンス分析を始めてみよう(KoR2024)
ymtdzzz
5
1.8k
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
8
470
Why Spring Matters to Jakarta EE - and Vice Versa
ivargrimstad
0
1.2k
Jakarta Concurrencyによる並行処理プログラミングの始め方 (JJUG CCC 2024 Fall)
tnagao7
1
250
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
243
12k
Typedesign – Prime Four
hannesfritz
39
2.4k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
167
49k
Imperfection Machines: The Place of Print at Facebook
scottboms
264
13k
Designing Experiences People Love
moore
138
23k
Teambox: Starting and Learning
jrom
132
8.7k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Building Better People: How to give real-time feedback that sticks.
wjessup
363
19k
Into the Great Unknown - MozCon
thekraken
31
1.5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
228
52k
BBQ
matthewcrist
85
9.3k
Making Projects Easy
brettharned
115
5.9k
Transcript
։ൃิॿπʔϧͷ ϕετϓϥΫςΟε Ӊࠤݟ ެี Fenrir Inc. iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) -
iOSDC 2016 1
iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 2
ิॿπʔϧͱʁ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 3
ิॿπʔϧ » ϥΠϒϥϦཧπʔϧ » ϦιʔεऔΓࠐΈπʔϧ » ίʔυνΣοΫπʔϧ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26)
- iOSDC 2016 4
ϓϥΫςΟεΛߟ͑Δ » ͨͩิॿπʔϧΛಋೖ͢ΔͷͰͳ͘ɺߟ͑Α͏ » ͦͦͳͥπʔϧΛ͏ͷ͔ʁ » ಋೖ͢ΔϝϦοτΛߟ͑Δ » Ͳ͏͍͏͍ํ͕ྑ͍ͷ͔ʁ »
ϝϦοτΛͭͿ͞ͳ͍ϓϥΫςΟεΛߟ͑Δ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 5
ϥΠϒϥϦཧ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 6
ϥΠϒϥϦཧπʔϧ » CocoaPods » Carthage » Swift Package Manager iOS
ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 7
ԿΛ͢Δπʔϧʁ » ֎෦ϥΠϒϥϦΛΞϓϦʹ؆୯ʹऔΓࠐΉ # CocoaPods ͷઃఆྫ target 'MyApp' do pod
'RxSwift', '~> 2.6.0' pod 'RxCocoa', '~> 2.6.0' end iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 8
Bad Practice πʔϧΛΘͣʹϥΠϒϥϦΛೖΕΔ » ΞϓϦຊମͱϥΠϒϥϦ͕͞Εͳ͍ » ϥΠϒϥϦͷόʔδϣϯ͕͔Βͳ͘ͳΔ » ϥΠϒϥϦΛಋೖͨ͠ਓҎ֎ʹ͔Βͳ͍ »
ϥΠϒϥϦ෦৮ͬͯͳΒ͵งғؾ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 9
Good Practice πʔϧΛͬͯϥΠϒϥϦΛೖΕΔ » ΞϓϦຊମͱϥΠϒϥϦ͕͞ΕΔ » ϥΠϒϥϦͷόʔδϣϯ͕໌֬ʹͳΔ » ϥΠϒϥϦͷՃɾߋ৽ָ͕ʹͳΔ iOS
ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 10
Bad Practice ϥΠϒϥϦΛϦϙδτϦʹೖΕͳ͍ » ֤ϏϧυڥʹϥΠϒϥϦཧπʔϧ͕ඞཁ » ϥΠϒϥϦΛऔಘ͢ΔͨΊʹπʔϧΛ࣮ߦ͢Δ » ֎෦ϦϙδτϦ͕μϯͨ͠ΒϏϧυͰ͖ͳ͍ »
πʔϧಋೖ͕ٯޮՌʹͳͬͯ͠·͏ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 11
Good Practice ϥΠϒϥϦΛϦϙδτϦʹೖΕΔ » ֤ϏϧυڥʹϥΠϒϥϦཧπʔϧ͕ෆཁ » ֎෦ϦϙδτϦʹґଘͤͣϏϧυͰ͖Δ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26)
- iOSDC 2016 12
Bad Practice ϥΠϒϥϦͷιʔεΛฤू͢Δ » πʔϧΛ͏ϝϦοτʢʹϥΠϒϥϦͷՃɾߋ৽ ָ͕ʹͳΔʣ͕ࣦΘΕΔ » ʮpod install ͠ͳ͍Ͱ͍ͩ͘͞ʯͱ͍͏ҙॻ
͖͕͋Δͱɾɾɾ » ΞϓϦͷϦϙδτϦʹϥΠϒϥϦͷฤू͕ೖΔ » ͲͷόʔδϣϯͷͲ͜Λฤू͔ͨ͠ෆ໌֬ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 13
Good Practice ϥΠϒϥϦΛ clone ͯ͠ฤू͢Δ » πʔϧΛ͏ϝϦοτͦͷ·· » ΞϓϦͱผϦϙδτϦʹϥΠϒϥϦͷฤू͕ೖΔ »
ͲͷόʔδϣϯͷͲ͜ʹΛฤू͔ͨ͠໌֬ʹͳΔ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 14
ϦιʔεऔΓࠐΈ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 15
ϦιʔεऔΓࠐΈπʔϧ » SwiftGen » R.swift » rdotm iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26)
- iOSDC 2016 16
ԿΛ͢Δπʔϧʁ » ΞϓϦͷը૾ςΩετͷѻָ͍͕ʹͳΔίʔυΛ ੜͯ͘͠ΕΔ // πʔϧͳ͠ͷ߹ let image = UIImage(named:
"banana") // SwiftGen Λͬͨ߹ let image = UIImage(asset: .Banana) iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 17
Bad Practice ςΩετΛιʔείʔυʹॻ͘ label.text = "͜Μʹͪ" » දࣔςΩετ͕Ͳ͜Ͱࢦఆ͞Ε͍ͯΔ͔͔Γʹ͍͘ » ݕࡧͮ͠Β͍
» ैͬͯɺमਖ਼ͮ͠Β͍ʢಛʹޙͰमਖ਼͢Δͱ͖ʣ » ϩʔΧϥΠζͷͱ͖ʹࠔΔ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 18
Good Practice 1 ςΩετΛ strings ϑΝΠϧʹஔ͘ label.text = NSLocalizedString("label_hello") »
දࣔςΩετ͕Ͳ͜Ͱࢦఆ͞Ε͍ͯΔ͔͔Γ͍͢ » ݕࡧ͍͢͠ » ϩʔΧϥΠζͷͱ͖ʹָʹͳΔ » ͨͩ͠ɺςΩετΛ strings ʹஔ͘ͷ͕໘ͳؾ࣋ ͪ͋Δʢ৺ཧతෛ୲ʣ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 19
Good Practice 2 ϦιʔεऔΓࠐΈπʔϧΛ͏ // SwiftGen ͷ߹ label.text = tr(.LabelHello)
» strings ͷΩʔจࣈྻͷϛε͕ͳ͘ͳΔ » ίϯύΠϧ࣌ʹνΣοΫ͞ΕΔ » ςΩετΛ strings ʹஔ͘৺ཧతෛ୲ͷܰݮ » ίʔυ͕ॻ͖͘͢ͳΔͷ͔ͩΒ͓ͬͯ͜͏ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 20
ίʔυνΣοΫ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 21
ίʔυνΣοΫπʔϧ » SwiftLint » Tailor » OCLint iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26)
- iOSDC 2016 22
ԿΛ͢Δπʔϧʁ » ·͘͠ͳ͍ίʔυΛݕग़͢Δ » ίʔυϑΥʔϚοτΛ͑Δ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC
2016 23
Bad Practice ίʔυνΣοΫΛ࣮ߦ͠ͳ͍ » ڊେͳΫϥε » ذ͕ଟ͗͢Δϝιου » ෆదͳ force
cast iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 24
Good Practice 1 ίʔυνΣοΫΛ࣮ߦ͢Δ » ·͘͠ͳ͍ίʔυ͕ػցతʹൃݟͰ͖Δ » ૣظൃݟɺૣظ࣏ྍ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε
(@usamik26) - iOSDC 2016 25
Good Practice 2 Ϗϧυ࣌ʹࣗಈతʹίʔυνΣοΫ » Build Phase ʹπʔϧ࣮ߦΛೖΕΔ » πʔϧͷ࣮ߦΛΕͣʹ͢Ή
» Warning / Error දࣔ͞ΕΔͷͰରԠָ͕ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 26
ิ طଘͷϓϩδΣΫτʹಋೖ͢Δʹ » طଘϓϩδΣΫτʹಋೖ͢ΔͱϏοΫϦ͢Δ΄Ͳଟ͘ ͷ Warning / Error ͕ग़Δ »
ͦΕͰಋೖͨ͠ํ͕͍͍ » νΣοΫϧʔϧΛܰݮͯ͠Ͱಋೖ͓ͯ͘͠ » ͍ͬͨΜಋೖͯ͠͠·͑৺ཧతෛ୲͕ܰ͘ͳΔ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 27
Bad Practice ίʔυνΣοΫͷ݁ՌΛ์ஔ͢Δ » Warning Λ์ஔ͢Δͷ͕ͨΓલʹͳΔ » ରॲ͖͢ Warning Λݟམͱ͢
iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 28
Good Practice ίʔυνΣοΫͷ݁Ռʹ͙͢ରॲ͢Δ » ৗʹ Warning Λͳ͘͢ » ରॲ͖͢ Warning
Λݟམͱ͞ͳ͍ » Warning ʹରॲ͢Δͷ͕େมͳΒɺ͍ͬͦͷ͜ͱν ΣοΫϧʔϧΛܰݮͯ͠͠·͏ » ίʔυνΣοΫΛܧଓ͢Δ΄͏͕େࣄ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 29
Bad Practice ίʔυϑΥʔϚοτΛߦΘͳ͍ » ΧοίͷҐஔͱ͔εϖʔεͷೖΕํͱ͔όϥόϥ » ϧʔϧ͕͋ͬͯकΔͷେม » ϑΥʔϚοτͷϧʔϧΛ͍֮͑ͯͳ͍ͱμϝ »
͏͔ͬΓΦϨΦϨϧʔϧͰॻ͍ͯ͠·͏ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 30
Good Practice ίʔυϑΥʔϚοτΛπʔϧͰߦ͏ » ྫɿSwiftLint ͳΒ swiftlint autocorrect » ΧοίͷҐஔͱ͔εϖʔεͷͷೖΕํͱ͔উखʹमਖ਼
͞ΕΔ » ϑΥʔϚοτͷϧʔϧΕΑ͏ » πʔϧʹͤΑ͏ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 31
·ͱΊ iOS ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 32
·ͱΊ » ͨͩπʔϧΛಋೖ͢ΔͷͰͳ͘ɺߟ͑Α͏ » ಋೖ͢ΔϝϦοτΛߟ͑Δ » ϝϦοτΛͭͿ͞ͳ͍ϓϥΫςΟεΛߟ͑Δ » ߟ͑ͨ͏͑ͰπʔϧΛೖΕΔͱָʹͳΔ iOS
ΞϓϦ։ൃͷิॿπʔϧͷϕετϓϥΫςΟε (@usamik26) - iOSDC 2016 33