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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
580
Spice up your notifications/try!Swift25
noppefoxwolf
3
830
iOSの隠されたAPIを解明し、開発効率を向上させる方法/iOSDC24
noppefoxwolf
2
1.3k
今から理解するApp Intentエコシステム/WWDC24Recap
noppefoxwolf
0
70
既存アプリをvisionOS対応してリリースした話/visionOS LT vol5
noppefoxwolf
0
230
UIのブラックボックスを探る/iOSDC23
noppefoxwolf
3
5k
CoreGraphicsでドット絵を描こう/iOSDC22
noppefoxwolf
0
3.2k
google/mediapipe で始めるARアプリ開発/iOSDC2020
noppefoxwolf
1
1.7k
モバイルファーストなアプリを作るためにvearがしたこと/xRDCC
noppefoxwolf
0
190
Other Decks in Technology
See All in Technology
ザ・データベース、MySQL ~ OSC 2026 Sendai ~
sakaik
0
120
SteampipeとExcel Power QueryでAWS構成定義書の作成を自動化する
jhashimoto
0
140
AIのReact習熟度を測る
uhyo
2
640
Kubernetesにおける学習基盤とLLMOpsの概要
ry
1
320
フィジカル版Github Onshapeの紹介
shiba_8ro
0
290
【Cyber-sec+】経営層を"動かす"ための考え方
hssh2_bin
0
190
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
170
生成 AI 実践ガイド (概略版) AIガバナンス編
asei
0
100
RAG を使わないという選択肢
tatsutaka
1
270
脆弱性対応、どこで線を引くか
rymiyamoto
1
410
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
180
MUSUBI 田中裕一『AIと共に行う「しごとのリデザイン」- スモールバックオフィス編』AI Ops Lab #4
musubi
0
230
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
400
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Test your architecture with Archunit
thirion
1
2.3k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
230
Everyday Curiosity
cassininazir
0
230
Visualization
eitanlees
152
17k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
Rails Girls Zürich Keynote
gr2m
96
14k
Building the Perfect Custom Keyboard
takai
2
800
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
140
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
330
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
730
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