diff --git a/GeoTrackKitExample/GeoTrackKitExample.xcodeproj/project.pbxproj b/GeoTrackKitExample/GeoTrackKitExample.xcodeproj/project.pbxproj index 3c13ed4..a67c734 100644 --- a/GeoTrackKitExample/GeoTrackKitExample.xcodeproj/project.pbxproj +++ b/GeoTrackKitExample/GeoTrackKitExample.xcodeproj/project.pbxproj @@ -14,15 +14,16 @@ 3604F21022145D2400D2EFA7 /* EndpointLocationNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3604F20F22145D2400D2EFA7 /* EndpointLocationNode.swift */; }; 3604FC77217150AB00B46BAA /* GeoTrackStatisticsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3604FC76217150AB00B46BAA /* GeoTrackStatisticsTests.swift */; }; 36302DB9210E17B400834A1D /* GeoTrackKitErrorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36302DB8210E17B400834A1D /* GeoTrackKitErrorTests.swift */; }; + 3645779F22873E7A00D39FF5 /* DirectionNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3645779E22873E7A00D39FF5 /* DirectionNode.swift */; }; 366B1C672209271E003C19F8 /* TrackList.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 366B1C662209271E003C19F8 /* TrackList.storyboard */; }; 366B1C69220927F4003C19F8 /* TrackListTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 366B1C68220927F4003C19F8 /* TrackListTableViewController.swift */; }; 366B652D21963A7D00BA5EB7 /* reference-track-2.json in Resources */ = {isa = PBXBuildFile; fileRef = 366B652C21963A7D00BA5EB7 /* reference-track-2.json */; }; 366B653021963AEE00BA5EB7 /* GeoTrackTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 366B652F21963AEE00BA5EB7 /* GeoTrackTests.swift */; }; 366B6532219650CF00BA5EB7 /* reference-track-3.json in Resources */ = {isa = PBXBuildFile; fileRef = 366B6531219650CF00BA5EB7 /* reference-track-3.json */; }; 366CE43C1DFCAC360090BD42 /* GeoTrackSerializationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 366CE43B1DFCAC360090BD42 /* GeoTrackSerializationTests.swift */; }; - 36838E93222A094A00F4F714 /* TrackOverviewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36838E92222A094A00F4F714 /* TrackOverviewCell.swift */; }; 3677FFF9220C679A0036DA27 /* ARCLViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3677FFF8220C679A0036DA27 /* ARCLViewController.swift */; }; 3677FFFB220C68C10036DA27 /* ARCL.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3677FFFA220C68C10036DA27 /* ARCL.storyboard */; }; + 36838E93222A094A00F4F714 /* TrackOverviewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36838E92222A094A00F4F714 /* TrackOverviewCell.swift */; }; 368A87AE1E6332C1003D115A /* reference-track-1.json in Resources */ = {isa = PBXBuildFile; fileRef = 368A87AD1E6332C1003D115A /* reference-track-1.json */; }; 368A87B11E63332E003D115A /* TrackReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 368A87B01E63332E003D115A /* TrackReader.swift */; }; 368A87B71E636FCE003D115A /* GeoTrackAnalyzerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 368A87B61E636FCE003D115A /* GeoTrackAnalyzerTests.swift */; }; @@ -73,15 +74,16 @@ 3604F20F22145D2400D2EFA7 /* EndpointLocationNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EndpointLocationNode.swift; sourceTree = ""; }; 3604FC76217150AB00B46BAA /* GeoTrackStatisticsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeoTrackStatisticsTests.swift; sourceTree = ""; }; 36302DB8210E17B400834A1D /* GeoTrackKitErrorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeoTrackKitErrorTests.swift; sourceTree = ""; }; + 3645779E22873E7A00D39FF5 /* DirectionNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DirectionNode.swift; sourceTree = ""; }; 366B1C662209271E003C19F8 /* TrackList.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = TrackList.storyboard; sourceTree = ""; }; 366B1C68220927F4003C19F8 /* TrackListTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackListTableViewController.swift; sourceTree = ""; }; 366B652C21963A7D00BA5EB7 /* reference-track-2.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "reference-track-2.json"; sourceTree = ""; }; 366B652F21963AEE00BA5EB7 /* GeoTrackTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeoTrackTests.swift; sourceTree = ""; }; 366B6531219650CF00BA5EB7 /* reference-track-3.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "reference-track-3.json"; sourceTree = ""; }; 366CE43B1DFCAC360090BD42 /* GeoTrackSerializationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeoTrackSerializationTests.swift; sourceTree = ""; }; - 36838E92222A094A00F4F714 /* TrackOverviewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackOverviewCell.swift; sourceTree = ""; }; 3677FFF8220C679A0036DA27 /* ARCLViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ARCLViewController.swift; sourceTree = ""; }; 3677FFFA220C68C10036DA27 /* ARCL.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = ARCL.storyboard; sourceTree = ""; }; + 36838E92222A094A00F4F714 /* TrackOverviewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackOverviewCell.swift; sourceTree = ""; }; 368A87AD1E6332C1003D115A /* reference-track-1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "reference-track-1.json"; sourceTree = ""; }; 368A87B01E63332E003D115A /* TrackReader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrackReader.swift; sourceTree = ""; }; 368A87B61E636FCE003D115A /* GeoTrackAnalyzerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeoTrackAnalyzerTests.swift; sourceTree = ""; }; @@ -192,6 +194,7 @@ 3677FFFA220C68C10036DA27 /* ARCL.storyboard */, 3604F20D2214564A00D2EFA7 /* ArrowLocationNode.swift */, 3604F20F22145D2400D2EFA7 /* EndpointLocationNode.swift */, + 3645779E22873E7A00D39FF5 /* DirectionNode.swift */, ); path = ARCL; sourceTree = ""; @@ -472,6 +475,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -611,6 +615,7 @@ 368B12CA222DB1E200B22C72 /* SelectTrackDialog.swift in Sources */, 36C45E451DCE2D3500E87710 /* AppDelegate.swift in Sources */, 368B12C8222D847A00B22C72 /* StringExtensions.swift in Sources */, + 3645779F22873E7A00D39FF5 /* DirectionNode.swift in Sources */, 36838E93222A094A00F4F714 /* TrackOverviewCell.swift in Sources */, 36A7C6C72100B0980073407A /* EventLogAppender.swift in Sources */, 3677FFF9220C679A0036DA27 /* ARCLViewController.swift in Sources */, diff --git a/GeoTrackKitExample/GeoTrackKitExample.xcworkspace/contents.xcworkspacedata b/GeoTrackKitExample/GeoTrackKitExample.xcworkspace/contents.xcworkspacedata index 8f9d623..64fe4a5 100644 --- a/GeoTrackKitExample/GeoTrackKitExample.xcworkspace/contents.xcworkspacedata +++ b/GeoTrackKitExample/GeoTrackKitExample.xcworkspace/contents.xcworkspacedata @@ -1,6 +1,9 @@ + + diff --git a/GeoTrackKitExample/GeoTrackKitExample.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/GeoTrackKitExample/GeoTrackKitExample.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..0c67376 --- /dev/null +++ b/GeoTrackKitExample/GeoTrackKitExample.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,5 @@ + + + + + diff --git a/GeoTrackKitExample/GeoTrackKitExample/Views/ARCL/ARCLViewController.swift b/GeoTrackKitExample/GeoTrackKitExample/Views/ARCL/ARCLViewController.swift index dcdc7fc..45c1109 100644 --- a/GeoTrackKitExample/GeoTrackKitExample/Views/ARCL/ARCLViewController.swift +++ b/GeoTrackKitExample/GeoTrackKitExample/Views/ARCL/ARCLViewController.swift @@ -44,6 +44,8 @@ class ARCLViewController: UIViewController { mapView.showPoints = true } NotificationCenter.default.addObserver(self, selector: #selector(selectedAnnotationPoint(_:)), name: Notification.Name.GeoTrackKit.selectedAnnotationPoint, object: nil) + let item = UIBarButtonItem(barButtonSystemItem: .save, target: self, action: #selector(saveScene(_:))) + navigationItem.setRightBarButton(item, animated: false) } override func viewWillAppear(_ animated: Bool) { @@ -76,6 +78,48 @@ class ARCLViewController: UIViewController { } } + @IBAction + func saveScene(_ source: Any) { + guard let docsFolder = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { + return assertionFailure("Failed to get docs folder") + } + prepareSceneNodesForSave() + let sceneUrl = URL(fileURLWithPath: "ARCL-Saved.scn", relativeTo: docsFolder) + sceneView.scene.write(to: sceneUrl, options: nil, delegate: nil) { (percentage, error, _) in + if let error = error { + print("ERROR: \(error.localizedDescription)") + assertionFailure("Failed to save scene") + } + print("save scene: \(percentage) complete") + if percentage == 1.0 { + assert(FileManager.default.fileExists(atPath: sceneUrl.path)) + guard let attrs = try? FileManager.default.attributesOfItem(atPath: sceneUrl.path) else { + return assertionFailure("poof") + } + assert(attrs[.size] as? Int ?? 0 > 1024) + DispatchQueue.main.async { [weak self] in + guard let data = try? Data(contentsOf: sceneUrl) else { + return + } + let activityVC = UIActivityViewController(activityItems: ["SCN File", data], applicationActivities: nil) + self?.present(activityVC, animated: true, completion: nil) + } + } + } + } + + func prepareSceneNodesForSave() { + guard let container = sceneView.scene.rootNode.childNodes.filter({ !$0.childNodes.isEmpty }).first else { + return // couldn't find the container + } + container.name = "Container" + let noNameNodes = container.childNodes.filter({ $0.name == nil }) + + for idx in 0.. DirectionNode { + let node = DirectionNode(location: startPoint) + let distance = startPoint.distance(from: endPoint) + let arrow = node.loadDirectionModel(height: distance) + node.addChildNode(arrow) + + return node + } + + class func build(from points: [CLLocation]) -> [DirectionNode] { + var nodes = [DirectionNode]() + + for idx in 0.. SCNNode { + + let box = SCNBox(width: 1, height: CGFloat(height), length: 1, chamferRadius: 0.5) + let material = SCNMaterial() + material.diffuse.contents = UIColor.green + box.materials = [material] + let node = SCNNode(geometry: box) + node.position.y = Float(height / 2) + + return node + } +} diff --git a/GeoTrackKitExample/GeoTrackKitExample/example.scnassets/polyline.scn b/GeoTrackKitExample/GeoTrackKitExample/example.scnassets/polyline.scn new file mode 100644 index 0000000..ab00edf Binary files /dev/null and b/GeoTrackKitExample/GeoTrackKitExample/example.scnassets/polyline.scn differ diff --git a/GeoTrackKitExample/Pods/ARCL/ARCL/Source/Nodes/LocationNode.swift b/GeoTrackKitExample/Pods/ARCL/ARCL/Source/Nodes/LocationNode.swift index 3fa2511..f6c5bc5 100644 --- a/GeoTrackKitExample/Pods/ARCL/ARCL/Source/Nodes/LocationNode.swift +++ b/GeoTrackKitExample/Pods/ARCL/ARCL/Source/Nodes/LocationNode.swift @@ -142,4 +142,20 @@ open class LocationNode: SCNNode { onCompletion() } + + + @available(iOS 11.0, *) + /// Performs a rotation of this node to point at the provided node. + /// + /// - Parameter node: The node that this node should be pointing at. + func look(at node: LocationNode) { + look(at: node.position, up: SCNVector3.yAxisUp, localFront: SCNVector3.yAxisUp) + } +} + +// MARK: - Math Extensions +public extension SCNVector3 { + + static let yAxisUp = SCNVector3(0, 1, 0) + } diff --git a/GeoTrackKitExample/Pods/ARCL/ARCL/Source/Nodes/PolylineNode.swift b/GeoTrackKitExample/Pods/ARCL/ARCL/Source/Nodes/PolylineNode.swift index 2c476f2..b980b7a 100644 --- a/GeoTrackKitExample/Pods/ARCL/ARCL/Source/Nodes/PolylineNode.swift +++ b/GeoTrackKitExample/Pods/ARCL/ARCL/Source/Nodes/PolylineNode.swift @@ -10,51 +10,98 @@ import Foundation import SceneKit import MapKit +/// A block that will build an SCNBox with the provided distance. +/// Note: the distance should be aassigned to the length +public typealias BoxBuilder = (_ distance: CGFloat) -> SCNBox + +/// A Node that is used to show directions in AR-CL. public class PolylineNode { public private(set) var locationNodes = [LocationNode]() - public let polyline: MKPolyline - public let altitude: CLLocationDistance - - private let lightNode: SCNNode = { - let node = SCNNode() - node.light = SCNLight() - node.light!.type = .ambient - if #available(iOS 10.0, *) { - node.light!.intensity = 25 - } - node.light!.attenuationStartDistance = 100 - node.light!.attenuationEndDistance = 100 - node.position = SCNVector3(x: 0, y: 10, z: 0) - node.castsShadow = false - node.light!.categoryBitMask = 3 - return node - }() - - private let lightNode3: SCNNode = { - let node = SCNNode() - node.light = SCNLight() - node.light!.type = .omni - if #available(iOS 10.0, *) { - node.light!.intensity = 100 - } - node.light!.attenuationStartDistance = 100 - node.light!.attenuationEndDistance = 100 - node.light!.castsShadow = true - node.position = SCNVector3(x: -10, y: 10, z: -10) - node.castsShadow = false - node.light!.categoryBitMask = 3 - return node - }() - - public init(polyline: MKPolyline, altitude: CLLocationDistance) { + public let polyline: MKPolyline? + public let altitude: CLLocationDistance? + public let boxBuilder: BoxBuilder + public let elevatedPoints: [CLLocation]? + + /// Creates a `PolylineNode` from the provided polyline, altitude (which is assumed to be uniform + /// for all of the points) and an optional SCNBox to use as a prototype for the location boxes. + /// + /// - Parameters: + /// - polyline: The polyline that we'll be creating location nodes for. + /// - altitude: The uniform altitude to use to show the location nodes. + /// - boxBuilder: A block that will customize how a box is built. + public init(polyline: MKPolyline, altitude: CLLocationDistance, boxBuilder: BoxBuilder? = nil) { self.polyline = polyline self.altitude = altitude + self.boxBuilder = boxBuilder ?? Constants.defaultBuilder + self.elevatedPoints = nil contructNodes() } - fileprivate func contructNodes() { + @available(iOS 11.0, *) + public init(pointsWithElevation points: [CLLocation], boxBuilder: BoxBuilder? = nil) { + self.polyline = nil + self.altitude = nil + self.boxBuilder = boxBuilder ?? Constants.defaultBuilder + self.elevatedPoints = points + constructNodesFromPoints() + } + +} + +// MARK: - Implementation + +private extension PolylineNode { + + struct Constants { + static let defaultBuilder: BoxBuilder = { (distance) -> SCNBox in + let box = SCNBox(width: 1, height: 0.2, length: distance, chamferRadius: 0) + box.firstMaterial?.diffuse.contents = UIColor(red: 47.0/255.0, green: 125.0/255.0, blue: 255.0/255.0, alpha: 1.0) + return box + } + } + + func constructNodesFromPoints() { + guard let elevatedPoints = elevatedPoints else { + return assertionFailure("Points with elevation are not set") + } + + for i in 0 ..< elevatedPoints.count - 1 { + let currentLocation = elevatedPoints[i] + let nextLocation = elevatedPoints[i+1] + + let distance = currentLocation.distance(from: nextLocation) + let altitudeDiff = currentLocation.altitude - nextLocation.altitude + let slopeDegrees = atan(altitudeDiff / distance) + let box = boxBuilder(CGFloat(distance)) + let boxNode = SCNNode(geometry: box) + + let bearingDegrees = -currentLocation.bearing(between: nextLocation) + + boxNode.pivot = SCNMatrix4MakeTranslation(0, 0, 0.5 * Float(distance)) + boxNode.eulerAngles.x = Float(slopeDegrees).degreesToRadians + boxNode.eulerAngles.y = Float(bearingDegrees).degreesToRadians + + let locationNode = LocationNode(location: currentLocation) + locationNode.addChildNode(boxNode) + + locationNodes.append(locationNode) + } + } + + + /// This is what actually builds the SCNNodes and appends them to the + /// locationNodes collection so they can be added to the scene and shown + /// to the user. If the prototype box is nil, then the default box will be used + func contructNodes() { + guard let polyline = polyline else { + return assertionFailure("No polyline set") + } + guard let altitude = altitude else { + return assertionFailure("No altitude set") + } + let points = polyline.points() for i in 0 ..< polyline.pointCount - 1 { @@ -63,23 +110,19 @@ public class PolylineNode { let distance = currentLocation.distance(from: nextLocation) - let box = SCNBox(width: 1, height: 0.2, length: CGFloat(distance), chamferRadius: 0) - box.firstMaterial?.diffuse.contents = UIColor(red: 47.0/255.0, green: 125.0/255.0, blue: 255.0/255.0, alpha: 1.0) + let box = boxBuilder(CGFloat(distance)) + let boxNode = SCNNode(geometry: box) let bearing = -currentLocation.bearing(between: nextLocation) - let boxNode = SCNNode(geometry: box) boxNode.pivot = SCNMatrix4MakeTranslation(0, 0, 0.5 * Float(distance)) boxNode.eulerAngles.y = Float(bearing).degreesToRadians - boxNode.categoryBitMask = 3 - boxNode.addChildNode(lightNode) - boxNode.addChildNode(lightNode3) let locationNode = LocationNode(location: currentLocation) locationNode.addChildNode(boxNode) locationNodes.append(locationNode) } - } + } diff --git a/GeoTrackKitExample/Pods/ARCL/ARCL/Source/SceneLocationView.swift b/GeoTrackKitExample/Pods/ARCL/ARCL/Source/SceneLocationView.swift index 344d168..fa17220 100644 --- a/GeoTrackKitExample/Pods/ARCL/ARCL/Source/SceneLocationView.swift +++ b/GeoTrackKitExample/Pods/ARCL/ARCL/Source/SceneLocationView.swift @@ -273,9 +273,22 @@ public extension SceneLocationView { } } +// MARK: - Routes + @available(iOS 11.0, *) public extension SceneLocationView { + /// Adds the arbitrary point directions to the scene. + /// + /// - Parameter points: The points (with locations) to add directions for. + func addRoute(points: [CLLocation]) { + polylineNodes.append(PolylineNode(pointsWithElevation: points)) + showPolylines() + } + + /// Adds the directional routes to the AR Scene. + /// + /// - Parameter routes: The `MKRoute directions` to add. func addRoutes(routes: [MKRoute]) { guard let altitude = sceneLocationManager.currentLocation?.altitude else { return assertionFailure("we don't have an elevation") @@ -283,15 +296,7 @@ public extension SceneLocationView { let polyNodes = routes.map { PolylineNode(polyline: $0.polyline, altitude: altitude - 2.0) } polylineNodes.append(contentsOf: polyNodes) - polyNodes.forEach { - $0.locationNodes.forEach { - $0.updatePositionAndScale(setup: true, - scenePosition: currentScenePosition, - locationManager: sceneLocationManager, - onCompletion: {}) - sceneNode?.addChildNode($0) - } - } + showPolylines() } func removeRoutes(routes: [MKRoute]) { @@ -303,6 +308,32 @@ public extension SceneLocationView { } } +// MARK: - Implementation + +@available(iOS 11.0, *) +private extension SceneLocationView { + + func showPolylines(lookAtLast: Bool = false) { + polylineNodes.forEach { polylineNode in + var last: LocationNode? + polylineNode.locationNodes.forEach { locationNode in + locationNode.updatePositionAndScale(setup: true, + scenePosition: currentScenePosition, + locationManager: sceneLocationManager, + onCompletion: {}) + sceneNode?.addChildNode(locationNode) + if lookAtLast { + last?.look(at: locationNode) + last = locationNode + } + } + } + } + +} + +// MARK: - SceneLocationManagerDelegate + @available(iOS 11.0, *) extension SceneLocationView: SceneLocationManagerDelegate { var scenePosition: SCNVector3? { return currentScenePosition } diff --git a/GeoTrackKitExample/Pods/Pods.xcodeproj/project.pbxproj b/GeoTrackKitExample/Pods/Pods.xcodeproj/project.pbxproj index 642cead..e2f6d1e 100644 --- a/GeoTrackKitExample/Pods/Pods.xcodeproj/project.pbxproj +++ b/GeoTrackKitExample/Pods/Pods.xcodeproj/project.pbxproj @@ -87,185 +87,185 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0234AAF897706BAE95214B069ACC2C1C /* Name.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Name.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/Notification/Name.html; sourceTree = ""; }; - 024DF307FF1B90C75EB200AE366269E5 /* Stat.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Stat.html; path = docs/Classes/Stat.html; sourceTree = ""; }; - 02EDA23F5F0BCCF564BF39C51286FB1C /* GeoTrackAnalyzer.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackAnalyzer.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackAnalyzer.html; sourceTree = ""; }; + 0234AAF897706BAE95214B069ACC2C1C /* Name.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Name.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/Notification/Name.html; sourceTree = ""; }; + 024DF307FF1B90C75EB200AE366269E5 /* Stat.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Stat.html; path = docs/Classes/Stat.html; sourceTree = ""; }; + 02EDA23F5F0BCCF564BF39C51286FB1C /* GeoTrackAnalyzer.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GeoTrackAnalyzer.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackAnalyzer.html; sourceTree = ""; }; 049F3EAED8F8D85DAF8A029A33CCE601 /* GeoTrack+Utilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "GeoTrack+Utilities.swift"; sourceTree = ""; }; 08930193412935B3B76A16F4B963BFDA /* GeoTrackKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GeoTrackKit-umbrella.h"; sourceTree = ""; }; - 09522AD3710FF29C7A591675AEE63609 /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Protocols.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Protocols.html; sourceTree = ""; }; + 09522AD3710FF29C7A591675AEE63609 /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Protocols.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Protocols.html; sourceTree = ""; }; 095BEFDE621BDBC36BDA3C3C81903E5B /* FloatingPoint+Radians.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FloatingPoint+Radians.swift"; path = "ARCL/Source/Extensions/FloatingPoint+Radians.swift"; sourceTree = ""; }; - 0A4B14C2156A4A9524D89E46F9F2CD61 /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Protocols.html; path = docs/Protocols.html; sourceTree = ""; }; - 0A9589A1321C4C1DB66B6974A3106AA0 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; + 0A4B14C2156A4A9524D89E46F9F2CD61 /* Protocols.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Protocols.html; path = docs/Protocols.html; sourceTree = ""; }; + 0A9589A1321C4C1DB66B6974A3106AA0 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 0AA65D9A3FD6926B35729C3C4C1D2D61 /* UIGeoTrack.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIGeoTrack.swift; sourceTree = ""; }; 0AD109C468E49F3F25589ECCD9E62E9C /* Pods-GeoTrackKitExampleTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-GeoTrackKitExampleTests-dummy.m"; sourceTree = ""; }; 0B690759C2C8167F8F8041C8172A3B3B /* NumberExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NumberExtensions.swift; sourceTree = ""; }; 0BB08B80A6A2CFBEBF64B035690A8C1E /* GeoTrackKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GeoTrackKit-prefix.pch"; sourceTree = ""; }; 0D9E7F365ED2DB11A0E48C8F5D827120 /* ARCL-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ARCL-dummy.m"; sourceTree = ""; }; - 0E43F5DCE1CA439D91E7F4F65798B4AC /* Pods_GeoTrackKitExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_GeoTrackKitExample.framework; path = "Pods-GeoTrackKitExample.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 0E98A4BA789FA350CCD9F89A1580C153 /* GeoTrackLogAppender.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackLogAppender.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Protocols/GeoTrackLogAppender.html; sourceTree = ""; }; - 103BAAABF55CF7D8C536446BF5FB4CA2 /* TrackingType.html */ = {isa = PBXFileReference; includeInIndex = 1; name = TrackingType.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Enums/TrackingType.html; sourceTree = ""; }; + 0E43F5DCE1CA439D91E7F4F65798B4AC /* Pods_GeoTrackKitExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_GeoTrackKitExample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0E98A4BA789FA350CCD9F89A1580C153 /* GeoTrackLogAppender.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GeoTrackLogAppender.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Protocols/GeoTrackLogAppender.html; sourceTree = ""; }; + 103BAAABF55CF7D8C536446BF5FB4CA2 /* TrackingType.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = TrackingType.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Enums/TrackingType.html; sourceTree = ""; }; 12A8E6D1FF547A38751030FFB432C17C /* GeoTrackService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GeoTrackService.swift; path = GeoTrackKit/Core/GeoTrackService.swift; sourceTree = ""; }; 17135F20104D7E7D0806EE0958EA4EED /* SceneLocationViewEstimateDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SceneLocationViewEstimateDelegate.swift; path = ARCL/Source/SceneLocationViewEstimateDelegate.swift; sourceTree = ""; }; 1A1606F24AE2F5034B04725A7AA1A2B1 /* SceneLocationEstimate+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SceneLocationEstimate+Extensions.swift"; path = "ARCL/Source/Location Manager/SceneLocationEstimate+Extensions.swift"; sourceTree = ""; }; - 1B9527F0B9C5A45FDC937C5924426A84 /* DefaultMapZoom.html */ = {isa = PBXFileReference; includeInIndex = 1; name = DefaultMapZoom.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/DefaultMapZoom.html; sourceTree = ""; }; - 1F2BC376E7530D21DF6383FCED8CE5B5 /* Direction.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Direction.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Enums/Direction.html; sourceTree = ""; }; - 20402B210F9A3204B9AFD43448F716BD /* Stat.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Stat.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/Stat.html; sourceTree = ""; }; - 20938AD62AD6EAF6CD9FF895A1CB6CC1 /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jquery.min.js; path = docs/js/jquery.min.js; sourceTree = ""; }; - 21BE28FA9B770228CB6425C945A26608 /* Level.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Level.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackEvent/Level.html; sourceTree = ""; }; - 22C9ED6A881B19F50F7E62E01FB77526 /* GeoTrackManager.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackManager.html; path = docs/Classes/GeoTrackManager.html; sourceTree = ""; }; - 27F09442760DC3B7B65356F73A10A984 /* GeoTrackService.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackService.html; path = docs/Protocols/GeoTrackService.html; sourceTree = ""; }; + 1B9527F0B9C5A45FDC937C5924426A84 /* DefaultMapZoom.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = DefaultMapZoom.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/DefaultMapZoom.html; sourceTree = ""; }; + 1F2BC376E7530D21DF6383FCED8CE5B5 /* Direction.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Direction.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Enums/Direction.html; sourceTree = ""; }; + 20402B210F9A3204B9AFD43448F716BD /* Stat.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Stat.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/Stat.html; sourceTree = ""; }; + 20938AD62AD6EAF6CD9FF895A1CB6CC1 /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = jquery.min.js; path = docs/js/jquery.min.js; sourceTree = ""; }; + 21BE28FA9B770228CB6425C945A26608 /* Level.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Level.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackEvent/Level.html; sourceTree = ""; }; + 22C9ED6A881B19F50F7E62E01FB77526 /* GeoTrackManager.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GeoTrackManager.html; path = docs/Classes/GeoTrackManager.html; sourceTree = ""; }; + 27F09442760DC3B7B65356F73A10A984 /* GeoTrackService.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GeoTrackService.html; path = docs/Protocols/GeoTrackService.html; sourceTree = ""; }; 2829797D6D1DEC21487DF701E3441478 /* Pods-GeoTrackKitExample-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-GeoTrackKitExample-dummy.m"; sourceTree = ""; }; - 2BB048E5E05660CCEAC5B571AC776D03 /* Leg.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Leg.html; path = docs/Classes/Leg.html; sourceTree = ""; }; - 2C29C08E9F748B3E079C9DCDF9242EB6 /* GeoTrack.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrack.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrack.html; sourceTree = ""; }; - 2CF56FC1E4D15822C146A1BF5D657C5C /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; name = undocumented.json; path = docs/undocumented.json; sourceTree = ""; }; + 2BB048E5E05660CCEAC5B571AC776D03 /* Leg.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Leg.html; path = docs/Classes/Leg.html; sourceTree = ""; }; + 2C29C08E9F748B3E079C9DCDF9242EB6 /* GeoTrack.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GeoTrack.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrack.html; sourceTree = ""; }; + 2CF56FC1E4D15822C146A1BF5D657C5C /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.json; name = undocumented.json; path = docs/undocumented.json; sourceTree = ""; }; 2D09C0B4E53D32D1C8B81140FE78BB3B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2D47169F8D0B06D0A417E78FB2D3FC55 /* GeoTrackEventLog.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackEventLog.html; path = docs/Classes/GeoTrackEventLog.html; sourceTree = ""; }; - 2EF38BA73E1850341154A7952081827C /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Classes.html; path = docs/Classes.html; sourceTree = ""; }; + 2D47169F8D0B06D0A417E78FB2D3FC55 /* GeoTrackEventLog.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GeoTrackEventLog.html; path = docs/Classes/GeoTrackEventLog.html; sourceTree = ""; }; + 2EF38BA73E1850341154A7952081827C /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Classes.html; path = docs/Classes.html; sourceTree = ""; }; 2F33AAE22298066939852ED11416561E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 3126119ED9E1208A62F6E28E378D62DA /* Pods-GeoTrackKitExampleTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-GeoTrackKitExampleTests-frameworks.sh"; sourceTree = ""; }; - 312B983E4C60886DBD3FBCE307D442FC /* GeoTrackState.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackState.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Enums/GeoTrackState.html; sourceTree = ""; }; - 35522176C429064FC0E9246954D211CD /* TrackStat.html */ = {isa = PBXFileReference; includeInIndex = 1; name = TrackStat.html; path = docs/Classes/TrackStat.html; sourceTree = ""; }; - 356B99DD54D86B5753B7DA2CC0D5AC21 /* CLLocationCoordinate2D.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CLLocationCoordinate2D.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/CLLocationCoordinate2D.html; sourceTree = ""; }; - 36850B7AA00305C61B41D3366AB7851B /* GeoTrackAnalyzer.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackAnalyzer.html; path = docs/Classes/GeoTrackAnalyzer.html; sourceTree = ""; }; - 37631CE316E292464B808D45AC523D71 /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jquery.min.js; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/js/jquery.min.js; sourceTree = ""; }; - 38676B3BD767E4857B80EBE679366C18 /* ActivityService.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ActivityService.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/ActivityService.html; sourceTree = ""; }; + 312B983E4C60886DBD3FBCE307D442FC /* GeoTrackState.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GeoTrackState.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Enums/GeoTrackState.html; sourceTree = ""; }; + 35522176C429064FC0E9246954D211CD /* TrackStat.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = TrackStat.html; path = docs/Classes/TrackStat.html; sourceTree = ""; }; + 356B99DD54D86B5753B7DA2CC0D5AC21 /* CLLocationCoordinate2D.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CLLocationCoordinate2D.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/CLLocationCoordinate2D.html; sourceTree = ""; }; + 36850B7AA00305C61B41D3366AB7851B /* GeoTrackAnalyzer.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GeoTrackAnalyzer.html; path = docs/Classes/GeoTrackAnalyzer.html; sourceTree = ""; }; + 37631CE316E292464B808D45AC523D71 /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = jquery.min.js; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/js/jquery.min.js; sourceTree = ""; }; + 38676B3BD767E4857B80EBE679366C18 /* ActivityService.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = ActivityService.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/ActivityService.html; sourceTree = ""; }; 3B0763712FF339A62F2FE134409CDDEB /* LocationAnnotationNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocationAnnotationNode.swift; path = ARCL/Source/Nodes/LocationAnnotationNode.swift; sourceTree = ""; }; - 3BAD910B30825BD3085BB1E00F654B56 /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; name = index.html; path = docs/index.html; sourceTree = ""; }; + 3BAD910B30825BD3085BB1E00F654B56 /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = index.html; path = docs/index.html; sourceTree = ""; }; 3DC845A0614CEA0E9CADE9B156ACE016 /* GeoTrack.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GeoTrack.swift; sourceTree = ""; }; - 4056B665E3F4B2EB76200865C9A1557E /* Double.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Double.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/Double.html; sourceTree = ""; }; - 40B5D7C1975836E27C5CE78AAA07AFEF /* Direction.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Direction.html; path = docs/Enums/Direction.html; sourceTree = ""; }; + 4056B665E3F4B2EB76200865C9A1557E /* Double.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Double.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/Double.html; sourceTree = ""; }; + 40B5D7C1975836E27C5CE78AAA07AFEF /* Direction.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Direction.html; path = docs/Enums/Direction.html; sourceTree = ""; }; 47C413A2C2A53ACF9BADA7B8B72D56DD /* CLLocationExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CLLocationExtension.swift; sourceTree = ""; }; 4D8F19986A0ECF429BB94F593FE326BC /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/img/dash.png; sourceTree = ""; }; - 4DF451CC30B7AE98BC53CEF34D675382 /* GeoTrackKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GeoTrackKit.framework; path = GeoTrackKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4DF451CC30B7AE98BC53CEF34D675382 /* GeoTrackKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GeoTrackKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4EAA97D3C3AB91070E8A10EFA8DDEC8F /* GeoTrackState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GeoTrackState.swift; path = GeoTrackKit/Core/GeoTrackState.swift; sourceTree = ""; }; - 5023E42F9E01AF52EAF0B738491EF7B0 /* UIGeoTrack.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UIGeoTrack.html; path = docs/Classes/UIGeoTrack.html; sourceTree = ""; }; - 511D130D9B6BBB85D60EF5AC7B0BD47E /* Leg.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Leg.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/Leg.html; sourceTree = ""; }; - 51F148022359BD599AD94EACC51EC8DB /* ZoomDefining.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ZoomDefining.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Protocols/ZoomDefining.html; sourceTree = ""; }; + 5023E42F9E01AF52EAF0B738491EF7B0 /* UIGeoTrack.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = UIGeoTrack.html; path = docs/Classes/UIGeoTrack.html; sourceTree = ""; }; + 511D130D9B6BBB85D60EF5AC7B0BD47E /* Leg.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Leg.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/Leg.html; sourceTree = ""; }; + 51F148022359BD599AD94EACC51EC8DB /* ZoomDefining.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = ZoomDefining.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Protocols/ZoomDefining.html; sourceTree = ""; }; 59DEEA346498F0AF5C7ED52F84D99351 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 59F1F5A6B766BC3AFD2B233AA9B1CCB2 /* LocationManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocationManager.swift; path = "ARCL/Source/Location Manager/LocationManager.swift"; sourceTree = ""; }; 5AF4D778877A73575EADF0504578E2CF /* PolylineNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PolylineNode.swift; path = ARCL/Source/Nodes/PolylineNode.swift; sourceTree = ""; }; 5C77626DC61CC820DD862D736C3A8262 /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/MapKit.framework; sourceTree = DEVELOPER_DIR; }; - 5D1E1BB33E9AD1AA39FB97470A5F7A31 /* GeoTrackMap.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackMap.html; path = docs/Classes/GeoTrackMap.html; sourceTree = ""; }; - 5E1940BC926F51A9C4EF1B14FE656D7E /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; name = highlight.css; path = docs/css/highlight.css; sourceTree = ""; }; + 5D1E1BB33E9AD1AA39FB97470A5F7A31 /* GeoTrackMap.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GeoTrackMap.html; path = docs/Classes/GeoTrackMap.html; sourceTree = ""; }; + 5E1940BC926F51A9C4EF1B14FE656D7E /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.css; name = highlight.css; path = docs/css/highlight.css; sourceTree = ""; }; 5FD5F957156137243905E859FE9E4849 /* ZoomDefining.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ZoomDefining.swift; sourceTree = ""; }; - 617DBFA9223CC5D0691025E0A7D1A3AD /* TrackStat.html */ = {isa = PBXFileReference; includeInIndex = 1; name = TrackStat.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/TrackStat.html; sourceTree = ""; }; - 618AEEB09B02637CFB8CCEF890347162 /* ActivityService.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ActivityService.html; path = docs/Classes/ActivityService.html; sourceTree = ""; }; - 619B11AB0CEC4E99AC734E4D102431FB /* Notification.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Notification.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/Notification.html; sourceTree = ""; }; + 617DBFA9223CC5D0691025E0A7D1A3AD /* TrackStat.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = TrackStat.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/TrackStat.html; sourceTree = ""; }; + 618AEEB09B02637CFB8CCEF890347162 /* ActivityService.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = ActivityService.html; path = docs/Classes/ActivityService.html; sourceTree = ""; }; + 619B11AB0CEC4E99AC734E4D102431FB /* Notification.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Notification.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/Notification.html; sourceTree = ""; }; 61D994B3EA64364B2C7131056079EC0C /* Pods-GeoTrackKitExampleTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-GeoTrackKitExampleTests-acknowledgements.plist"; sourceTree = ""; }; - 6215978127200853BE843A237AE849AA /* Name.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Name.html; path = docs/Extensions/Notification/Name.html; sourceTree = ""; }; + 6215978127200853BE843A237AE849AA /* Name.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Name.html; path = docs/Extensions/Notification/Name.html; sourceTree = ""; }; 650B7BCE441BEE4B6EE153C3EC14F7E0 /* DefaultMapZoom.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DefaultMapZoom.swift; sourceTree = ""; }; - 652DB8D771A981723CB49B46C0936845 /* EventType.html */ = {isa = PBXFileReference; includeInIndex = 1; name = EventType.html; path = docs/Classes/GeoTrackLocationEvent/EventType.html; sourceTree = ""; }; + 652DB8D771A981723CB49B46C0936845 /* EventType.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = EventType.html; path = docs/Classes/GeoTrackLocationEvent/EventType.html; sourceTree = ""; }; 65D1E4F2D7D0879F1C78CC73480DABEE /* GeoTrackEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GeoTrackEvent.swift; path = GeoTrackKit/Core/GeoTrackEvent.swift; sourceTree = ""; }; 65E47DE90CB6EA53D84C2CD84801607A /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/img/carat.png; sourceTree = ""; }; - 662885EE0CB6D5298F0C6FD4C172A77B /* GeoTrackState.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackState.html; path = docs/Enums/GeoTrackState.html; sourceTree = ""; }; + 662885EE0CB6D5298F0C6FD4C172A77B /* GeoTrackState.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GeoTrackState.html; path = docs/Enums/GeoTrackState.html; sourceTree = ""; }; 66E8F5B8007A496981EB42E4EA65437F /* ActivityService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ActivityService.swift; path = GeoTrackKit/HealthKit/ActivityService.swift; sourceTree = ""; }; - 6AE238A8F311684AAF5EDC7D0F3F46EE /* GeoTrackService.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackService.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Protocols/GeoTrackService.html; sourceTree = ""; }; + 6AE238A8F311684AAF5EDC7D0F3F46EE /* GeoTrackService.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GeoTrackService.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Protocols/GeoTrackService.html; sourceTree = ""; }; 6BF9F0FFF619746C862F7652A8F38C7A /* ARCL.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ARCL.modulemap; sourceTree = ""; }; - 6C66E8B87433DA3FC5DF7C02F533CC30 /* Date.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Date.html; path = docs/Extensions/Date.html; sourceTree = ""; }; - 6D3C293D099EA33D15F2B91522D5D049 /* GeoTrackEventLog.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackEventLog.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackEventLog.html; sourceTree = ""; }; + 6C66E8B87433DA3FC5DF7C02F533CC30 /* Date.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Date.html; path = docs/Extensions/Date.html; sourceTree = ""; }; + 6D3C293D099EA33D15F2B91522D5D049 /* GeoTrackEventLog.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GeoTrackEventLog.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackEventLog.html; sourceTree = ""; }; 6D4B613FC66AF449EF00CAF7F7E0EDEA /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/img/carat.png; sourceTree = ""; }; - 6DECFE6A6B072CAFB114815BE1A06C3A /* CLLocation.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CLLocation.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/CLLocation.html; sourceTree = ""; }; - 705A3886E41E6C543FB7E31F5DBCB3EC /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; name = highlight.css; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/css/highlight.css; sourceTree = ""; }; - 71875449C520D69AB7DE014438E6AF84 /* CGRect.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CGRect.html; path = docs/Extensions/CGRect.html; sourceTree = ""; }; + 6DECFE6A6B072CAFB114815BE1A06C3A /* CLLocation.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CLLocation.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/CLLocation.html; sourceTree = ""; }; + 705A3886E41E6C543FB7E31F5DBCB3EC /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.css; name = highlight.css; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/css/highlight.css; sourceTree = ""; }; + 71875449C520D69AB7DE014438E6AF84 /* CGRect.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CGRect.html; path = docs/Extensions/CGRect.html; sourceTree = ""; }; 728762008DF53ED5AA291012C0B97BEA /* GeoTrackEventLog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GeoTrackEventLog.swift; path = GeoTrackKit/Core/GeoTrackEventLog.swift; sourceTree = ""; }; - 72BA18D6BC5FB2B840E6AAE946068488 /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Enums.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Enums.html; sourceTree = ""; }; + 72BA18D6BC5FB2B840E6AAE946068488 /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Enums.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Enums.html; sourceTree = ""; }; 72C87461CF15255A7025252B325CE785 /* GeoTrackManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GeoTrackManager.swift; path = GeoTrackKit/Core/GeoTrackManager.swift; sourceTree = ""; }; 73B9ABC003B3D4EA1DE260789B4A7DA7 /* Pods-GeoTrackKitExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GeoTrackKitExampleTests.release.xcconfig"; sourceTree = ""; }; 7434F8F7C75DD7E3F7EE22D6B5408024 /* Pods-GeoTrackKitExample-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-GeoTrackKitExample-acknowledgements.plist"; sourceTree = ""; }; - 77003E3901BFB07B6AE0B335EB56D1C1 /* Extensions.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Extensions.html; path = docs/Extensions.html; sourceTree = ""; }; + 77003E3901BFB07B6AE0B335EB56D1C1 /* Extensions.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Extensions.html; path = docs/Extensions.html; sourceTree = ""; }; 7B64FF72DBF7BE18E7422F336B8CA943 /* Pods-GeoTrackKitExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GeoTrackKitExample.debug.xcconfig"; sourceTree = ""; }; 7C72E6953FEC186B3C96D5151967215F /* GeoTrackMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GeoTrackMap.swift; sourceTree = ""; }; - 7CBB7E47F6047AC851D778E9C9829BF4 /* EventType.html */ = {isa = PBXFileReference; includeInIndex = 1; name = EventType.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackLocationEvent/EventType.html; sourceTree = ""; }; - 7D3FD072B0B4BF3F2149D55FB9CB667C /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + 7CBB7E47F6047AC851D778E9C9829BF4 /* EventType.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = EventType.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackLocationEvent/EventType.html; sourceTree = ""; }; + 7D3FD072B0B4BF3F2149D55FB9CB667C /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 7F7EBDE69D51A7D63E3AF2576ED9D4FC /* GeoTrackKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GeoTrackKit.modulemap; sourceTree = ""; }; - 8025E79AE152419046C0F2D6FD88B063 /* GeoTrackKitError.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackKitError.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Enums/GeoTrackKitError.html; sourceTree = ""; }; - 805AA7DEEB75146E7AF477610FCC19CA /* GeoTrackLocationEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackLocationEvent.html; path = docs/Classes/GeoTrackLocationEvent.html; sourceTree = ""; }; - 80E856BA9A4F230B4EE00C4E4ACDB474 /* DefaultMapZoom.html */ = {isa = PBXFileReference; includeInIndex = 1; name = DefaultMapZoom.html; path = docs/Classes/DefaultMapZoom.html; sourceTree = ""; }; + 8025E79AE152419046C0F2D6FD88B063 /* GeoTrackKitError.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GeoTrackKitError.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Enums/GeoTrackKitError.html; sourceTree = ""; }; + 805AA7DEEB75146E7AF477610FCC19CA /* GeoTrackLocationEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GeoTrackLocationEvent.html; path = docs/Classes/GeoTrackLocationEvent.html; sourceTree = ""; }; + 80E856BA9A4F230B4EE00C4E4ACDB474 /* DefaultMapZoom.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = DefaultMapZoom.html; path = docs/Classes/DefaultMapZoom.html; sourceTree = ""; }; 8448C8D3B02A33C992689E219E119203 /* ARKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ARKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/ARKit.framework; sourceTree = DEVELOPER_DIR; }; 8506FAB66B85F0EA0067594CAB02FD05 /* GeoTrackKitErrors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GeoTrackKitErrors.swift; path = GeoTrackKit/Core/GeoTrackKitErrors.swift; sourceTree = ""; }; 876DAD1BFF7C00617033265627C951B9 /* Pods-GeoTrackKitExample-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-GeoTrackKitExample-frameworks.sh"; sourceTree = ""; }; - 87700F63623F8274F07D1F871EE8261A /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; name = search.json; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/search.json; sourceTree = ""; }; + 87700F63623F8274F07D1F871EE8261A /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.json; name = search.json; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/search.json; sourceTree = ""; }; 893A879F4226476696E4F0E37633A996 /* LoggingFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LoggingFunctions.swift; path = GeoTrackKit/Core/LoggingFunctions.swift; sourceTree = ""; }; 893DA6918C0ED7EBDEE9A9C24940A7C5 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; - 8B2369B1953369790DE06B2E3734A8D2 /* GeoTrackManager.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackManager.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackManager.html; sourceTree = ""; }; - 8BB05E68F7356F5E0A0F4E4FE367355D /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; name = index.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/index.html; sourceTree = ""; }; - 8C57CAC0AF3C5DF91100E817988D1CA8 /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; name = search.json; path = docs/search.json; sourceTree = ""; }; + 8B2369B1953369790DE06B2E3734A8D2 /* GeoTrackManager.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GeoTrackManager.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackManager.html; sourceTree = ""; }; + 8BB05E68F7356F5E0A0F4E4FE367355D /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = index.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/index.html; sourceTree = ""; }; + 8C57CAC0AF3C5DF91100E817988D1CA8 /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.json; name = search.json; path = docs/search.json; sourceTree = ""; }; 8E44D20A1A97B3A115B568AC0C43BA08 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = docs/docsets/GeoTrackKit.docset/Contents/Info.plist; sourceTree = ""; }; 91EEE491B45C18C9EDC825C70E12B209 /* Pods-GeoTrackKitExample.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-GeoTrackKitExample.modulemap"; sourceTree = ""; }; - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9441CED5B15349B47BB7D102A0A43113 /* CLLocationCoordinate2D.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CLLocationCoordinate2D.html; path = docs/Extensions/CLLocationCoordinate2D.html; sourceTree = ""; }; - 9A64DDE326031AE741DDA519F5F21635 /* GeoMapping.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoMapping.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/Notification/Name/GeoMapping.html; sourceTree = ""; }; - 9C0892DAFA254309E9722BACF3157B53 /* Typealiases.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Typealiases.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Typealiases.html; sourceTree = ""; }; - 9C705DC4A1EF129C53EED892DF44284E /* GeoTrackLogAppender.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackLogAppender.html; path = docs/Protocols/GeoTrackLogAppender.html; sourceTree = ""; }; - 9D08D1ED4F3BC9C6ADBE985CB55C7097 /* ZoomDefining.html */ = {isa = PBXFileReference; includeInIndex = 1; name = ZoomDefining.html; path = docs/Protocols/ZoomDefining.html; sourceTree = ""; }; - 9D1A2218BB726D5348AA8C9A1AD11B76 /* GeoTrackLocationEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackLocationEvent.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackLocationEvent.html; sourceTree = ""; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9441CED5B15349B47BB7D102A0A43113 /* CLLocationCoordinate2D.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CLLocationCoordinate2D.html; path = docs/Extensions/CLLocationCoordinate2D.html; sourceTree = ""; }; + 9A64DDE326031AE741DDA519F5F21635 /* GeoMapping.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GeoMapping.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/Notification/Name/GeoMapping.html; sourceTree = ""; }; + 9C0892DAFA254309E9722BACF3157B53 /* Typealiases.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Typealiases.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Typealiases.html; sourceTree = ""; }; + 9C705DC4A1EF129C53EED892DF44284E /* GeoTrackLogAppender.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GeoTrackLogAppender.html; path = docs/Protocols/GeoTrackLogAppender.html; sourceTree = ""; }; + 9D08D1ED4F3BC9C6ADBE985CB55C7097 /* ZoomDefining.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = ZoomDefining.html; path = docs/Protocols/ZoomDefining.html; sourceTree = ""; }; + 9D1A2218BB726D5348AA8C9A1AD11B76 /* GeoTrackLocationEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GeoTrackLocationEvent.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackLocationEvent.html; sourceTree = ""; }; 9D35317804C02FC3094C9B1844BDF252 /* Leg.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Leg.swift; sourceTree = ""; }; 9DDD4365E822BA790ED77BDA5A657FDD /* Pods-GeoTrackKitExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GeoTrackKitExample.release.xcconfig"; sourceTree = ""; }; - A0CB3DA1BEDA61C5DB58798E12CEF704 /* Extensions.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Extensions.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions.html; sourceTree = ""; }; - A147527BB8F3B100B4E4717D6E635F2B /* Double.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Double.html; path = docs/Extensions/Double.html; sourceTree = ""; }; + A0CB3DA1BEDA61C5DB58798E12CEF704 /* Extensions.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Extensions.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions.html; sourceTree = ""; }; + A147527BB8F3B100B4E4717D6E635F2B /* Double.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Double.html; path = docs/Extensions/Double.html; sourceTree = ""; }; A1D99FD162A565FC1F9B9B5803F06CC6 /* GeoTrackAnalyzer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GeoTrackAnalyzer.swift; path = GeoTrackKit/Core/GeoTrackAnalyzer.swift; sourceTree = ""; }; A33926ABF4471798D3B5AFAEEEEAA98A /* GeoTrackLocationEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GeoTrackLocationEvent.swift; sourceTree = ""; }; A43BEE6A88AB9542ADB0DAB659867715 /* ARCL-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ARCL-umbrella.h"; sourceTree = ""; }; - A6A40FE9C5B987946B4809A403F76ED9 /* Notification.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Notification.html; path = docs/Extensions/Notification.html; sourceTree = ""; }; + A6A40FE9C5B987946B4809A403F76ED9 /* Notification.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Notification.html; path = docs/Extensions/Notification.html; sourceTree = ""; }; A9C167BE81500CB0164A60D9EEFFBD72 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - AA2D946A1D998FD3E1F11BC85E09154C /* docSet.dsidx */ = {isa = PBXFileReference; includeInIndex = 1; name = docSet.dsidx; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/docSet.dsidx; sourceTree = ""; }; - AD58EECDAB365E618EBA5D2A3B5F09FE /* UIGeoTrack.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UIGeoTrack.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/UIGeoTrack.html; sourceTree = ""; }; - AE4A1ADDBB4E2C1B72BE864A61D131FB /* GeoMapping.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoMapping.html; path = docs/Extensions/Notification/Name/GeoMapping.html; sourceTree = ""; }; + AA2D946A1D998FD3E1F11BC85E09154C /* docSet.dsidx */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = docSet.dsidx; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/docSet.dsidx; sourceTree = ""; }; + AD58EECDAB365E618EBA5D2A3B5F09FE /* UIGeoTrack.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = UIGeoTrack.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/UIGeoTrack.html; sourceTree = ""; }; + AE4A1ADDBB4E2C1B72BE864A61D131FB /* GeoMapping.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GeoMapping.html; path = docs/Extensions/Notification/Name/GeoMapping.html; sourceTree = ""; }; B1375BB80CE1BB9E3AC22FBA003F2D10 /* Pods-GeoTrackKitExampleTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-GeoTrackKitExampleTests.modulemap"; sourceTree = ""; }; - B26C71290D3CEA551B031BD48E2C9CA1 /* GeoTrackMap.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackMap.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackMap.html; sourceTree = ""; }; + B26C71290D3CEA551B031BD48E2C9CA1 /* GeoTrackMap.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GeoTrackMap.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackMap.html; sourceTree = ""; }; B5E8AEE12CD6FB4CA4C035C76ECFF326 /* Pods-GeoTrackKitExampleTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-GeoTrackKitExampleTests-resources.sh"; sourceTree = ""; }; - B73B3D63C89DA41F0C7B06CA73ED298D /* Date.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Date.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/Date.html; sourceTree = ""; }; - B88B57C6B0B35903D95F2966F6D8E0DF /* CLLocation.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CLLocation.html; path = docs/Extensions/CLLocation.html; sourceTree = ""; }; + B73B3D63C89DA41F0C7B06CA73ED298D /* Date.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Date.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/Date.html; sourceTree = ""; }; + B88B57C6B0B35903D95F2966F6D8E0DF /* CLLocation.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = CLLocation.html; path = docs/Extensions/CLLocation.html; sourceTree = ""; }; B89F89CC1C3C64B9050427B21CC5DE1E /* SCNNode+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SCNNode+Extensions.swift"; path = "ARCL/Source/Extensions/SCNNode+Extensions.swift"; sourceTree = ""; }; - B9B5B44856B2280548450EBBB0DB88A3 /* CGRect.html */ = {isa = PBXFileReference; includeInIndex = 1; name = CGRect.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/CGRect.html; sourceTree = ""; }; - BB003B8849549A818F1302BE15BA4B63 /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.js; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/js/jazzy.js; sourceTree = ""; }; + B9B5B44856B2280548450EBBB0DB88A3 /* CGRect.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = CGRect.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/CGRect.html; sourceTree = ""; }; + BB003B8849549A818F1302BE15BA4B63 /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = jazzy.js; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/js/jazzy.js; sourceTree = ""; }; BBB5626E46030BEE2F96A4FDEFDF4B4C /* CGPoint+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CGPoint+Extensions.swift"; path = "ARCL/Source/Extensions/CGPoint+Extensions.swift"; sourceTree = ""; }; BD7A8E804DEBB09E9326C783E7D16CFD /* SCNVector3+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SCNVector3+Extensions.swift"; path = "ARCL/Source/Extensions/SCNVector3+Extensions.swift"; sourceTree = ""; }; - BEE4C97A5A44A6AF1FF8F4F11D051585 /* GeoTrackEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackEvent.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackEvent.html; sourceTree = ""; }; - C04CC35B107B37CA42F960638AA22802 /* GeoTrackKit.tgz */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackKit.tgz; path = docs/docsets/GeoTrackKit.tgz; sourceTree = ""; }; + BEE4C97A5A44A6AF1FF8F4F11D051585 /* GeoTrackEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GeoTrackEvent.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes/GeoTrackEvent.html; sourceTree = ""; }; + C04CC35B107B37CA42F960638AA22802 /* GeoTrackKit.tgz */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = GeoTrackKit.tgz; path = docs/docsets/GeoTrackKit.tgz; sourceTree = ""; }; C1C359DAD0BAD457E78F231A024615DC /* SceneLocationManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SceneLocationManager.swift; path = "ARCL/Source/Location Manager/SceneLocationManager.swift"; sourceTree = ""; }; C3B4CADF39F99F77783AF0E806014DE8 /* ARCL-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ARCL-prefix.pch"; sourceTree = ""; }; - C4A281154DF19127DE2C51C4CE671EF5 /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.js; path = docs/js/jazzy.js; sourceTree = ""; }; + C4A281154DF19127DE2C51C4CE671EF5 /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = jazzy.js; path = docs/js/jazzy.js; sourceTree = ""; }; C5A04C84C5C1455273889A2E9D7ED64E /* Pods-GeoTrackKitExampleTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-GeoTrackKitExampleTests-umbrella.h"; sourceTree = ""; }; - C6F4A534FB7FDA04D9F016EFF1E42788 /* GeoTrackEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackEvent.html; path = docs/Classes/GeoTrackEvent.html; sourceTree = ""; }; + C6F4A534FB7FDA04D9F016EFF1E42788 /* GeoTrackEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GeoTrackEvent.html; path = docs/Classes/GeoTrackEvent.html; sourceTree = ""; }; C7175760E70DBC0C749A613721BD92E3 /* SceneKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SceneKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/SceneKit.framework; sourceTree = DEVELOPER_DIR; }; - C71E7F16FE55C92C3666B473E63E2C72 /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Enums.html; path = docs/Enums.html; sourceTree = ""; }; - CA9DC717C08071D4846550E2E73B7586 /* Typealiases.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Typealiases.html; path = docs/Typealiases.html; sourceTree = ""; }; - CD9CE7512AD40CB7D2627236A106FD6B /* GeoTrackKit.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackKit.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/Notification/Name/GeoTrackKit.html; sourceTree = ""; }; + C71E7F16FE55C92C3666B473E63E2C72 /* Enums.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Enums.html; path = docs/Enums.html; sourceTree = ""; }; + CA9DC717C08071D4846550E2E73B7586 /* Typealiases.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Typealiases.html; path = docs/Typealiases.html; sourceTree = ""; }; + CD9CE7512AD40CB7D2627236A106FD6B /* GeoTrackKit.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = GeoTrackKit.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Extensions/Notification/Name/GeoTrackKit.html; sourceTree = ""; }; CE7999EAB442AB5C2B026AB59296431B /* CLLocation+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CLLocation+Extensions.swift"; path = "ARCL/Source/Extensions/CLLocation+Extensions.swift"; sourceTree = ""; }; - CEE865DF231B9C0FB8F007A63B3417D8 /* Functions.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Functions.html; path = docs/Functions.html; sourceTree = ""; }; + CEE865DF231B9C0FB8F007A63B3417D8 /* Functions.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Functions.html; path = docs/Functions.html; sourceTree = ""; }; D01E14C99C2B4F36CD33116B0EAA550E /* SceneLocationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SceneLocationView.swift; path = ARCL/Source/SceneLocationView.swift; sourceTree = ""; }; - D393BBA9AAE2702233EB6BA1309144DF /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Classes.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes.html; sourceTree = ""; }; - D3CE0BDA7AC4029FC3116520EA2D5891 /* Functions.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Functions.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Functions.html; sourceTree = ""; }; - D631EF736A5EB90340B0FB6A72FD06D1 /* ARCL.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ARCL.framework; path = ARCL.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D393BBA9AAE2702233EB6BA1309144DF /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Classes.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Classes.html; sourceTree = ""; }; + D3CE0BDA7AC4029FC3116520EA2D5891 /* Functions.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html.documentation; name = Functions.html; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/Functions.html; sourceTree = ""; }; + D631EF736A5EB90340B0FB6A72FD06D1 /* ARCL.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ARCL.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D73571F4B2281E0098DC76443D509656 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; D82712CA5EB4A7952F6ACE5E333F0C65 /* GeoTrackKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GeoTrackKit-dummy.m"; sourceTree = ""; }; D8487DF676406564F795C4F5A9181015 /* Pods-GeoTrackKitExample-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-GeoTrackKitExample-umbrella.h"; sourceTree = ""; }; D89DDF03D48E66F44F7D287472ED23DE /* SceneLocationView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SceneLocationView+Extensions.swift"; path = "ARCL/Source/SceneLocationView+Extensions.swift"; sourceTree = ""; }; - D9D89312BA8F0914955E2D662762961B /* GeoTrackKit.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackKit.html; path = docs/Extensions/Notification/Name/GeoTrackKit.html; sourceTree = ""; }; + D9D89312BA8F0914955E2D662762961B /* GeoTrackKit.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GeoTrackKit.html; path = docs/Extensions/Notification/Name/GeoTrackKit.html; sourceTree = ""; }; DA175B35799F93177CB55EDB35DEF109 /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/img/gh.png; sourceTree = ""; }; DBD841946B3E02678AA1B423398A7405 /* ARCL.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ARCL.xcconfig; sourceTree = ""; }; - DE4147E0F97F3640242E51024A0A7C5F /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.css; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/css/jazzy.css; sourceTree = ""; }; + DE4147E0F97F3640242E51024A0A7C5F /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.css; name = jazzy.css; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/css/jazzy.css; sourceTree = ""; }; DF23B417138016B83F1D7AE22DDCCF4A /* LocationNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocationNode.swift; path = ARCL/Source/Nodes/LocationNode.swift; sourceTree = ""; }; E29269E8A0DBF91E9154A02FD134F9DD /* GeoTrackKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GeoTrackKit.xcconfig; sourceTree = ""; }; - E2A18612F549CAF1CDE93535FDE258D4 /* GeoTrackKitError.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrackKitError.html; path = docs/Enums/GeoTrackKitError.html; sourceTree = ""; }; - E47F5D29E35074D2FF4C6CC5A01DDD30 /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.css; path = docs/css/jazzy.css; sourceTree = ""; }; + E2A18612F549CAF1CDE93535FDE258D4 /* GeoTrackKitError.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GeoTrackKitError.html; path = docs/Enums/GeoTrackKitError.html; sourceTree = ""; }; + E47F5D29E35074D2FF4C6CC5A01DDD30 /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.css; name = jazzy.css; path = docs/css/jazzy.css; sourceTree = ""; }; E5FBC32CBE64E36B2C49A67BDAE31C67 /* Pods-GeoTrackKitExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GeoTrackKitExampleTests.debug.xcconfig"; sourceTree = ""; }; - E72A71BD60815E7A496CC57457735032 /* GeoTrackKit.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; path = GeoTrackKit.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + E72A71BD60815E7A496CC57457735032 /* GeoTrackKit.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; path = GeoTrackKit.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; E88E5F4CEE10DCB133FCA08367C9866F /* Pods-GeoTrackKitExample-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-GeoTrackKitExample-resources.sh"; sourceTree = ""; }; - E8F400AC926BB9BD0302ABBC9EAAC60B /* GeoTrack.html */ = {isa = PBXFileReference; includeInIndex = 1; name = GeoTrack.html; path = docs/Classes/GeoTrack.html; sourceTree = ""; }; + E8F400AC926BB9BD0302ABBC9EAAC60B /* GeoTrack.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = GeoTrack.html; path = docs/Classes/GeoTrack.html; sourceTree = ""; }; E9F18A0C619806DAE795C25671DF148F /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/img/dash.png; sourceTree = ""; }; EF1F92EAE996E04F0E9F2E7A720879C7 /* BaseTypes+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BaseTypes+Extensions.swift"; path = "ARCL/Source/Extensions/BaseTypes+Extensions.swift"; sourceTree = ""; }; F1DC9CE348190F6FFD426A7946CDAEF3 /* DateExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DateExtension.swift; sourceTree = ""; }; F20B1C3F009394100F4F54732320050C /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/docsets/GeoTrackKit.docset/Contents/Resources/Documents/img/gh.png; sourceTree = ""; }; - F3EF36C4C3C6F387E2261A414CC92D3F /* Level.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Level.html; path = docs/Classes/GeoTrackEvent/Level.html; sourceTree = ""; }; - F540CB8B3E070BCD7880458FF19527DE /* TrackingType.html */ = {isa = PBXFileReference; includeInIndex = 1; name = TrackingType.html; path = docs/Enums/TrackingType.html; sourceTree = ""; }; + F3EF36C4C3C6F387E2261A414CC92D3F /* Level.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = Level.html; path = docs/Classes/GeoTrackEvent/Level.html; sourceTree = ""; }; + F540CB8B3E070BCD7880458FF19527DE /* TrackingType.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = TrackingType.html; path = docs/Enums/TrackingType.html; sourceTree = ""; }; F57E4C7E53F5751819C87A149217DEF1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F5A61B7B19946F3969B60ED3C2BE5334 /* Pods-GeoTrackKitExample-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-GeoTrackKitExample-acknowledgements.markdown"; sourceTree = ""; }; F5EEEE304C78B3777B2B756E981E4319 /* Pods-GeoTrackKitExampleTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-GeoTrackKitExampleTests-acknowledgements.markdown"; sourceTree = ""; }; FB2E6ECF492039397902E3C4D4690AE6 /* SceneLocationEstimate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SceneLocationEstimate.swift; path = "ARCL/Source/Location Manager/SceneLocationEstimate.swift"; sourceTree = ""; }; - FD5A9131E7E07CB56F032CF9A269578D /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; name = badge.svg; path = docs/badge.svg; sourceTree = ""; }; - FFD0310533DA024B0BA0DD9AC5DE2878 /* Pods_GeoTrackKitExampleTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_GeoTrackKitExampleTests.framework; path = "Pods-GeoTrackKitExampleTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + FD5A9131E7E07CB56F032CF9A269578D /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = badge.svg; path = docs/badge.svg; sourceTree = ""; }; + FFD0310533DA024B0BA0DD9AC5DE2878 /* Pods_GeoTrackKitExampleTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_GeoTrackKitExampleTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -314,7 +314,6 @@ children = ( 9D35317804C02FC3094C9B1844BDF252 /* Leg.swift */, ); - name = Analyze; path = Analyze; sourceTree = ""; }; @@ -347,7 +346,6 @@ BD7A8E804DEBB09E9326C783E7D16CFD /* SCNVector3+Extensions.swift */, 9F410475A2355665838023996C78EF71 /* Support Files */, ); - name = ARCL; path = ARCL; sourceTree = ""; }; @@ -531,7 +529,6 @@ children = ( 0AA65D9A3FD6926B35729C3C4C1D2D61 /* UIGeoTrack.swift */, ); - name = UIModels; path = UIModels; sourceTree = ""; }; @@ -792,6 +789,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; @@ -1217,8 +1215,7 @@ MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.2; SYMROOT = "${SRCROOT}/../build"; }; diff --git a/GeoTrackKitExample/Scene Visualizer/Scene Visualizer.xcodeproj/project.pbxproj b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer.xcodeproj/project.pbxproj new file mode 100644 index 0000000..b1d1873 --- /dev/null +++ b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer.xcodeproj/project.pbxproj @@ -0,0 +1,451 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 366AE7CB2286FD310048F8ED /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 366AE7CA2286FD310048F8ED /* AppDelegate.swift */; }; + 366AE7CD2286FD310048F8ED /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 366AE7CC2286FD310048F8ED /* GameViewController.swift */; }; + 366AE7CF2286FD310048F8ED /* art.scnassets in Resources */ = {isa = PBXBuildFile; fileRef = 366AE7CE2286FD310048F8ED /* art.scnassets */; }; + 366AE7D12286FD320048F8ED /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 366AE7D02286FD320048F8ED /* Assets.xcassets */; }; + 366AE7D42286FD320048F8ED /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 366AE7D22286FD320048F8ED /* Main.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 366AE7DC2286FD320048F8ED /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 366AE7BF2286FD300048F8ED /* Project object */; + proxyType = 1; + remoteGlobalIDString = 366AE7C62286FD310048F8ED; + remoteInfo = "Scene Visualizer"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 366AE7C72286FD310048F8ED /* Scene Visualizer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Scene Visualizer.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 366AE7CA2286FD310048F8ED /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 366AE7CC2286FD310048F8ED /* GameViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameViewController.swift; sourceTree = ""; }; + 366AE7CE2286FD310048F8ED /* art.scnassets */ = {isa = PBXFileReference; lastKnownFileType = wrapper.scnassets; path = art.scnassets; sourceTree = ""; }; + 366AE7D02286FD320048F8ED /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 366AE7D32286FD320048F8ED /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 366AE7D52286FD320048F8ED /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 366AE7D62286FD320048F8ED /* Scene_Visualizer.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Scene_Visualizer.entitlements; sourceTree = ""; }; + 366AE7DB2286FD320048F8ED /* Scene VisualizerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Scene VisualizerTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 366AE7C42286FD310048F8ED /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 366AE7D82286FD320048F8ED /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 366AE7BE2286FD300048F8ED = { + isa = PBXGroup; + children = ( + 366AE7C92286FD310048F8ED /* Scene Visualizer */, + 366AE7C82286FD310048F8ED /* Products */, + ); + sourceTree = ""; + }; + 366AE7C82286FD310048F8ED /* Products */ = { + isa = PBXGroup; + children = ( + 366AE7C72286FD310048F8ED /* Scene Visualizer.app */, + 366AE7DB2286FD320048F8ED /* Scene VisualizerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 366AE7C92286FD310048F8ED /* Scene Visualizer */ = { + isa = PBXGroup; + children = ( + 366AE7CA2286FD310048F8ED /* AppDelegate.swift */, + 366AE7CC2286FD310048F8ED /* GameViewController.swift */, + 366AE7CE2286FD310048F8ED /* art.scnassets */, + 366AE7D02286FD320048F8ED /* Assets.xcassets */, + 366AE7D22286FD320048F8ED /* Main.storyboard */, + 366AE7D52286FD320048F8ED /* Info.plist */, + 366AE7D62286FD320048F8ED /* Scene_Visualizer.entitlements */, + ); + path = "Scene Visualizer"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 366AE7C62286FD310048F8ED /* Scene Visualizer */ = { + isa = PBXNativeTarget; + buildConfigurationList = 366AE7E42286FD320048F8ED /* Build configuration list for PBXNativeTarget "Scene Visualizer" */; + buildPhases = ( + 366AE7C32286FD310048F8ED /* Sources */, + 366AE7C42286FD310048F8ED /* Frameworks */, + 366AE7C52286FD310048F8ED /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Scene Visualizer"; + productName = "Scene Visualizer"; + productReference = 366AE7C72286FD310048F8ED /* Scene Visualizer.app */; + productType = "com.apple.product-type.application"; + }; + 366AE7DA2286FD320048F8ED /* Scene VisualizerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 366AE7E72286FD320048F8ED /* Build configuration list for PBXNativeTarget "Scene VisualizerTests" */; + buildPhases = ( + 366AE7D72286FD320048F8ED /* Sources */, + 366AE7D82286FD320048F8ED /* Frameworks */, + 366AE7D92286FD320048F8ED /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 366AE7DD2286FD320048F8ED /* PBXTargetDependency */, + ); + name = "Scene VisualizerTests"; + productName = "Scene VisualizerTests"; + productReference = 366AE7DB2286FD320048F8ED /* Scene VisualizerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 366AE7BF2286FD300048F8ED /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1020; + LastUpgradeCheck = 1020; + ORGANIZATIONNAME = iColasoft; + TargetAttributes = { + 366AE7C62286FD310048F8ED = { + CreatedOnToolsVersion = 10.2.1; + }; + 366AE7DA2286FD320048F8ED = { + CreatedOnToolsVersion = 10.2.1; + TestTargetID = 366AE7C62286FD310048F8ED; + }; + }; + }; + buildConfigurationList = 366AE7C22286FD300048F8ED /* Build configuration list for PBXProject "Scene Visualizer" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 366AE7BE2286FD300048F8ED; + productRefGroup = 366AE7C82286FD310048F8ED /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 366AE7C62286FD310048F8ED /* Scene Visualizer */, + 366AE7DA2286FD320048F8ED /* Scene VisualizerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 366AE7C52286FD310048F8ED /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 366AE7D42286FD320048F8ED /* Main.storyboard in Resources */, + 366AE7D12286FD320048F8ED /* Assets.xcassets in Resources */, + 366AE7CF2286FD310048F8ED /* art.scnassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 366AE7D92286FD320048F8ED /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 366AE7C32286FD310048F8ED /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 366AE7CD2286FD310048F8ED /* GameViewController.swift in Sources */, + 366AE7CB2286FD310048F8ED /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 366AE7D72286FD320048F8ED /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 366AE7DD2286FD320048F8ED /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 366AE7C62286FD310048F8ED /* Scene Visualizer */; + targetProxy = 366AE7DC2286FD320048F8ED /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 366AE7D22286FD320048F8ED /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 366AE7D32286FD320048F8ED /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 366AE7E22286FD320048F8ED /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "Mac Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 366AE7E32286FD320048F8ED /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "Mac Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 366AE7E52286FD320048F8ED /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = "Scene Visualizer/Scene_Visualizer.entitlements"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 268S5GJFWZ; + INFOPLIST_FILE = "Scene Visualizer/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.icolasoft.Scene-Visualizer"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 366AE7E62286FD320048F8ED /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = "Scene Visualizer/Scene_Visualizer.entitlements"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 268S5GJFWZ; + INFOPLIST_FILE = "Scene Visualizer/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.icolasoft.Scene-Visualizer"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 366AE7E82286FD320048F8ED /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 268S5GJFWZ; + INFOPLIST_FILE = "Scene VisualizerTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.icolasoft.Scene-VisualizerTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Scene Visualizer.app/Contents/MacOS/Scene Visualizer"; + }; + name = Debug; + }; + 366AE7E92286FD320048F8ED /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 268S5GJFWZ; + INFOPLIST_FILE = "Scene VisualizerTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.icolasoft.Scene-VisualizerTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Scene Visualizer.app/Contents/MacOS/Scene Visualizer"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 366AE7C22286FD300048F8ED /* Build configuration list for PBXProject "Scene Visualizer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 366AE7E22286FD320048F8ED /* Debug */, + 366AE7E32286FD320048F8ED /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 366AE7E42286FD320048F8ED /* Build configuration list for PBXNativeTarget "Scene Visualizer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 366AE7E52286FD320048F8ED /* Debug */, + 366AE7E62286FD320048F8ED /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 366AE7E72286FD320048F8ED /* Build configuration list for PBXNativeTarget "Scene VisualizerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 366AE7E82286FD320048F8ED /* Debug */, + 366AE7E92286FD320048F8ED /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 366AE7BF2286FD300048F8ED /* Project object */; +} diff --git a/GeoTrackKitExample/Scene Visualizer/Scene Visualizer.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..f9d7766 --- /dev/null +++ b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/GeoTrackKitExample/Scene Visualizer/Scene Visualizer.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/AppDelegate.swift b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/AppDelegate.swift new file mode 100644 index 0000000..8c5c499 --- /dev/null +++ b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/AppDelegate.swift @@ -0,0 +1,18 @@ +// +// AppDelegate.swift +// Scene Visualizer +// +// Created by Eric Internicola on 5/11/19. +// Copyright © 2019 iColasoft. All rights reserved. +// + +import Cocoa + +@NSApplicationMain +class AppDelegate: NSObject, NSApplicationDelegate { + + func applicationDidFinishLaunching(_ aNotification: Notification) { + // Insert code here to initialize your application + } + +} diff --git a/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/Assets.xcassets/AppIcon.appiconset/Contents.json b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..2db2b1c --- /dev/null +++ b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,58 @@ +{ + "images" : [ + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/Assets.xcassets/Contents.json b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/Base.lproj/Main.storyboard b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/Base.lproj/Main.storyboard new file mode 100644 index 0000000..538e472 --- /dev/null +++ b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/Base.lproj/Main.storyboard @@ -0,0 +1,719 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/GameViewController.swift b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/GameViewController.swift new file mode 100644 index 0000000..04b55d3 --- /dev/null +++ b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/GameViewController.swift @@ -0,0 +1,201 @@ +// +// GameViewController.swift +// Scene Visualizer +// +// Created by Eric Internicola on 5/11/19. +// Copyright © 2019 iColasoft. All rights reserved. +// + +import SceneKit +import QuartzCore + +class GameViewController: NSViewController { + + /// Gets you the polyline nodes from the scene. + var polylineNodes: [SCNNode]? { + guard let view = view as? SCNView, let scene = view.scene, + let container = scene.rootNode.childNode(withName: "Container", recursively: true) else { + return nil + } + + return container.childNodes.filter({ $0.name?.starts(with: "Polyline") ?? false }) + } + + override func viewDidLoad() { + super.viewDidLoad() + + // create a new scene + let scene = SCNScene(named: "art.scnassets/ARCL-Saved.scn")! + +// // create and add a camera to the scene +// let cameraNode = SCNNode() +// cameraNode.camera = SCNCamera() +// scene.rootNode.addChildNode(cameraNode) +// cameraNode.position = SCNVector3(x: 0, y: 0, z: 15) + + // retrieve the container node + guard let container = scene.rootNode.childNode(withName: "Container", recursively: true) + ?? scene.rootNode.childNodes.filter({ !$0.childNodes.isEmpty }).first else { + return assertionFailure("Failed to find a list of nodes") + } + patchPolylines(container: container) + + + // retrieve the SCNView + guard let scnView = self.view as? SCNView else { + return + } + scnView.debugOptions = [.showBoundingBoxes, .showSkeletons, .showCameras] + scnView.autoenablesDefaultLighting = true + + // set the scene to the view + scnView.scene = scene + + // allows the user to manipulate the camera + scnView.allowsCameraControl = true + + // show statistics such as fps and timing information + scnView.showsStatistics = true + + // configure the view + scnView.backgroundColor = NSColor.black + + // Add a click gesture recognizer + let clickGesture = NSClickGestureRecognizer(target: self, action: #selector(handleClick(_:))) + var gestureRecognizers = scnView.gestureRecognizers + gestureRecognizers.insert(clickGesture, at: 0) + scnView.gestureRecognizers = gestureRecognizers + +// guard let nodes = polylineNodes else { +// return assertionFailure("Womp. Womp.") +// } +// nodes.forEach { +// $0.runAction(SCNAction.repeat(SCNAction.rotateBy(x: -1, y: 0, z: 0, duration: 5), count: 50)) +// } + polylineNodes?.forEach({ $0.eulerAngles.x = 0 - $0.eulerAngles.x }) + } + + /// This function attempts to move each polyline node to where each + /// + /// - Parameter container: the Node container to get the points and polyline nodes from. + func patchPolylines(container: SCNNode) { + let points = container.childNodes.filter({ $0.name?.starts(with: "point ") ?? false }) + guard points.count > 0 else { + return print("No point nodes found, no patching will be performed") + } + + for idx in 0.. + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + Copyright © 2019 iColasoft. All rights reserved. + NSMainStoryboardFile + Main + NSPrincipalClass + NSApplication + + diff --git a/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/Scene_Visualizer.entitlements b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/Scene_Visualizer.entitlements new file mode 100644 index 0000000..f2ef3ae --- /dev/null +++ b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/Scene_Visualizer.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + + + diff --git a/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/art.scnassets/ARCL-Saved-1.scn b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/art.scnassets/ARCL-Saved-1.scn new file mode 100644 index 0000000..7b931ed Binary files /dev/null and b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/art.scnassets/ARCL-Saved-1.scn differ diff --git a/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/art.scnassets/ARCL-Saved-mutated.scn b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/art.scnassets/ARCL-Saved-mutated.scn new file mode 100644 index 0000000..508043f Binary files /dev/null and b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/art.scnassets/ARCL-Saved-mutated.scn differ diff --git a/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/art.scnassets/ARCL-Saved.scn b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/art.scnassets/ARCL-Saved.scn new file mode 100644 index 0000000..e008101 Binary files /dev/null and b/GeoTrackKitExample/Scene Visualizer/Scene Visualizer/art.scnassets/ARCL-Saved.scn differ