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
FlutterKaigi2026_SPM移行LT.pdf
Search
MEDLEY, INC.
November 02, 2026
Programming
16
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
FlutterKaigi2026_SPM移行LT.pdf
MEDLEY, INC.
November 02, 2026
More Decks by MEDLEY, INC.
See All by MEDLEY, INC.
本気の人がいるから、デザインがおもしろい ー やりがいだけじゃないものづくりの立ち位置
medley
0
56
AI Transformation in Healthcare Product Development
medley
0
85
現場回帰したデータエンジニアが考える AI 時代のキャリア開発 / Career Development in the Age of AI Perspectives from a Hands-on Data Engineer
medley
0
460
見えない文脈を扱えるデータへ─ビジネスコンテキストを構造化するための第一歩 / Making Invisible Context Visible in Data
medley
0
120
Terraform Provider for TROCCO × AI で 半自動化する複数プロダクトの連携運用 / Semi-Automating Multi-Product Data Integration Ops with the Terraform Provider for TROCCO × AI
medley
0
610
Medley Philippines Candidate Guide
medley
0
160
TROCCO × Terraform × AI で kintone 連携も IaC 化 / TROCCO × Terraform × AI for kintone
medley
3
860
組織でAIをQAに活用する仕組みづくり / Scaling AI-Powered QA Across Your Organization
medley
1
2.2k
MagicPodを使い倒すメドレーの活用術 / How to utilize of MagicPod
medley
2
700
Other Decks in Programming
See All in Programming
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
650
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
310
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
250
flutter_test のその先へ — Flutter アプリの LLM 機能に「評価」という品質保証を
kosukesaigusa
0
140
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
210
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
490
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.2k
オーケストレーション記述言語 Katari
yukikurage
0
210
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.9k
AIが生成したコードは読むべきか?抽象化設計とコードの品質保証 / abstraction-design-and-quality
minodriven
12
7.7k
学びを記事・スライド・Xへ高速展開する― AI-assisted Learning Loopで回すコンテンツ生成術
ochtum
0
170
sbt 2.0: takeoff
eed3si9n
0
180
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
Mobile First: as difficult as doing things right
swwweet
225
10k
Navigating Weather and Climate Data
rabernat
0
570
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
290
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
For a Future-Friendly Web
brad_frost
184
11k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
510
Balancing Empowerment & Direction
lara
6
1.3k
Visualization
eitanlees
153
17k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
460
Transcript
CocoaPodsからSPMへ 安全に移行するための対応とつまづき 成瀬 稜雅/株式会社メドレー 人材プラットフォーム本部 プロダクト統括部 CTO室 株式会社メドレー 01
成瀬 稜雅 株式会社メドレー 人材プラットフォーム本部 プロダクト統括部 CTO室 Flutter でのモバイルアプリ開発に従事してい ます。 ContainerをSizedBox
or ColoredBox or DecoratedBoxに書き換えがちです。 株式会社メドレー 02
そもそも CocoaPods と SPM とは Before After CocoaPods SPM サードパーティ製(Ruby
製) Swift Package Manager 長く iOS 開発を支えてきた 2024年8月に maintenance mode を宣言 Apple 公式の依存管理ツール Xcode に統合されていて 追加のインストールが要らない 2026年12月2日 CocoaPods のレジストリが読み取り専用になる ©2026 MEDLEY, INC . 株式会社メドレー 03
なぜ移行しないといけないのか 読み取り専用になると 新しいバージョンを 公開できない Firebase・Sentry など SDK を更新できない 主要な SDK
は 新機能も すでに公開を 止め始めている セキュリティ修正も 受け取れない Flutter アプリも例外ではない iOS 側のネイティブ依存はこれまで CocoaPods で管理されてきた プラグインが使っている Firebase や Sentry も同じ → SPM 対応が必要 ©2026 MEDLEY, INC . 株式会社メドレー 04
Flutter の SPM 対応はどこまで来たか 2024.08.06 Flutter 3.24:SPM 対応が入る(opt-in・デフォルト OFF) 2024.08.13
CocoaPods が maintenance mode を宣言 2026.05.19 Flutter 3.44:デフォルトが SPM に反転(opt-out は可能) 2026.08.12 Flutter 3.47:上位100 iOS プラグインの92%が SPM 対応済 2026.12.02 CocoaPods のレジストリが読み取り専用に opt-out はできるが、公式ドキュメントは "In general, don't do this." と明言 特別な理由がない限り、早めに移行したほうがいい ©2026 MEDLEY, INC . 株式会社メドレー 05
移行は本当に数行 pubspec.yaml flutter: config: enable-swift-package-manager: true SPM 対応のプラグインは一括で移行(プラグインごとには選べない) 未対応のプラグインは CocoaPods
に残る → 両方が同居する構成になる 設定の追加は数行、作業は30分で終わった ©2026 MEDLEY, INC . 株式会社メドレー 06
移行の途中で3つの落とし穴にハマった CI でビルド 署名してアップロード Apple 側の検査 ① ② ③ CI
が固まって ビルドが 終わらない 署名が足りず アップロードで 弾かれる 権限が足りず アップロードで 弾かれる 前提:macOS の CI で 非公開の git 依存を トークン付き HTTPS で取得 前提:署名せずにアーカイブ し 書き出すときに署名 前提:なし (CI の構成によらず起きる) ②と③は同じアップロードの段階で別の理由で2回弾かれた ©2026 MEDLEY, INC . 株式会社メドレー 07
① CI が固まってビルドが終わらない iOS のビルドがエラーも出さずに最初で止まり、タイムアウトする 前提:社内の非公開パッケージを git 依存で使い、CI ではトークン付き URL
に差し替えて clone 原因:キーチェーンの確認ダイアログを待ち続けていた git の clone が成功 トークンが キーチェーンに 保存される SwiftPM が キーチェーンに 認証情報を聞く ダイアログを 出せず 永久に待つ 別のプロセスが保存した項目を読むには確認ダイアログが必要。でも CI には画面がない ©2026 MEDLEY, INC . 株式会社メドレー 08
① 対処:キーチェーンに保存させない PR #2289:.github/actions/pj_setup/action.yml の差分 対処 あわせて安全のため キーチェーンに保存させない 差し替えは対象リポジトリだけ credential
helper を無効にする(54行目) insteadOf の範囲を絞る(48行目) トークン付き HTTPS で非公開依存を取る macOS の CI なら、最初から入れておく ©2026 MEDLEY, INC . 株式会社メドレー 09
② 署名が足りず、アップロードで弾かれる 症状 TestFlight へのアップロードが「署名が不正」で弾かれる fastlane のログは「成功」。後続ジョブのタイムアウトで初めて気づく 原因 SPM が埋め込んだスタブに、リンカーの仮署名が残っていた
Sentry・Firebase の Privacy Manifest 用スタブ5つ(Sentry.framework など) 背景:なぜ署名せずにアーカイブしているのか CI では署名せずにアーカイブし、書き出すときに App Store Connect の API キーで署名している 証明書を CI に置かずに済み、年1回の証明書の更新も要らないため その代わり、アーカイブの中のフレームワークは自分で署名しないといけない ©2026 MEDLEY, INC . 株式会社メドレー 10
② 対処:フレームワークを署名し直す commit ad1153ea1:.github/workflows/qa_deploy.yml の差分(release_deploy.yml も同じ) 対処 書き出しの前に、Frameworks 内のフレームワークを すべて
ad-hoc 署名し直す CI のビルドステップに1行足すだけ(258行目) 署名せずにアーカイブしている CI なら、最初から入れておく ©2026 MEDLEY, INC . 株式会社メドレー 11
③ 権限が足りず、アップロードで弾かれる 「カメラの利用目的が書かれていない」と弾かれる(ITMS-90683) このアプリはカメラを使っていない DKCamera file_picker 画像ピッカー ファイル選択 DKImagePickerController カメラ部分。カメラ・位置
情報の API を参照 CocoaPods SPM 必要な部分だけ取り込めた 一式が入る 写真選択の部分(subspec)だけ カメラ部分は入らない 画像ピッカーを丸ごと取り込む カメラ部分も入り、検査で見つかる ©2026 MEDLEY, INC . 株式会社メドレー 12
③ 対処:利用目的を書く 今回の対処 Info.plist に利用目的を書く カメラ(NSCameraUsageDescription) 位置情報(NSLocationWhenInUseUsageDescription) 根本対処 file_picker 12
以降で依存が外れる ただし API に破壊的変更があるため、優先度を見て今回は利用目的の追加を選んだ SPM 対応済みのパッケージでも、SPM 版では依存を分けていないことがある ©2026 MEDLEY, INC . 株式会社メドレー 13
影響が出る範囲を絞り込む 公式ドキュメントが案内するのは「SPM 統合ができたか」の確認まで 動作の検証方法は自分たちで考える 変わらない 変わる Dart のコード(1行も変わらない) iOS ネイティブ依存の
Android リンク方式だけ UI・ビジネスロジック SDK のバージョンは変わっていない 影響が出るのはこの2つだけ ① ネイティブ連携を経由する機能 ©2026 MEDLEY, INC . ② ビルド・配布の流れ(①〜③の問題) 株式会社メドレー 14
ネイティブ連携を経由する8項目 Sentry Analytics Remote Config プッシュ通知 ディープリンク Adjust CocoaPods に
残ったプラグイン TestFlight 配布 動かなくなってもエラーが出ない クラッシュせず、データが送られなくなるだけ 起動して確認するだけでは気づけない ©2026 MEDLEY, INC . 株式会社メドレー 15
8項目を実際に動かして確かめる 一時コードを 仕込む ビルド番号入りの イベントと わざと投げるエラー TestFlight で配布 届いたかを 確かめる
確認できたら revert 本番と同じ 配布経路で試す GA4 リアルタイム Sentry コンソール 一時コードは 残さない GA4 は他の QA メンバーの操作と混ざる イベントにビルド番号を入れて、自分のビルドだと特定する ©2026 MEDLEY, INC . 株式会社メドレー 16
移行は数行、安全は数週間 設定は数行。でも安全に移行するには CI・署名・Apple の検査・ネイティブ連携の確認が必要だった Dart のテストが全部緑でも、変わったのは Dart の外側 1本目で全部経験したので、2本目は問題なく移行できた この発表を聞いた皆さんは「2本目」から始められます
CocoaPods 読み取り専用まで あと34日 まずは設定を数行入れて、移行できるか試すところから ©2026 MEDLEY, INC . 株式会社メドレー 17
None