Skip to content

mappls-api/MapplsCameraSample_iOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

MapplsCamera SDK for iOS

MapplsCamera SDK is a powerful, ready-to-use camera unit for iOS that automatically captures and embeds rich geospatial metadata into photos and videos. It handles complex tasks like reverse geocoding, GPS overlay rendering, and EXIF/XMP metadata management, allowing you to integrate high-quality, geotagged media capture with minimal effort.

  • Rich Geotagged Photos: Captures images with configurable GPS/Address/Timestamp overlays
  • Geotagged Video Recording: Records video with real-time location metadata updates
  • QR Code Scanning: Built-in QR mode for asset identification or URL scanning
  • Mappls PIN Integration: Automatically retrieves Mappls PINs (eLocs) for capture locations
  • Advanced Metadata: Embeds metadata into EXIF, XMP (custom namespace), and IPTC headers
  • Deeply Customizable: Extensive UI configuration options for overlays, branding, and camera controls
  • Developer Friendly: Robust delegate-based event handling and error reporting

This library depends upon several Mappls's own libraries. All dependent libraries will be automatically installed using Swift Package Manager.

Below are list of dependencies which are required to run this SDK:

To add a package dependency to your Xcode project, select File > Swift Packages > Add Package Dependency and enter repository URL. See Adding Package Dependencies to Your App.

https://github.com/mappls-api/mappls-camera-ios-distribution.git
Version Dated Description
1.0.1 06 Jun 2026 Initial release with geotagged photo and video capture capabilities
  • iOS: 13.0 or higher
  • Xcode: 14.0 or higher
  • Mappls API Keys: You must have a valid Mappls API key to use the location and mapping features

It is required to set Mappls keys to use any Mappls SDK. Please refer the documentation here

Ensure you add the following keys to your app's Info.plist to request necessary permissions:

Key Description
NSCameraUsageDescription Required for taking photos and recording videos
NSMicrophoneUsageDescription Required for recording audio in videos
NSLocationWhenInUseUsageDescription Required to geotag your media and show your location on the map
NSPhotoLibraryUsageDescription Required if saveToDeviceGallery is enabled
NSPhotoLibraryAddUsageDescription Required to save captured media to the user's gallery
import MapplsCamera
let cameraVC = MapplsCameraViewController()
cameraVC.cameraDelegate = self
cameraVC.modalPresentationStyle = .fullScreen
self.present(cameraVC, animated: true)
extension YourViewController: MapplsCameraDelegate {
    func mapplsCamera(_ controller: MapplsCameraViewController, didCaptureImage result: MapplsCameraResult) {
        print("Captured image at: \(result.filePath)")
        print("Location: \(result.latitude), \(result.longitude)")
        controller.dismiss(animated: true)
    }

    func mapplsCamera(_ controller: MapplsCameraViewController, didRecordVideo result: MapplsCameraResult) {
        print("Recorded video at: \(result.filePath)")
        controller.dismiss(animated: true)
    }

    func mapplsCameraDidCancel(_ controller: MapplsCameraViewController) {
        controller.dismiss(animated: true)
    }

    func mapplsCamera(_ controller: MapplsCameraViewController, didUpdateLocation latitude: Double, longitude: Double, accuracy: Float) {
        // Handle real-time location updates
    }

    func mapplsCamera(_ controller: MapplsCameraViewController, didFailWithError error: MapplsCameraError) {
        print("SDK Error: \(error.localizedDescription)")
    }

    func mapplsCamera(_ controller: MapplsCameraViewController, didLoadNearbyPINs pins: [MapplsNearbyPIN]) {
        // Handle nearby places/PINs
    }


}

The package includes multiple ways to test and use the SDK:

Sample code is available as a library for integration:

import MapplsCamera
import MapplsCameraSample

// Use the sample view controller
let sampleVC = SampleCameraViewController()
present(sampleVC, animated: true)

// Or use configuration presets
let cameraVC = CameraConfigurations.photoOnly()
cameraVC.cameraDelegate = self
present(cameraVC, animated: true)

Pre-built configurations for common use cases:

Method Description Use Case
basic() Default settings Quick start
photoOnly() Photo mode only Image documentation
videoOnly() Video mode only Video surveys
highAccuracy() Requires GPS ≤10m Precision mapping
fieldSurvey() All metadata + grid Field work
qrScanner() QR code mode Asset tracking
highQuality() 4K, max quality Professional use
minimalUI() Hidden controls Embedded use
privacyFocused() Minimal metadata Privacy apps
Guide Time Best For
RUN_EXECUTABLE_SAMPLE.md 5 min See all features immediately
QUICK_START_SAMPLE.md 5 min First-time integration
HOW_TO_RUN_SAMPLE.md 10 min Complete integration guide
SAMPLE_USAGE.md 15 min Detailed usage examples

MapplsCameraViewController provides a wide range of properties to customize the capture experience.

Property Type Default Description
minimumAccuracyMetres Float 50.0 Minimum GPS accuracy required to allow capture
blockCaptureOnPoorAccuracy Bool false If true, prevents capture when accuracy is worse than threshold
saveToDeviceGallery Bool true Automatically save captured media to the iOS Photo Library
enablePinchToZoom Bool true Enable or disable the pinch-to-zoom gesture
maxZoomFactor Float 8.0 Maximum zoom level allowed
Property Type Default Description
isFlashButtonHidden Bool false Hide the flash toggle button
isLocationPickerButtonHidden Bool false Hide the nearby places / location picker button
isMuteButtonHidden Bool false Hide the audio mute button in video mode
isGalleryButtonHidden Bool false Hide the gallery / album shortcut button
isSwitchCameraButtonHidden Bool false Hide the front/rear camera switch button
isQRScanModeHidden Bool false Hide the QR scan mode toggle
isVideoModeEnable Bool false Disable video recording mode
isPhotoModeEnable Bool false Disable photo capture mode
allowModeSwitching Bool true Show/hide the mode selector (Photo/Video/QR)
Property Type Default Description
showAddressOverlay Bool true Display reverse geocoded address on media
showCoordinatesOverlay Bool true Display Latitude/Longitude on media
showDateTimeOverlay Bool true Display capture timestamp on media
showMapThumbnail Bool true Display a map preview of the location
showElocationOverlay Bool true Display the Mappls PIN (eLoc) on media
showQRCodeOverlay Bool true Display a QR code containing location info
showAccuracyIndicator Bool true Show GPS accuracy value on the overlay
showAltitudeOverlay Bool false Show altitude (elevation) on the overlay
showCompassBearingOverlay Bool false Show compass heading on the overlay
showMapplsLogo Bool true Show the Mappls watermark logo
showGridLines Bool false Display 3x3 grid lines for composition
Property Type Default Description
overlayPosition Enum .bottom Position of the metadata view (.top or .bottom)
overlayOpacity Float 0.8 Background opacity of the metadata overlay (0.0 to 1.0)
overlayBackgroundColour UIColor .white Background color of the metadata overlay
overlayTextColour UIColor .black Color of the text in the metadata overlay
overlayCornerRadius Float 8.0 Corner radius for the metadata overlay background
mapThumbnailStyle Enum .standard Style of the map thumbnail (.standard, .satellite, .hybrid)
brandingLogo UIImage? nil Custom logo image to display on the metadata overlay
Property Type Default Description
cameraFacing Enum .rear Initial camera to use (.front or .rear)
defaultMediaMode Enum .photo Initial capture mode (.photo, .video, .qr)
imageOutputFormat Enum .jpeg Format for saved photos (.jpeg or .png)
imageCompressionQuality Float 0.92 Compression quality for JPEG (0.0 to 1.0)
videoResolution Enum .hd1080p Quality for video (.hd720p, .hd1080p, .uhd4k)
timerDelay Enum .none Countdown delay (.none, .threeSeconds, .tenSeconds)
maxVideoDuration Int 0 Maximum recording time in seconds (0 = unlimited)
videoOverlayRefreshInterval Int 5 How often (in seconds) to update GPS info during video
Property Type Default Description
addressLanguage String "en" Language for reverse geocoded addresses (e.g., "en", "hi")

The result object passed to delegate methods contains comprehensive metadata:

Property Type Description
mediaType Enum .image or .video
filePath String Local path to the captured file
latitude Double Decimal latitude coordinate
longitude Double Decimal longitude coordinate
formattedAddress String Human-readable reverse geocoded address
eloc String Mappls unique identifier for the location
timestampFormatted String Formatted date and time string
accuracyMetres Float GPS horizontal accuracy at time of capture
cameraFacing Enum .front or .rear
tamperHash String A digital signature to verify media integrity

Implement the delegate method to handle potential issues:

func mapplsCamera(_ controller: MapplsCameraViewController, didFailWithError error: MapplsCameraError) {
    switch error {
    case .cameraPermissionDenied:
        // Handle no camera access
    case .locationPermissionDenied:
        // Handle no location access
    case .poorAccuracy:
        // GPS accuracy was below minimumAccuracyMetres threshold
    default:
        print("SDK Error: \(error.localizedDescription)")
    }
}



Our many happy customers:


For any queries and support, please contact:

Email us at apisupport@mappls.com

Support Need support? contact us!



@ Copyright 2025 CE Info Systems Pvt. Ltd. All Rights Reserved.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages