1"use strict";(globalThis.webpackChunkdawarich_app=globalThis.webpackChunkdawarich_app||[]).push([[3263],{83202(e,n,t){t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"dawarich-for-ios","title":"Dawarich for iOS","description":"Install the Dawarich iOS app, connect it to Dawarich Cloud or your self-hosted instance, grant location permissions, and tune tracking and upload settings.","source":"@site/docs/dawarich-for-ios.md","sourceDirName":".","slug":"/dawarich-for-ios","permalink":"/docs/dawarich-for-ios","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":97,"frontMatter":{"sidebar_position":97,"title":"Dawarich for iOS","description":"Install the Dawarich iOS app, connect it to Dawarich Cloud or your self-hosted instance, grant location permissions, and tune tracking and upload settings."},"sidebar":"tutorialSidebar","previous":{"title":"Changelog","permalink":"/docs/changelog"},"next":{"title":"Dawarich for Android","permalink":"/docs/dawarich-for-android"}}');var s=t(74848),r=t(28453);const o={sidebar_position:97,title:"Dawarich for iOS",description:"Install the Dawarich iOS app, connect it to Dawarich Cloud or your self-hosted instance, grant location permissions, and tune tracking and upload settings."},a="Dawarich for iOS",l={},c=[{value:"Installation",id:"installation",level:2},{value:"Connect to a server",id:"connect-to-a-server",level:2},{value:"Dawarich Cloud",id:"dawarich-cloud",level:3},{value:"Self-hosted instance",id:"self-hosted-instance",level:3},{value:"Grant permissions",id:"grant-permissions",level:2},{value:"Start tracking",id:"start-tracking",level:2},{value:"Uploading points",id:"uploading-points",level:2},{value:"Offline tracking",id:"offline-tracking",level:2},{value:"Tracking settings",id:"tracking-settings",level:2},{value:"Detail level",id:"detail-level",level:3},{value:"Continuous Tracking",id:"continuous-tracking",level:3},{value:"Fine-tuning",id:"fine-tuning",level:3},{value:"Visits",id:"visits",level:3},{value:"On the map",id:"on-the-map",level:2},{value:"Family",id:"family",level:2},{value:"Insights",id:"insights",level:2},{value:"Sync settings between devices",id:"sync-settings-between-devices",level:2},{value:"Pro features",id:"pro-features",level:2},{value:"Automation",id:"automation",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"dawarich-for-ios",children:"Dawarich for iOS"})}),"\n",(0,s.jsx)(n.p,{children:"The Dawarich app records your location on your iPhone or iPad and uploads it to Dawarich Cloud or to your own self-hosted instance. It keeps recording in the background and works offline."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Requirements:"})," iOS 17.6 or later, and either a Dawarich Cloud account or a self-hosted Dawarich instance."]}),"\n",(0,s.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,s.jsx)(n.p,{children:'Search for "Dawarich" in the App Store, or tap the badge below.'}),"\n",(0,s.jsx)("a",{href:"https://apps.apple.com/app/apple-store/id6739544999?pt=128010810&ct=docs-ios&mt=8",children:(0,s.jsx)("img",{src:"/img/app-store.png",alt:"Download on the App Store",width:"220"})}),"\n",(0,s.jsx)(n.h2,{id:"connect-to-a-server",children:"Connect to a server"}),"\n",(0,s.jsx)(n.p,{children:"On first launch the app shows a short intro, then the sign-in screen."}),"\n",(0,s.jsx)(n.h3,{id:"dawarich-cloud",children:"Dawarich Cloud"}),"\n",(0,s.jsxs)(n.p,{children:["Tap ",(0,s.jsx)(n.strong,{children:"Sign in with Apple"}),", ",(0,s.jsx)(n.strong,{children:"Sign in with Google"}),", or ",(0,s.jsx)(n.strong,{children:"Sign up with Email"}),". If you already have a Cloud account, tap ",(0,s.jsx)(n.strong,{children:"Already have an account? Sign in"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"self-hosted-instance",children:"Self-hosted instance"}),"\n",(0,s.jsxs)(n.p,{children:["Tap ",(0,s.jsx)(n.strong,{children:"For self
1-hosters \u2014 Connect to your own Dawarich instance"}),", then pick one of two methods:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Scan QR Code"})," \u2014 open your Dawarich instance in a browser, go to ",(0,s.jsx)(n.strong,{children:"Account \u2192 API access"}),", and scan the QR code shown there. The server URL and API key are filled in and validated for you."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Manual Setup"})," \u2014 enter your ",(0,s.jsx)(n.strong,{children:"Server URL"})," (for example ",(0,s.jsx)(n.code,{children:"https://your-server.example.com"}),") and the ",(0,s.jsx)(n.strong,{children:"API key"})," from the same ",(0,s.jsx)(n.strong,{children:"Account \u2192 API access"})," page. If your server sits behind an authenticating reverse proxy such as Pangolin or Cloudflare Access, add the required ",(0,s.jsx)(n.strong,{children:"Custom headers"})," here; they are stored per server and are never sent to Dawarich Cloud."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsx)(n.p,{children:"Use HTTPS. The app warns you when the URL is plain HTTP. If your server is on your local network, iOS asks for local network access the first time you connect."})}),"\n",(0,s.jsxs)(n.p,{children:["You can also tap ",(0,s.jsx)(n.strong,{children:"Continue without signing in"})," to look around first. Nothing is uploaded until you connect a server \u2014 do that later from ",(0,s.jsx)(n.strong,{children:"Settings \u2192 Server Connection \u2192 Sign in"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"grant-permissions",children:"Grant permissions"}),"\n",(0,s.jsx)(n.p,{children:"After connecting, the app walks you through the permissions it needs. Getting these right is what makes tracking reliable."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Location data"})," \u2014 choose ",(0,s.jsx)(n.strong,{children:'"While Using the App"'})," and leave ",(0,s.jsx)(n.strong,{children:"Precise Location"})," on, so your journeys come out accurate."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Always-on tracking"})," \u2014 set location access to ",(0,s.jsx)(n.strong,{children:'"Always Allow"'}),". Without it, tracking stops the moment you leave the app."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Don't swipe Dawarich away"})," \u2014 swiping the app up and off the app switcher fully closes it, and no points are recorded until you open it again. You don't need to keep Dawarich on screen; just leave it running in the background."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can review the current state and re-request anything later under ",(0,s.jsx)(n.strong,{children:"Settings \u2192 App \u2192 Permissions"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"start-tracking",children:"Start tracking"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Open the ",(0,s.jsx)(n.strong,{children:"Map"})," tab."]}),"\n",(0,s.jsx)(n.li,{children:"Expand the tracking card at the bottom of the screen."}),"\n",(0,s.jsxs)(n.li,{children:["Turn ",(0,s.jsx)(n.strong,{children:"Tracking"})," on."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The card shows the time of the last sync and the current upload mode, and switches to a ",(0,s.jsx)(n.strong,{children:"Synced"})," state once your points have reached the server."]}),"\n",(0,s.jsxs)(n.p,{children:["To have tracking resume by itself, turn on ",(0,s.jsx)(n.strong,{children:"Start tracking automatically"})," under ",(0,s.jsx)(n.strong,{children:"Settings \u2192 Tracking \u2192 Tracking Settings"})," \u2014 tracking then starts whenever you launch the app."]}),"\n",(0,s.jsx)(n.h2,{id:"uploading-points",children:"Uploading points"}),"\n",(0,s.jsxs)(n.p,{children:["By default the app uploads points automatically while tracking, so there is nothing to do manually. The behaviour is configurable under ",(0,s.jsx)(n.strong,{children:"Settings \u2192 Upload"}),":"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Setting"}),(0,s.jsx)(n.th,{children:"What it does"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Upload points automatically"})}),(0,s.jsx)(n.td,{children:"Uploads while tracking. On by default."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Upload when tracking stops"})}),(0,s.jsx)(n.td,{children:"Uploads all pending points when you turn tracking off."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Batch size"})}),(0,s.jsx)(n.td,{children:"How many points each automatic upload sends. Default 100."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Re-upload points"})}),(0,s.jsx)(n.td,{children:"Re-sends the points recorded in a date range you pick."})]})]})]}),"\n",(0,s.jsx)(n.p,{children:"You can also upload on demand: tap the sync button on the tracking card to upload pending points and refresh the selected history."}),"\n",(0,s.jsxs)(n.p,{children:["If an upload fails, an ",(0,s.jsx)(n.strong,{children:"Upload failed"})," banner appears on the map with a ",(0,s.jsx)(n.strong,{children:"Retry"})," action."]}),"\n",(0,s.jsx)(n.h2,{id:"offline-tracking",children:"Offline tracking"}),"\n",(0,s.jsx)(n.p,{children:"The app records your location on your device, so tracking keeps working even without an internet connection \u2014 on a plane, underground, hiking off-grid, or travelling abroad without data. Your points are stored safely on the iPhone and uploaded to your Dawarich instance automatically once you're back online. Nothing is lost to a dropped connection."}),"\n",(0,s.jsx)(n.h2,{id:"tracking-settings",children:"Tracking settings"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Settings \u2192 Tracking \u2192 Tracking Settings"})}),"\n",(0,s.jsx)(n.h3,{id:"detail-level",children:"Detail level"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Detailed"})," \u2014 records a more detailed path using your accuracy, distance and time settings. Higher battery use."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Battery saver"})," \u2014 lets iOS report significant movement only. Minimal battery use."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Switching modes while you are recording ends the current track and starts a new one."}),"\n",(0,s.jsx)(n.h3,{id:"continuous-tracking",children:"Continuous Tracking"}),"\n",(0,s.jsxs)(n.p,{children:["Available in ",(0,s.jsx)(n.strong,{children:"Detailed"})," mode. Keeps tracking enabled with iOS-managed, motion-aware location updates: iOS pauses updates to conserve battery and resumes them when it detects movement. While it is on, iOS manages the distance filter and the blue background location indicator is always shown."]}),"\n",(0,s.jsx)(n.h3,{id:"fine-tuning",children:"Fine-tuning"}),"\n",(0,s.jsxs)(n.p,{children:["In ",(0,s.jsx)(n.strong,{children:"Detailed"})," mode you can tune how often a point is recorded:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Accuracy"})," \u2014 higher accuracy uses more battery."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Distance Filter"}
1)," \u2014 record a new location only if the device has moved at least this distance."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Time Filter"})," \u2014 record a new location only if at least this much time has passed since the last one."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Track Breaking"})," \u2014 start a new track if no location is received within this interval."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Show location indicator"})," \u2014 shows the blue iOS background location indicator while tracking."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Battery saver mode ignores these \u2014 iOS decides when to report a location."}),"\n",(0,s.jsx)(n.h3,{id:"visits",children:"Visits"}),"\n",(0,s.jsx)(n.p,{children:"Choose how visits are detected:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"While tracking"})," (default) \u2014 detect visits only while location tracking is on."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Always on"})," \u2014 detect visits even when tracking is off."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Off"})," \u2014 don't detect visits."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"on-the-map",children:"On the map"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Day ribbon"})," \u2014 horizontal day cards with per-day point density, an hourly sparkline for the selected day, and a jump-to-date modal for picking a day or a multi-day range."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Layers"})," \u2014 toggle routes, visits, points and the heatmap. ",(0,s.jsx)(n.strong,{children:"Points source"})," switches between ",(0,s.jsx)(n.strong,{children:"Server + device"})," and ",(0,s.jsx)(n.strong,{children:"Device only"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Replay"})," \u2014 play back the selected day's movement from the timeline controls."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"family",children:"Family"}),"\n",(0,s.jsxs)(n.p,{children:["If you are in a ",(0,s.jsx)(n.a,{href:"/docs/features/family",children:"family"}),", tap the ",(0,s.jsx)(n.strong,{children:"Family"})," button on the map to open the family panel. From there you can:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"See who is in your family and who is sharing, and show every sharing member on the map"}),"\n",(0,s.jsx)(n.li,{children:"Turn your own live location on or off and choose how long to share"}),"\n",(0,s.jsx)(n.li,{children:"Share your location history and pick the history window, including whether movements from before you started sharing may be shown"}),"\n",(0,s.jsx)(n.li,{children:"Request a member's location, and accept or decline requests sent to you"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Families are created, and members invited, in Dawarich on the web. If the family's plan ends, the panel says so and, for the owner, offers to renew."}),"\n",(0,s.jsx)(n.h2,{id:"insights",children:"Insights"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:"Insights"})," tab has three sub-tabs:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Insights"})," \u2014 year totals, year-over-year comparison, an activity heatmap, streaks and travel patterns."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Stats"})," \u2014 per-year stats with a monthly distance chart."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Digests"})," \u2014 browse, generate and delete yearly digests."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"All of it is cached on device, so it still opens when you're offline."}),"\n",(0,s.jsx)(n.h2,{id:"sync-settings-between-devices",children:"Sync settings between devices"}),"\n",(0,s.jsxs)(n.p,{children:["Once connected, ",(0,s.jsx)(n.strong,{children:"Settings \u2192 Settings sync"})," stores your tracking and upload preferences on your Dawarich server so your devices match. The ",(0,s.jsx)(n.strong,{children:"Status"})," row tells you whether settings are synced, pending, unsupported by your server, or failing, and ",(0,s.jsx)(n.strong,{children:"Sync now"})," retries and re-checks server support. A per-device switch lets one device keep its settings local."]}),"\n",(0,s.jsx)(n.p,{children:"Servers that are too old for the mobile settings API simply keep settings on the device."}),"\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.strong,{children:"Settings \u2192 Preferences"})," you can switch the distance unit between kilometres and miles; the change applies across Stats, Insights and Digests immediately, including offline."]}),"\n",(0,s.jsx)(n.h2,{id:"pro-features",children:"Pro features"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Import from Apple Health"})," reads workouts that carry a route from Apple Health and imports them into Dawarich. It is part of the Pro subscription \u2014 tap ",(0,s.jsx)(n.strong,{children:"Subscribe to Pro"})," under ",(0,s.jsx)(n.strong,{children:"Settings \u2192 Pro features"})," if you don't have it yet."]}),"\n",(0,s.jsx)(n.h2,{id:"automation",children:"Automation"}),"\n",(0,s.jsxs)(n.p,{children:["The app exposes ",(0,s.jsx)(n.strong,{children:"Start Tracking"}),", ",(0,s.jsx)(n.strong,{children:"Stop Tracking"})," and ",(0,s.jsx)(n.strong,{children:"Upload Points"})," actions to the Shortcuts app, so you can trigger them from time- or location-based automations. See ",(0,s.jsx)(n.a,{href:"/docs/getting-started/ios-app/shortcuts-automation",children:"Tracking with Shortcuts"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Tracking stops when the app is in the background."})," Check that location access is set to ",(0,s.jsx)(n.strong,{children:"Always Allow"})," in ",(0,s.jsx)(n.strong,{children:"Settings \u2192 App \u2192 Permissions"}),", and make sure you are not swiping Dawarich out of the app switcher."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Points aren't reaching the server."})," Open ",(0,s.jsx)(n.strong,{children:"Settings \u2192 Server Connection"})," and tap ",(0,s.jsx)(n.strong,{children:"Test Connection"}),". It shows the server URL and, when the connection succeeds, the server version. If you are behind a reverse proxy, check your custom headers under ",(0,s.jsx)(n.strong,{children:"Self-hosted settings"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Something else is wrong."})," ",(0,s.jsx)(n.strong,{children:"Settings \u2192 Debug \u2192 Debug logs"})," collects logs you can share with the developers. Alerts about tracking, uploads and visits can be turned on or off individually under ",(0,s.jsx)(n.strong,{children:"Settings \u2192 Notifications \u2192 Notification settings"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453(e,n,t){t.d(n,{R:()=>o,x:()=>a});var i=t(96540);const s={},r=i.createContext(s);function o(e){const n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.