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
発熱から iPhone を守る
Search
Mitsuharu Emoto
November 01, 2023
Programming
0
210
発熱から iPhone を守る
モバチキ 〜Mobile Tips 共有会〜 #2
https://cyberagent.connpass.com/event/297940/
Mitsuharu Emoto
November 01, 2023
Tweet
Share
More Decks by Mitsuharu Emoto
See All by Mitsuharu Emoto
iPhoneと共に過ごす夏
mitsuharu
0
15
WKWebViewとアクセシビリティ
mitsuharu
0
46
WKWebView と仲良くする
mitsuharu
0
120
推測するな、計測せよ(Swift編)
mitsuharu
0
49
React Native updates
mitsuharu
0
54
macOS なしで iOS アプリを開発する(※ただし xxx に限る)
mitsuharu
1
330
メーカー製 SDK は不要!標準フレームワークだけで作るサーマルプリンターの印刷アプリ
mitsuharu
0
48
Bluetooth 制御で業務用サーマルプリンター対応アプリを作ろう
mitsuharu
0
81
iOS デバイスから始める Bluetooth 制御の業務用サーマルプリンター対応アプリの作り方
mitsuharu
0
180
Other Decks in Programming
See All in Programming
FindyにおけるTakumi活用と脆弱性管理のこれから
rvirus0817
0
480
テストコードはもう書かない:JetBrains AI Assistantに委ねる非同期処理のテスト自動設計・生成
makun
0
240
AI Coding Agentのセキュリティリスク:PRの自己承認とメルカリの対策
s3h
0
190
AWS発のAIエディタKiroを使ってみた
iriikeita
1
180
はじめてのMaterial3 Expressive
ym223
2
230
1から理解するWeb Push
dora1998
7
1.8k
AI時代のUIはどこへ行く?
yusukebe
16
8.7k
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
540
Processing Gem ベースの、2D レトロゲームエンジンの開発
tokujiros
2
120
Performance for Conversion! 分散トレーシングでボトルネックを 特定せよ
inetand
0
110
[FEConf 2025] 모노레포 절망편, 14개 레포로 부활하기까지 걸린 1년
mmmaxkim
0
1.6k
Navigating Dependency Injection with Metro
zacsweers
3
210
Featured
See All Featured
Fireside Chat
paigeccino
39
3.6k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.2k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Agile that works and the tools we love
rasmusluckow
330
21k
Embracing the Ebb and Flow
colly
87
4.8k
Building an army of robots
kneath
306
46k
Code Reviewing Like a Champion
maltzj
525
40k
Transcript
ൃ͔ΒJ1IPOFΛकΔ ߐຊޫ ϞόνΩʙ.PCJMF5JQTڞ༗ձʙ 1
ࣗݾհ w ͑ͱΈͭΔ w גࣜձࣾΏΊΈJ04ςοΫϦʔυ w ݬͷϞόνΩͷൃදऀͰ͢ w ΤϯδχΞΧϑΣʹ)),#4UVEJPΛݟʹདྷ·ͨ͠ 2
એ w ٕज़ॻయٕॻതʹͯɺٕज़ಉਓࢽʮΏ ΊΈେٕྛ` ʯΛແྉ͠·͢ʂ w ࢲʰ3FEVY4BHBGPS4XJGUʱΛॻ͖·ͨ͠ w ʢʣͷٕज़ॻయΦϑϥΠϯ։࠵
ʢାʣͷϒʔεʢ͞ʣʹډΔͷͰɺݱ ࢀՃ͞ΕΔํ͓ؾܰʹͲ͏ͧ w ΦϯϥΠϯ։࠵Ͱɺిࢠ൛͕͋ΔͷͰੋඇ 3
J1IPOFγϦʔζ͕ൃച͞Ε͕ͨ w J1IPOFγϦʔζ J04Ͱൃ͕ൃੜʂ w "4$**KQɿΞοϓϧɺʮJ1IPOF1SPʯ͕ҟৗൃ͢ΔݪҼJ04 ͷόάͳͲͩͱίϝϯτIUUQTBTDJJKQFMFN w ʮJ1IPOFʯγϦʔζͷʮ༧ΑΓ͘ͳΔʯɺʮJ04ʯͰ
ղফ͢Δͱ"QQMF*5NFEJB/&84IUUQTXXXJUNFEJBDPKQ OFXTBSUJDMFTOFXTIUNM 4
ࠓճ͚ͩ͡Όͳ͍ɺۙͳൃ w ߴෛՙͳॲཧͳͲΛߦ͍ଓ͚ͯɺJ1IPOFͷຊମԹ ͕͋ΔఔΛ͑ΔͱɺߴԹҙͷܯࠂ͕දࣔ͞ΕΔ w ࣌ؒͷ,ࡱӨͰߴԹҙ͕දࣔ͞ΕͨɺͳͲ w ͷهࣄ w ߴԹҙʂɹJ1IPOF͕͘ͳΔݪҼͱରॲ๏
*5NFEJB.PCJMFIUUQTXXXJUNFEJBDPKQ NPCJMFBSUJDMFTOFXTIUNM IUUQTXXXJUNFEJBDPKQNPCJMF BSUJDMFTOFXTIUNM 5
͞Βʹଞࣾ·ͰऔΓ্͛ͯ͘Δ w ઌͷ9JBPNJͷൃදձʹͯɺ4OBQESBHO(FOͱԹൺֱ͞ΕΔ IUUQTUXJUUFSDPNZVLJDDIJ@XPSMETUBUVT 6
ൃ͕ͨΒ͢Өڹ w ຊମͷج൘όοςϦʔʹμϝʔδΛ༩͑Δ w ಛʹϦνϜΠΦϯిԹʹݫ͘͠ɺՐࡂരൃͷՄೳੑ͕͋Δ w ਪԹdˆ༻ԹdˆอԹdˆ w αʔϚϧεϩοτϦϯάͰʢຊମϨϕϧͰʣΫϥογϡ͢Δ w
ྫྷ٫ϑΝϯͳ͍͠ɺਅՆͷ֎Ͱ͑ͳ͍ 㱯✱A㱯 7 †IUUQTDPOTVNFSIVBXFJDPNKQTVQQPSUCBUUFSZDIBSHJOH †
ൃͷղফʹऔΓΉ w ϑϨʔϜϨʔτܭࢉෛՙ͕͍ɺػೳͳॲཧΛߦ͏ w ͱ͍͑ɺҰʹϦονͳදݱॲཧ͕͑ͳ͍ͷͲ͏ͳͷ͔ʁ w ղܾͱ͍͑ʮਪଌ͢ΔͳɺܭଌͤΑʯ w J1IPOFͷൃΛܭଌͯ͠ɺൃঢ়ଶʹԠͯ͡ॲཧΛΓସ͑Δʁ w
ࠓճ͜ͷܭଌΛऔΓѻ͍·͢ 8
J1IPOFͷൃΛௐΔํ๏ w *OTUSVNFOUT w 4ZTUFN5SBDFͰ5IFSNBM4UBUFΛ֬ೝͰ͖Δ w ʢ༨ஊʣ9DPEFਖ਼͘͠ܭଌͰ͖ͳ͍ͷͰɺΛ͍·͠ΐ͏ w ൃঢ়ଶΛ"1*͔Βঢ়ଶΛऔಘɾߪಡ͢Δ w
ݱঢ়̎छྨͷऔಘํ๏͕͋ΓɺͦΕΒΛհ͠·͢ w ʢ༨ஊʣ"1*ΛௐΔͱɺΧϝϥͷ৭Թ8FBUIFS,JUͷؾԹ͕͋Δ 9
1SPDFTT*OGP w ར༻ͷใऔಘ͢Δ"1* w /PUJ fi DBUJPO$FOUFSͰൃঢ়ଶͷมԽΛݕͰ͖Δ NotificationCenter.default.addObserver( self,
selector: #selector(monitorState), name: ProcessInfo.thermalStateDidChangeNotification, object: nil ) 10
5IFSNBM4UBUF nominal 😀 ঢ়ଶਖ਼ৗൣғͰ͢ fair 😅 ঢ়ଶߴΊͰ͢ serious 🥵 ঢ়ଶߴΊͰ͢
critical 🔥 ঢ়ଶγεςϜͷੑೳʹେ͖ͳӨڹΛٴ΅͓ͯ͠ΓɺσόΠεΛ ྫྷ٫͢Δඞཁ͕͋Γ·͢ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOGPVOEBUJPOQSPDFTTJOGPUIFSNBMTUBUF let state = ProcessInfo.processInfo.thermalState ˞ֆจࣈࢲ͕Πϝʔδͨ͠ͷൃঢ়ଶ 11
"7$BQUVSF%FWJDF w ϥΠϒϏϡʔͳͲ"7$IBQUVSF4FTTJPOͰར༻͞ΕΔஔ͔Βऔಘ͢Δ w ੲͳ͕Βͷ,70ͰมԽΛࢹ͢Δ @objc private dynamic var
videoDeviceInput: AVCaptureDeviceInput! … videoDeviceInput = try AVCaptureDeviceInput(device: videoDevice!) observe(\.videoDeviceInput.device.systemPressureState, options:.new){ [weak self] object, change in guard let self, let state = change.newValue else { return } self.monitorSystemPressureState(systemPressureState: state) } 12
4ZTUFN1SFTTVSF4UBUF-FWFM nominal 😀 γεςϜѹྗਖ਼ৗͰ͢ fair 😅 γεςϜѹྗ͕Θ͔ͣʹ্ঢ͍ͯ͠Δ serious 🥵 γεςϜѹྗ͕ඇৗʹߴ͘ͳ͍ͬͯΔ
critical 🔥 γεςϜѹྗ͕ஶ্͘͠ঢ͍ͯ͠Δ shutdown ☠ γεςϜѹྗ͕ݶքΛ͍͑ͯΔͨΊɺΩϟϓ νϟγεςϜγϟοτμϯ͍ͯ͠Δ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOBWGPVOEBUJPOBWDBQUVSFEFWJDFTZTUFNQSFTTVSFTUBUFMFWFM let level = systemPressureState.level ˞ֆจࣈࢲ͕Πϝʔδͨ͠ͷൃঢ়ଶ 13 w ѹྗʢෛՙʣɺԹ ిྗྔͳͲ༷ʑͳ֎෦ཁ Ҽʹࠨӈ͞ΕΔ w ిؾճ࿏ʹ͓͍ͯɺҰൠ తʹʮෛՙʯͱߟ͑ ͯͳ͍Ͱ͢
4ZTUFN1SFTTVSF4UBUF'BDUPST w ཁҼݸผʹऔಘͰ͖Δ w CJUNBTL 0QUJPO4FU Ͱ ఆٛ͞ΕΔͷͰɺෳ߹త ͳཁҼΛऔಘͰ͖Δ w
1SPTTFTT*OGPʹཁҼ ͕ཉ͍͠ʂ // bitmask of values indicating the factors // contributing to the current system pressure level. let factors = systemPressureState.factors if (factors == [.systemTemperature]) { // γεςϜશମͷߴͳෛՙ } if (factors == [.peakPower]) { // γεςϜͷϐʔΫిྗཁ͕݅όοςϦʔͷిྲྀ༰ྔΛա } if (factors == [.depthModuleTemperature]) { // ਂใΛऔಘ͢ΔϞδϡʔϧ͕ߴԹͰಈ࡞ } if (factors == [.cameraTemperature]) { // ΧϝϥϞδϡʔϧ͕ߴԹͰಈ࡞ʢiOS 17 Ҏ্ͷΈʣ } 14 IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOBWGPVOEBUJPO BWDBQUVSFEFWJDFTZTUFNQSFTTVSFTUBUFGBDUPST
ൃঢ়ଶͷςετͲ͏ͬͯʁ w ࣮ػͰൃςετΛΓ͗͢Δ ͱɺϦνϜΠΦϯి͕Β ΜͰɺނো͢Δ w 9DPEF͔Β࣮ػͷൃΛγ ϛϡϨʔτͰ͖Δ w ͨͩ͠ɺ"7$BQUVSF%FWJDFͷ
ൃγϛϡϨʔτະରԠʜ 15
·ͱΊ w ෛՙ͕ߴ͍ΞϓϦΛ࡞Δ߹ɺൃঢ়ଶͷཧ͠·͠ΐ͏ w ൃ͕ݪҼͰΫϥογϡͨ͠߹ɺΫϥογϡϨϙʔτ͕ڍ͕Βͳ͍ ͜ͱ͕͋Γɺ։ൃऀࣄѲݪҼڀ໌͕Ͱ͖ͳ͍ w ετΞͰʮΫϥογϡͨ͠ͷͰ̍Ͱ͢ʯ͕૿͑Δ͔ w ࠓճհͨ͠ίʔυ(JU)VCʹ·ͱΊ͍ͯ·͢
w IUUQTHJUIVCDPNNJUTVIBSV5IFSNBM.POJUPS4BNQMF 16
ʢ͓·͚ʣՃ"1*͔Βͷߟ w J04 WJTJPO04 ͔ΒཁҼʹDBNFSB5FNQFSBUVSF͕Ճ͞Εͨ w "QQMF7JTJPO1SPʹ͚ͨ४උʁͱ༧͍ͯ͠·͢ w ຊମਖ਼໘ͷΧϝϥɺ֎͚ͷόοςϦʔͱཧతʹݯ͕Εͨ w
ൃࣄނ͕ىͬͨ͜Βେʢ௨ৗͰ͕ͩɺಛʹ7JTJPO1SP಄ ʹண͢ΔͷͰʣͳͷͰɺൃରࡦͱͯେʂ w ಄ͷۙ͘ʹݯ͕͋ΔͱମʹӨڹ͋Γͦ͏ͳͷͰҙ͠ͳ͍ͱ 17