Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ランタイムデバッグのススメ/iOSDC21
Search
noppefoxwolf
September 19, 2021
Technology
5.7k
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
柔軟性のあるUIで、多くの環境でアプリを活躍させる/iOSDC26
noppefoxwolf
0
330
High performance GIF playback/iOSDC25
noppefoxwolf
1
670
Spice up your notifications/try!Swift25
noppefoxwolf
3
850
iOSの隠されたAPIを解明し、開発効率を向上させる方法/iOSDC24
noppefoxwolf
2
1.4k
今から理解するApp Intentエコシステム/WWDC24Recap
noppefoxwolf
0
79
既存アプリをvisionOS対応してリリースした話/visionOS LT vol5
noppefoxwolf
0
230
UIのブラックボックスを探る/iOSDC23
noppefoxwolf
3
5.2k
CoreGraphicsでドット絵を描こう/iOSDC22
noppefoxwolf
0
3.3k
google/mediapipe で始めるARアプリ開発/iOSDC2020
noppefoxwolf
1
1.7k
Other Decks in Technology
See All in Technology
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
4
530
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
150
登壇の自信を奪う3匹のオバケ / 3 Ghosts That Rob You of Your Confidence in Public Speaking
pauli
5
420
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
330
From Vanilla Kubernetes to a Batteries-Included Platform: Developer Experience at 1,300+ Clusters
yosshi_
0
700
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
260
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
110
Tab5をRubyで動くパソコンにする
kishima
2
360
Reactの設計論
uhyo
15
8.7k
銀行勘定系システムにおける開発プロセス刷新×AIによる環境モダナイゼーション / Development Process Transformation and AI-Driven Environment Modernization
muit
0
660
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
800
Sigmaで作る業務アプリ
kazushiro_honma
0
120
Featured
See All Featured
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
350
The World Runs on Bad Software
bkeepers
PRO
72
12k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
YesSQL, Process and Tooling at Scale
rocio
174
15k
For a Future-Friendly Web
brad_frost
183
10k
Making Projects Easy
brettharned
120
6.7k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
450
Leo the Paperboy
mayatellez
9
2.3k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Six Lessons from altMBA
skipperchong
29
4.5k
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