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
UIKitにSwiftUIを埋め込んだら 罠にハマった話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Hayate Kuronuma
May 12, 2026
Programming
16
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
UIKitにSwiftUIを埋め込んだら 罠にハマった話
Hayate Kuronuma
May 12, 2026
More Decks by Hayate Kuronuma
See All by Hayate Kuronuma
本番だけWebViewが500エラーになる
hayatekuronuma
0
54
ユーザー価値を届け続けるために、ウォンテッドリーが大切にしている文化
hayatekuronuma
0
9
Other Decks in Programming
See All in Programming
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
600
社内AIエージェント「Askワンバン」における コストチューニングの取り組み
t0yohei
0
130
まずはコードより業務と向き合う:テーブル解体のためにPdMを呼んだ話
sakawe_ee
0
100
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
1.2k
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
6
1.3k
Seven New Principles of Software Engineering
yegor256
0
420
SFCで実現する病院・医療システムの動的組み立て式UI
koukimiura
1
160
Next.js: The final boss of Web Performance
guaca
0
380
AI-Powered Domain-Driven Design
ziobrando
0
370
AIが生成したコードは読むべきか?抽象化設計とコードの品質保証 / abstraction-design-and-quality
minodriven
14
8.2k
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
2.5k
GraphQL の onError と Nullability のこれから
quramy
0
200
Featured
See All Featured
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
560
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
890
Crafting Experiences
bethany
1
410
Are puppies a ranking factor?
jonoalderson
2
4.1k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
650
Designing Experiences People Love
moore
143
24k
Amusing Abliteration
ianozsvald
1
370
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
340
Writing Fast Ruby
sferik
630
63k
RailsConf 2023
tenderlove
30
1.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Transcript
© 2026 Wantedly, Inc. UIKitにSwiftUIを埋め込んだら 罠にハマった話 #24 Mobile勉強会 ウォンテッドリー ×
チームラボ × Sansan Apr.21 2026 - Hayate Kuronuma
© 2026 Wantedly, Inc. 名前:黒沼 疾風 入社日:2025.09 ポジション:iOSエンジニア 性格診断:コントリビューター 自己紹介
hayate_k_eng
© 2026 Wantedly, Inc. 01 やったこと 02 起きた不具合 03 原因
04 修正と教訓 目次
© 2026 Wantedly, Inc. やったこと 01
© 2026 Wantedly, Inc. UIKitベースの応募モーダルに、 SwiftUIのチェックボタン群を 埋め込んだ • UIHostingController で
ラップ • 親子関係を定義: addChild → addSubview UIKitの画面にSwift UIを部分導入
© 2026 Wantedly, Inc. 同一モーダル内で複数 Sceneを切り替えて表示している UIKitの画面にSwift UIを部分導入 options loading
completed
© 2026 Wantedly, Inc. 1. モーダル内の Viewを全て非表示 2. 対象のSceneだけ表示 UIKitの画面にSwift
UIを部分導入 Control Logic isHidden = true / false で制御
© 2026 Wantedly, Inc. 起きた不具合 02
© 2026 Wantedly, Inc. プレミアムプランユーザーは応募後にメッセージ送信をすることができる 前提
© 2026 Wantedly, Inc. プレミアムユーザーが メッセージを入力出来なくなった! (キーボードの表示にとても時間がかかるようになった)
© 2026 Wantedly, Inc. 原因 03
© 2026 Wantedly, Inc. 起きていたこと CPU負荷:高 メッセージ入力画面において、 CPU負荷が 高まっている メソッドの呼び出し回数
viewDidLayoutSubviews() 約57,000回 の異常な呼び出しを検知
© 2026 Wantedly, Inc. 仮説:キーボード表示がトリガー? キーボードなし viewDidLayoutSubviews は1回だけになった キーボードあり 57,000回のレイアウトループが発生
結論:キーボード表示がトリガーだった
© 2026 Wantedly, Inc. レイアウトループの流れ 1. メッセージ入力モーダルでキーボード表示 2. キーボード表示時のレイアウト調整で layoutIfNeeded()を実行
3. Viewのレイアウト更新が走る 4. isHiddenで隠していたUIHostingViewがレイアウト更新対象になる 5. UIHostingViewがさらにレイアウト更新を要求しているよう(ブラックボックス)
© 2026 Wantedly, Inc. 修正と教訓 04
© 2026 Wantedly, Inc. HostingControllerをViewから完全に削除 レイアウトループの原因となっていた UIHostingControllerを整理し、Viewから完全に削除 表示された🙌
© 2026 Wantedly, Inc. 表示しないHostingViewは removeしよう 教訓・まとめ isHiddenで隠しても、View階層に残ったUIHostingControllerが レイアウトループの原因になりうるケースがある
© 2026 Wantedly, Inc.
© 2026 Wantedly, Inc. ご清聴ありがとうございました!