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
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
71
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
710
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
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
160
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
250
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
820
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
5
1.9k
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
790
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
330
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
150
React本体のコードリーディング
high_g_engineer
1
150
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
310
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.9k
Go 1.27 における memory allocation の高速化
andpad
0
250
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
120
Featured
See All Featured
Deep Space Network (abreviated)
tonyrice
0
260
The SEO Collaboration Effect
kristinabergwall1
1
520
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Color Theory Basics | Prateek | Gurzu
gurzu
0
430
First, design no harm
axbom
PRO
2
1.3k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
490
The Spectacular Lies of Maps
axbom
PRO
1
930
The Cult of Friendly URLs
andyhume
79
7k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
210
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
We Are The Robots
honzajavorek
0
300
WENDY [Excerpt]
tessaabrams
11
39k
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のまま 解決していないやんけ…