Developing a Mobile App for Hunting
A hunting app differs from a fishing app in several technical requirements. First, game reserve maps with legal boundaries are not just a visual layer—they are legally significant data about hunting grounds and permitted zones. Second, it always works without internet connectivity—in forests and fields. Third, route tracking must work for hours with minimal battery drain.
Game Reserve Maps and Legal Boundaries
In Russia, hunting grounds are sourced from the FGIS "Okhota Resurs" (Russian hunting resources database). There is no open registry, so zones must be digitized manually or purchased from commercial providers (HunterDays, Hunting.ru). For Europe, use WFS services from Natura 2000 with restricted zones.
Zone boundaries are GeoJSON Polygons stored in PostGIS on the server. The client downloads vector tiles (Mapbox Vector Tiles, .mvt) for the selected region. Advantages of vector tiles over raster: they render clearly at any zoom level, take up less space during offline loading, and support interactivity (tap on zone → view hunting ground details).
Checking "am I in a permitted zone": PostGIS ST_Contains(zone.geometry, ST_SetSRID(ST_Point(lon, lat), 4326)) on the server when starting a hunt. On the client locally—MapboxTurf (Turf.booleanPointInPolygon) for instant checks without internet.
GPS Tracking with Battery Optimization
Tracking a hunt route can last for hours. Continuous GPS (CLLocationManager with desiredAccuracy: kCLLocationAccuracyBest) drains an iPhone battery in 3-4 hours. Solution:
Adaptive sampling. When speed < 1 m/s (stationary, waiting)—record every 30 seconds with accuracy kCLLocationAccuracyHundredMeters. When moving > 2 m/s—every 5 seconds with kCLLocationAccuracyNearestTenMeters. Determine speed from CLLocation.speed.
Track simplification algorithm (Ramer–Douglas–Peucker). Accumulated points are simplified before saving: 1000 track points reduce to 50-100 without losing route shape. Implementation: Turf.simplify or custom RDP in 10-15 lines of code.
Background location on iOS. Requires NSLocationAlwaysAndWhenInUseUsageDescription + UIBackgroundModes: location in Info.plist. App Store reviewers scrutinize this carefully—the description must explain why background tracking is necessary. Rejection under 2.5.4 happens if justification is weak.
On Android—ForegroundService with an "Tracking active" notification is mandatory from Android 9+. WorkManager won't suffice—you need a service with persistent notification.
Hunting Log
Recording harvests: animal species (reference with Latin names), gender, age (approximate), weight, photo, coordinates. License/permit field—document number verified as needed. These data don't leave the app without explicit user action—important for privacy.
Weather at the moment of harvest: automatically from OpenWeatherMap API based on current coordinates. Wind, temperature, moon phase—hunters have logged these for decades. The app simply automates it.
Game Species Database
Reference of species with hunting seasons, regional restrictions, harvest limits. Data sourced from orders issued by the Ministry of Natural Resources (Russia) or equivalents. The database is updated centrally on the server; the client syncs when online. Offline—works with the last synced version.
Push notification about season opening/closing—server cron job, distribution via FCM/APNs to hunters subscribed to specific species.
Timeline
Basic app (offline maps with zones, GPS tracking, harvest log, species reference)—6-10 weeks. Cost depends on region (data sources for hunting grounds vary), platforms, and route tracking requirements. Estimated individually.







