Skip to content

Repository files navigation

FitDataProtocol

Swift5.2VersionLicensePlatform

Swift Version of the Garmin Flexible and Interoperable Data Transfer Protocol.

Supports SDK Revision 21.16.0

Installation

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

pod'FitDataProtocol'

Swift Package Manager:

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

How to Use

Decoding FIT Files

letfileUrl=URL(fileURLWithPath:"WeightScaleMultiUser"+".fit")letfileData=try?Data(contentsOf: fileUrl)iflet fileData = fileData {vardecoder=FitFileDecoder(crcCheckingStrategy:.throws)do{try decoder.decode(data: fileData,
messages:FitFileDecoder.defaultMessages,
decoded:{(message:FitMessage)inprint("Got Message: \(message)")iflet message = message as?FileIdMessage{print("mssage", message.deviceSerialNumber)}iflet message = message as?RecordMessage{
records.append(message)}iflet message = message as?SportMessage{
sports.append(message)}iflet message = message as?ActivityMessage{
activity.append(message)}})}catch{print(error)}}

Encoding FIT Files

As part of the Encoding of the FIT Files you can check for Validity of the data you are encoding.

The options are

  • none - No Validity Checks are done
  • fileType - Based on the File Type, checks will be done to insure correct fields are included
  • garminConnect - Special Check for creating FIT files for GarminConnect

Example:

letactivity=ActivityMessage(timeStamp:FitTime(date:Date()),
totalTimerTime:nil,
localTimeStamp:nil,
numberOfSessions:nil,
activity:Activity.multisport,
event:nil,
eventType:nil,
eventGroup:nil)letfieldId=FileIdMessage(deviceSerialNumber:nil,
fileCreationDate: time,
manufacturer:Manufacturer.garmin,
product:nil,
fileNumber:nil,
fileType:FileType.activity,
productName:nil)letencoder=FitFileEncoder(dataValidityStrategy:.none)letresult= encoder.encode(fildIdMessage: fiel, messages:[activity])switch result {case.success(let encodedData):print(encodedData asNSData)
/// you can save off the file data
case.failure(let error):print(error.localizedDescription)}
///
/// You can still use doCatch ///
do{letencoder=FitFileEncoder(dataValidityStrategy:.none)letdata=try encoder.encode(fildIdMessage: fieldId, messages:[activity]).get()print(data asNSData)
/// you can save off the file data
}catch{print(error)}

Author

This package is developed and maintained by Kevin A. Hoogheem

License

FitDataProtocol is available under the MIT license

About

Swift Implementation the Garmin Flexible and Interoperable Data Transfer Protocol.

Topics

Resources

Stars

62 stars

Watchers

9 watching

Forks

Releases

Packages

Used by

Contributors

Languages