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
iOSの画面の状態のアレコレを調査してみた
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ryu-nakayama
September 19, 2025
Programming
92
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
iOSの画面の状態のアレコレを調査してみた
mobile.stmn #13の登壇資料です
Ryu-nakayama
September 19, 2025
More Decks by Ryu-nakayama
See All by Ryu-nakayama
iOS機能開発のAI環境と起きた変化
ryunakayama
0
210
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
410
iOSアプリでフロントエンドと仲良くする
ryunakayama
0
140
「ジェン文字」使ってますか?
ryunakayama
0
73
Health Kit × Foundation Models でAIコーチを作ってみた
ryunakayama
0
350
作文ツール(Writing Tools)をアプリから制御する
ryunakayama
0
58
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
300
「ジェン文字」をアプリ内で使ってみよう
ryunakayama
0
200
SwiftDataと連携したWidgetを作ってみた
ryunakayama
1
220
Other Decks in Programming
See All in Programming
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
270
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
4.9k
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
190
さぁV100、メモリをお食べ・・・
nilpe
0
140
Vite+ Unified Toolchain for the Web
naokihaba
0
280
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
0
220
Inside Stream API
skrb
1
690
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
880
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
6
4k
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
190
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
120
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.4k
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The browser strikes back
jonoalderson
0
1.2k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
210
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
310
Building the Perfect Custom Keyboard
takai
2
790
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
200
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Transcript
iOSの画面の状態のアレコレを調査 してみた iOSアプリ開発グループ 機能開発チーム 中山 龍 2025年08月29日
2 中山 龍 (なかやま りゅう) • 株式会社kubell ◦ 新卒3年目のiOSエンジニア(23) ◦
「Chatwork」アプリの開発を担当 ◦ 機能開発チーム(愛称: Ciel) チームリーダー • 愛知県在住 ◦ 自己紹介 @ryu_develop 来月のiOSDCでブースを出すので ぜひお越しください
ARグラス買いました!
4 最近、ARグラス買いました XREAL SHOP より引用 前々から気になっていた『XREAL One Pro』を購入 してみました! iPhone・iPad・Mac・PS5などに繋いでどこでも大画
面を楽しんでいます オフィスに行った際にこれをつけて仕事をしていたら 「めっちゃ目立ってる人いた」って言われました
5 最近、ARグラス買いました XREAL SHOP より引用 XREAL One Proを使ってiPhoneのアプリを使用して いると稀に「このアプリは録画を禁止しています」 のように、使えないアプリがあることに気がつきま
した なので、「録画や画面ミラーリングが現在されてい る」など、画面の状態をアプリ側の処理で扱う方法 について調査してみました
01 | スクリーンショット
スクリーンショットを検知する UIApplication.userDidTakeScreenshotNotification という NSNotification.Name で検知することができる スクリーンショットを撮影
スクリーンショットを検知する(サンプル) NotificationCenter.default.addObserver( forName: UIApplication.userDidTakeScreenshotNotification, object: nil, queue: .main ) {
_ in // イベント発生時の処理 } イベント購読のサンプルコード
02 | 画面録画
画面録画を検知する UIScreen.capturedDidChangeNotification という NSNotification.Name で録画状態変更のイベントを検知することができる UIScreen.main.isCaptured で現在録画中かどうかを判定できる 録画 停止
画面録画を検知する(サンプル) NotificationCenter.default.addObserver( forName: UIScreen.capturedDidChangeNotification, object: nil, queue: .main ) {
_ in if UIScreen.main.isCaptured { // 録画が開始された際の処理 } else { // 録画が停止された際の処理 } } イベント購読のサンプルコード
03 | 外部ディスプレイ
外部ディスプレイの使用を検知する UIScreen.didConnectNotification という NSNotification.Name でスクリーンへの接続を検知することができる UIScreen.didDisconnectNotification という NSNotification.Name でスクリーンの切断を検知することができる 接続
切断
外部ディスプレイの使用を検知する UIScreen.didConnectNotification という NSNotification.Name でスクリーンへの接続を検知することができる UIScreen.didDisconnectNotification という NSNotification.Name でスクリーンの切断を検知することができる 接続
切断 ⚠ この方法は現在、非推奨となっている
外部ディスプレイの使用を検知する(推奨) scene(_:willConnectTo:options:) 接続 UIScene.willConnectNotification 切断 sceneDidDisconnect(_:) UIScene.didDisconnectNotification sceneのdelegateメソッドかUIScene由来のものが推奨されている
画面録画の検知と 外部ディスプレイについて
画面録画を検知している状態で外部ディスプレイを接続すると... 画面録画をしていないにも関わらず、ディスプレイを繋い だだけで録画中の判定になってしまう... → capturedDidChangeNotification や isCaptured で扱う ことができるCaptureというのは、画面録画だけでなく、外 部ディスプレイへの投影やAirPlayも含まれてしまうとのこ
と 参考 ・capturedDidChangeNotification ・isCaptured
画面録画を検知している状態で外部ディスプレイを接続すると... 画面録画をしていないにも関わらず、ディスプレイを繋い だだけで録画中の判定になってしまう... → capturedDidChangeNotification や isCaptured で扱う ことができるCaptureというのは、画面録画だけでなく、ミ ラーリングやAirPlayも含まれてしまうとのこと
参考 ・capturedDidChangeNotification ・isCaptured AR グラスで使えないアプリはこれが原因っぽい!! Captureの状態と画面接続の状態と組み合わせて判定しても、画面録画をNGにし つつ、ディスプレイ接続のみはOKというのはできない気がしました (ディスプレイ接続中の画面録画を検知できない) 何かいい方法やAPIをご存じの方がいたら教えてください
まとめ
まとめ 検知すること 方法 スクリーンショット UIApplication.userDidTakeScreenshotNotification 画面録画 (ディスプレイ接続などを含む) UIScreen.capturedDidChangeNotification (録画状態の変化) UIScreen.main.isCaptured
(録画状態の判定) 外部ディスプレイの使用(接続) scene(_:willConnectTo:options:) UIScreen.didDisconnectNotification 外部ディスプレイの使用(切断) sceneDidDisconnect(_:) UIScene.willDisconnectNotification • ARグラス接続状態でアプリが利用できない場合は、画面録画の検知に用いる Captureにディスプレイ接続も含まれていることでARグラス接続を画面録画 と認識して使用NGの処理をしてしまっているためだと考えられる • 画面録画とディスプレイ接続を区別する(画面録画は完全にNGにしつつ、ディ スプレイ接続をOKにする)のは難しそうだということがわかった
働くをもっと楽しく、創造的に