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
19
WKWebViewとアクセシビリティ
mitsuharu
0
52
WKWebView と仲良くする
mitsuharu
0
130
推測するな、計測せよ(Swift編)
mitsuharu
0
53
React Native updates
mitsuharu
0
56
macOS なしで iOS アプリを開発する(※ただし xxx に限る)
mitsuharu
1
340
メーカー製 SDK は不要!標準フレームワークだけで作るサーマルプリンターの印刷アプリ
mitsuharu
0
52
Bluetooth 制御で業務用サーマルプリンター対応アプリを作ろう
mitsuharu
0
85
iOS デバイスから始める Bluetooth 制御の業務用サーマルプリンター対応アプリの作り方
mitsuharu
0
190
Other Decks in Programming
See All in Programming
Six and a half ridiculous things to do with Quarkus
hollycummins
0
140
Back to the Future: Let me tell you about the ACP protocol
terhechte
0
140
CSC509 Lecture 05
javiergs
PRO
0
300
大規模アプリのDIフレームワーク刷新戦略 ~過去最大規模の並行開発を止めずにアプリ全体に導入するまで~
mot_techtalk
0
410
Web Components で実現する Hotwire とフロントエンドフレームワークの橋渡し / Bridging with Web Components
da1chi
3
2k
CSC305 Lecture 01
javiergs
PRO
1
400
ポスターセッション: 「まっすぐ行って、右!」って言ってラズパイカーを動かしたい 〜生成AI × Raspberry Pi Pico × Gradioの試作メモ〜
komofr
0
1.2k
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
660
CSC305 Lecture 05
javiergs
PRO
0
210
非同期jobをtransaction内で 呼ぶなよ!絶対に呼ぶなよ!
alstrocrack
0
620
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
260
チームの境界をブチ抜いていけ
tokai235
0
150
Featured
See All Featured
BBQ
matthewcrist
89
9.8k
Six Lessons from altMBA
skipperchong
28
4k
Why Our Code Smells
bkeepers
PRO
339
57k
Side Projects
sachag
455
43k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Speed Design
sergeychernyshev
32
1.1k
For a Future-Friendly Web
brad_frost
180
9.9k
Embracing the Ebb and Flow
colly
88
4.8k
Context Engineering - Making Every Token Count
addyosmani
5
220
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
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