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
120
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
AIに「任せない」という選択
ryunakayama
0
66
iOS機能開発のAI環境と起きた変化
ryunakayama
0
250
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
440
iOSアプリでフロントエンドと仲良くする
ryunakayama
0
160
「ジェン文字」使ってますか?
ryunakayama
0
95
Health Kit × Foundation Models でAIコーチを作ってみた
ryunakayama
0
370
作文ツール(Writing Tools)をアプリから制御する
ryunakayama
0
78
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
330
「ジェン文字」をアプリ内で使ってみよう
ryunakayama
0
220
Other Decks in Programming
See All in Programming
新卒PdEのリアル
ryu1013
1
390
Deep dive into the select statement (GopherCon UK)
jespino
0
170
Flow は今どうなっているか
mizdra
PRO
0
920
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.4k
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
370
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
110
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
5
1.7k
初めての模倣学習とVLA
natsutan
0
470
リアルな遅延を測る仕様
kota_yata
1
140
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.3k
信頼性の目標を誰も求めてない
shubox
0
490
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.7k
Building AI with AI
inesmontani
PRO
1
1.2k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
260
Optimizing for Happiness
mojombo
378
71k
The SEO Collaboration Effect
kristinabergwall1
1
550
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Ruling the World: When Life Gets Gamed
codingconduct
0
320
Embracing the Ebb and Flow
colly
88
5.2k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
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にする)のは難しそうだということがわかった
働くをもっと楽しく、創造的に