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
16
WKWebViewとアクセシビリティ
mitsuharu
0
47
WKWebView と仲良くする
mitsuharu
0
130
推測するな、計測せよ(Swift編)
mitsuharu
0
51
React Native updates
mitsuharu
0
55
macOS なしで iOS アプリを開発する(※ただし xxx に限る)
mitsuharu
1
330
メーカー製 SDK は不要!標準フレームワークだけで作るサーマルプリンターの印刷アプリ
mitsuharu
0
50
Bluetooth 制御で業務用サーマルプリンター対応アプリを作ろう
mitsuharu
0
83
iOS デバイスから始める Bluetooth 制御の業務用サーマルプリンター対応アプリの作り方
mitsuharu
0
180
Other Decks in Programming
See All in Programming
アプリの "かわいい" を支えるアニメーションツールRiveについて
uetyo
0
280
FindyにおけるTakumi活用と脆弱性管理のこれから
rvirus0817
0
540
チームのテスト力を鍛える
goyoki
3
930
Performance for Conversion! 分散トレーシングでボトルネックを 特定せよ
inetand
0
3.4k
MCPでVibe Working。そして、結局はContext Eng(略)/ Working with Vibe on MCP And Context Eng
rkaga
5
2.3k
デザイナーが Androidエンジニアに 挑戦してみた
874wokiite
0
550
Navigating Dependency Injection with Metro
zacsweers
3
3.5k
個人軟體時代
ethanhuang13
0
330
AWS発のAIエディタKiroを使ってみた
iriikeita
1
190
CloudflareのChat Agent Starter Kitで簡単!AIチャットボット構築
syumai
2
510
テストコードはもう書かない:JetBrains AI Assistantに委ねる非同期処理のテスト自動設計・生成
makun
0
540
AIでLINEスタンプを作ってみた
eycjur
1
230
Featured
See All Featured
Code Review Best Practice
trishagee
71
19k
Faster Mobile Websites
deanohume
309
31k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.6k
KATA
mclloyd
32
14k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
113
20k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Typedesign – Prime Four
hannesfritz
42
2.8k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
How to train your dragon (web standard)
notwaldorf
96
6.2k
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