Skip to content

FitnessKit/TcxDataProtocol

Repository files navigation

TcxDataProtocol

Swift5 Version License Platform Readme Score

Provides a Swift version of the TCX XML format.

Installation

TcxDataProtocol is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'TcxDataProtocol'

Swift Package Manager:

dependencies: [
    .package(url: "https://github.com/FitnessKit/TcxDataProtocol", from: "1.0.2")
]

How to Use

Decode

let tcxUrl = URL(fileURLWithPath: "TestFile" + ".tcx")
let tcxData = try? Data(contentsOf: tcxUrl)

if let tcxData = tcxData {
    let tcxFile = try? TcxFile.decode(from: tcxData)
}

Encode

Each Trackpoint time has to be unique. Below example shows a per second increment from the previous.

let workoutStartDateTime = Date()
let build = Build(version: Version(major: 0, minor: 1, buildMajor: 0, buildMinor: 0), time: nil, builder: nil, type: .alpha)
let author = Author(name: "TcxDataProtocol", build: build, language: nil, partNumber: "11-22-33")
let track = [Track(trackPoint: [
                    Trackpoint(time: workoutStartDateTime.addingTimeInterval(Double(1)), position: nil, altitude: nil, distance: 1.11, heartRate: HeartRateInBeatsPerMinute(heartRate: 100), cadence: 100, sensorState: SensorState.present, extensions: [Extension(activityTrackpointExtension: ActivityTrackpointExtension.init(speed: 11.2, runCadence: nil, watts: 111, cadenceSensor: CadenceSensorType(rawValue: "bike")), activityLapExtension: nil, activityGoals: nil)]),
                    Trackpoint(time: workoutStartDateTime.addingTimeInterval(Double(2)), position: nil, altitude: nil, distance: 1.11, heartRate: HeartRateInBeatsPerMinute(heartRate: 101), cadence: 101, sensorState: SensorState.present, extensions: [Extension(activityTrackpointExtension: ActivityTrackpointExtension.init(speed: 11.3, runCadence: nil, watts: 222, cadenceSensor: CadenceSensorType(rawValue: "bike")), activityLapExtension: nil, activityGoals: nil)])
                    ])]

let lap = ActivityLap(startTime: workoutStartDateTime, totalTime: 45.0, distance: 12.0, maximumSpeed: nil, calories: 120, averageHeartRate: nil, maximumHeartRate: nil, intensity: .active, cadence: nil, triggerMethod: .manual, track: track, notes: nil, extensions: nil)

let activity = Activity(sport: .biking, identification: workoutStartDateTime, lap: [lap], notes: nil, training: nil, creator: nil)

let activities = ActivityList(activities: [activity], multiSportSession: nil)

let database = TrainingCenterDatabase(activities: activities, courses: nil, author: author)

let TCXFile = TcxFile(database: database)

let encodedData = try? TCXFile.encode(prettyPrinted: true)

if let encodedData = encodedData {
    let xml = String(bytes: encodedData, encoding: .utf8)
    print(xml!)
}

Supported Elements

  • ActivityList
  • Activity
  • ActivityLap
  • ActivityReference
  • Application
  • Author
  • Build
  • BuildType
  • Course
  • CourseLap
  • CourseList
  • CoursePoint
  • CoursePointType
  • Creator
  • Gender
  • HeartRateInBeatsPerMinute
  • HeartRateInBeatsPercentMax
  • Intensity
  • MultiSportSession
  • NextSport
  • Plan
  • Position
  • QuickWorkoutResults
  • SensorState
  • Sport
  • Track
  • Trackpoint
  • Training
  • TrainingType
  • TriggerMethod
  • Version

Supported Extensions

  • ActivityExtension

    • CadenceSensorType
    • ActivityTrackpointExtension
    • ActivityLapExtension
  • ActivityGoals

    • Measure
    • RecurrenceCode
    • Period
    • ActivityGoal
    • ActivityGoals

Author

This package is developed and maintained by Kevin A. Hoogheem

License

TcxDataProtocol is available under the MIT license