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

Swift Package Manager へ移行した話

swiftty
March 05, 2024

Swift Package Manager へ移行した話

【ハイブリット開催】Mobile勉強会 Wantedly × チームラボ × Sansan #13
https://teamlab.connpass.com/event/310098/

で発表した資料です

swiftty

March 05, 2024
Tweet

More Decks by swiftty

Other Decks in Programming

Transcript

  1. © 2024 Wantedly, Inc. Swift Package Manager へ移行した話 Mobile勉強会 Wantedly

    × チームラボ × Sansan #13 Mar. 5 2024 - 林達也
  2. © 2024 Wantedly, Inc. 今までのプロジェクト構成 • Xcode のターゲットとしてレイヤードアーキテクチャなモジュール分割 • SwiftUI

    の導入とともにフィーチャー単位でのモジュールも段階的に導入 • CocoaPods と Swift Package Manager (SwiftPM) でのライブラリが 混在
  3. © 2024 Wantedly, Inc. 1. project.yml • 各 Framework は

    XcodeGen の ターゲットで定義
  4. © 2024 Wantedly, Inc. 今までの課題 • CocoaPods では複雑なターゲット構成の実現が難しい • ソースファイルが

    Xcode プロジェクトに紐づいているため ブランチを切り替えると XcodeGen の実行が必要 • すでにいくつかのライブラリが SwiftPM に移行されていて Podfile と project.yml の2つで管理する状況
  5. © 2024 Wantedly, Inc. 目指したいプロジェクト構成 • Xcode のターゲットを SwiftPM のターゲットで定義

    • それらをまとめた SwiftPM のライブラリを定義 • アプリケーションとそのライブラリとの関連付けは引き続き XcodeGen を利用 Package.swift
  6. © 2024 Wantedly, Inc. タイムライン issue 化 ライブラリ移 行再開 コード調整

    Package.swift へ切り替え 2022/4 2023/5 2023/12 2024/2 • 主に 2023/5 からの取り組みについて要点を紹介
  7. © 2024 Wantedly, Inc. ライブラリ移行 • 移行のしやすい独立した依存のものから • 基本は元のバージョンに合わせつつ SwiftPM

    サポートバージョンにアップデートし ながら移行 • リンクや Xcode プレビューが失敗するものは後回し • →最終的に FacebookSDK や RxSwift とそれに依存するライブラリが残る
  8. © 2024 Wantedly, Inc. コード調整 • アプリケーションターゲット以外で #if を利用した分岐があった •

    →Xcode で定義したプリプロセッサシ ンボルが SwiftPM のターゲットでは 参照できない
  9. © 2024 Wantedly, Inc. コード調整 • アプリケーションターゲット以外で #if を利用した分岐があった •

    →Xcode で定義したプリプロセッサシ ンボルが SwiftPM のターゲットでは 参照できない • →参照している箇所を DI コンテナか ら取り出すようにひとつづつ置き換え
  10. © 2024 Wantedly, Inc. 切り替え • Package.swift を用意し今までの Xcode ターゲットを

    SwiftPM ターゲットでも 定義 • 既存のプロジェクトと並行して、両方のビルドが通るようにしながら進める ◦ 場合によっては #if SWIFT_PACKAGE を利用しながら • 🚧 ホストアプリケーションに依存した単体テストの存在 ◦ テストを分割し調整 • 🚧 コード生成に利用していた Sourcery を build tool plugin に置き換えたが CI のみ実行が失敗する ◦ Notarization や Swift ベースのテンプレートによる内部での Swift ビルドに問題 ◦ →既存のワークフローとなるべく変わらないように plugin をやめつつ実行タイミングを 変更
  11. © 2024 Wantedly, Inc. まとめ • 今までの課題が解消された • 大きくハマった部分はないがトータルでは長期間な課題となった ◦

    どうしても施策を優先しがち ◦ 月イチの負債返済日などを活用 • 漸進的な移行が自分たちのチームでは正解だった ◦ 並行して施策が動いているので大きな変更は取り込みづらい ◦ 進めていくうちに気づかなかった課題に遭遇する • これからより大きくカイゼンする環境が手に入った 🙌