Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcod...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
yimajo
January 23, 2026
Programming
900
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
#potatotips 94で発表する資料
ダイアモンド問題が失敗しているということを書いてますが、その原因についてはここの記述は古く間違っています。
yimajo
January 23, 2026
More Decks by yimajo
See All by yimajo
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
200
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
720
11年かかって やっとVibe Codingに 時代が追いつきましたね
yimajo
1
400
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
3
340
良いテストコードのために悪いテストコードを理解する - 不安定なテスト編: iOSアプリ開発ユニットテストの場合
yimajo
22
6.8k
TCAの Shared Stateって どういう仕組みになってんの?
yimajo
0
2.7k
Swift 5.9 からの Observation はiOS17 未満 からも使えて struct の変更検知もできるんすかね?
yimajo
2
1.2k
不安定なテストは200種類あんねん
yimajo
3
1.2k
TCA v0.19.0からのSwitchStore/CaseLetが良い
yimajo
0
2.1k
Other Decks in Programming
See All in Programming
Go 1.27 における memory allocation の高速化
andpad
0
270
バグを直したら useEffect が消えた
colorful12
3
660
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
2k
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.9k
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
150
How I Won Prize Money at a Hackathon Using Codex and Symphony Alpha
yasei_no_otoko
0
110
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4.9k
SlackアプリとLambdaの 連携を構築した話
pawn_4_s
1
130
今さら聞けない .NET CLI
htkym
0
200
AIを紡ぐPMのお話
swdtkuy
0
120
Flow は今どうなっているか
mizdra
PRO
0
650
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
1.1k
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
So, you think you're a good person
axbom
PRO
2
2.1k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
570
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Paper Plane (Part 1)
katiecoart
PRO
1
10k
Accessibility Awareness
sabderemane
1
180
First, design no harm
axbom
PRO
2
1.3k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.4k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
440
Transcript
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編 2026.1.23 #potatotips 94 @yimajo
ビルドをOSS版に差し替える どういう仕組み? • GUIのXcodeもビルドシステムをサービスとして切り出している • Xcodeはサービスとプロセス間通信をしてる Xcode SWBBuildService (旧名: XCBBuildService)
ビルドをOSS版に差し替える どういう仕組み? • GUIのXcodeもビルドシステムをサービスとして切り出している • Xcodeはサービスとプロセス間通信をしてる • 切り出したswift-buildをデバッグ実行さえもできる Xcode OSSのswift-buildを参照するよう
に環境変数でパスを変える Xcodeによって本来 起動されるswift-build cloneしたswift-build
ビルドをOSS版に差し替えデバッグする swift-buildをXcodeでデバッグ • GitHubからswift-buildをgit clone • Xcodeでswift-build/Package.swiftを開く • Debug >
Attach to Process by PID or Name • ̀SWBBuildServiceBundlèを指定 • ブレークポイントを貼ってswift-buildをとめられるようにしておく • $ swift package --disable-sandbox launch-xcode • 自動でXcodeが開きプロジェクトを指定できるようになるので指定 • ビルドする
ビルドをOSS版に差し替える SWBBuildServiceBundle 4: Xcodeはプロジェクトを開くだけでも prebuildが動くはずでそのとき XCBBUILDSERVICE̲PATHのswift-build が起動するはず。 2:プロセスに対して SWBBuildServiceBundle という名でAttachしとくと
Xcodeで開いたswift-build側が デバッガーとして使える 1:swift-buildをXcodeで開く $ open Package.swift $ swift package --disable-sandbox launch-xcode 3: Xcodeが開き プロジェクトを選択できる。 そのXcodeでは環境変数 XCBBUILDSERVICE̲PATHを 切り替え、 swift-build自体のパスが渡る。 Xcode: ビルド時にXcodeを swift-buildに差し替えたい みなさんのproject
これで自分のプロジェクトでビルド結果がおかしな結果に なった時、ビルドの過程を実際にデバッグ実行させられる -LTは以上です。ご清聴ありがとうございました-
おまけ
ビルド結果がおかしい とは何? そもそもswift-buildって何してんの?
swift-buildって何すんの? 1. 依存の整理 1. 出力: TargetBuildGraph 2. ビルド計画(依存の調整) ビルド計画フェーズは Xcode内のTargetや
Package.swiftで定義した依存を解決し 1. 入力: TargetBuildGraph 2. 出力: BuildPlan 3. インクリメンタルビルド判定 4. Swiftコンパイル 5. C/Objective-Cコンパイル ライブラリ(フレームワーク)を 自動でDynamic/Static Linkに 切り替えてくれる 6. Linker App 7. アセットの処理 Static Lib 依存関係に問題なく指定もなければStatic Link
実際にプロジェクトを作ってみよう あえてダイアモンド依存問題のあるようにつくる
何がDynamic/Staticか見てみよう otool/nmコマンドで中身がわかる AppName.app AppName otool -LはDynamic Linkしているパスがわかる AppName.debug.dylib Contracts.framework Frameworks/
EF.framework Infrastructure.framework Contracts.framework nm -gUはファイルの構造がわかるのでswift-demangleとくみ合わせると Static Linkされてるかがわかるので、 型が見つからなければStatic Linkでないとみなせる。
無限ループに ならないように 最後の値と現在の値が 違う場合にのみ ループを続ける処理。。。 これはループは抜けてるけど 問題は解決していない Diamondsが2のまま 解決していないやんけ…