Slide 1

Slide 1 text

tsuboyan 【スマホの熱中症対策】 ThermalState API 実践活用ガイド 1 iOSDC Japan 2025 track D

Slide 2

Slide 2 text

Luup, Inc. - Confidential and Proprietary 2 2020.04~ ● 新卒⼊社 ● iOSエンジニア 2023.11~ ● iOSエンジニア tsuboyan (⼤坪 敦) 株式会社Luup, iOS エンジニア 2

Slide 3

Slide 3 text

© all rights reserved Luup, Inc. 今年の夏も暑かったですね🥵 導⼊ 3

Slide 4

Slide 4 text

© all rights reserved Luup, Inc. 今年も ”暑さ”記録更新 導⼊ 4 引用元: ウェザーニュース, https://weathernews.jp/news/202508/270086/

Slide 5

Slide 5 text

© all rights reserved Luup, Inc. 気温35度以上の猛暑が広範囲に 導⼊ 5 引用元:tenki.jp

Slide 6

Slide 6 text

© all rights reserved Luup, Inc. 引⽤元: tenki.jp 気温35度以上の猛暑⽇も増加 導⼊ 6 引用元:tenki.jp

Slide 7

Slide 7 text

© all rights reserved Luup, Inc. 35℃以上 実はこの温度、iPhone とも関連があります 導⼊ 7 猛暑日

Slide 8

Slide 8 text

© all rights reserved Luup, Inc. iPhone 17 仕様 導⼊ 8 引用元:https://www.apple.com/jp/iphone-17/specs/

Slide 9

Slide 9 text

© all rights reserved Luup, Inc. iPhone 17 仕様 導⼊ 9 引用元:https://www.apple.com/jp/iphone-17/specs/

Slide 10

Slide 10 text

© all rights reserved Luup, Inc. iPhone 17 仕様 導⼊ 10 引用元:https://www.apple.com/jp/iphone-17/specs/

Slide 11

Slide 11 text

© all rights reserved Luup, Inc. 引⽤元: tenki.jp iPhone も想定外の暑さ🫠 導⼊ 11

Slide 12

Slide 12 text

© all rights reserved Luup, Inc. 導⼊ iPhone がアツアツになると 何が起こるのか🔥 12

Slide 13

Slide 13 text

© all rights reserved Luup, Inc. ``` デバイス内部の温度が通常の動作温度範囲を超えると、次のような変化が見られる 場合があり ます。
 ● 充電が遅くなる、停止する 
 ● ディスプレイが暗くなる 、またはディスプレイに何も表示されなくなる 
 ● 無線が低電力状態になると、モバイル通信の電波が弱くなる ことがあります。
 ● カメラのフラッシュやその他のカメラ機能が一時的に無効 になる
 ● 一部のアプリや機能で、フレームレートの低下や処理時間の増加により 
 パフォーマンスが低下 する ``` Appleのサポートドキュメントに記載あり 導⼊ 13 引用元: https://support.apple.com/ja-jp/118431

Slide 14

Slide 14 text

© all rights reserved Luup, Inc. サーマルスロットリング:ハードウェア保護のためCPUやGPUなどのパフォーマン スが抑制される → 結果としてアプリの動作が遅くなり、ユーザ体験が悪化するため、 きちんと熱さをハンドリングをして対策することが、UX観点でも重要 なぜ熱くなるとパフォーマンスが落ちるのか 導⼊ 14

Slide 15

Slide 15 text

© all rights reserved Luup, Inc. iPhone の”熱さ”を 計測して対策したい🤔 導⼊ 15

Slide 16

Slide 16 text

© all rights reserved Luup, Inc. ThermalState の出番 ThermalState について 16

Slide 17

Slide 17 text

© all rights reserved Luup, Inc. 熱の計測をするには - ThermalState API 4段階で熱状態を取得可能 ThermalState について ThermalState 説明 Nominal 通常 Fair わずかに発熱 Serious 大きく発熱 Critical 著しく発熱。システムへの影響大 17

Slide 18

Slide 18 text

© all rights reserved Luup, Inc. import Foundation let thermalState = ProcessInfo.processInfo.thermalState ThermalState について ThermalState の取得⽅法 18

Slide 19

Slide 19 text

© all rights reserved Luup, Inc. ThermalState について ThermalState の取得⽅法 import Foundation let thermalState = ProcessInfo.processInfo.thermalState switch thermalState { case .nominal: case .fair: case .serious: case .critical: @unknown default: } 19

Slide 20

Slide 20 text

© all rights reserved Luup, Inc. ThermalState について ThermalState の変更を検知する 20 NotificationCenter.default.addObserver( self, selector: #selector(thermalStateDidChange), name: ProcessInfo.thermalStateDidChangeNotification, object: nil ) @objc func thermalStateDidChange() { print("Thermal state changed!") }

Slide 21

Slide 21 text

© all rights reserved Luup, Inc. iPhone の”熱さ”を 計測できるように👏 ThermalState について 21

Slide 22

Slide 22 text

© all rights reserved Luup, Inc. どのくらい発熱したら ThermalState の値が変化するか ThermalState について 22

Slide 23

Slide 23 text

© all rights reserved Luup, Inc. ThermalState の変化要因 ThermalState が変化する要因 外部要因 直射⽇光や、周囲の気温など、外から与えられる熱 内部要因 CPUやモニター、バッテリーなど、スマホ⾃⾝の動作による発熱 23

Slide 24

Slide 24 text

© all rights reserved Luup, Inc. ThermalState の変化要因 ThermalState が変化する要因 外部要因 直射⽇光や、周囲の気温など、外から与えられる熱 内部要因 CPUやモニター、バッテリーなど、スマホ⾃⾝の動作による発熱 24 → ⾼負荷をかける → 直射⽇光下におく

Slide 25

Slide 25 text

© all rights reserved Luup, Inc. ※ iPhoneの発熱により、バッテリー寿命低下など悪影響が出る可能性があります。 今回の検証では、端末に異常がないか含め監視しながら検証を⾏いました。 ※ 検証結果についても、使⽤する端末の種類や状態‧気候など条件によって結果が ⼤きく変わる可能性があります。 25 検証上の注意 ThermalState が変化する要因

Slide 26

Slide 26 text

© all rights reserved Luup, Inc. 高負荷による発熱の検証 26 ThermalState が変化する要因

Slide 27

Slide 27 text

© all rights reserved Luup, Inc. 負荷をかけるアプリを作り検証 27 ● CPUに⾼負荷をかける ○ 無限に三⾓関数の計算をする ● GPUに⾼負荷をかける ○ 多数の3Dオブジェクトにリアルな影や物理 ベースの質感を設定 ThermalState が変化する要因

Slide 28

Slide 28 text

© all rights reserved Luup, Inc. 28 このアプリの実⾏中のCPU使⽤率は500%超え ThermalState が変化する要因

Slide 29

Slide 29 text

© all rights reserved Luup, Inc. 29 Energy Impact も Very High ThermalState が変化する要因

Slide 30

Slide 30 text

© all rights reserved Luup, Inc. ● 屋内で実施 ● 室温:27度 ● 使⽤端末:iPhone 12 Pro 検証⽤のアプリを実⾏ 30 ThermalState が変化する要因 実施環境

Slide 31

Slide 31 text

© all rights reserved Luup, Inc. ThermalState の変化にかかった時間 ● Nominal (通常) → Fair (やや熱) :70秒 ● Fair (やや熱) → Serious :40秒 ● Serious → Critical :- 検証⽤のアプリを実⾏ 31 結果 ThermalState が変化する要因 ThermalState が変化する要因

Slide 32

Slide 32 text

© all rights reserved Luup, Inc. 直射日光による発熱の検証 32 ThermalState が変化する要因

Slide 33

Slide 33 text

© all rights reserved Luup, Inc. ● 実施⽇:9/17 AM 10:30 ● 外気温:約30度 ● 使⽤端末:iPhone 12 Pro 直射⽇光下で検証 33 ThermalState が変化する要因 検証環境

Slide 34

Slide 34 text

© all rights reserved Luup, Inc. ThermalState の変化にかかった時間 ● Nominal → Fair :40秒 ● Fair → Serious :85秒 ● Serious → Critical :115秒 直射⽇光下で検証 34 ThermalState が変化する要因 結果

Slide 35

Slide 35 text

© all rights reserved Luup, Inc. ThermalState の変化にかかった時間 ● Nominal → Fair :40秒 ● Fair → Serious :85秒 ● Serious → Critical :115秒 ● Critical → ⾼温注意警告:236秒 直射⽇光下で検証 35 ThermalState が変化する要因 結果

Slide 36

Slide 36 text

© all rights reserved Luup, Inc. 警告が出た時のディスプレイ⾯は 52.8℃ に到達 直射⽇光下で検証 36 ThermalState が変化する要因 結果

Slide 37

Slide 37 text

© all rights reserved Luup, Inc. 直射日光 + 高負荷 37 ThermalState が変化する要因

Slide 38

Slide 38 text

© all rights reserved Luup, Inc. ThermalState の変化にかかった時間 ● Nominal → Fair :35秒 ● Fair → Serious :30秒 ● Serious → Critical :30秒 直射⽇光 + ⾼負荷で検証 38 結果 ThermalState が変化する要因

Slide 39

Slide 39 text

© all rights reserved Luup, Inc. スクロールのカクツキが発⽣ フラッシュライトが点灯せず 実験直後 (Critical状態) のiPhoneの様⼦ 39 ThermalState が変化する要因

Slide 40

Slide 40 text

© all rights reserved Luup, Inc. 検証まとめ 40 ThermalState が変化する要因 ThermalState が切り替わるまでの時間 高負荷 直射日光 高負荷 + 直射日光 Nominal → Fair 70秒 40秒 35秒 Fair → Serious 40秒 85秒 30秒 Serious → Critical - 115秒 30秒

Slide 41

Slide 41 text

© all rights reserved Luup, Inc. モビリティアプリ(LUUP)での 実測データ モビリティアプリでの実測データ 41

Slide 42

Slide 42 text

LUUPとは 電動⼩型モビリティのシェアリングサービス 42

Slide 43

Slide 43 text

© all rights reserved Luup, Inc. LUUP アプリの基本機能 注意喚起 ナビ 返却 43 車両・ポートの予約 ライド前 ライド直前 ライド中 ライド後 モビリティアプリでの実測データ

Slide 44

Slide 44 text

© all rights reserved Luup, Inc. 引⽤元: tenki.jp ライド中は スマートフォンホルダーに iPhone がセットされる想定 44 モビリティアプリでの実測データ

Slide 45

Slide 45 text

© all rights reserved Luup, Inc. ライド終了直前に ThermalState をログとして仕込む 注意喚起 ナビ 返却 45 車両・ポートの予約 ライド前 ライド直前 ライド中 ライド後 モビリティアプリでの実測データ

Slide 46

Slide 46 text

© all rights reserved Luup, Inc. ライド終了直前に ThermalState をログとして仕込む 注意喚起 ナビ 返却 46 車両・ポートの予約 ライド前 ライド直前 ライド中 ライド後 モビリティアプリでの実測データ ログ仕込みポイント

Slide 47

Slide 47 text

© all rights reserved Luup, Inc. 結果 47 モビリティアプリでの実測データ

Slide 48

Slide 48 text

© all rights reserved Luup, Inc. ThermalState の割合の推移 (6⽉2⽇) 48 モビリティアプリでの実測データ 天気 曇り ☁ 最高気温 25.0 ℃ 平均気温 20.1 ℃ 東京の天気 (気象庁発表)

Slide 49

Slide 49 text

© all rights reserved Luup, Inc. ThermalState の割合の推移 (8⽉31⽇) 49 モビリティアプリでの実測データ 東京の天気 (気象庁発表) 天気 晴 ☀ 最高気温 36.8 ℃ 平均気温 30.9 ℃

Slide 50

Slide 50 text

© all rights reserved Luup, Inc. ThermalState の割合の推移 (8⽉31⽇) 50 モビリティアプリでの実測データ 東京の天気 (気象庁発表) 天気 晴 ☀ 最高気温 36.8 ℃ 平均気温 30.9 ℃

Slide 51

Slide 51 text

© all rights reserved Luup, Inc. ThermalState の割合の推移 (8⽉31⽇) 51 日の出 (5:12) 日の入 (18:10) 正午 モビリティアプリでの実測データ 天気 晴 ☀ 最高気温 36.8 ℃ 平均気温 30.9 ℃ 東京の天気 (気象庁発表)

Slide 52

Slide 52 text

© all rights reserved Luup, Inc. ThermalState の割合の推移 (8⽉31⽇) 52 日の出 (5:12) 日の入 (18:10) 正午 モビリティアプリでの実測データ 東京の天気 (気象庁発表) 天気 晴 ☀ 最高気温 36.8 ℃ 平均気温 30.9 ℃

Slide 53

Slide 53 text

© all rights reserved Luup, Inc. 6⽉〜8⽉にかけての13時頃の ThermalState の割合変化 53 モビリティアプリでの実測データ

Slide 54

Slide 54 text

© all rights reserved Luup, Inc. ● ThermalState には 時間帯・季節の気温変化が明確に反映 されていた ● LUUPアプリでは、内部要因よりも外部気温の影響が大きい ことが示唆された ● 特に 猛暑日の正午頃は Serious 以上の割合が急増 し、処理性能低下によってUX に影響した可能性があった 考察 54 モビリティアプリでの実測データ

Slide 55

Slide 55 text

© all rights reserved Luup, Inc. アプリが取れる熱の対策 アプリが取れる対策 55

Slide 56

Slide 56 text

© all rights reserved Luup, Inc. ThermalState の変化要因ごとの対策が必要 外部要因 直射⽇光や、周囲の気温など、外から与えられる熱 内部要因 CPUやモニター、バッテリーなど、スマホ⾃⾝の動作による発熱 56 → パフォーマンスを落とす → 涼しいところで使う (ように 促す) アプリが取れる対策

Slide 57

Slide 57 text

© all rights reserved Luup, Inc. 57 パフォーマンスを落とす⽬安 ThermalState 開発者がやった方がいいこと (例) ポイント Fair - バックグラウンド処理やプリフェッチを控える ユーザー体験はそのまま、裏方 の処理を減らす Serious - ネットワークやBluetoothなどのI/O操作を削減 - 位置情報の精度要求レベルを下げる - FPSを下げる・アニメーション簡易化 ユーザー体験を少し落としてでも 熱を抑える Critical - ユーザーインタラクションに必要な最小限の機能に 抑える アプリが「落ちない」ことを最優先 アプリが取れる対策

Slide 58

Slide 58 text

© all rights reserved Luup, Inc. Thermal State のデバッグ fair, serious, critical の状態を再現可能 58 アプリが取れる対策

Slide 59

Slide 59 text

© all rights reserved Luup, Inc. 59 詳しくは、パフォーマンスの最適化に関するWWDCセッ ションやドキュメントも参照ください! WWDC’19: 不利なネットワークと温度条件に向けて設計する https://developer.apple.com/jp/videos/play/wwdc2019/422/ WWDC’22: 電⼒の制限:バッテリー消費の改善 https://developer.apple.com/jp/videos/play/wwdc2022/10083/ ドキュメント: エネルギー効率とユーザーエクスペリエンス https://developer.apple.com/library/archive/documentation/Performance/Con ceptual/EnergyGuide-iOS/index.html#//apple_ref/doc/uid/TP40015243 アプリが取れる対策

Slide 60

Slide 60 text

© all rights reserved Luup, Inc. ● iPhoneが熱くなるとパフォーマンスが低下し、ユーザー体験(UX)が悪化する ● ThermalState で、端末の発熱を4段階で検知できる ● 検証の結果、直射⽇光下 + ⾼負荷環境だと、2分たらずでcritical(著しい発熱)状態に ● 屋外で使われるアプリ (モビリティアプリ:LUUP) では、季節‧天候‧時間帯ごとに発 熱の度合いが⼤きく変わる ● システムのパフォーマンスの調整や、使⽤環境の変更を促すことでスマホの熱中症を 予防しよう まとめ 60 iPhoneの「熱中症」について知っておきたいこと

Slide 61

Slide 61 text

© all rights reserved Luup, Inc. 61 おまけ:サクッと ThermalState を確認する⽅法 SensorsCatalog アプリ(約3MB) をインストールして、あなたのiPhoneの ThermalState を確認しましょう! アプリが取れる対策

Slide 62

Slide 62 text

© all rights reserved Luup, Inc. 参考 - iPhoneやiPadが⾼温または低温になりすぎた場合, https://support.apple.com/ja-jp/118431 - Respond to Thermal State Changes, https://developer.apple.com/library/archive/documentation/Performance/Conceptual/p ower_efficiency_guidelines_osx/RespondToThermalStateChanges.html#//apple_ref/doc/ uid/TP40013929-CH25-SW1 - Test under adverse device conditions (iOS), https://help.apple.com/xcode/mac/current/#/dev308429d42 - WWDC19-422: Designing for Adverse Network and Temperature Conditions, https://developer.apple.com/videos/play/wwdc2019/422/ 62

Slide 63

Slide 63 text

© all rights reserved Luup, Inc. 宣伝 LUUP ブースでIoTと連携した簡単なゲームもやってます! ノベルティもあります!ぜひ遊びに来てください!🙋 63 秘密の チャレンジ

Slide 64

Slide 64 text

© all rights reserved Luup, Inc. ご清聴ありがとうございました 導⼊ 64

Slide 65

Slide 65 text

街じゅうを 「駅前化」する インフラをつくる 65

Slide 66

Slide 66 text

Luup, Inc. - Confidential and Proprietary 66 2020.04~ ● 新卒⼊社 ● iOSエンジニア 2023.11~ ● iOSエンジニア tsuboyan (⼤坪 敦) 株式会社Luup, iOS エンジニア 66