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
6年ほど育ったiOSプロジェクトを刷新した話 / Renewed iOS project th...
Search
ryokosuge
July 24, 2019
Technology
830
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
6年ほど育ったiOSプロジェクトを刷新した話 / Renewed iOS project that grew up for about 6 years
potatotips #63 @スマートニュース株式会社
https://potatotips.connpass.com/event/134616/
ryokosuge
July 24, 2019
More Decks by ryokosuge
See All by ryokosuge
Zendeskのチケットを Amazon Bedrockで 解析した
ryokosuge
3
750
広告実装、こうすると幸せだよ
ryokosuge
6
1.5k
アプリ開発とSDK開発の違い
ryokosuge
1
690
広告実装の苦しみ
ryokosuge
0
440
アプリを十数個作った僕が初めて書いたテストの話
ryokosuge
2
2.4k
広告SDKを駆使して 売り上げを5倍にした
ryokosuge
2
4.1k
早期発見プロジェクト
ryokosuge
0
73
Other Decks in Technology
See All in Technology
人間はどの意思決定を手放せるのか
kawasima
14
6.9k
The Agent Builder Loop from Daily Work to OSS
minorun365
PRO
3
200
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
150
新機種発売前に見直そう!端末移行で再ログインが要るアプリ・要らないアプリは何が違うのか 〜シームレスに再開できる設計と実装〜
zozotech
PRO
0
200
SREは、MCPとAutopilotをこう使え!
kazumax55
2
810
AI de Idea
kawaguti
PRO
2
110
ソフトウェアDNAとクラウドエージェントのススメ
cloudace
0
110
omasushiというライブラリを作った
polidog
PRO
0
230
バイブコーディング時代のWebアプリ開発入門~Cloud Runで学ぶセキュアなビルドとデプロイ
waiwai2111
1
130
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
1.9k
今話題のAI「Jev」って何? 宇宙最速で学ぶ会
minorun365
PRO
22
13k
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
140
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
520
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
850
Unsuck your backbone
ammeep
672
58k
BBQ
matthewcrist
89
10k
Un-Boring Meetings
codingconduct
0
420
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
520
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
540
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
230
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
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は変えちゃいけない
◦ 要は大規模リファクタリング
ご静聴 ありがとうございました