Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
6年ほど育ったiOSプロジェクトを刷新した話 / Renewed iOS project that grew up for about 6 years
RyoKosuge
July 24, 2019
Technology
2
630
6年ほど育ったiOSプロジェクトを刷新した話 / Renewed iOS project that grew up for about 6 years
potatotips #63 @スマートニュース株式会社
https://potatotips.connpass.com/event/134616/
RyoKosuge
July 24, 2019
Tweet
Share
More Decks by RyoKosuge
See All by RyoKosuge
広告実装、こうすると幸せだよ
ryokosuge
6
1.2k
アプリ開発とSDK開発の違い
ryokosuge
1
370
広告実装の苦しみ
ryokosuge
0
210
アプリを十数個作った僕が初めて書いたテストの話
ryokosuge
2
1.8k
広告SDKを駆使して 売り上げを5倍にした
ryokosuge
2
3.7k
早期発見プロジェクト
ryokosuge
0
31
Other Decks in Technology
See All in Technology
Apple M1 CPUの脆弱性「PACMAN」について解説する
kuzushiki
0
100
データ分析で切り拓け! エンジニアとしてのデータ分析職キャリア戦略
ksnt
0
170
How to start with DDD when you have a Monolith
javujavichi
0
350
MRTK3 - DataBinding and Theming 入門
futo23
0
200
プログラマがオブジェクト指向しても幸せになれない理由
shirayanagiryuji
0
150
Citizen 개발기
outsider
0
290
QiitaConference2022
fuwasegu
0
200
要約 "Add Live Text interaction to your app"
ushisantoasobu
0
150
The application of formal methods in Kafka reliability engineering
line_developers
PRO
1
210
OPENLOGI Company Profile
hr01
0
610
Swift Regex Builder
kumamotone
1
110
What's new in Vision
satotakeshi
0
220
Featured
See All Featured
Building Applications with DynamoDB
mza
83
4.7k
How to train your dragon (web standard)
notwaldorf
58
3.9k
The Illustrated Children's Guide to Kubernetes
chrisshort
15
36k
Bash Introduction
62gerente
597
210k
Fontdeck: Realign not Redesign
paulrobertlloyd
73
4.1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
12
920
GraphQLの誤解/rethinking-graphql
sonatard
28
6.6k
JazzCon 2018 Closing Keynote - Leadership for the Reluctant Leader
reverentgeek
172
8.4k
Building a Scalable Design System with Sketch
lauravandoore
448
30k
From Idea to $5000 a Month in 5 Months
shpigford
373
44k
Happy Clients
brianwarren
89
5.6k
Pencils Down: Stop Designing & Start Developing
hursman
112
9.8k
Transcript
6年ほど育った iOSプロジェクトを 刷新した話 potatotips #63 2019/07/24 ryokosuge
自己紹介 • 株式会社fluct ◦ SSP開発本部 SDKチーム ▪ 主にFluctSDK iOSの 開発してます
◦ 入社して9ヶ月くらい ◦ 前職はマンガアプリ作って ました Twitter: @ryo_kosuge GitHub: ryokosuge
アジェンダ • 6年かけてどう育ったか • 刷新作業(やったこと) • 刷新した結果 • まとめ
6年かけてどう育ったか
“git log --reverse” (噂ではSVN時代があるからもっと古い説あり)
広告SDKの開発について • 継続的な開発ではない ◦ がっつり作るのは新しいフォーマット対応のみ • テストはしっかり書く ◦ ほぼ100%網羅されている ◦
品質は絶対 • 作る前にしっかり設計して100%作り込んでリリースする ◦ 作ったものは容易に捨てられない世界
広告SDKのプロジェクト • 初期はstaticなSDKしか提供できなかったので`lib~.a`を生成する方式 ◦ `.framework`へ移行 ◦ スクリプトで対応(Makefile) • すごい古いプロジェクトなのでターゲットがおかしい ◦
1つの実装ファイルにたくさんのtargetが参照している ▪ 無謀なテストもかけてしまう
広告SDKのプロジェクト • ターゲットがおかしいからindexがうまくはられない ◦ テストを書く時にサジェストが出ない ◦ import error ▪ Headerファイルが見つからないらしい
• CIも時間がかかる ◦ キャッシュなど活用しても根本が解消されない ◦ 1つPRのjobに10分以上かかってしまうこともある
流石にやばい
刷新作業(やったこと) • 別ディレクトリに1からプロジェクト作成 ◦ しっかりターゲット選定をする ▪ FluctSDKとXCTestは1つのプロジェクトにして、依存するターゲット は別プロジェクトにする • 作業はworkspaceでまとめる
• ファイルはコピーして持ってきてプロジェクトに追加していく ◦ 命名規則などもこのタイミングで統一する
刷新作業(やったこと) • ターゲットを分けたことで依存しちゃいけない実装をしていた箇所を修正す る ◦ これは力技 ◦ ターゲット設計をしっかりしてちゃんと閉鎖できるようにした • テストもmockを使用することで対応可能
刷新作業(やったこと) • プロジェクトが綺麗になったタイミングでドキュメント更新 ◦ Makefileの分割 ◦ 無駄なファイルを削除 ◦ READMEもわかりやすく
結果
昔のプロジェクト すごい多いターゲット数
FluctSDKのプロジェクト
SDKに依存するプロジェクト
刷新した結果 • indexがしっかり貼られるようになったのでサジェストでる • 開発時に無駄なbuildが走らなくなった • `lib~.a`なファイルではなく、xcode標準の`.framework`をbuildで生成でき るようになった ◦ Static
+ bundleの提供方法は変えてない ▪ dynamicにすると導入手法が変わるためやらなかった
刷新した結果 • CIで落ちなくなった ◦ Travisで起きる謎のクラッシュがなくなった ▪ しっかり実行できるようになったからかな • キャッシュも効くようになったので2分ほどjobの時間を短縮 •
Warningsがほぼ0 ◦ deprecatedしているクラスのwarning以外はない
まとめ
まとめ • 6年続いたプロジェクトにまずは敬意を持つ • 何が依存していてどういう構成になっているか知るいいキッカケになった ◦ やる際はタスクをしっかり書き出してどうなると成功なのか示す必要あ る • outputは変えちゃいけない
◦ 要は大規模リファクタリング
ご静聴 ありがとうございました