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
iOSDC.pdf
Search
ビスター
September 20, 2025
Programming
2
930
iOSDC.pdf
ビスター
September 20, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
CSC307 Lecture 07
javiergs
PRO
0
550
CSC307 Lecture 06
javiergs
PRO
0
680
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.8k
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
400
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.5k
Grafana:建立系統全知視角的捷徑
blueswen
0
330
Apache Iceberg V3 and migration to V3
tomtanaka
0
150
CSC307 Lecture 02
javiergs
PRO
1
770
CSC307 Lecture 01
javiergs
PRO
0
690
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
190
FOSDEM 2026: STUNMESH-go: Building P2P WireGuard Mesh Without Self-Hosted Infrastructure
tjjh89017
0
150
Implementation Patterns
denyspoltorak
0
280
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
174
15k
Code Reviewing Like a Champion
maltzj
527
40k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
240
Leo the Paperboy
mayatellez
4
1.4k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
300
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
55
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
140
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
72
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
430
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.6k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
680
Transcript
4XJGU6*࣌ͷεΫγϣอޢ ʙηΩϡΞͳ7JFXͷ࡞Γํʙ #ZϏελʔ!-NTTZOD J04%$+BQBO݄ʢʣʙ 5SBDL %
"CPVU.F Ϗελʔ 7JTUBS • ݸਓ։ൃ • 41.ύοέʔδ։ൃ • 1SJWBUF"1*ݚڀ
ࠓεΫγϣอޢ͕͔ͬͨ • .JDSPTPGU 5FBNT ʮ1SFWFOU4DSFFO$BQUVSFʯػೳൃද • 9$IBU ʮ#MPDL TDSFFOTIPUTʯػೳެ։ •
J1IPOFͷϚΠφϯόʔΧʔυʢຊʣ ΥϨοτΞϓϦͰඪ४࣮ࡁΈ
͑Δ"1*ʁ
ը໘ऩؔ࿈ͷ"1* • @Environment(¥.isSceneCaptured) • UITraitCollection.sceneCaptureState • UIScreen.isCaptured Deprecated
εΫϦʔϯγϣοτؔ࿈ͷ"1* •UIApplication.userDidTakeScreenshotNot ification •UIApplication.UserDidTakeScreenshotMes sage ֤OS 26+ ͍ͣΕDidͳͷͰࣄલݕ͕ग़དྷͳ͍
εΫϦʔϯγϣοτؔ࿈ͷ"1* •func privacySensitive() -> some View •func contentCaptureProtected() -> some
CompositorContent macOS 26 & visionOS 26 Only
εΫϦʔϯγϣοτؔ࿈ͷ"1* •func contentCaptureProtected( _ isActive: Bool = true ) ->
some View visionOS 26.0+ only iOSʹల։͞Ε͍ͯͳ͍...
J04ͷతͳ"1*ͰεΫγϣ͔Β ҙͷ7JFXΛอޢ͢Δ͜ͱͰ͖ͳ͍
6*,JUͰͲ͏͢Δʁ
6*,JUͰͲ͏͢Δʁ •UITextFieldͷisSecureTextEntryΛར༻͢Δ •UITextFieldͷSubview • _UITouchPassthroughView • _UITextLayoutCanvasView อޢ͍ͨ͠7JFXΛαϒϏϡʔʹ͢Δ
4XJGU6*ͰͷϫʔΫΞϥϯυ CaptureProtectedViewController<Content: View> - containerView: UIView? _UITextLayoutCanvasViewΛऔΓग़͢ - isActive: Bool
- content: () -> Content + init(_: Bool, @ViewBuilder content: @escaping () -> Content) + viewDidLoad() UIHostingControllerΛར༻ͯ͠4XJGU6*ͷ7JFXΛ _UITextLayoutCanvasViewͷαϒϏϡʔʹ͢Δ
4XJGU6*ͰͷϫʔΫΞϥϯυ UIHostingController 4XJGU6*$POUFOU UIViewController Representable CaptureProtected ViewController 4XJGU6*ͷ7JFX
4XJGU6*ͰͷϫʔΫΞϥϯυ • .environment()ͷө ࢀߟ 88%$6*,*UτϨΠτγεςϜͷ׆༻ • ϨΠΞτͷ่Ε • *NBHF3FOEFSFS"1*ͷ੍ݶ
4XJGU6*ͰͷϫʔΫΞϥϯυ •UITextFieldͷisSecureTextEntryΛར༻͢Δ •UITextFieldͷSubview • _UITouchPassthroughView • _UITextLayoutCanvasView อޢ͍ͨ͠7JFXΛαϒϏϡʔʹ͢Δ
ͳͥ_UITextLayoutCanvasView εΫϦʔϯγϣοτʹөΒͳ͍ʁ
ΈΛௐΔ •-[UITextField setSecureTextEntry:]Λ 4ZNCPMJD#SFBLQPJOUͱͯ͠ηοτ ˠελοΫτϨʔεΛௐΔ
ΈΛௐΔ $"-BZFSΦϒδΣΫτʹରͯ͠ηϨΫλ TFU%JTBCMF6QEBUF.BTLͷϝιουΛݺͼग़͍ͯ͠Δ Y$"-BZFS YTFU%JTBCMF6QEBUF.BTL YYPSY 9DPEFͰͷελοΫτϨʔεͷදࣔ
࣮ݧ "QQ3FWJFX(VJEFMJOFT⚠ 4PGUXBSF3FRVJSFNFOUT"QQTNBZPOMZVTFQVCMJD"1*T IUUQTEFWFMPQFSBQQMFDPNBQQTUPSFSFWJFXHVJEFMJOFTTPGUXBSFSFRVJSFNFOUT
࣮ݧ 9DPEF--%#ίϚϯυʹΑΔ$"-BZFSͷશϝιουදࣔ
ΈΛௐΔ •0CKFDUJWF$༝དྷͷ,FZ7BMVF$PEJOHΛར༻ ࣮ݧ༻ͷ؆қίʔυ
࣮ݧ •EJTBCMF6QEBUF.BTL ʹΑ੍ͬͯޚ͞Ε͍ͯΔ →4QSJOH#PBSEʹΑΔࡱӨʹ ֘ϨΠϠʔؚ͕·Εͳ͍
4XJGU6*Ͱͷར༻ํ๏ͷఏҊ
4XJGU6*Ͱͷར༻ํ๏ •ϨΠϠʔͱؚͯ͠·Εແ͍͜ͱΛར༻͢Δ .mask(_:)
UIViewRepresentable _UITextLayoutCanvasView ͳͲ EJTBCMF6QEBUF.BTL͕ઃఆ͞Εͨ-BZFSΛ࣋ͭ6*7JFX backgroundColor = .black .mask { }
εΫγϣͷॠ͚ؒͩөΔ7JFXम০ࢠ
•func luminanceToAlpha() -> some View "EETBMVNJOBODFUPBMQIBF⒎FDUUPUIJTWJFX J04 J1BE04
.BD$BUBMZTU NBD04 UW04 WJTJPO04 XBUDI04 ࢀߟ EFWFMPQFSBQQMFDPN
.mask { } .background(.white) .compotisionGroup() .luminanceToAlpha()
ࢀߟ •AVSampleBufferDisplayLayer() .preventsCapture *OEJDBUFTUIBUJNBHFEBUBTIPVMECFQSPUFDUFE GSPNDBQUVSFࢀߟ EFWFMPQFSBQQMFDPN อޢର*04VSGBDFTͰͳ͍
ࢀߟ •'BJS1MBZ4USFBNJOH ಈըίϯςϯπ৴ͷ߹ʹར༻Մೳ ࢀߟ EFWFMPQFSBQQMFDPN
ҙ •ίϯςϯπͷෳࢭใ࿙Ӯࢭ •εΫγϣอޢ͞Ε͍ͯΔ͔ςετ •ར༻ऀʹεΫγϣอޢΛΒͤΔ ˠอޢΛ"MFSUͰ௨ɺεΫγϣʹอޢ͍ͯ͠ΔࢫΛهࡌ
None
࠷ޙʹ ίʔυྫ αϯϓϧύοέʔδ