Swiftpack.co - Package - mmllr/GPXKit

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.


A library for parsing GPX files, with no dependencies, written in Swift


A library for parsing and exporting gpx files with no dependencies besides Foundation.


  • ☑ Parsing gpx files into a track struct
  • ☑ Exporting a track to a gpx xml
  • ☑ Support for iOS, macOS & watchOS
  • ☑ Optionally removes date and time from exported gpx for keeping privacy
  • ☑ Combine support
  • ☑ Heightmap, geobounds, distance and elevation information for an imported track
  • ☑ Test coverage


To use the GPXKit library in a SwiftPM project, add the following line to the dependencies in your Package.swift file:

.package(url: "https://github.com/mmllr/GPXKit", from: "1.2.6"),

Usage examples

Importing a track

import GPXKit

let parser = GPXFileParser(xmlString: xml)
    switch parser.parse() {
    case .success(let track):
    case .failure(let error):
        parseError = error
func doSomethingWith(_ track: GPXTrack) {
    let formatter = MeasurementFormatter()
    formatter.unitStyle = .short
    formatter.unitOptions = .naturalScale
    formatter.numberFormatter.maximumFractionDigits = 1
    let trackGraph = track.graph
    print("Track length: \(formatter.string(from: Measurement<UnitLength>(value: trackGraph.distance, unit: .meters)))")
    print("Track elevation: \(formatter.string(from: Measurement<UnitLength>(value: trackGraph.elevationGain, unit: .meters)))")
    for point in track.trackPoints {
        print("Lat: \(point.coordinate.latitude), lon: \(point.coordinate.longitude)")

Exporting a track

import GPXKit
let track: GPXTrack = ...
let exporter = GPXExporter(track: track, shouldExportDate: false)

Combine integration

import Combine
import GPXKit

let url = /// url with gpx
GPXFileParser.load(from: url)
   .map { track in
      // do something with parsed track 

See tests for more usage examples.


Run the following commands from the projects root to generate the documentation:

[sudo] gem install jazzy

Browse the documention under the doc folder.


Contributions to this project will be more than welcomed. Feel free to add a pull request or open an issue. If you require a feature that has yet to be available, do open an issue, describing why and what the feature could bring and how it would help you!


Stars: 1
Last commit: 4 days ago


Adds documentation - 2021-02-27T14:00:21