Upgrade to Pro — share decks privately, control downloads, hide ads and more …

6年ほど育ったiOSプロジェクトを刷新した話 / Renewed iOS project that grew up for about 6 years

6年ほど育ったiOSプロジェクトを刷新した話 / Renewed iOS project that grew up for about 6 years

potatotips #63 @スマートニュース株式会社
https://potatotips.connpass.com/event/134616/

D9c806bf404173842f3fe1b8be1ca7d8?s=128

RyoKosuge

July 24, 2019
Tweet

Transcript

  1. 6年ほど育った iOSプロジェクトを 刷新した話 potatotips #63 2019/07/24 ryokosuge

  2. 自己紹介 • 株式会社fluct ◦ SSP開発本部 SDKチーム ▪ 主にFluctSDK iOSの 開発してます

    ◦ 入社して9ヶ月くらい ◦ 前職はマンガアプリ作って ました Twitter: @ryo_kosuge GitHub: ryokosuge
  3. アジェンダ • 6年かけてどう育ったか • 刷新作業(やったこと) • 刷新した結果 • まとめ

  4. 6年かけてどう育ったか

  5. “git log --reverse” (噂ではSVN時代があるからもっと古い説あり)

  6. 広告SDKの開発について • 継続的な開発ではない ◦ がっつり作るのは新しいフォーマット対応のみ • テストはしっかり書く ◦ ほぼ100%網羅されている ◦

    品質は絶対 • 作る前にしっかり設計して100%作り込んでリリースする ◦ 作ったものは容易に捨てられない世界
  7. 広告SDKのプロジェクト • 初期はstaticなSDKしか提供できなかったので`lib~.a`を生成する方式 ◦ `.framework`へ移行 ◦ スクリプトで対応(Makefile) • すごい古いプロジェクトなのでターゲットがおかしい ◦

    1つの実装ファイルにたくさんのtargetが参照している ▪ 無謀なテストもかけてしまう
  8. 広告SDKのプロジェクト • ターゲットがおかしいからindexがうまくはられない ◦ テストを書く時にサジェストが出ない ◦ import error ▪ Headerファイルが見つからないらしい

    • CIも時間がかかる ◦ キャッシュなど活用しても根本が解消されない ◦ 1つPRのjobに10分以上かかってしまうこともある
  9. 流石にやばい

  10. 刷新作業(やったこと) • 別ディレクトリに1からプロジェクト作成 ◦ しっかりターゲット選定をする ▪ FluctSDKとXCTestは1つのプロジェクトにして、依存するターゲット は別プロジェクトにする • 作業はworkspaceでまとめる

    • ファイルはコピーして持ってきてプロジェクトに追加していく ◦ 命名規則などもこのタイミングで統一する
  11. 刷新作業(やったこと) • ターゲットを分けたことで依存しちゃいけない実装をしていた箇所を修正す る ◦ これは力技 ◦ ターゲット設計をしっかりしてちゃんと閉鎖できるようにした • テストもmockを使用することで対応可能

  12. 刷新作業(やったこと) • プロジェクトが綺麗になったタイミングでドキュメント更新 ◦ Makefileの分割 ◦ 無駄なファイルを削除 ◦ READMEもわかりやすく

  13. 結果

  14. 昔のプロジェクト すごい多いターゲット数

  15. FluctSDKのプロジェクト

  16. SDKに依存するプロジェクト

  17. 刷新した結果 • indexがしっかり貼られるようになったのでサジェストでる • 開発時に無駄なbuildが走らなくなった • `lib~.a`なファイルではなく、xcode標準の`.framework`をbuildで生成でき るようになった ◦ Static

    + bundleの提供方法は変えてない ▪ dynamicにすると導入手法が変わるためやらなかった
  18. 刷新した結果 • CIで落ちなくなった ◦ Travisで起きる謎のクラッシュがなくなった ▪ しっかり実行できるようになったからかな • キャッシュも効くようになったので2分ほどjobの時間を短縮 •

    Warningsがほぼ0 ◦ deprecatedしているクラスのwarning以外はない
  19. まとめ

  20. まとめ • 6年続いたプロジェクトにまずは敬意を持つ • 何が依存していてどういう構成になっているか知るいいキッカケになった ◦ やる際はタスクをしっかり書き出してどうなると成功なのか示す必要あ る • outputは変えちゃいけない

    ◦ 要は大規模リファクタリング
  21. ご静聴 ありがとうございました