Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
iOSDC 2016 talk
Search
USAMI Kosuke
August 19, 2016
Programming
3.4k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
iOSDC 2016 talk
iOS アプリ開発の補助ツールのベストプラクティス
https://iosdc.jp/2016/c/node/40
USAMI Kosuke
August 19, 2016
More Decks by USAMI Kosuke
See All by USAMI Kosuke
Onsager代数とその周辺 / Onsager algebra tsudoi
usamik26
0
740
Apple HIG 正式名称クイズ結果発表 / HIG Quiz Result
usamik26
0
300
ゆめみ大技林製作委員会の立ち上げの話 / daigirin project
usamik26
0
430
@ViewLoadingプロパティラッパの紹介と自前で実装する方法 / @ViewLoading property wrapper implementation
usamik26
0
580
これからUICollectionViewを実践活用する人のためのガイド / Guide to UICollectionView
usamik26
1
850
Xcodeとの最近の付き合い方のはなし / Approach To Xcode
usamik26
2
760
UICollectionView Compositional Layout
usamik26
0
910
Coding Swift with Visual Studio Code and Docker
usamik26
0
630
Swift Extension for Visual Studio Code
usamik26
2
1.2k
Other Decks in Programming
See All in Programming
LLM 101
dalinaum
0
470
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
2.3k
baseline으로 마이그레이션, 리팩토링 안전하게 맡기기
fornewid
1
960
Seven New Principles of Software Engineering
yegor256
0
470
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
1
300
Enforcing Your Architecture with Unit Tests in the AI Era (Swift Connection X)
steliosf
PRO
1
150
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
740
高橋メソッドでCVE解説シリーズ 〜CVE-2026-112816〜
hakkadaikon
0
230
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
370
AI-Powered Domain-Driven Design
ziobrando
0
420
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.8k
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
330
Featured
See All Featured
Designing Experiences People Love
moore
143
24k
Building an army of robots
kneath
307
47k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
830
Reality Check: Gamification 10 Years Later
codingconduct
0
2.4k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
1
300
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
750
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.3k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
660
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
770
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
620
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.2k
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