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
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
hinakko
September 13, 2026
Technology
230
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
iOSDC Japan 2026
hinakko
September 13, 2026
More Decks by hinakko
See All by hinakko
Reality Composer Proのパーティクルを駆使し、四季のキャンプを楽しもう!
hinakko
0
440
「Verify with Wallet API」を アプリに導入するために
hinakko
1
960
Instrumentsを使用した アプリのパフォーマンス向上方法
hinakko
0
560
Accessibility Inspectorを活用した アプリのアクセシビリティ向上方法
hinakko
0
1.3k
言語や職種の壁を超えて アプリ開発を楽しむ方法
hinakko
0
81
自己紹介スライド
hinakko
0
320
Card Game Hackathon
hinakko
0
59
try! Swift Tokyo 初参加報告LT
hinakko
0
530
Other Decks in Technology
See All in Technology
遠藤な_めぐろLT #38 「社内のAI活用推進」@麻布台_20261009
endonanana
0
110
AI時代に必要な脅威モデリング― 変化の速度に負けない理解とリスク判断
masakane55
5
1.3k
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
320
大型犬好きによるPugの紹介
yamanoku
1
150
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
710
分析AIエージェントを育てる、動く環境を育てる
codatum
1
1k
Cognition AI Japan - ウェビナー2_テストQA_運用監視
cogakira
0
140
Deep Data Security 機能解説
oracle4engineer
PRO
2
790
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
880
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
6
4.5k
M5Stackで作る BLEマウス GPSログの世界
tomokusaba
0
150
転んだ話が背中を預ける理由になる / A_story_about_falling_down_gives_you_a_reason_to_watch_each_other_s_backs.pdf
pauli
3
360
Featured
See All Featured
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
320
The Cult of Friendly URLs
andyhume
79
7k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
530
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
The agentic SEO stack - context over prompts
schlessera
0
970
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Done Done
chrislema
187
17k
So, you think you're a good person
axbom
PRO
2
2.2k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
980
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
800
Transcript
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー ひなっこ @hinakkograshi 2026/09/13 iOSDC Japan 2026
山手線一周ウォーキング Yamanote Walk
None
個人開発アプリv1.0 概要 iOS 17+ / SwiftUI + SwiftData • 駅チェックイン
GPS の距離計算で自動発火 +手動ボタン • 位置追跡・地図 3D起伏(.realistic)/進行方向に地図を回転 • 経路案内 MKDirectionsを位置更新のたびに再計算 • 歩行データ HealthKit(距離・歩数・カロリー)
山手線一周ウォーキング 完 🏃
フィールドワークによって 発覚した課題の数々
v1.0課題①: 駅の区間ごとの歩数が更新されない • 5分以上歩いても画面は「0.0km/0歩」のまま • 駅の区間の歩数がリアルタイムに取得できない
v1.1改善: CMPedometerを使用する 原因 HealthKitのHKStatisticsQueryでは リアルタイムの歩数が反映できない HealthKitからCMPedometerに変更 queryPedometerData(from:to:)で駅区間の距離・歩数を取得
v1.0課題②: バッテリーが持たない • iPhoneのバッテリー消耗が激しい • モバイルバッテリーで2機使用した • 端末発熱が著しい 原因 •
3D地図の常時GPU描画 GPS最高精度の常時稼働 →バックグラウンドのアプリの設計そのものを見直す必要があった
v1.1改善: GPS・測位の構造を変更 ① CLLocationManager の精度を見直す ② 静止時に測位を止める v1.0 v1.0 desiredAccuracy
= activityType は未設定(.other 扱い) kCLLocationAccuracyBest pausesLocationUpdatesAutomatically = false v1.1 v1.1 desiredAccuracy = fi kCLLocationAccuracyNearestTenMeters activityType = . tness pausesLocationUpdatesAutomatically = true
v1.1改善: バックグラウンド前提のアプリ設計に見直す v1.0 バックグラウンドでも止めない manager.allowsBackgroundLocationUpdates = true manager.pausesLocationUpdatesAutomatically = false
manager.startUpdatingLocation() v1.1 ライフサイクルで切替 func handleEnterBackground() { manager.stopUpdatingLocation() manager.startMonitoringSignificantLocationChanges() } func handleBecomeActive() { manager.stopMonitoringSignificantLocationChanges() manager.startUpdatingLocation() manager.monitoredRegions.forEach { manager.requestState(for: $0) } }
v1.1改善: 再描画と再計算の範囲を絞る ④ 3D地図 → 2D地図・回転追従OFF v1.0 .mapStyle(.standard(elevation: .realistic)) cameraPosition
= .userLocation( followsHeading: true, fallback: .automatic ) v1.1 .mapStyle(.standard(elevation: .flat)) cameraPosition = .userLocation( followsHeading: false, fallback: .automatic )
いつかデバッグしない となあ〜 😟
iOSDC採択通知🎉
山手線一周ウォーキング 完 2回目
パフォーマンス比較の条件と方法 v1.0.0: iPhone14Pro (iOS26.6) バッテリー最大容量 88% v1.1.0: iPhone14Pro (iOS26.6) バッテリー最大容量
88% 同一ルート・同条件で計測 • 低電力モードをオフ • 明るさの自動調節をオフ • 輝度を50% • 自動ロック 30秒
HealthKitとCMPedometerの計測方法 検証条件 • タイマーでCMPedometerと 計測値 API / メソッド 取得する値 CMPedometer
CMPedometerData .queryPedometerData .numberOfSteps 比較での使用用途 HealthKit同時にクエリ実行 • 山手線一周サンプルを収録 • 30駅ごとに区間(駅間)単位で も比較 HKStatisticsQuery HKStatistics .sumQuantity() CMPedometerの歩数 HealthKitの歩数
HealthKitとCMPedometerの比較結果 区間ごとの歩数・距離(東京駅を起点に3区間) 区間 有楽町→新橋 (約0.9km) 有楽町→新橋 (約1.2km) 新橋→浜松町 (約1.3km) CMPedometer
歩数 HealthKit 歩数 CMPedometer 距離 HealthKit 距離 1,263歩 0歩 0.881km 0.000km 1,747歩 1,045歩 1.168km 0.684km 2,096歩 1,033歩 1.386km 0.685km 駅間のような短い区間ではHealthKitは即時反映ができない
解決①: 駅の区間ごとの歩数が動かない 採用 CMPedometer • 歩数と距離の反映が速い HealthKit • 取得可能なデータが幅広い (心拍数・血圧・睡眠)
• Capability追加が不要 • 取得までに時間がかかる 歩数と距離の即時反映の面でCMPedometerを採用
計測方法 バッテリー消耗量とCPU使用量の比較 指標 バッテリー残量 API / メソッド 算出方法 比較での使用用途 UIDevice.current
開始(%) - 終了(%) 消費速度算出(%/h・%/km) .batteryLevel /経過時間 の主指標 CPU使用時間 task̲info(TASK̲BASIC̲INFO) (累積) → user̲time + system̲time セッション完了時の バージョン間の総CPU負荷を比 累積のCPU時間 較
改善結果 バッテリー消費速度(%/時間) 60%削減 CPU使用時間(累積・秒) 92%削減
せ〜の、ヨシ👉 🎉
1回目 2回目
伊能忠敬界隈
None
ご清聴ありがとうございました!