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
ランタイムデバッグのススメ/iOSDC21
Search
noppefoxwolf
September 19, 2021
Technology
5.6k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ランタイムデバッグのススメ/iOSDC21
noppefoxwolf
September 19, 2021
More Decks by noppefoxwolf
See All by noppefoxwolf
High performance GIF playback/iOSDC25
noppefoxwolf
1
600
Spice up your notifications/try!Swift25
noppefoxwolf
3
840
iOSの隠されたAPIを解明し、開発効率を向上させる方法/iOSDC24
noppefoxwolf
2
1.3k
今から理解するApp Intentエコシステム/WWDC24Recap
noppefoxwolf
0
74
既存アプリをvisionOS対応してリリースした話/visionOS LT vol5
noppefoxwolf
0
230
UIのブラックボックスを探る/iOSDC23
noppefoxwolf
3
5.1k
CoreGraphicsでドット絵を描こう/iOSDC22
noppefoxwolf
0
3.2k
google/mediapipe で始めるARアプリ開発/iOSDC2020
noppefoxwolf
1
1.7k
モバイルファーストなアプリを作るためにvearがしたこと/xRDCC
noppefoxwolf
0
200
Other Decks in Technology
See All in Technology
ヘルスケア領域における AI 活用と その安全性担保のための取り組み (Leveraging AI in Healthcare and Our Efforts to Ensure Its Safety) - Google I/O Extended Tokyo 2026, July 11, 2026
zettaittenani
0
260
Keeping applications secure by evolving OAuth 2.0 and OpenID Connect
ahus1
PRO
1
160
なぜ人は自分のプロジェクトを 「なんちゃってアジャイル」と 自嘲するのか
kozotaira
0
280
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
2
450
SRE Next 2026 何でも屋からの脱却
bto
0
510
Gen3R: 3D Scene Generation Meets Feed-Forward Reconstruction
spatial_ai_network
0
110
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
2.6k
Claude Code 珍プレー好プレー
shinyasaita
0
320
依頼文化をやめる日 EM視点で語るPlatform EngineeringとInclusive SRE / Discussing Platform Engineering and Inclusive SRE from an EM's Perspective
shin1988
4
5.1k
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
13
2k
AICoEでAIネイティブ組織への進化
yukiogawa
0
100
Compose 新機能総まとめ / What's New in Jetpack Compose
yanzm
0
160
Featured
See All Featured
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
4 Signs Your Business is Dying
shpigford
187
22k
It's Worth the Effort
3n
188
29k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
210
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
260
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Un-Boring Meetings
codingconduct
0
340
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
170
Making Projects Easy
brettharned
120
6.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Transcript
ϥϯλΠϜσόοάͷεεϝ iOSDC2021 TrackA Day2 noppe / iOS app developer 1
noppe - noppefoxwolf • גࣜձࣾσΟʔɾΤψɾΤʔ • ιʔγϟϧϥΠϒPococha • ݸਓΞϓϦ։ൃ •
όʔνϟϧࣗࡱΓΞϓϦvear 2
3
4
• ऩͷ2िؒલʹࢠڙ͕࢈·Ε·ͨ͠ • ऩதʹٽ͖࢝ΊͨΒΓ͠ʹͳΓ·͢ 5
6
7
ଘࡏ͠ͳ͍୯ޠͳͷͰ… ఆٛ ࣮ߦதͷΞϓϦͰɺσόοάΛ͢Δ͜ͱ1 ≒ ࣮ػςετ ͱ͠·͢ɻ 1 ͜ͷηογϣϯͷதͰͷఆٛ
ର • ςελʔ • ΞϓϦΤϯδχΞ • QA୲ऀ • σβΠφʔ ...etc
※ ࣮ػσόοάΛਪ͢ΔηογϣϯͰ͋Γ·ͤΜɻ ࣮ػσόοάͤ͟Δಘͳ͍έʔεͱ͍͏લఏͰ͓ฉ͖͍ͩ͘͞ɻ 9
Ұൠతͳ։ൃϑϩʔ 1. ίʔσΟϯάɾ༷ࡦఆɾetc 2. ίϯύΠϧ 3. γϛϡϨʔλɾσόΠε࣮ߦɾϥΠϒϓϨϏϡʔ 4. UnitTest 5.
݁߹ςετ 6. CI 7. QA 8. ϕʔλςετ 9. ϦϦʔεςετ 10. ຊ൪ςετ 10
ϥϯλΠϜσόοάͷಛ 1. ਓ͕ؒख࡞ۀͰߦ͏࣌ؒతίετ • ≒ۚમతίετ • ≒ࣄۀϦεΫ 2. ఆੑతͳҙݟͷ׆༻ͷ͠͞ •
ʮͳΜ͔ॏ͍ؾ͕͢ΔʯΛͲ͏ѻ͏͔ 11
1.࣌ؒతίετͷվળ 12
ݕূͷվળ ϥϯλΠϜσόοάͷϑϩʔ 1. ίϯύΠϧ 2. సૹ 3. ڥͷ֬ೝ 4. ը໘·Ͱͷૢ࡞
5. ಈ࡞ݕূ ͜ΕΒͷͲ͜ʹͲΜͳ͕͔͔͍࣌ؒͬͯΔͷ͔ΛΔඞཁ͕͋Δɻ 13
ݕূͷվળ 3.ڥͷ֬ೝ • όʔδϣϯ൪߸ɺϏϧυ൪߸ • ϩάΛݟΔ • OSͷόʔδϣϯɺϞσϧ • ઃఆΞϓϦ͔Βࢀর
• Ϗϧυͷ࠷ऴ୲ऀ ...etc 14
3.ڥͷ֬ೝ A. ΞϓϦͷதͰݟΕΔΑ͏ʹ͠ɺૢ࡞Λল͘ • ͳΜͰ͔ΜͰදࣔͤͣɺඞཁͳใ͔ݟۃ ΊΔ • ߲ςελʔʹώΞϦϯά • ֬ೝʹίϛϡχέʔγϣϯ͕ඞཁͳͷ͕
ͳ͍͔ • ख࡞ۀʹΑΔૢ࡞͕ඞཁͳͷ͕ͳ͍͔ 15
σόοάϝχϡʔ • ςελʔ͚ͷಛघͳը໘ • ඇΤϯδχΞ2ʹͱͬͯɺඇৗʹڧྗͳଘࡏ 2 ࣮ͷมߋ͕ग़དྷͳ͍ςελʔ
σόοάϝχϡʔͷ࣮ 1. దͳը໘Λ༻ҙ͢Δ 2. ຊ൪Ͱݺͳ͍Α͏ʹ͢Δ 17
σόοάϝχϡʔͷ࣮ func onTapSettings(section: Section) { switch section { case .general:
... #if DEBUG // #endif·Ͱͷίʔυຊ൪ʹؚ·Εͳ͍ case .debugMenu: let vc = DebugMenuViewController() present(vc, animated: true) #endif } } #if DEBUG final class DebugMenuViewController: UITableController { ... } #endif 18
σόοάϝχϡʔͷ࣮ ։ൃ༻ػೳΛϞδϡʔϧԽ͠ɺ҆શʹ͢Δʹ Swift Packageத৺ͷϓϩδΣΫτߏ ͱͦͷ࣮ફ Day2 TrackC 14:50 େنͳΞϓϦͷϚϧνϞδϡʔϧߏ ͷ࣮ફ
Day2 TrackA 11:30 19
ݕূͷվળ 3.ڥͷ֬ೝ ࠶Ϗϧυɾ࠶ΠϯετʔϧΛ͏ڥ • ଓઌαʔόʔͷઃఆ • νϡʔτϦΞϧදࣔͷϦηοτ • Ωϟογϡͷআ 20
ݕূͷվળ 3.ڥͷ֬ೝ ࠶Ϗϧυɾ࠶ΠϯετʔϧΛ͏ڥ… σόοάϝχϡʔ͔Βઃఆɾ࣮ߦͰ͖ΔΑ͏ʹ͢ Δ 21
22
ݕূͷվળ 4.ը໘·Ͱͷૢ࡞ • ը໘ભҠ͕ଟ͍ • ௨৴ॏ͍ॲཧ͕ڬ·Δ΄Ͳ͕͔͔࣌ؒΔ • ભҠ͕݅ݫ͍͠ Hint •
ىಈ͔ΒonAppear()viewDidAppear()· Ͱͷ࣌ؒΛܭଌ͢Δ 23
ݕূͷվળ 4.ը໘·Ͱͷૢ࡞ 1. σόοάϝχϡʔ͔ΒඈΔΑ͏ʹ͢Δ 2. URLεΩʔϜ͔Βىಈ͢Δ 24
TIPS Q. ΞϓϦΛ࠶ىಈ͢Δʹ A. Shortcut.appΛ͏ 1. ड͚औͬͨURLΛSafariͰ։͘γϣʔτΧοτΛ࡞ 2. ΞϓϦ͔ΒࣗͷURLεΩʔϜΛؚΜͩγϣʔτΧοτ3Λୟ͘ 3.
ΞϓϦΛऴྃͤ͞Δ 4. Shortcut.app͕URLεΩʔϜΛ࣮ߦ 5. ΞϓϦ͕࠶ىಈ͢Δ 3 shortcuts://run-shortcut?name=shortcutName&input=text&text=urlScheme 25
DEMO 26
ݕূͷվળ 5.ಈ࡞ݕূ • ͍࣌͠Օॴ • ϑΟʔϧʢମײʣͷݕূվળͷ༨͋Γ • ΞχϝʔγϣϯɾδΣενϟʔɾײ֮ϑΟʔυόοΫ • ඍௐ͕ଟ͘ɺ࠶Ϗϧυଟ͍
27
ݕূͷվળ ύϥϝʔλͷௐ࣮ߦதʹग़དྷΔΑ͏ʹ͢Δ • ࣮ίετ͕͔͔ΔͷͰɺΞϓϦͷίΞͷ෦ ͷར༻ʹߜΔ • ઃఆΛڞ༗ग़དྷΔΑ͏ʹ͢Δ • มߋ͢ΔUIಉ͡ը໘ʹ࣋ͭ 28
ݕূͷվળ Case Study Find MyͰɺύʔςΟΫϧͷഎܠͷϒϥʔೱ ΛௐͰ͖Δػೳ͕ଘࡏ͍ͯͨ͠ɻ4 AirTag͕ͳͯ͘ɺݟ͚ͭΔ·ͰͷΞχϝʔγϣ ϯ͕ࣗಈ࠶ੜͰ͖Δɻ ࣮ػΛ͍ͭͭɺཧతͳ੍ΛऔΓͬͯ ϑΟʔϧͷτϥΠΞϯυΤϥʔΛࢼͤΔྑ͍ྫ
4 https://www.cultofmac.com/741835/enable-airtag- debug-mode/ 29
ݕূͷվળ Recap • σόοάϝχϡʔΛ׆༻ͯ͠ɺΞϓϦͰݕূΛ݁͢Δ͜ͱͰݕূ࣌ؒΛॖ͢ Δ • ख࡞ۀίϛϡχέʔγϣϯΛݮΒ͢ • ࠶Ϗϧυ࠶ΠϯετʔϧΛආ͚Δ •
ςελʔ͚ͷUXΛٻ͢Δ 30
ఆੑతͳҙݟͷ׆༻ͷ͠͞ ϥϯλΠϜσόοάUnitTestͱҟͳΓਓ͕ؒ৮ΔͷͰఆੑతͳҙݟ͕ಘΒΕΔɻ ໘ɺఆੑతͳҙݟ׆༻͕͍͠ - ʮͳΜ͔ؾ࣋ͪॏ͍ʯΛݕূ͢Δͷ͍͠ 31
ఆੑతͳҙݟͷ׆༻ͷ͠͞ νʔϜશମͰײ֮Λ߹ΘͤΔྗ্ͨ͠Ͱ… 1. ఆੑతͳҙݟͷཪ͚Λ͢Δ 2. ఆྔతͳࢦඪΛݟ͑ΔԽ͢Δ 32
ఆੑతͳҙݟͷ׆༻ͷ͠͞ ఆੑతͳҙݟͷཪ͚Λ͢Δ ཪ͚͕͋Δ͜ͱͰɺݕূίετ͕Լ͕Γνέοτ༗ҙٛͳͷʹ ʮॏ͍ɾ͍ʯͳͲɺఆੑతͳҙݟϩάΛݟ͔ͯΒͳ͍͜ͱ͕ଟ͍ɻ RPScreenRecorderΛ͏͜ͱͰૢ࡞ͷ15ඵલ·ͰΛه͢Δ͜ͱ͕Ͱ͖Δ 33
import ReplayKit // ىಈ͙ͯ͢͠ʹΫϦοϓͷόοϑΝϦϯάΛ։࢝͢Δ func launched() async throws { try
await RPScreenRecorder.shared().startClipBuffering() } ... // ҧײΛײͨ͡Β͙͢ʹΫϦοϓΛγΣΞͯ͠Β͏ɻ func onTapClipShareButton() async throws { let url: URL = URL(string: "")! try await RPScreenRecorder.shared().exportClip(to: url, duration: 5) try await RPScreenRecorder.shared().stopClipBuffering() shareVideo(url) } 34
ఆੑతͳҙݟͷ׆༻ͷ ͠͞ ఆྔతͳࢦඪΛݟ͑ΔԽ͢Δ શମͰܾΊ࣭ͨࢦඪΛՄࢹԽͯ͠ɺͷݟա ͝͠Λ͙ • FPS • •
όοςϦʔফඅ • ...etc 35
ఆੑతͳҙݟͷ׆༻ͷ͠͞ Recap • ϥϯλΠϜσόοάɺUnitTestͱҟͳΓఆੑతͳҙݟ͕ಘΒΕΔ • ఆੑతͳҙݟ׆༻͕͍͠ • ͜Ε·Ͱݕূͷ͔͕ͬͨ͠ɺΫϦοϓΛ͏͜ͱͰࣄ࣮ͱݟൺͳ͕Βղ ܾͰ͖Δ •
ఆྔతͳࢦඪΛݟ͑ΔԽ͢Δ • ςελʔͷײ֮ʹґଘ͠ͳ͍ମ੍ 36
noppefoxwolf/DebugMenuͷ հ 37
DebugMenu • noppefoxwolf/DebugMenu • ৗʹσόοάϝχϡʔͷϥϯνϟʔΛදࣔ͢Δ • ύϑΥʔϚϯεͷৗ࣌දࣔػೳ • SwiftUI /
UIKitରԠ • SPMରԠ 38
import DebugMenu func applaunched() { #if DEBUG DebugMenu.install(windowScene: windowScene, items:
[ ViewControllerDebugItem<ColorViewController>(), ClearCacheDebugItem(), UserDefaultsResetDebugItem(), CustomDebugItem() ], complication: [ CPUUsageComplication() ]) #endif } 39
ViewControllerDebugIte m ҙͷViewControllerΛݺͼग़͢ ViewControllerDebugItem<ColorViewController>( builder: { viewControllerType in viewControllerType.init(color: UIColor.blue)
} ) 40
UIܥDebugItem • ToggleDebugItem • SliderDebugItem 41
/* ΧελϜDebugItem */ struct CustomDebugItem: DebugItem { /// දࣔ͢ΔΞΠςϜ໊ let
debugItemTitle: String = "Custom item" /// let action: DebugItemAction = .didSelect { from, completion in ... completion(.success()) } } 42
μογϡϘʔυ • ը໘্ʹΦʔόʔϨΠ • ύϑΥʔϚϯεͷঢ়گΛදࣔ • ΧελϜՄೳ 43
ΫΠοΫΞΫηε • ΞϓϦใͷදࣔ • ΞΠςϜͷάϧʔϐϯά • ࣮ߦཤྺͷදࣔ • ΞΠςϜͷݕࡧ 44
Summary • ϥϯλΠϜσόοά… • ࣌ؒతɾۚમతʹίετ͕͔͔Δ • σόοάϝχϡʔʹΑΔ࡞ۀޮԽͰίετΛ͑Δ • ҰํͰUnitTestͰಘΒΕͳ͍ఆੑతͳҙݟ͕Ҿ͖ग़ͤΔ •
͔͠͠ఆੑతͳҙݟ׆༻͕͍͠ • ཪ͚ͱɺఆྔతͳࢦඪΛ࣋ͬͯ༗ޮʹ׆༻͢Δ • noppefoxwolf/DebugMenu 45