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.3k
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
630
Apple HIG 正式名称クイズ結果発表 / HIG Quiz Result
usamik26
0
180
ゆめみ大技林製作委員会の立ち上げの話 / daigirin project
usamik26
0
330
@ViewLoadingプロパティラッパの紹介と自前で実装する方法 / @ViewLoading property wrapper implementation
usamik26
0
480
これからUICollectionViewを実践活用する人のためのガイド / Guide to UICollectionView
usamik26
1
740
Xcodeとの最近の付き合い方のはなし / Approach To Xcode
usamik26
2
670
UICollectionView Compositional Layout
usamik26
0
780
Coding Swift with Visual Studio Code and Docker
usamik26
0
510
Swift Extension for Visual Studio Code
usamik26
2
1k
Other Decks in Programming
See All in Programming
機械学習って何? 5分で解説頑張ってみる
kuroneko2828
0
220
すべてのコンテキストを、 ユーザー価値に変える
applism118
1
270
SODA - FACT BOOK
sodainc
1
1.1k
イベントストーミングから始めるドメイン駆動設計
jgeem
4
870
GoのWebAssembly活用パターン紹介
syumai
3
10k
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
540
Select API from Kotlin Coroutine
jmatsu
1
180
「ElixirでIoT!!」のこれまでとこれから
takasehideki
0
370
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
41
27k
Passkeys for Java Developers
ynojima
3
870
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
11
2.7k
第9回 情シス転職ミートアップ 株式会社IVRy(アイブリー)の紹介
ivry_presentationmaterials
1
190
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
173
14k
KATA
mclloyd
29
14k
Producing Creativity
orderedlist
PRO
346
40k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
Agile that works and the tools we love
rasmusluckow
329
21k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
34k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
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