From 5d4f8ac03c9f4e4f58d399881bdc2dd2d18902bf Mon Sep 17 00:00:00 2001 From: Matteo Gavagnin Date: Thu, 6 Apr 2017 21:37:45 +0200 Subject: [PATCH 01/64] Compatibility with swift playgrounds - Added missing import CoreGraphics where needed. - Added missing import UIKit where needed. --- Source/Charts/Components/Description.swift | 4 ++++ Source/Charts/Filters/DataApproximator.swift | 1 + Source/Charts/Highlight/Highlight.swift | 1 + .../Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift | 1 + Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift | 1 + Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift | 1 + Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift | 1 + Source/Charts/Renderers/Scatter/IShapeRenderer.swift | 1 + Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift | 1 + Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift | 1 + Source/Charts/Renderers/Scatter/XShapeRenderer.swift | 1 + 11 files changed, 14 insertions(+) diff --git a/Source/Charts/Components/Description.swift b/Source/Charts/Components/Description.swift index 67bdd509a1..a387d362a9 100644 --- a/Source/Charts/Components/Description.swift +++ b/Source/Charts/Components/Description.swift @@ -12,6 +12,10 @@ import Foundation import CoreGraphics +#if !os(OSX) + import UIKit +#endif + @objc(ChartDescription) open class Description: ComponentBase { diff --git a/Source/Charts/Filters/DataApproximator.swift b/Source/Charts/Filters/DataApproximator.swift index 608714a0a6..efaa55c1fc 100644 --- a/Source/Charts/Filters/DataApproximator.swift +++ b/Source/Charts/Filters/DataApproximator.swift @@ -10,6 +10,7 @@ // import Foundation +import CoreGraphics @objc(ChartDataApproximator) open class DataApproximator: NSObject diff --git a/Source/Charts/Highlight/Highlight.swift b/Source/Charts/Highlight/Highlight.swift index 3ef03a6d33..d5e6221910 100644 --- a/Source/Charts/Highlight/Highlight.swift +++ b/Source/Charts/Highlight/Highlight.swift @@ -10,6 +10,7 @@ // import Foundation +import CoreGraphics @objc(ChartHighlight) open class Highlight: NSObject diff --git a/Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift b/Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift index ef4d26ed2c..2d035bf357 100644 --- a/Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift +++ b/Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift @@ -9,6 +9,7 @@ // https://github.com/danielgindi/Charts // import Foundation +import CoreGraphics open class ChevronDownShapeRenderer : NSObject, IShapeRenderer { diff --git a/Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift b/Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift index a0b9f36c68..725533e780 100644 --- a/Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift +++ b/Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift @@ -9,6 +9,7 @@ // https://github.com/danielgindi/Charts // import Foundation +import CoreGraphics open class ChevronUpShapeRenderer : NSObject, IShapeRenderer { diff --git a/Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift b/Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift index ed8a25655b..b94a51137a 100644 --- a/Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift +++ b/Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift @@ -9,6 +9,7 @@ // https://github.com/danielgindi/Charts // import Foundation +import CoreGraphics open class CircleShapeRenderer : NSObject, IShapeRenderer { diff --git a/Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift b/Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift index 571ea1132f..18785d3dee 100644 --- a/Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift +++ b/Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift @@ -9,6 +9,7 @@ // https://github.com/danielgindi/Charts // import Foundation +import CoreGraphics open class CrossShapeRenderer : NSObject, IShapeRenderer { diff --git a/Source/Charts/Renderers/Scatter/IShapeRenderer.swift b/Source/Charts/Renderers/Scatter/IShapeRenderer.swift index 51578a99ba..f26dc6568b 100644 --- a/Source/Charts/Renderers/Scatter/IShapeRenderer.swift +++ b/Source/Charts/Renderers/Scatter/IShapeRenderer.swift @@ -10,6 +10,7 @@ // import Foundation +import CoreGraphics @objc public protocol IShapeRenderer : NSObjectProtocol diff --git a/Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift b/Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift index 892068ff79..ea692e33fd 100644 --- a/Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift +++ b/Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift @@ -9,6 +9,7 @@ // https://github.com/danielgindi/Charts // import Foundation +import CoreGraphics open class SquareShapeRenderer : NSObject, IShapeRenderer { diff --git a/Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift b/Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift index 4847c00cde..fa313b765b 100644 --- a/Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift +++ b/Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift @@ -9,6 +9,7 @@ // https://github.com/danielgindi/Charts // import Foundation +import CoreGraphics open class TriangleShapeRenderer : NSObject, IShapeRenderer { diff --git a/Source/Charts/Renderers/Scatter/XShapeRenderer.swift b/Source/Charts/Renderers/Scatter/XShapeRenderer.swift index 1f8c617fbe..8a546c5f0b 100644 --- a/Source/Charts/Renderers/Scatter/XShapeRenderer.swift +++ b/Source/Charts/Renderers/Scatter/XShapeRenderer.swift @@ -9,6 +9,7 @@ // https://github.com/danielgindi/Charts // import Foundation +import CoreGraphics open class XShapeRenderer : NSObject, IShapeRenderer { From 409cebfb8bde357617a122829acf218c5b4e7ed9 Mon Sep 17 00:00:00 2001 From: Matteo Gavagnin Date: Fri, 7 Apr 2017 07:54:28 +0200 Subject: [PATCH 02/64] Added one last missing import CoreGraphics --- Source/Charts/Data/Interfaces/IChartDataSet.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Charts/Data/Interfaces/IChartDataSet.swift b/Source/Charts/Data/Interfaces/IChartDataSet.swift index 5cdb4bc9ed..293db393eb 100644 --- a/Source/Charts/Data/Interfaces/IChartDataSet.swift +++ b/Source/Charts/Data/Interfaces/IChartDataSet.swift @@ -10,6 +10,7 @@ // import Foundation +import CoreGraphics @objc public protocol IChartDataSet From 8cbdf6d0c8dc1980dbc79a22c31051e58ded4bbf Mon Sep 17 00:00:00 2001 From: thierryH91200 Date: Sat, 15 Apr 2017 20:38:25 +0200 Subject: [PATCH 03/64] add example playground --- .../ChartsDemo-OSX.xcodeproj/project.pbxproj | 32 +--- .../BarChart.xcplaygroundpage/Contents.swift | 63 +++++++ .../Contents.swift | 82 +++++++++ .../Contents.swift | 96 +++++++++++ .../Contents.swift | 150 +++++++++++++++++ .../Contents.swift | 102 ++++++++++++ .../LineChart.xcplaygroundpage/Contents.swift | 157 ++++++++++++++++++ .../Menu.xcplaygroundpage/Contents.swift | 40 +++++ .../Resources/feature_graphic.png | Bin 0 -> 28989 bytes .../PieChart.xcplaygroundpage/Contents.swift | 57 +++++++ .../Contents.swift | 111 +++++++++++++ .../Contents.swift | 104 ++++++++++++ .../Contents.swift | 116 +++++++++++++ .../contents.xcplayground | 16 ++ 14 files changed, 1096 insertions(+), 30 deletions(-) create mode 100644 ChartsDemo-OSX/PlaygroundChart.playground/Pages/BarChart.xcplaygroundpage/Contents.swift create mode 100644 ChartsDemo-OSX/PlaygroundChart.playground/Pages/BubbleChart.xcplaygroundpage/Contents.swift create mode 100644 ChartsDemo-OSX/PlaygroundChart.playground/Pages/CandleChart.xcplaygroundpage/Contents.swift create mode 100644 ChartsDemo-OSX/PlaygroundChart.playground/Pages/CombinedChart.xcplaygroundpage/Contents.swift create mode 100644 ChartsDemo-OSX/PlaygroundChart.playground/Pages/HorizontalBarChart.xcplaygroundpage/Contents.swift create mode 100644 ChartsDemo-OSX/PlaygroundChart.playground/Pages/LineChart.xcplaygroundpage/Contents.swift create mode 100644 ChartsDemo-OSX/PlaygroundChart.playground/Pages/Menu.xcplaygroundpage/Contents.swift create mode 100644 ChartsDemo-OSX/PlaygroundChart.playground/Pages/Menu.xcplaygroundpage/Resources/feature_graphic.png create mode 100644 ChartsDemo-OSX/PlaygroundChart.playground/Pages/PieChart.xcplaygroundpage/Contents.swift create mode 100644 ChartsDemo-OSX/PlaygroundChart.playground/Pages/RadarChart.xcplaygroundpage/Contents.swift create mode 100644 ChartsDemo-OSX/PlaygroundChart.playground/Pages/ScatterChart.xcplaygroundpage/Contents.swift create mode 100644 ChartsDemo-OSX/PlaygroundChart.playground/Pages/StackedBarChart.xcplaygroundpage/Contents.swift create mode 100644 ChartsDemo-OSX/PlaygroundChart.playground/contents.xcplayground diff --git a/ChartsDemo-OSX/ChartsDemo-OSX.xcodeproj/project.pbxproj b/ChartsDemo-OSX/ChartsDemo-OSX.xcodeproj/project.pbxproj index 6d5ea9e69f..6a32ff622e 100644 --- a/ChartsDemo-OSX/ChartsDemo-OSX.xcodeproj/project.pbxproj +++ b/ChartsDemo-OSX/ChartsDemo-OSX.xcodeproj/project.pbxproj @@ -33,20 +33,6 @@ remoteGlobalIDString = 06165F2E1D8110E600722320; remoteInfo = ChartsTests; }; - 0630AE741D812840008859B0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0630AE691D812840008859B0 /* Charts.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 06B120D51D811E6200D14B02; - remoteInfo = ChartsRealm; - }; - 0630AE761D812840008859B0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0630AE691D812840008859B0 /* Charts.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 06B120FF1D811F1600D14B02; - remoteInfo = ChartsRealmTests; - }; 0630AE8E1D8128A5008859B0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0630AE691D812840008859B0 /* Charts.xcodeproj */; @@ -71,6 +57,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 03780C7E1EA29C87005C11C8 /* PlaygroundChart.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = PlaygroundChart.playground; sourceTree = ""; }; 0630AE691D812840008859B0 /* Charts.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Charts.xcodeproj; path = ../Charts.xcodeproj; sourceTree = ""; }; 5B9A0C391C83AB1800ED8ED8 /* BarDemoViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarDemoViewController.swift; sourceTree = ""; }; 5B9A0C3B1C83AB2100ED8ED8 /* LineDemoViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineDemoViewController.swift; sourceTree = ""; }; @@ -100,8 +87,6 @@ children = ( 0630AE711D812840008859B0 /* Charts.framework */, 0630AE731D812840008859B0 /* ChartsTests.xctest */, - 0630AE751D812840008859B0 /* ChartsRealm.framework */, - 0630AE771D812840008859B0 /* ChartsRealmTests.xctest */, ); name = Products; sourceTree = ""; @@ -122,6 +107,7 @@ children = ( 65B3F6401C73B4F5000983D0 /* ChartsDemo-OSX */, 65B3F63F1C73B4F5000983D0 /* Products */, + 03780C7E1EA29C87005C11C8 /* PlaygroundChart.playground */, 0630AE691D812840008859B0 /* Charts.xcodeproj */, ); sourceTree = ""; @@ -223,20 +209,6 @@ remoteRef = 0630AE721D812840008859B0 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 0630AE751D812840008859B0 /* ChartsRealm.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = ChartsRealm.framework; - remoteRef = 0630AE741D812840008859B0 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 0630AE771D812840008859B0 /* ChartsRealmTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = ChartsRealmTests.xctest; - remoteRef = 0630AE761D812840008859B0 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ diff --git a/ChartsDemo-OSX/PlaygroundChart.playground/Pages/BarChart.xcplaygroundpage/Contents.swift b/ChartsDemo-OSX/PlaygroundChart.playground/Pages/BarChart.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000000..5845162bca --- /dev/null +++ b/ChartsDemo-OSX/PlaygroundChart.playground/Pages/BarChart.xcplaygroundpage/Contents.swift @@ -0,0 +1,63 @@ +// +// PlayGround +// +// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda +// Copyright © 2017 thierry Hentic. +// A port of MPAndroidChart for iOS +// Licensed under Apache License 2.0 +// +// https://github.com/danielgindi/ios-charts + +/*: + **** + [Menu](Menu) + + [Previous](@previous) | [Next](@next) + **** + */ + +//: # Bar Chart +//#-hidden-code +import Cocoa +import Charts +import PlaygroundSupport +//#-end-hidden-code + + +let months = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] +let values : [Double] = [28800, 32400, 36000, 34000, 30000, 42000, 45000] + +let r = CGRect(x: 0, y: 0, width: 600, height: 600) +var chartView = BarChartView(frame: r) +//: ### General +chartView.pinchZoomEnabled = false +chartView.drawBarShadowEnabled = false +chartView.doubleTapToZoomEnabled = false +chartView.drawGridBackgroundEnabled = true +chartView.fitBars = true +//: ### BarChartDataEntry +var yVals = [BarChartDataEntry]() +for i in 0..<7 +{ + yVals.append(BarChartDataEntry(x: Double(i), y: values[i])) +} +//: ### BarChartDataSet +var set1 = BarChartDataSet() +set1 = BarChartDataSet(values: yVals, label: "DataSet") +set1.colors = ChartColorTemplates.vordiplom() +set1.drawValuesEnabled = true + +var dataSets = [ChartDataSet]() +dataSets.append(set1) +//: ### BarChartData +let data = BarChartData(dataSets: dataSets) +chartView.data = data + +chartView.animate(xAxisDuration: 2.0, yAxisDuration: 2.0, easingOption: .easeInBounce) +/*:---*/ +//: ### Setup for the live view +PlaygroundPage.current.liveView = chartView +/*: + **** + [Previous](@previous) | [Next](@next) + */ diff --git a/ChartsDemo-OSX/PlaygroundChart.playground/Pages/BubbleChart.xcplaygroundpage/Contents.swift b/ChartsDemo-OSX/PlaygroundChart.playground/Pages/BubbleChart.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000000..1e574aa7d4 --- /dev/null +++ b/ChartsDemo-OSX/PlaygroundChart.playground/Pages/BubbleChart.xcplaygroundpage/Contents.swift @@ -0,0 +1,82 @@ +// +// PlayGround +// +// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda +// Copyright © 2017 thierry Hentic. +// A port of MPAndroidChart for iOS +// Licensed under Apache License 2.0 +// +// https://github.com/danielgindi/ios-charts +/*: + **** + [Menu](Menu) + + [Previous](@previous) + **** + */ + +//: # Bubble Chart +import Cocoa +import Charts +import PlaygroundSupport + +let ITEM_COUNT = 20 + +let r = CGRect(x: 0, y: 0, width: 600, height: 600) +var chartView = BubbleChartView(frame: r) +//: ### General +chartView.drawGridBackgroundEnabled = true +//: ### xAxis +let xAxis = chartView.xAxis +xAxis.labelPosition = .bothSided +xAxis.axisMinimum = 0.0 +xAxis.granularity = 1.0 +//: ### LeftAxis +let leftAxis = chartView.leftAxis +leftAxis.drawGridLinesEnabled = true +leftAxis.axisMinimum = 40.0 +//: ### RightAxis +let rightAxis = chartView.rightAxis +rightAxis.drawGridLinesEnabled = true +rightAxis.axisMinimum = 40.0 +//: ### Legend +let legend = chartView.legend +legend.wordWrapEnabled = true +legend.horizontalAlignment = .center +legend.verticalAlignment = .bottom +legend.orientation = .horizontal +legend.drawInside = false +//: ### Description +chartView.chartDescription?.enabled = false +//: ### BubbleChartDataEntry +var entries = [BubbleChartDataEntry]() +for index in 0..Float +{ + return Float(arc4random_uniform( UInt32(to - from ))) + Float(from) +} + + +let ITEM_COUNT = 20 + + +let r = CGRect(x: 0, y: 0, width: 600, height: 600) +var chartView = CandleStickChartView(frame: r) +//: ### General +chartView.drawGridBackgroundEnabled = true +//: ### xAxis +let xAxis = chartView.xAxis +xAxis.labelPosition = .bothSided +xAxis.axisMinimum = 0.0 +xAxis.granularity = 1.0 +//: ### LeftAxis +let leftAxis = chartView.leftAxis +leftAxis.drawGridLinesEnabled = true +leftAxis.axisMinimum = 0.0 +//: ### RightAxis +let rightAxis = chartView.rightAxis +rightAxis.drawGridLinesEnabled = true +rightAxis.axisMinimum = 0.0 +//: ### Legend +let legend = chartView.legend +legend.wordWrapEnabled = true +legend.horizontalAlignment = .center +legend.verticalAlignment = .bottom +legend.orientation = .horizontal +legend.drawInside = false +//: ### Description +chartView.chartDescription?.enabled = false +//: ### CandleChartDataEntry +var entries = [CandleChartDataEntry]() + +for i in 0.. LineChartData +{ +//: ### ChartDataEntry + var entries = [ChartDataEntry]() + for index in 0.. BarChartData +{ +//: ### BarChartDataEntry + var entries1 = [BarChartDataEntry]() + var entries2 = [BarChartDataEntry]() + + for _ in 0.. interval per "group" + */ + let data = BarChartData(dataSets: [set1, set2]) + data.barWidth = barWidth +/*: +- Note: make this BarData object grouped +*/ + data.groupBars(fromX: 0.0, groupSpace: groupSpace, barSpace: barSpace) // start at x = 0 + return data +} +//: ## Principal +let ITEM_COUNT = 12 + + +let r = CGRect(x: 0, y: 0, width: 600, height: 600) +var chartView = CombinedChartView(frame: r) +//: ### General +chartView.drawGridBackgroundEnabled = false +chartView.drawBarShadowEnabled = false +chartView.highlightFullBarEnabled = false +chartView.drawOrder = [DrawOrder.bar.rawValue, DrawOrder.bubble.rawValue, DrawOrder.candle.rawValue, DrawOrder.line.rawValue, DrawOrder.scatter.rawValue] +//: ### xAxis +let xAxis = chartView.xAxis +xAxis.labelPosition = .bothSided +xAxis.axisMinimum = 0.0 +xAxis.granularity = 1.0 +//xAxis.valueFormatter = BarChartFormatter() +//: ### LeftAxis +let leftAxis = chartView.leftAxis +leftAxis.drawGridLinesEnabled = false +leftAxis.axisMinimum = 0.0 +//: ### RightAxis +let rightAxis = chartView.rightAxis +rightAxis.drawGridLinesEnabled = false +rightAxis.axisMinimum = 0.0 +//: ### Legend +let legend = chartView.legend +legend.wordWrapEnabled = true +legend.horizontalAlignment = .center +legend.verticalAlignment = .bottom +legend.orientation = .horizontal +legend.drawInside = false +//: ### Description +chartView.chartDescription?.enabled = false + +setChartData() +chartView.animate(xAxisDuration: 2.0, yAxisDuration: 2.0, easingOption: .easeInBounce) + +/*:---*/ +//: ### Setup for the live view +PlaygroundPage.current.liveView = chartView + +/*: + **** + [Previous](@previous) | [Next](@next) + */ + + diff --git a/ChartsDemo-OSX/PlaygroundChart.playground/Pages/HorizontalBarChart.xcplaygroundpage/Contents.swift b/ChartsDemo-OSX/PlaygroundChart.playground/Pages/HorizontalBarChart.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000000..30db0670f4 --- /dev/null +++ b/ChartsDemo-OSX/PlaygroundChart.playground/Pages/HorizontalBarChart.xcplaygroundpage/Contents.swift @@ -0,0 +1,102 @@ +// +// PlayGround +// +// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda +// Copyright © 2017 thierry Hentic. +// A port of MPAndroidChart for iOS +// Licensed under Apache License 2.0 +// +// https://github.com/danielgindi/ios-charts +/*: + **** + [Menu](Menu) + + [Previous](@previous) | [Next](@next) + **** + */ + +//: # Horizontal Bar Chart +import Cocoa +import Charts +import PlaygroundSupport + + +let r = CGRect(x: 0, y: 0, width: 600, height: 600) +var chartView = HorizontalBarChartView(frame: r) +//: ### General +chartView.drawBarShadowEnabled = false +chartView.drawValueAboveBarEnabled = true +chartView.maxVisibleCount = 60 +chartView.fitBars = true +chartView.gridBackgroundColor = NSUIColor.white +chartView.drawGridBackgroundEnabled = true +//: ### xAxis +let xAxis = chartView.xAxis +xAxis.labelPosition = .bothSided +xAxis.labelTextColor = #colorLiteral(red: 0, green: 0.9768045545, blue: 0, alpha: 1) +xAxis.labelFont = NSUIFont.systemFont(ofSize: CGFloat(12.0)) +xAxis.drawAxisLineEnabled = true +xAxis.drawGridLinesEnabled = true +xAxis.granularity = 10.0 +//: ### LeftAxis +let leftAxis = chartView.leftAxis +leftAxis.labelFont = NSUIFont.systemFont(ofSize: CGFloat(12.0)) +leftAxis.labelTextColor = #colorLiteral(red: 0.01680417731, green: 0.1983509958, blue: 1, alpha: 1) +leftAxis.drawAxisLineEnabled = true +leftAxis.drawGridLinesEnabled = true +leftAxis.axisMinimum = 0.0 +leftAxis.enabled = true +//: ### RightAxis +let rightAxis = chartView.rightAxis +rightAxis.labelFont = NSUIFont.systemFont(ofSize: CGFloat(12.0)) +rightAxis.labelTextColor = #colorLiteral(red: 0.7450980544, green: 0.1568627506, blue: 0.07450980693, alpha: 1) +rightAxis.drawAxisLineEnabled = true +rightAxis.drawGridLinesEnabled = false +rightAxis.axisMinimum = 0.0 +rightAxis.enabled = true +//: ### Legend +let legend = chartView.legend +legend.horizontalAlignment = .left +legend.verticalAlignment = .bottom +legend.orientation = .horizontal +legend.drawInside = false +legend.form = .square +legend.formSize = 8.0 +legend.font = NSUIFont(name: "HelveticaNeue-Light", size: CGFloat(11.0))! +legend.xEntrySpace = 4.0 + +//: ### Description +chartView.chartDescription?.text = "Horizontal Bar Chart" +//: ### BarChartDataEntry +let count = 12 +let range = 50.0 +let barWidth = 9.0 +let spaceForBar = 10.0 + +var yVals = [BarChartDataEntry]() +for i in 0..2B%n4go>B8G7jMhGAyz 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 literal 0 HcmV?d00001 diff --git a/ChartsDemo-OSX/PlaygroundChart.playground/Pages/PieChart.xcplaygroundpage/Contents.swift b/ChartsDemo-OSX/PlaygroundChart.playground/Pages/PieChart.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000000..191e752240 --- /dev/null +++ b/ChartsDemo-OSX/PlaygroundChart.playground/Pages/PieChart.xcplaygroundpage/Contents.swift @@ -0,0 +1,57 @@ +// +// PlayGround +// +// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda +// Copyright © 2017 thierry Hentic. +// A port of MPAndroidChart for iOS +// Licensed under Apache License 2.0 +// +// https://github.com/danielgindi/ios-charts +/*: + **** + [Menu](Menu) + + [Previous](@previous) | [Next](@next) + **** + */ + +//: # Pie Chart +import Cocoa +import Charts +import PlaygroundSupport + + +let r = CGRect(x: 0, y: 0, width: 600, height: 600) +var chartView = PieChartView(frame: r) +//: ### General +let paragraphStyle: NSMutableParagraphStyle = NSParagraphStyle.default().mutableCopy() as! NSMutableParagraphStyle +paragraphStyle.lineBreakMode = .byTruncatingTail +paragraphStyle.alignment = .center + +let centerText: NSMutableAttributedString = NSMutableAttributedString(string: "Charts\nby Daniel Cohen Gindi") +centerText.setAttributes([NSFontAttributeName: NSUIFont(name: "HelveticaNeue-Light", size: 15.0)!, NSParagraphStyleAttributeName: paragraphStyle], range: NSMakeRange(0, centerText.length)) +centerText.addAttributes([NSFontAttributeName: NSUIFont(name: "HelveticaNeue-Light", size: 13.0)!, NSForegroundColorAttributeName: NSUIColor.gray], range: NSMakeRange(10, centerText.length - 10)) +centerText.addAttributes([NSFontAttributeName: NSUIFont(name: "HelveticaNeue-LightItalic", size: 13.0)!, NSForegroundColorAttributeName: NSUIColor(red: 51 / 255.0, green: 181 / 255.0, blue: 229 / 255.0, alpha: 1.0)], range: NSMakeRange(centerText.length - 19, 19)) + +chartView.centerAttributedText = centerText +chartView.chartDescription?.text = "Pie Chart" +//: ### PieChartDataEntry +let ys1 = Array(1..<10).map { x in return sin(Double(x) / 2.0 / 3.141 * 1.5) * 100.0 } +let yse1 = ys1.enumerated().map { x, y in return PieChartDataEntry(value: y, label: String(x)) } +//: ### PieChartDataSet +let ds1 = PieChartDataSet(values: yse1, label: "Hello") +ds1.colors = ChartColorTemplates.vordiplom() +//: ### PieChartData +let data = PieChartData() +data.addDataSet(ds1) +chartView.data = data + +chartView.animate(xAxisDuration: 2.0, yAxisDuration: 2.0, easingOption: .easeInBounce) + +/*:---*/ +//: ### Setup for the live view +PlaygroundPage.current.liveView = chartView +/*: + **** + [Previous](@previous) | [Next](@next) + */ diff --git a/ChartsDemo-OSX/PlaygroundChart.playground/Pages/RadarChart.xcplaygroundpage/Contents.swift b/ChartsDemo-OSX/PlaygroundChart.playground/Pages/RadarChart.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000000..f89381e68b --- /dev/null +++ b/ChartsDemo-OSX/PlaygroundChart.playground/Pages/RadarChart.xcplaygroundpage/Contents.swift @@ -0,0 +1,111 @@ +// +// PlayGround +// +// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda +// Copyright © 2017 thierry Hentic. +// A port of MPAndroidChart for iOS +// Licensed under Apache License 2.0 +// +// https://github.com/danielgindi/ios-charts +/*: + **** + [Menu](Menu) + + [Previous](@previous) | [Next](@next) + **** + */ + +//: # Radar Chart +import Cocoa +import Charts +import PlaygroundSupport + +let r = CGRect(x: 0, y: 0, width: 600, height: 600) +var chartView = RadarChartView(frame: r) +//: ### General +chartView.backgroundColor = #colorLiteral(red: 0.2605174184, green: 0.2605243921, blue: 0.260520637, alpha: 1) +chartView.webLineWidth = 1.0 +chartView.innerWebLineWidth = 1.0 +chartView.webColor = NSUIColor.lightGray +chartView.innerWebColor = NSUIColor.lightGray +chartView.webAlpha = 1.0 +//: ### xAxis +let xAxis = chartView.xAxis +xAxis.labelFont = NSUIFont(name: "HelveticaNeue-Light", size: CGFloat(9.0))! +xAxis.xOffset = 0.0 +xAxis.yOffset = 0.0 +xAxis.labelTextColor = NSUIColor.white +//: ### yAxis +let yAxis = chartView.yAxis +yAxis.labelFont = NSUIFont(name: "HelveticaNeue-Light", size: CGFloat(9.0))! +yAxis.labelCount = 5 +yAxis.axisMinimum = 0.0 +yAxis.axisMaximum = 80.0 +yAxis.drawLabelsEnabled = false +//: ### Legend +let legend = chartView.legend +legend.horizontalAlignment = .center +legend.verticalAlignment = .top +legend.orientation = .horizontal +legend.drawInside = false +legend.font = NSUIFont(name: "HelveticaNeue-Light", size: CGFloat(10.0))! +legend.xEntrySpace = 7.0 +legend.yEntrySpace = 5.0 +legend.textColor = NSUIColor.white +//: ### Description +chartView.chartDescription?.enabled = true +chartView.chartDescription?.text = "Radar demo" +chartView.chartDescription?.textColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1) +//: ### RadarChartDataEntry +let mult = 80.0 +let min = 20.0 +let cnt = 5 + +var entries1 = [RadarChartDataEntry]() +var entries2 = [RadarChartDataEntry]() +/*: +- Note: The order of the entries when being added to the entries array determines their position around the center of the chart. +*/ +for _ in 0.. + + + + + + + + + + + + + + + \ No newline at end of file From 629c548c886ec486c278409054c3fed39810003a Mon Sep 17 00:00:00 2001 From: Maciej Trybilo Date: Fri, 5 May 2017 12:03:19 +0100 Subject: [PATCH 04/64] Allow turning off drag in X and Y axis separately. --- .../Charts/Charts/BarLineChartViewBase.swift | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/Source/Charts/Charts/BarLineChartViewBase.swift b/Source/Charts/Charts/BarLineChartViewBase.swift index 747120718f..7ebb728291 100644 --- a/Source/Charts/Charts/BarLineChartViewBase.swift +++ b/Source/Charts/Charts/BarLineChartViewBase.swift @@ -29,6 +29,8 @@ open class BarLineChartViewBase: ChartViewBase, BarLineScatterCandleBubbleChartD fileprivate var _pinchZoomEnabled = false fileprivate var _doubleTapToZoomEnabled = true fileprivate var _dragEnabled = true + fileprivate var _dragYEnabled = true + fileprivate var _dragXEnabled = true fileprivate var _scaleXEnabled = true fileprivate var _scaleYEnabled = true @@ -853,8 +855,11 @@ open class BarLineChartViewBase: ChartViewBase, BarLineScatterCandleBubbleChartD { if gestureRecognizer == _panGestureRecognizer { + let velocity = _panGestureRecognizer.velocity(in: self) if _data === nil || !_dragEnabled || - (self.hasNoDragOffset && self.isFullyZoomedOut && !self.isHighlightPerDragEnabled) + (self.hasNoDragOffset && self.isFullyZoomedOut && !self.isHighlightPerDragEnabled) || + (!_dragYEnabled && fabs(velocity.y) > fabs(velocity.x)) || + (!_dragXEnabled && fabs(velocity.y) < fabs(velocity.x)) { return false } @@ -1517,10 +1522,34 @@ open class BarLineChartViewBase: ChartViewBase, BarLineScatterCandleBubbleChartD if _dragEnabled != newValue { _dragEnabled = newValue + _dragYEnabled = newValue + _dragXEnabled = newValue } } } + open var dragYEnabled: Bool { + get + { + return _dragYEnabled + } + set + { + _dragYEnabled = newValue + } + } + + open var dragXEnabled: Bool { + get + { + return _dragXEnabled + } + set + { + _dragXEnabled = newValue + } + } + /// is dragging enabled? (moving the chart with the finger) for the chart (this does not affect scaling). open var isDragEnabled: Bool { From 1286da09da0905df744c0d99f36e01d7383c8e75 Mon Sep 17 00:00:00 2001 From: annalizhaz Date: Mon, 29 May 2017 01:51:22 -0500 Subject: [PATCH 05/64] tutorial link added to readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6043cd4e6f..8c273ec6ea 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ In order to correctly compile: ## 3rd party tutorials * [Using Realm and Charts with Swift 3 in iOS 10 (Sami Korpela)](https://medium.com/@skoli/using-realm-and-charts-with-swift-3-in-ios-10-40c42e3838c0#.2gyymwfh8) +* [Beginning Set-up and Example Using Charts with Swift 3](https://github.com/annalizhaz/ChartsForSwiftBasic) * Want your tutorial to show here? Create a PR! ## Troubleshooting From b0ef5247094b8a868e4c519fe0e83f4f123bd2ea Mon Sep 17 00:00:00 2001 From: jacobchristie Date: Fri, 21 Jul 2017 17:25:54 -0400 Subject: [PATCH 06/64] Added Swift iOS demos --- .../AppIcon.appiconset/Contents.json | 59 +++ .../AppIcon.appiconset/Icon-29@2x.png | Bin 0 -> 5677 bytes .../AppIcon.appiconset/Icon-29@3x.png | Bin 0 -> 10210 bytes .../AppIcon.appiconset/Icon-40@2x.png | Bin 0 -> 9266 bytes .../AppIcon.appiconset/Icon-40@3x.png | Bin 0 -> 14343 bytes .../AppIcon.appiconset/Icon-60@2x.png | Bin 0 -> 14343 bytes .../AppIcon.appiconset/Icon-60@3x.png | Bin 0 -> 27502 bytes .../Assets.xcassets/Contents.json | 6 + .../LaunchImage.launchimage/Contents.json | 43 +++ .../Default-568h@2x.png | Bin 0 -> 16567 bytes .../Default-667h@2x.png | Bin 0 -> 22355 bytes .../Default-736h@3x.png | Bin 0 -> 55285 bytes .../LaunchImage.launchimage/Default@2x.png | Bin 0 -> 14035 bytes .../icon.imageset/Contents.json | 23 ++ .../Assets.xcassets/icon.imageset/star-1.png | Bin 0 -> 1221 bytes .../Assets.xcassets/icon.imageset/star-2.png | Bin 0 -> 1221 bytes .../Assets.xcassets/icon.imageset/star.png | Bin 0 -> 1221 bytes .../Base.lproj/LaunchScreen.storyboard | 25 ++ .../ChartsDemo-iOS/Classes/AppDelegate.swift | 54 +++ .../Classes/Components/BalloonMarker.swift | 122 ++++++ .../Classes/Components/RadarMarkerView.swift | 27 ++ .../Classes/Components/RadarMarkerView.xib | 52 +++ .../Classes/Components/XYMarkerView.swift | 32 ++ .../Classes/DemoBaseViewController.swift | 362 ++++++++++++++++++ .../Classes/DemoListViewController.swift | 129 +++++++ .../Classes/DemoListViewController.xib | 40 ++ .../Demos/AnotherBarChartViewController.swift | 98 +++++ .../Demos/AnotherBarChartViewController.xib | 100 +++++ .../Demos/BarChartViewController.swift | 152 ++++++++ .../Classes/Demos/BarChartViewController.xib | 100 +++++ .../Demos/BubbleChartViewController.swift | 127 ++++++ .../Demos/BubbleChartViewController.xib | 100 +++++ .../CandleStickChartViewController.swift | 122 ++++++ .../Demos/CandleStickChartViewController.xib | 100 +++++ .../ColoredLineChartViewController.swift | 77 ++++ .../Demos/ColoredLineChartViewController.xib | 64 ++++ .../Demos/CombinedChartViewController.swift | 233 +++++++++++ .../Demos/CombinedChartViewController.xib | 56 +++ .../Demos/CubicLineChartViewController.swift | 155 ++++++++ .../Demos/CubicLineChartViewController.xib | 100 +++++ .../Demos/HalfPieChartViewController.swift | 142 +++++++ .../Demos/HalfPieChartViewController.xib | 56 +++ .../HorizontalBarChartViewController.swift | 124 ++++++ .../HorizontalBarChartViewController.xib | 100 +++++ .../Demos/LineChart1ViewController.swift | 187 +++++++++ .../Demos/LineChart1ViewController.xib | 100 +++++ .../Demos/LineChart2ViewController.swift | 200 ++++++++++ .../Demos/LineChart2ViewController.xib | 100 +++++ .../Demos/LineChartFilledViewController.swift | 117 ++++++ .../Demos/LineChartFilledViewController.xib | 86 +++++ .../Demos/LineChartTimeViewController.swift | 161 ++++++++ .../Demos/LineChartTimeViewController.xib | 78 ++++ .../MultipleBarChartViewController.swift | 154 ++++++++ .../Demos/MultipleBarChartViewController.xib | 99 +++++ .../MultipleLinesChartViewController.swift | 138 +++++++ .../MultipleLinesChartViewController.xib | 100 +++++ ...egativeStackedBarChartViewController.swift | 134 +++++++ .../NegativeStackedBarChartViewController.xib | 56 +++ .../Demos/PieChartViewController.swift | 153 ++++++++ .../Classes/Demos/PieChartViewController.xib | 100 +++++ .../PiePolylineChartViewController.swift | 145 +++++++ .../Demos/PiePolylineChartViewController.xib | 114 ++++++ ...sitiveNegativeBarChartViewController.swift | 120 ++++++ ...PositiveNegativeBarChartViewController.xib | 56 +++ .../Demos/RadarChartViewController.swift | 203 ++++++++++ .../Demos/RadarChartViewController.xib | 65 ++++ .../Demos/ScatterChartViewController.swift | 124 ++++++ .../Demos/ScatterChartViewController.xib | 100 +++++ .../Demos/SinusBarChartViewController.swift | 108 ++++++ .../Demos/SinusBarChartViewController.xib | 78 ++++ .../Demos/StackedBarChartViewController.swift | 125 ++++++ .../Demos/StackedBarChartViewController.xib | 100 +++++ .../Formatters/DateValueFormatter.swift | 22 ++ .../Formatters/DayAxisValueFormatter.swift | 109 ++++++ .../Formatters/IntAxisValueFormatter.swift | 16 + .../Formatters/LargeValueFormatter.swift | 56 +++ ChartsDemo-iOS/ChartsDemo-iOS/Info.plist | 43 +++ 77 files changed, 6527 insertions(+) create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/Contents.json create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/LaunchImage.launchimage/Contents.json create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/LaunchImage.launchimage/Default-736h@3x.png create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/LaunchImage.launchimage/Default@2x.png create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/icon.imageset/Contents.json create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/icon.imageset/star-1.png create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/icon.imageset/star-2.png create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/icon.imageset/star.png create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Base.lproj/LaunchScreen.storyboard create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/AppDelegate.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/BalloonMarker.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/RadarMarkerView.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/RadarMarkerView.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/XYMarkerView.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/DemoBaseViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/DemoListViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/DemoListViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/AnotherBarChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/AnotherBarChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BarChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BarChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BubbleChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BubbleChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CandleStickChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CandleStickChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ColoredLineChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ColoredLineChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CombinedChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CombinedChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CubicLineChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CubicLineChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HalfPieChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HalfPieChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HorizontalBarChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HorizontalBarChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart1ViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart1ViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart2ViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart2ViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartFilledViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartFilledViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartTimeViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartTimeViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/MultipleBarChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/MultipleBarChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/MultipleLinesChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/MultipleLinesChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/NegativeStackedBarChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/NegativeStackedBarChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PieChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PieChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PiePolylineChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PiePolylineChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PositiveNegativeBarChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PositiveNegativeBarChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/RadarChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/RadarChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ScatterChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ScatterChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/SinusBarChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/SinusBarChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/StackedBarChartViewController.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/StackedBarChartViewController.xib create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/DateValueFormatter.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/DayAxisValueFormatter.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/IntAxisValueFormatter.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/LargeValueFormatter.swift create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS/Info.plist diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..32d8413dd0 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,59 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60@3x.png", + "scale" : "3x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png b/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..33b2e63ab491d39425e104e7ef5916dd41cf6bcb GIT binary patch literal 5677 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 IIm^g@0c)79&;S4c literal 0 HcmV?d00001 diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png b/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ef18aba824097d907faf79251338789f90356692 GIT binary patch literal 10210 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 Wi~3w&#sBk@?u(@Sr!sMUzyATj7qnOa literal 0 HcmV?d00001 diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png b/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..775e7277c87f33e5894daa86b314de4fd2e4b07a GIT binary patch literal 9266 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 U7%vlQ|B3)&f9CH~?#)m6H}^Ndr~m)} literal 0 HcmV?d00001 diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png b/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a3bc101148bbb81e66044955d9d9ff5f6f6f6d74 GIT binary patch literal 22355 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 literal 0 HcmV?d00001 diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/LaunchImage.launchimage/Default@2x.png b/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/LaunchImage.launchimage/Default@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..16802b260b097c043a1d96e7cf24a3a0b5405506 GIT binary patch literal 14035 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sU_QXX1{7KP=)`Xz=R>BmbAYF_vqC^oep+Tu zDg%Q>Z*S<`{M#WS_MQ1LOT_FKZ0zF`?Oq=m9KBOoYV9#L&&f+)I!Wz3dqZo<$?nFwWr=OcEr*QB-~}_ddm%&Y##nf5tTHFh$Puj_O|=mM^RJ+ZCh7 zq<5^<{o3Jp#e?_E*>Ao6UtAitayhfgJg1y++giDgnGI7`TCd|*xaaosgXVq5J0EQx z$?B6mHSrzQuX{IM*l+Mo*XLPOo!INes_)zj?q5E3x}#d4{>80VEaxL5 zmZil#{nx797tdELa7}k}$P>Fxm%R&)IlQ~R{MZg%%Lk7Yi=vHUjr&BL{!L0|+uX5p z;^#c)wJmd`XU#rcZ2!b=tJcEvSJthXmbzEgrADGp)nq}!VV-wZ5gQndR!nH;*(X~N z7|hJFV+~P&vuc^LtVSW9V?_$}% zC(g;#o?pR!;4t5o8O$Glt=IdzLHpB2C%rw@n_s^Y^08UDf936!U$1bzTfK5?$HZT@ zTif=BdL-wiO}J=d=Qg2T{Io*c;nbR%3kCm~E6aMet0tYbx-OgX}hY$ZF$eB z_ovuT6@AM6bWc%v^z_?hop_1i{^ z^-WRCeypMuj_tY@n{)p;XJ7Je^GLjXg>Q3Yp5c)>Gej>dbXOl0EcB2`-!XOm4)#*z z9nZJ<%>6fmE2BqreX+s}E3?&SsuV9&I@DI(N*8~-;_aNm-kZDh-v>{*{?w#y)ry!6 zUk=tq8v9xXRBrONeWiEdmBNPi3i}tyuQ>Q!cjMzCHb_`sNdc^+B->Ug!Z$#{ zIlm}X!Bo#g&p^qJOF==wrYI%ND#*nRsvXF)RmvzSDX`MlFE20GD>v55FG|-pw6wI; zH!#vSGSUUA&@HaaD@m--%_~-h7y>iLCAB!YD6^m>Ge1uOWNuJ**9#9ZqJ{ZIDce;{r$hM(47(sY92y*a4lwkH>ghrG zKo2pGdT2C;fXQJr$pJIMXdVIY(bmss>u0p} zGurwYZT*b4enwkA!>aW&IzvetTZ1;}VwJ6hI42G>R#V51GN(RFU43-?BsRx*vQ z6$Op2j4pl!w!cSL^8)LH#?kfGz{#i41>~cJ0%Y8oriDTy{~vSiNdYI-9Y9-8JYD@< J);T3K0RVdZWCZ{K literal 0 HcmV?d00001 diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/icon.imageset/Contents.json b/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/icon.imageset/Contents.json new file mode 100644 index 0000000000..8c89aaaae3 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/icon.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "star-2.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "star-1.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "star.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/icon.imageset/star-1.png b/ChartsDemo-iOS/ChartsDemo-iOS/Assets.xcassets/icon.imageset/star-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c7811ef2b89b0097f0c64f26718cc07e5a5b64b8 GIT binary patch literal 1221 zcmV;$1UmbPP)U=4^(ZyKr5oQs+34wu%k3i zNrRP02!%k}R7xn6hXLd3$C)m$1Abpf`mL-pbLRVIe9oD<1dF&C47!xayF?TakzQhM zS4ugv<`@CXL=;uPlm=Yy8ykyRiA&WSrh~z50)|-R0+<~Z_3i{Nx z4%V9S_?HZP0zk7!T!^%YdaaVv3{NeCoRRJ@> z;G0793j^NgM7|G^)r`oQ{_*j-vI4T1|7wYx2;LKo0D!eS>y||bk^gWdIQL^N6spUX z-BRX_-7d5STF@G3fxF9PO#qRPfFEYgovSGlunT-)`9CMXd+I=^ug?ci)eDtF4>=s4 z=Lwh&2D`JT-4YtQ+^F#$+{jv=1MW^|g&jrsbS4z)d@6u|Ay~a?M0wfgP-?9LY$P%S z05p64ygQ}qPpm#N?pK{?d;jH6YOp~>%_NeWDI~X&5G6&v%v_5^;;fB`0)-jC0S&P30N){L?eO+cHH@{;!IHze|*0P4|J3)aTZEsiHRs$DG&o_ z_7L_>shqtl-rBvKZ zCU0#s0Ad~+n4H|P0RS?YVQAV%0Boh4YYQrnPAV+je2k^v zo&Zef^f%*`lg-d{KD4K{EV)uDB{th-Alrh!zISi^ z%&!;vZ+jS?HYfg$uEG`v8Vq~U^~#7~GnIm>0bV@e!`g!woSVg6P?U7O}^7nU=4^(ZyKr5oQs+34wu%k3i zNrRP02!%k}R7xn6hXLd3$C)m$1Abpf`mL-pbLRVIe9oD<1dF&C47!xayF?TakzQhM zS4ugv<`@CXL=;uPlm=Yy8ykyRiA&WSrh~z50)|-R0+<~Z_3i{Nx z4%V9S_?HZP0zk7!T!^%YdaaVv3{NeCoRRJ@> z;G0793j^NgM7|G^)r`oQ{_*j-vI4T1|7wYx2;LKo0D!eS>y||bk^gWdIQL^N6spUX z-BRX_-7d5STF@G3fxF9PO#qRPfFEYgovSGlunT-)`9CMXd+I=^ug?ci)eDtF4>=s4 z=Lwh&2D`JT-4YtQ+^F#$+{jv=1MW^|g&jrsbS4z)d@6u|Ay~a?M0wfgP-?9LY$P%S z05p64ygQ}qPpm#N?pK{?d;jH6YOp~>%_NeWDI~X&5G6&v%v_5^;;fB`0)-jC0S&P30N){L?eO+cHH@{;!IHze|*0P4|J3)aTZEsiHRs$DG&o_ z_7L_>shqtl-rBvKZ zCU0#s0Ad~+n4H|P0RS?YVQAV%0Boh4YYQrnPAV+je2k^v zo&Zef^f%*`lg-d{KD4K{EV)uDB{th-Alrh!zISi^ z%&!;vZ+jS?HYfg$uEG`v8Vq~U^~#7~GnIm>0bV@e!`g!woSVg6P?U7O}^7nU=4^(ZyKr5oQs+34wu%k3i zNrRP02!%k}R7xn6hXLd3$C)m$1Abpf`mL-pbLRVIe9oD<1dF&C47!xayF?TakzQhM zS4ugv<`@CXL=;uPlm=Yy8ykyRiA&WSrh~z50)|-R0+<~Z_3i{Nx z4%V9S_?HZP0zk7!T!^%YdaaVv3{NeCoRRJ@> z;G0793j^NgM7|G^)r`oQ{_*j-vI4T1|7wYx2;LKo0D!eS>y||bk^gWdIQL^N6spUX z-BRX_-7d5STF@G3fxF9PO#qRPfFEYgovSGlunT-)`9CMXd+I=^ug?ci)eDtF4>=s4 z=Lwh&2D`JT-4YtQ+^F#$+{jv=1MW^|g&jrsbS4z)d@6u|Ay~a?M0wfgP-?9LY$P%S z05p64ygQ}qPpm#N?pK{?d;jH6YOp~>%_NeWDI~X&5G6&v%v_5^;;fB`0)-jC0S&P30N){L?eO+cHH@{;!IHze|*0P4|J3)aTZEsiHRs$DG&o_ z_7L_>shqtl-rBvKZ zCU0#s0Ad~+n4H|P0RS?YVQAV%0Boh4YYQrnPAV+je2k^v zo&Zef^f%*`lg-d{KD4K{EV)uDB{th-Alrh!zISi^ z%&!;vZ+jS?HYfg$uEG`v8Vq~U^~#7~GnIm>0bV@e!`g!woSVg6P?U7O}^7n + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/AppDelegate.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/AppDelegate.swift new file mode 100644 index 0000000000..7f13108e70 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/AppDelegate.swift @@ -0,0 +1,54 @@ +// +// AppDelegate.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-03. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + self.window = UIWindow(frame: UIScreen.main.bounds) + + + let vc = DemoListViewController() + let nav = UINavigationController(rootViewController: vc) + + window?.rootViewController = nav + window?.makeKeyAndVisible() + + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/BalloonMarker.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/BalloonMarker.swift new file mode 100644 index 0000000000..d18b3d2823 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/BalloonMarker.swift @@ -0,0 +1,122 @@ +// +// BalloonMarker.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import Foundation +import Charts + +public class BalloonMarker: MarkerImage { + public var color: UIColor + public var arrowSize = CGSize(width: 15, height: 11) + public var font: UIFont + public var textColor: UIColor + public var insets: UIEdgeInsets + public var minimumSize = CGSize() + + fileprivate var label: String? + fileprivate var _labelSize: CGSize = CGSize() + fileprivate var _paragraphStyle: NSMutableParagraphStyle? + fileprivate var _drawAttributes = [NSAttributedStringKey : AnyObject]() + + public init(color: UIColor, font: UIFont, textColor: UIColor, insets: UIEdgeInsets) { + self.color = color + self.font = font + self.textColor = textColor + self.insets = insets + + _paragraphStyle = NSParagraphStyle.default.mutableCopy() as? NSMutableParagraphStyle + _paragraphStyle?.alignment = .center + super.init() + } + + public override func offsetForDrawing(atPoint point: CGPoint) -> CGPoint { + let size = self.size + var point = point + point.x -= size.width / 2.0 + point.y -= size.height + return super.offsetForDrawing(atPoint: point) + } + + public override func draw(context: CGContext, point: CGPoint) { + guard let label = label else { return } + + let offset = self.offsetForDrawing(atPoint: point) + let size = self.size + + var rect = CGRect( + origin: CGPoint( + x: point.x + offset.x, + y: point.y + offset.y), + size: size) + rect.origin.x -= size.width / 2.0 + rect.origin.y -= size.height + + context.saveGState() + + context.setFillColor(color.cgColor) + context.beginPath() + context.move(to: CGPoint( + x: rect.origin.x, + y: rect.origin.y)) + context.addLine(to: CGPoint( + x: rect.origin.x + rect.size.width, + y: rect.origin.y)) + context.addLine(to: CGPoint( + x: rect.origin.x + rect.size.width, + y: rect.origin.y + rect.size.height - arrowSize.height)) + context.addLine(to: CGPoint( + x: rect.origin.x + (rect.size.width + arrowSize.width) / 2.0, + y: rect.origin.y + rect.size.height - arrowSize.height)) + context.addLine(to: CGPoint( + x: rect.origin.x + rect.size.width / 2.0, + y: rect.origin.y + rect.size.height)) + context.addLine(to: CGPoint( + x: rect.origin.x + (rect.size.width - arrowSize.width) / 2.0, + y: rect.origin.y + rect.size.height - arrowSize.height)) + context.addLine(to: CGPoint( + x: rect.origin.x, + y: rect.origin.y + rect.size.height - arrowSize.height)) + context.addLine(to: CGPoint( + x: rect.origin.x, + y: rect.origin.y)) + context.fillPath() + + rect.origin.y += self.insets.top + rect.size.height -= self.insets.top + self.insets.bottom + + UIGraphicsPushContext(context) + + label.draw(in: rect, withAttributes: _drawAttributes) + + UIGraphicsPopContext() + + context.restoreGState() + } + + public override func refreshContent(entry: ChartDataEntry, highlight: Highlight) { + setLabel(String(entry.y)) + } + + public func setLabel(_ newLabel: String) { + label = newLabel + + _drawAttributes.removeAll() + _drawAttributes[.font] = self.font + _drawAttributes[.paragraphStyle] = _paragraphStyle + _drawAttributes[.foregroundColor] = self.textColor + + _labelSize = label?.size(withAttributes: _drawAttributes) ?? CGSize.zero + + var size = CGSize() + size.width = _labelSize.width + self.insets.left + self.insets.right + size.height = _labelSize.height + self.insets.top + self.insets.bottom + size.width = max(minimumSize.width, size.width) + size.height = max(minimumSize.height, size.height) + self.size = size + } + +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/RadarMarkerView.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/RadarMarkerView.swift new file mode 100644 index 0000000000..019196d5e8 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/RadarMarkerView.swift @@ -0,0 +1,27 @@ +// +// RadarMarkerView.swift +// ChartsDemo +// +// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda +// A port of MPAndroidChart for iOS +// Licensed under Apache License 2.0 +// +// https://github.com/danielgindi/Charts +// + +import Foundation +import Charts + +public class RadarMarkerView: MarkerView { + @IBOutlet var label: UILabel! + + public override func awakeFromNib() { + self.offset.x = -self.frame.size.width / 2.0 + self.offset.y = -self.frame.size.height - 7.0 + } + + public override func refreshContent(entry: ChartDataEntry, highlight: Highlight) { + label.text = String.init(format: "%d %%", Int(round(entry.y))) + layoutIfNeeded() + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/RadarMarkerView.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/RadarMarkerView.xib new file mode 100644 index 0000000000..687b73c95b --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/RadarMarkerView.xib @@ -0,0 +1,52 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/XYMarkerView.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/XYMarkerView.swift new file mode 100644 index 0000000000..290ab85011 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Components/XYMarkerView.swift @@ -0,0 +1,32 @@ +// +// XYMarkerView.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import Foundation +import Charts + +public class XYMarkerView: BalloonMarker { + public var xAxisValueFormatter: AxisValueFormatter + fileprivate var yFormatter = NumberFormatter() + + public init(color: UIColor, font: UIFont, textColor: UIColor, insets: UIEdgeInsets, + xAxisValueFormatter: AxisValueFormatter) { + self.xAxisValueFormatter = xAxisValueFormatter + yFormatter.minimumFractionDigits = 1 + yFormatter.maximumFractionDigits = 1 + super.init(color: color, font: font, textColor: textColor, insets: insets) + } + + public override func refreshContent(entry: ChartDataEntry, highlight: Highlight) { + let string = "x: " + + xAxisValueFormatter.stringForValue(entry.x, axis: XAxis()) + + ", y: " + + yFormatter.string(from: NSNumber(floatLiteral: entry.y))! + setLabel(string) + } + +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/DemoBaseViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/DemoBaseViewController.swift new file mode 100644 index 0000000000..2de87b60dc --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/DemoBaseViewController.swift @@ -0,0 +1,362 @@ +// +// DemoBaseViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-03. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +enum Option { + case toggleValues + case toggleIcons + case toggleHighlight + case animateX + case animateY + case animateXY + case saveToGallery + case togglePinchZoom + case toggleAutoScaleMinMax + case toggleData + case toggleBarBorders + // CandleChart + case toggleShadowColorSameAsCandle + // CombinedChart + case toggleLineValues + case toggleBarValues + case removeDataSet + // CubicLineSampleFillFormatter + case toggleFilled + case toggleCircles + case toggleCubic + case toggleHorizontalCubic + case toggleStepped + // HalfPieChartController + case toggleXValues + case togglePercent + case toggleHole + case spin + case drawCenter + // RadarChart + case toggleXLabels + case toggleYLabels + case toggleRotate + case toggleHighlightCircle + + var label: String { + switch self { + case .toggleValues: return "Toggle Y-Values" + case .toggleIcons: return "Toggle Icons" + case .toggleHighlight: return "Toggle Highlight" + case .animateX: return "Animate X" + case .animateY: return "Animate Y" + case .animateXY: return "Animate XY" + case .saveToGallery: return "Save to Camera Roll" + case .togglePinchZoom: return "Toggle PinchZoom" + case .toggleAutoScaleMinMax: return "Toggle auto scale min/max" + case .toggleData: return "Toggle Data" + case .toggleBarBorders: return "Toggle Bar Borders" + // CandleChart + case .toggleShadowColorSameAsCandle: return "Toggle shadow same color" + // CombinedChart + case .toggleLineValues: return "Toggle Line Values" + case .toggleBarValues: return "Toggle Bar Values" + case .removeDataSet: return "Remove Random Set" + // CubicLineSampleFillFormatter + case .toggleFilled: return "Toggle Filled" + case .toggleCircles: return "Toggle Circles" + case .toggleCubic: return "Toggle Cubic" + case .toggleHorizontalCubic: return "Toggle Horizontal Cubic" + case .toggleStepped: return "Toggle Stepped" + // HalfPieChartController + case .toggleXValues: return "Toggle X-Values" + case .togglePercent: return "Toggle Percent" + case .toggleHole: return "Toggle Hole" + case .spin: return "Spin" + case .drawCenter: return "Draw CenterText" + // RadarChart + case .toggleXLabels: return "Toggle X-Labels" + case .toggleYLabels: return "Toggle Y-Labels" + case .toggleRotate: return "Toggle Rotate" + case .toggleHighlightCircle: return "Toggle highlight circle" + } + } +} + +class DemoBaseViewController: UIViewController, ChartViewDelegate { + private var optionsTableView: UITableView? = nil + let parties = ["Party A", "Party B", "Party C", "Party D", "Party E", "Party F", + "Party G", "Party H", "Party I", "Party J", "Party K", "Party L", + "Party M", "Party N", "Party O", "Party P", "Party Q", "Party R", + "Party S", "Party T", "Party U", "Party V", "Party W", "Party X", + "Party Y", "Party Z"] + + @IBOutlet weak var optionsButton: UIButton! + var options: [Option]! + + var shouldHideData: Bool = false + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + self.initialize() + } + + override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { + super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) + self.initialize() + } + + private func initialize() { + self.edgesForExtendedLayout = [] + } + + func optionTapped(_ option: Option) {} + + func handleOption(_ option: Option, forChartView chartView: ChartViewBase) { + switch option { + case .toggleValues: + for set in chartView.data!.dataSets { + set.isDrawValuesEnabled = !set.isDrawValuesEnabled + } + chartView.setNeedsDisplay() + + case .toggleIcons: + for set in chartView.data!.dataSets { + set.isDrawIconsEnabled = !set.isDrawIconsEnabled + } + chartView.setNeedsDisplay() + + case .toggleHighlight: + chartView.data!.highlightEnabled = !chartView.data!.isHighlightEnabled + chartView.setNeedsDisplay() + + case .animateX: + chartView.animate(xAxisDuration: 3) + + case .animateY: + chartView.animate(yAxisDuration: 3) + + case .animateXY: + chartView.animate(xAxisDuration: 3, yAxisDuration: 3) + + case .saveToGallery: + UIImageWriteToSavedPhotosAlbum(chartView.getChartImage(transparent: false)!, nil, nil, nil) + + case .togglePinchZoom: + let barLineChart = chartView as! BarLineChartViewBase + barLineChart.isPinchZoomEnabled = !barLineChart.isPinchZoomEnabled + chartView.setNeedsDisplay() + + case .toggleAutoScaleMinMax: + let barLineChart = chartView as! BarLineChartViewBase + barLineChart.autoScaleMinMaxEnabled = !barLineChart.isAutoScaleMinMaxEnabled + chartView.notifyDataSetChanged() + + case .toggleData: + shouldHideData = !shouldHideData + updateChartData() + + case .toggleBarBorders: + for set in chartView.data!.dataSets { + if let set = set as? BarChartDataSet { + set.barBorderWidth = set.barBorderWidth == 1.0 ? 0.0 : 1.0 + } + } + chartView.setNeedsDisplay() + default: + break + } + } + + @IBAction func optionsButtonTapped(_ sender: Any) { + if let optionsTableView = self.optionsTableView { + optionsTableView.removeFromSuperview() + self.optionsTableView = nil + return + } + + let optionsTableView = UITableView() + optionsTableView.backgroundColor = UIColor(white: 0, alpha: 0.9) + optionsTableView.delegate = self + optionsTableView.dataSource = self + + optionsTableView.translatesAutoresizingMaskIntoConstraints = false + + self.optionsTableView = optionsTableView + + var constraints = [NSLayoutConstraint]() + + constraints.append(NSLayoutConstraint(item: optionsTableView, + attribute: .leading, + relatedBy: .equal, + toItem: self.view, + attribute: .leading, + multiplier: 1, + constant: 40)) + + constraints.append(NSLayoutConstraint(item: optionsTableView, + attribute: .trailing, + relatedBy: .equal, + toItem: sender as! UIView, + attribute: .trailing, + multiplier: 1, + constant: 0)) + + constraints.append(NSLayoutConstraint(item: optionsTableView, + attribute: .top, + relatedBy: .equal, + toItem: sender, + attribute: .bottom, + multiplier: 1, + constant: 5)) + + self.view.addSubview(optionsTableView) + constraints.forEach { $0.isActive = true } + + let constraint = NSLayoutConstraint(item: optionsTableView, + attribute: .height, + relatedBy: .equal, + toItem: nil, + attribute: .height, + multiplier: 1, + constant: 220) + constraint.isActive = true + } + + func updateChartData() { + fatalError("updateChartData not overridden") + } + + func setup(pieChartView chartView: PieChartView) { + chartView.usePercentValues = true + chartView.isDrawSlicesUnderHoleEnabled = false + chartView.holeRadiusPercent = 0.58 + chartView.transparentCircleRadiusPercent = 0.61 + chartView.chartDescription?.isEnabled = false + chartView.setExtraOffsets(left: 5, top: 10, right: 5, bottom: 5) + + chartView.isDrawCenterTextEnabled = true + + let paragraphStyle = NSParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle + paragraphStyle.lineBreakMode = .byTruncatingTail + paragraphStyle.alignment = .center + + let centerText = NSMutableAttributedString(string: "Charts\nby Daniel Cohen Gindi") + centerText.setAttributes([.font : UIFont(name: "HelveticaNeue-Light", size: 13)!, + .paragraphStyle : paragraphStyle], range: NSRange(location: 0, length: centerText.length)) + centerText.addAttributes([.font : UIFont(name: "HelveticaNeue-Light", size: 11)!, + .foregroundColor : UIColor.gray], range: NSRange(location: 10, length: centerText.length - 10)) + centerText.addAttributes([.font : UIFont(name: "HelveticaNeue-Light", size: 11)!, + .foregroundColor : UIColor(red: 51/255, green: 181/255, blue: 229/255, alpha: 1)], range: NSRange(location: centerText.length - 19, length: 19)) + chartView.centerAttributedText = centerText; + + chartView.isDrawHoleEnabled = true + chartView.rotationAngle = 0 + chartView.isRotationEnabled = true + chartView.isHighlightPerTapEnabled = true + + var l = chartView.legend + l.horizontalAlignment = .right + l.verticalAlignment = .top + l.orientation = .vertical + l.drawInside = false + l.xEntrySpace = 7 + l.yEntrySpace = 0 + l.yOffset = 0 + chartView.legend = l + } + + func setup(radarChartView chartView: RadarChartView) { + chartView.chartDescription?.isEnabled = false + } + + func setup(barLineChartView chartView: BarLineChartViewBase) { + chartView.chartDescription?.isEnabled = false + + chartView.isDragEnabled = true + chartView.setScaleEnabled(true) + chartView.isPinchZoomEnabled = false + + // ChartYAxis *leftAxis = chartView.leftAxis; + + let xAxis = chartView.xAxis + xAxis.labelPosition = .bottom + + chartView.rightAxis.isEnabled = false + } + // TODO: Cannot override from extensions + //extension DemoBaseViewController: ChartViewDelegate { + func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) { + NSLog("chartValueSelected"); + } + + func chartValueNothingSelected(_ chartView: ChartViewBase) { + NSLog("chartValueNothingSelected"); + } + + func chartScaled(_ chartView: ChartViewBase, scaleX: CGFloat, scaleY: CGFloat) { + + } + + func chartTranslated(_ chartView: ChartViewBase, dX: CGFloat, dY: CGFloat) { + + } +} + +extension DemoBaseViewController: UITableViewDelegate, UITableViewDataSource { + func numberOfSections(in tableView: UITableView) -> Int { + if optionsTableView != nil { + return 1 + } + + return 0 + } + + @available(iOS 2.0, *) + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + if optionsTableView != nil { + return options.count + } + + return 0 + + } + + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + if optionsTableView != nil { + return 40.0; + } + + return 44.0; + } + + @available(iOS 2.0, *) + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + var cell = tableView.dequeueReusableCell(withIdentifier: "Cell") + + if cell == nil { + cell = UITableViewCell(style: .default, reuseIdentifier: "Cell") + cell?.backgroundView = nil + cell?.backgroundColor = .clear + cell?.textLabel?.textColor = .white + } + cell?.textLabel?.text = self.options[indexPath.row].label + + return cell! + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + if optionsTableView != nil { + tableView.deselectRow(at: indexPath, animated: true) + + optionsTableView?.removeFromSuperview() + self.optionsTableView = nil + + self.optionTapped(self.options[indexPath.row]) + } + + } +} + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/DemoListViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/DemoListViewController.swift new file mode 100644 index 0000000000..1322e488cb --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/DemoListViewController.swift @@ -0,0 +1,129 @@ +// +// DemoListViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit + +private struct ItemDef { + let title: String + let subtitle: String + let `class`: AnyClass +} + +class DemoListViewController: UIViewController { + + @IBOutlet var tableView: UITableView! + private var itemDefs = [ItemDef(title: "Line Chart", + subtitle: "A simple demonstration of the linechart.", + class: LineChart1ViewController.self), + ItemDef(title: "Line Chart (Dual YAxis)", + subtitle: "Demonstration of the linechart with dual y-axis.", + class: LineChart2ViewController.self), + ItemDef(title: "Bar Chart", + subtitle: "A simple demonstration of the bar chart.", + class: BarChartViewController.self), + ItemDef(title: "Horizontal Bar Chart", + subtitle: "A simple demonstration of the horizontal bar chart.", + class: HorizontalBarChartViewController.self), + ItemDef(title: "Combined Chart", + subtitle: "Demonstrates how to create a combined chart (bar and line in this case).", + class: CombinedChartViewController.self), + ItemDef(title: "Pie Chart", + subtitle: "A simple demonstration of the pie chart.", + class: PieChartViewController.self), + ItemDef(title: "Pie Chart with value lines", + subtitle: "A simple demonstration of the pie chart with polyline notes.", + class: PiePolylineChartViewController.self), + ItemDef(title: "Scatter Chart", + subtitle: "A simple demonstration of the scatter chart.", + class: ScatterChartViewController.self), + ItemDef(title: "Bubble Chart", + subtitle: "A simple demonstration of the bubble chart.", + class: BubbleChartViewController.self), + ItemDef(title: "Stacked Bar Chart", + subtitle: "A simple demonstration of a bar chart with stacked bars.", + class: StackedBarChartViewController.self), + ItemDef(title: "Stacked Bar Chart Negative", + subtitle: "A simple demonstration of stacked bars with negative and positive values.", + class: NegativeStackedBarChartViewController.self), + ItemDef(title: "Another Bar Chart", + subtitle: "Implementation of a BarChart that only shows values at the bottom.", + class: AnotherBarChartViewController.self), + ItemDef(title: "Multiple Lines Chart", + subtitle: "A line chart with multiple DataSet objects. One color per DataSet.", + class: MultipleLinesChartViewController.self), + ItemDef(title: "Multiple Bars Chart", + subtitle: "A bar chart with multiple DataSet objects. One multiple colors per DataSet.", + class: MultipleBarChartViewController.self), + ItemDef(title: "Candle Stick Chart", + subtitle: "Demonstrates usage of the CandleStickChart.", + class: CandleStickChartViewController.self), + ItemDef(title: "Cubic Line Chart", + subtitle: "Demonstrates cubic lines in a LineChart.", + class: CubicLineChartViewController.self), + ItemDef(title: "Radar Chart", + subtitle: "Demonstrates the use of a spider-web like (net) chart.", + class: RadarChartViewController.self), + ItemDef(title: "Colored Line Chart", + subtitle: "Shows a LineChart with different background and line color.", + class: ColoredLineChartViewController.self), + ItemDef(title: "Sinus Bar Chart", + subtitle: "A Bar Chart plotting the sinus function with 8.000 values.", + class: SinusBarChartViewController.self), + ItemDef(title: "BarChart positive / negative", + subtitle: "This demonstrates how to create a BarChart with positive and negative values in different colors.", + class: PositiveNegativeBarChartViewController.self), + ItemDef(title: "Time Line Chart", + subtitle: "Simple demonstration of a time-chart. This chart draws one line entry per hour originating from the current time in milliseconds.", + class: LineChartTimeViewController.self), + ItemDef(title: "Filled Line Chart", + subtitle: "This demonstrates how to fill an area between two LineDataSets.", + class: LineChartFilledViewController.self), + ItemDef(title: "Half Pie Chart", + subtitle: "This demonstrates how to create a 180 degree PieChart.", + class: HalfPieChartViewController.self) + ] + + override func viewDidLoad() { + super.viewDidLoad() + + self.title = "Charts Demonstration" + self.tableView.rowHeight = 70 + //FIXME: Add TimeLineChart + + } +} + +extension DemoListViewController: UITableViewDelegate, UITableViewDataSource { + func numberOfSections(in tableView: UITableView) -> Int { + return 1 + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return self.itemDefs.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let def = self.itemDefs[indexPath.row] + let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") ?? UITableViewCell(style: .subtitle, reuseIdentifier: "Cell") + cell.textLabel?.text = def.title + cell.detailTextLabel?.text = def.subtitle + cell.detailTextLabel?.numberOfLines = 0 + + return cell + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let def = self.itemDefs[indexPath.row] + + let vcClass = def.class as! UIViewController.Type + let vc = vcClass.init() + + self.navigationController?.pushViewController(vc, animated: true) + tableView.deselectRow(at: indexPath, animated: true) + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/DemoListViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/DemoListViewController.xib new file mode 100644 index 0000000000..40845c0a91 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/DemoListViewController.xib @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/AnotherBarChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/AnotherBarChartViewController.swift new file mode 100644 index 0000000000..8e84fa699c --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/AnotherBarChartViewController.swift @@ -0,0 +1,98 @@ +// +// AnotherBarChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class AnotherBarChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: BarChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.options = [.toggleValues, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleData, + .toggleBarBorders] + + chartView.delegate = self + + chartView.chartDescription?.isEnabled = false + chartView.maxVisibleCount = 60 + chartView.isPinchZoomEnabled = false + chartView.isDrawBarShadowEnabled = false + + let xAxis = chartView.xAxis + xAxis.labelPosition = .bottom + + chartView.legend.isEnabled = false + + sliderX.value = 10 + sliderY.value = 100 + self.slidersValueChanged(nil) + } + + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value) + 1, range: Double(sliderY.value)) + } + + func setDataCount(_ count: Int, range: Double) { + let yVals = (0.. BarChartDataEntry in + let mult = range + 1 + let val = Double(arc4random_uniform(UInt32(mult))) + mult/3 + return BarChartDataEntry(x: Double(i), y: val) + } + + var set1: BarChartDataSet! = nil + if let set = chartView.data?.dataSets.first as? BarChartDataSet { + set1 = set + set1?.values = yVals + chartView.data?.notifyDataChanged() + chartView.notifyDataSetChanged() + } else { + set1 = BarChartDataSet(values: yVals, label: "Data Set") + set1.colors = ChartColorTemplates.vordiplom + set1.isDrawValuesEnabled = false + + let data = BarChartData(dataSet: set1) + chartView.data = data + chartView.fitBars = true + } + + chartView.setNeedsDisplay() + } + + override func optionTapped(_ option: Option) { + super.handleOption(option, forChartView: chartView) + } + + // MARK: - Actions + @IBAction func slidersValueChanged(_ sender: Any?) { + sliderTextX.text = "\(Int(sliderX.value))" + sliderTextY.text = "\(Int(sliderY.value))" + + self.updateChartData() + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/AnotherBarChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/AnotherBarChartViewController.xib new file mode 100644 index 0000000000..330b30940b --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/AnotherBarChartViewController.xib @@ -0,0 +1,100 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BarChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BarChartViewController.swift new file mode 100644 index 0000000000..f2f9c38978 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BarChartViewController.swift @@ -0,0 +1,152 @@ +// +// BarChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class BarChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: BarChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Bar Chart" + + self.options = [.toggleValues, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleData, + .toggleBarBorders] + + self.setup(barLineChartView: chartView) + + chartView.delegate = self + + chartView.isDrawBarShadowEnabled = false + chartView.isDrawValueAboveBarEnabled = false + + chartView.maxVisibleCount = 60 + + let xAxis = chartView.xAxis + xAxis.labelPosition = .bottom + xAxis.labelFont = .systemFont(ofSize: 10) + xAxis.granularity = 1 + xAxis.labelCount = 7 + xAxis.valueFormatter = DayAxisValueFormatter(chart: chartView) + + let leftAxisFormatter = NumberFormatter() + leftAxisFormatter.minimumFractionDigits = 0 + leftAxisFormatter.maximumFractionDigits = 1 + leftAxisFormatter.negativeSuffix = " $" + leftAxisFormatter.positiveSuffix = " $" + + let leftAxis = chartView.leftAxis + leftAxis.labelFont = .systemFont(ofSize: 10) + leftAxis.labelCount = 8 + leftAxis.valueFormatter = DefaultAxisValueFormatter(formatter: leftAxisFormatter) + leftAxis.labelPosition = .outsideChart + leftAxis.spaceTop = 0.15 + leftAxis.axisMinimum = 0 // FIXME: HUH?? this replaces startAtZero = YES + + let rightAxis = chartView.rightAxis + rightAxis.isEnabled = true + rightAxis.labelFont = .systemFont(ofSize: 10) + rightAxis.labelCount = 8 + rightAxis.valueFormatter = leftAxis.valueFormatter + rightAxis.spaceTop = 0.15 + rightAxis.axisMinimum = 0 + + var l = chartView.legend + l.horizontalAlignment = .left + l.verticalAlignment = .bottom + l.orientation = .horizontal + l.drawInside = false + l.form = .circle + l.formSize = 9 + l.font = UIFont(name: "HelveticaNeue-Light", size: 11)! + l.xEntrySpace = 4 + chartView.legend = l + + let marker = XYMarkerView(color: UIColor(white: 180/250, alpha: 1), + font: .systemFont(ofSize: 12), + textColor: .white, + insets: UIEdgeInsets(top: 8, left: 8, bottom: 20, right: 8), + xAxisValueFormatter: chartView.xAxis.valueFormatter!) + marker.chartView = chartView + marker.minimumSize = CGSize(width: 80, height: 40) + chartView.marker = marker + + sliderX.value = 12 + sliderY.value = 50 + slidersValueChanged(nil) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value) + 1, range: UInt32(sliderY.value)) + } + + func setDataCount(_ count: Int, range: UInt32) { + let start = 1 + + let yVals = (start.. BarChartDataEntry in + let mult = range + 1 + let val = Double(arc4random_uniform(mult)) + if arc4random_uniform(100) < 25 { + return BarChartDataEntry(x: Double(i), y: val, icon: UIImage(named: "icon")) + } else { + return BarChartDataEntry(x: Double(i), y: val) + } + } + + var set1: BarChartDataSet! = nil + if let set = chartView.data?.dataSets.first as? BarChartDataSet { + set1 = set + set1.values = yVals + chartView.data?.notifyDataChanged() + chartView.notifyDataSetChanged() + } else { + set1 = BarChartDataSet(values: yVals, label: "The year 2017") + set1.colors = ChartColorTemplates.material + set1.isDrawValuesEnabled = false + + let data = BarChartData(dataSet: set1) + data.setValueFont(UIFont(name: "HelveticaNeue-Light", size: 10)!) + data.barWidth = 0.9 + chartView.data = data + } + +// chartView.setNeedsDisplay() + } + + override func optionTapped(_ option: Option) { + super.handleOption(option, forChartView: chartView) + } + + // MARK: - Actions + @IBAction func slidersValueChanged(_ sender: Any?) { + sliderTextX.text = "\(Int(sliderX.value + 2))" + sliderTextY.text = "\(Int(sliderY.value))" + + self.updateChartData() + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BarChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BarChartViewController.xib new file mode 100644 index 0000000000..1c769416b8 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BarChartViewController.xib @@ -0,0 +1,100 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BubbleChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BubbleChartViewController.swift new file mode 100644 index 0000000000..3df67ae068 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BubbleChartViewController.swift @@ -0,0 +1,127 @@ +// +// BubbleChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class BubbleChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: BubbleChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Bubble Chart" + self.options = [.toggleValues, + .toggleIcons, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleAutoScaleMinMax, + .toggleData] + + chartView.delegate = self + + chartView.chartDescription?.isEnabled = false + + chartView.isDragEnabled = false + chartView.setScaleEnabled(true) + chartView.maxVisibleCount = 200 + chartView.isPinchZoomEnabled = true + + chartView.legend.horizontalAlignment = .right + chartView.legend.verticalAlignment = .top + chartView.legend.orientation = .vertical + chartView.legend.drawInside = false + chartView.legend.font = UIFont(name: "HelveticaNeue-Light", size: 10)! + + chartView.leftAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size: 10)! + chartView.leftAxis.spaceTop = 0.3 + chartView.leftAxis.spaceBottom = 0.3 + chartView.leftAxis.axisMinimum = 0 + + chartView.rightAxis.isEnabled = false + + chartView.xAxis.labelPosition = .bottom + chartView.xAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size: 10)! + + sliderX.value = 10 + sliderY.value = 50 + slidersValueChanged(nil) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value), range: UInt32(sliderY.value)) + } + + func setDataCount(_ count: Int, range: UInt32) { + let yVals1 = (0.. BubbleChartDataEntry in + let val = Double(arc4random_uniform(range)) + let size = CGFloat(arc4random_uniform(range)) + return BubbleChartDataEntry(x: Double(i), y: val, size: size, icon: UIImage(named: "icon")) + } + let yVals2 = (0.. BubbleChartDataEntry in + let val = Double(arc4random_uniform(range)) + let size = CGFloat(arc4random_uniform(range)) + return BubbleChartDataEntry(x: Double(i), y: val, size: size, icon: UIImage(named: "icon")) + } + let yVals3 = (0.. BubbleChartDataEntry in + let val = Double(arc4random_uniform(range)) + let size = CGFloat(arc4random_uniform(range)) + return BubbleChartDataEntry(x: Double(i), y: val, size: size) + } + + let set1 = BubbleChartDataSet(values: yVals1, label: "DS 1") + set1.isDrawIconsEnabled = false + set1.setColor(ChartColorTemplates.colorful[0], alpha: 0.5) + set1.isDrawValuesEnabled = true + + let set2 = BubbleChartDataSet(values: yVals2, label: "DS 2") + set2.isDrawIconsEnabled = false + set2.iconsOffset = CGPoint(x: 0, y: 15) + set2.setColor(ChartColorTemplates.colorful[1], alpha: 0.5) + set2.isDrawValuesEnabled = true + + let set3 = BubbleChartDataSet(values: yVals3, label: "DS 3") + set3.setColor(ChartColorTemplates.colorful[2], alpha: 0.5) + set3.isDrawValuesEnabled = true + + let data = BubbleChartData(dataSets: [set1, set2, set3]) + data.setDrawValues(false) + data.setValueFont(UIFont(name: "HelveticaNeue-Light", size: 7)!) + data.setHighlightCircleWidth(1.5) + data.setValueTextColor(.white) + + chartView.data = data + } + + override func optionTapped(_ option: Option) { + super.handleOption(option, forChartView: chartView) + } + + // MARK: - Actions + @IBAction func slidersValueChanged(_ sender: Any?) { + sliderTextX.text = "\(Int(sliderX.value))" + sliderTextY.text = "\(Int(sliderY.value))" + + self.updateChartData() + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BubbleChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BubbleChartViewController.xib new file mode 100644 index 0000000000..f49a384cbe --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/BubbleChartViewController.xib @@ -0,0 +1,100 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CandleStickChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CandleStickChartViewController.swift new file mode 100644 index 0000000000..df04b90db1 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CandleStickChartViewController.swift @@ -0,0 +1,122 @@ +// +// CandleStickChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class CandleStickChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: CandleStickChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Bubble Chart" + self.options = [.toggleValues, + .toggleIcons, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleAutoScaleMinMax, + .toggleShadowColorSameAsCandle, + .toggleData] + + chartView.delegate = self + + chartView.chartDescription?.isEnabled = false + + chartView.isDragEnabled = false + chartView.setScaleEnabled(true) + chartView.maxVisibleCount = 200 + chartView.isPinchZoomEnabled = true + + chartView.legend.horizontalAlignment = .right + chartView.legend.verticalAlignment = .top + chartView.legend.orientation = .vertical + chartView.legend.drawInside = false + chartView.legend.font = UIFont(name: "HelveticaNeue-Light", size: 10)! + + chartView.leftAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size: 10)! + chartView.leftAxis.spaceTop = 0.3 + chartView.leftAxis.spaceBottom = 0.3 + chartView.leftAxis.axisMinimum = 0 + + chartView.rightAxis.isEnabled = false + + chartView.xAxis.labelPosition = .bottom + chartView.xAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size: 10)! + + sliderX.value = 10 + sliderY.value = 50 + slidersValueChanged(nil) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value), range: UInt32(sliderY.value)) + } + + func setDataCount(_ count: Int, range: UInt32) { + let yVals1 = (0.. CandleChartDataEntry in + let mult = range + 1 + let val = Double(arc4random_uniform(40) + mult) + let high = Double(arc4random_uniform(9) + 8) + let low = Double(arc4random_uniform(9) + 8) + let open = Double(arc4random_uniform(6) + 1) + let close = Double(arc4random_uniform(6) + 1) + let even = i % 2 == 0 + + return CandleChartDataEntry(x: Double(i), shadowH: val + high, shadowL: val - low, open: even ? val + open : val - open, close: even ? val - close : val + close, icon: UIImage(named: "icon")!) + } + + let set1 = CandleChartDataSet(values: yVals1, label: "Data Set") + set1.axisDependency = .left + set1.setColor(UIColor(white: 80/255, alpha: 1)) + set1.isDrawIconsEnabled = false + set1.shadowColor = .darkGray + set1.shadowWidth = 0.7 + set1.decreasingColor = .red + set1.decreasingFilled = true + set1.increasingColor = UIColor(red: 122/255, green: 242/255, blue: 84/255, alpha: 1) + set1.increasingFilled = false + set1.neutralColor = .blue + + let data = CandleChartData(dataSet: set1) + chartView.data = data + } + + override func optionTapped(_ option: Option) { + if .toggleShadowColorSameAsCandle ~= option { + for set in chartView.data!.dataSets as! [CandleChartDataSet] { + set.shadowColorSameAsCandle = !set.shadowColorSameAsCandle + } + chartView.notifyDataSetChanged() + } else { + super.handleOption(option, forChartView: chartView) + } + } + + // MARK: - Actions + @IBAction func slidersValueChanged(_ sender: Any?) { + sliderTextX.text = "\(Int(sliderX.value))" + sliderTextY.text = "\(Int(sliderY.value))" + + self.updateChartData() + }} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CandleStickChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CandleStickChartViewController.xib new file mode 100644 index 0000000000..598f366e54 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CandleStickChartViewController.xib @@ -0,0 +1,100 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ColoredLineChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ColoredLineChartViewController.swift new file mode 100644 index 0000000000..0c2e651594 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ColoredLineChartViewController.swift @@ -0,0 +1,77 @@ +// +// ColoredLineChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-04. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class ColoredLineChartViewController: DemoBaseViewController { + @IBOutlet var chartViews: [LineChartView]! + + override func viewDidLoad() { + super.viewDidLoad() + + self.title = "Colored Line Chart" + + let colors = [UIColor(red: 137/255, green: 230/255, blue: 81/255, alpha: 1), + UIColor(red: 240/255, green: 240/255, blue: 30/255, alpha: 1), + UIColor(red: 89/255, green: 199/255, blue: 250/255, alpha: 1), + UIColor(red: 250/255, green: 104/255, blue: 104/255, alpha: 1)] + + for (i, chartView) in chartViews.enumerated() { + let data = dataWithCount(36, range: 100) + data.setValueFont(UIFont(name: "HelveticaNeue", size: 7)!) + + setupChart(chartView, data: data, color: colors[i % colors.count]) + } + } + + func setupChart(_ chart: LineChartView, data: LineChartData, color: UIColor) { + (data.getDataSetByIndex(0) as! LineChartDataSet).circleHoleColor = color + + chart.delegate = self + chart.backgroundColor = color + + chart.chartDescription?.isEnabled = false + + chart.isDragEnabled = true + chart.setScaleEnabled(true) + chart.isPinchZoomEnabled = false + chart.setViewPortOffsets(left: 10, top: 0, right: 10, bottom: 0) + + chart.legend.isEnabled = false + + chart.leftAxis.isEnabled = false + chart.leftAxis.spaceTop = 0.4 + chart.leftAxis.spaceBottom = 0.4 + chart.rightAxis.isEnabled = false + chart.xAxis.isEnabled = false + + chart.data = data + + chart.animate(xAxisDuration: 2.5) + } + + func dataWithCount(_ count: Int, range: UInt32) -> LineChartData { + let yVals = (0.. ChartDataEntry in + let val = Double(arc4random_uniform(range)) + 3 + return ChartDataEntry(x: Double(i), y: val) + } + + let set1 = LineChartDataSet(values: yVals, label: "DataSet 1") + + set1.lineWidth = 1.75 + set1.circleRadius = 5.0 + set1.circleHoleRadius = 2.5 + set1.setColor(.white) + set1.setCircleColor(.white) + set1.highlightColor = .white + set1.isDrawValuesEnabled = false + + return LineChartData(dataSet: set1) + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ColoredLineChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ColoredLineChartViewController.xib new file mode 100644 index 0000000000..bb0f701ec3 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ColoredLineChartViewController.xib @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CombinedChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CombinedChartViewController.swift new file mode 100644 index 0000000000..b5c14ac68e --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CombinedChartViewController.swift @@ -0,0 +1,233 @@ +// +// CombinedChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +private let ITEM_COUNT = 12 + +class CombinedChartViewController: DemoBaseViewController { + @IBOutlet var chartView: CombinedChartView! + + let months = ["Jan", "Feb", "Mar", + "Apr", "May", "Jun", + "Jul", "Aug", "Sep", + "Oct", "Nov", "Dec"] + + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Combined Chart" + self.options = [.toggleLineValues, + .toggleBarValues, + .saveToGallery, + .toggleData, + .toggleBarBorders, + .removeDataSet] + + chartView.delegate = self + + chartView.chartDescription?.isEnabled = false + + chartView.isDrawBarShadowEnabled = false + chartView.isHighlightFullBarEnabled = false + + + chartView.drawOrder = [.bar, + .bubble, + .candle, + .line, + .scatter] + + var l = chartView.legend + l.wordWrapEnabled = true + l.horizontalAlignment = .center + l.verticalAlignment = .bottom + l.orientation = .horizontal + l.drawInside = false + chartView.legend = l + + let rightAxis = chartView.rightAxis + rightAxis.axisMinimum = 0 + + let leftAxis = chartView.leftAxis + leftAxis.axisMinimum = 0 + + let xAxis = chartView.xAxis + xAxis.labelPosition = .bothSided + xAxis.axisMinimum = 0 + xAxis.granularity = 1 + xAxis.valueFormatter = self + + self.updateChartData() + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setChartData() + } + + func setChartData() { + let data = CombinedChartData() + data.lineData = generateLineData() + data.barData = generateBarData() + data.bubbleData = generateBubbleData() + data.scatterData = generateScatterData() + data.candleData = generateCandleData() + + chartView.xAxis.axisMaximum = data.xMax + 0.25 + + chartView.data = data + } + + override func optionTapped(_ option: Option) { + switch option { + case .toggleLineValues: + for set in chartView.data!.dataSets { + if let set = set as? LineChartDataSet { + set.isDrawValuesEnabled = !set .isDrawValuesEnabled + + } + } + chartView.setNeedsDisplay() + + case .toggleBarValues: + for set in chartView.data!.dataSets { + if let set = set as? BarChartDataSet { + set.isDrawValuesEnabled = !set .isDrawValuesEnabled + } + } + chartView.setNeedsDisplay() + + case .removeDataSet: + let rnd = Int(arc4random_uniform(UInt32(chartView.data!.dataSetCount))) + chartView.data?.removeDataSet(chartView.data!.getDataSetByIndex(rnd)) + chartView.data?.notifyDataChanged() + chartView.notifyDataSetChanged() + + default: + super.handleOption(option, forChartView: chartView) + } + } + + func generateLineData() -> LineChartData { + let entries = (0.. ChartDataEntry in + return ChartDataEntry(x: Double(i) + 0.5, y: Double(arc4random_uniform(15) + 5)) + } + + let set = LineChartDataSet(values: entries, label: "Line DataSet") + set.setColor(UIColor(red: 240/255, green: 238/255, blue: 70/255, alpha: 1)) + set.lineWidth = 2.5 + set.setCircleColor(UIColor(red: 240/255, green: 238/255, blue: 70/255, alpha: 1)) + set.circleRadius = 5 + set.circleHoleRadius = 2.5 + set.fillColor = UIColor(red: 240/255, green: 238/255, blue: 70/255, alpha: 1) + set.mode = .cubicBezier + set.isDrawValuesEnabled = true + set.valueFont = .systemFont(ofSize: 10) + set.valueTextColor = UIColor(red: 240/255, green: 238/255, blue: 70/255, alpha: 1) + + set.axisDependency = .left + + return LineChartData(dataSet: set) + } + + func generateBarData() -> BarChartData { + let entries1 = (0.. BarChartDataEntry in + return BarChartDataEntry(x: 0, y: Double(arc4random_uniform(25) + 25)) + } + let entries2 = (0.. BarChartDataEntry in + return BarChartDataEntry(x: 0, yValues: [Double(arc4random_uniform(13) + 12), Double(arc4random_uniform(13) + 12)]) + } + + let set1 = BarChartDataSet(values: entries1, label: "Bar 1") + set1.setColor(UIColor(red: 60/255, green: 220/255, blue: 78/255, alpha: 1)) + set1.valueTextColor = UIColor(red: 60/255, green: 220/255, blue: 78/255, alpha: 1) + set1.valueFont = .systemFont(ofSize: 10) + set1.axisDependency = .left + + let set2 = BarChartDataSet(values: entries2, label: "") + set2.stackLabels = ["Stack 1", "Stack 2"] + set2.colors = [UIColor(red: 61/255, green: 165/255, blue: 255/255, alpha: 1), + UIColor(red: 23/255, green: 197/255, blue: 255/255, alpha: 1) + ] + set2.valueTextColor = UIColor(red: 61/255, green: 165/255, blue: 255/255, alpha: 1) + set2.valueFont = .systemFont(ofSize: 10) + set2.axisDependency = .left + + let groupSpace = 0.06 + let barSpace = 0.02 // x2 dataset + let barWidth = 0.45 // x2 dataset + // (0.45 + 0.02) * 2 + 0.06 = 1.00 -> interval per "group" + + let data = BarChartData(dataSets: [set1, set2]) + data.barWidth = barWidth + + // make this BarData object grouped + data.groupBars(fromX: 0, groupSpace: groupSpace, barSpace: barSpace) + + return data + } + + func generateScatterData() -> ScatterChartData { + let entries = stride(from: 0.0, to: Double(ITEM_COUNT), by: 0.5).map { (i) -> ChartDataEntry in + return ChartDataEntry(x: i+0.25, y: Double(arc4random_uniform(10) + 55)) + } + + let set = ScatterChartDataSet(values: entries, label: "Scatter DataSet") + set.colors = ChartColorTemplates.material + set.scatterShapeSize = 4.5 + set.isDrawValuesEnabled = false + set.valueFont = .systemFont(ofSize: 10) + + return ScatterChartData(dataSet: set) + } + + func generateCandleData() -> CandleChartData { + let entries = stride(from: 0, to: ITEM_COUNT, by: 2).map { (i) -> CandleChartDataEntry in + return CandleChartDataEntry(x: Double(i+1), shadowH: 90, shadowL: 70, open: 85, close: 75) + } + + let set = CandleChartDataSet(values: entries, label: "Candle DataSet") + set.setColor(UIColor(red: 80/255, green: 80/255, blue: 80/255, alpha: 1)) + set.decreasingColor = UIColor(red: 142/255, green: 150/255, blue: 175/255, alpha: 1) + set.shadowColor = .darkGray + set.valueFont = .systemFont(ofSize: 10) + set.isDrawValuesEnabled = false + + return CandleChartData(dataSet: set) + } + + func generateBubbleData() -> BubbleChartData { + let entries = (0.. BubbleChartDataEntry in + return BubbleChartDataEntry(x: Double(i) + 0.5, + y: Double(arc4random_uniform(10) + 105), + size: CGFloat(arc4random_uniform(50) + 105)) + } + + let set = BubbleChartDataSet(values: entries, label: "Bubble DataSet") + set.setColors(ChartColorTemplates.vordiplom) + set.valueTextColor = .white + set.valueFont = .systemFont(ofSize: 10) + set.isDrawValuesEnabled = true + + return BubbleChartData(dataSet: set) + } +} + +extension CombinedChartViewController: AxisValueFormatter { + func stringForValue(_ value: Double, axis: AxisBase) -> String { + return months[Int(value) % months.count] + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CombinedChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CombinedChartViewController.xib new file mode 100644 index 0000000000..6d4e1009b0 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CombinedChartViewController.xib @@ -0,0 +1,56 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CubicLineChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CubicLineChartViewController.swift new file mode 100644 index 0000000000..1018141ba6 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CubicLineChartViewController.swift @@ -0,0 +1,155 @@ +// +// CubicLineChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +private class CubicLineSampleFillFormatter: FillFormatter { + func getFillLinePosition(dataSet: LineChartDataSet, dataProvider: LineChartDataProvider) -> CGFloat { + return -10 + } +} + +class CubicLineChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: LineChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Cubic Line Chart" + + self.options = [.toggleValues, + .toggleFilled, + .toggleCircles, + .toggleCubic, + .toggleHorizontalCubic, + .toggleStepped, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleAutoScaleMinMax, + .toggleData] + + chartView.delegate = self + + chartView.setViewPortOffsets(left: 0, top: 20, right: 0, bottom: 0) + chartView.backgroundColor = UIColor(red: 104/255, green: 241/255, blue: 175/255, alpha: 1) + + chartView.isDragEnabled = true + chartView.setScaleEnabled(true) + chartView.isPinchZoomEnabled = false + chartView.maxHighlightDistance = 300 + + chartView.xAxis.isEnabled = false + + let yAxis = chartView.leftAxis + yAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size:12)! + yAxis.setLabelCount(6, force: false) + yAxis.labelTextColor = .white + yAxis.labelPosition = .insideChart + yAxis.axisLineColor = .white + + chartView.rightAxis.isEnabled = false + chartView.legend.isEnabled = false + + sliderX.value = 45 + sliderY.value = 100 + self.slidersValueChanged(nil) + + chartView.animate(xAxisDuration: 2, yAxisDuration: 2) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value + 1), range: UInt32(sliderY.value)) + } + + func setDataCount(_ count: Int, range: UInt32) { + let yVals1 = (0.. ChartDataEntry in + let mult = range + 1 + let val = Double(arc4random_uniform(mult) + 20) + return ChartDataEntry(x: Double(i), y: val) + } + + let set1 = LineChartDataSet(values: yVals1, label: "DataSet 1") + set1.mode = .cubicBezier + set1.isDrawCirclesEnabled = false + set1.lineWidth = 1.8 + set1.circleRadius = 4 + set1.setCircleColor(.white) + set1.highlightColor = UIColor(red: 244/255, green: 117/255, blue: 117/255, alpha: 1) + set1.fillColor = .white + set1.fillAlpha = 1 + set1.isHorizontalHighlightIndicatorEnabled = false + set1.fillFormatter = CubicLineSampleFillFormatter() + + let data = LineChartData(dataSet: set1) + data.setValueFont(UIFont(name: "HelveticaNeue-Light", size: 9)!) + data.setDrawValues(false) + + chartView.data = data + } + + override func optionTapped(_ option: Option) { + switch option { + case .toggleFilled: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.isDrawFilledEnabled = !set.isDrawFilledEnabled + } + chartView.setNeedsDisplay() + + case .toggleCircles: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.isDrawCirclesEnabled = !set.isDrawCirclesEnabled + } + chartView.setNeedsDisplay() + + case .toggleCubic: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.mode = (set.mode == .cubicBezier) ? .linear : .cubicBezier + } + chartView.setNeedsDisplay() + + case .toggleStepped: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.mode = (set.mode == .stepped) ? .linear : .stepped + } + chartView.setNeedsDisplay() + + case .toggleHorizontalCubic: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.mode = (set.mode == .cubicBezier) ? .horizontalBezier : .cubicBezier + } + chartView.setNeedsDisplay() + + default: + super.handleOption(option, forChartView: chartView) + } + } + + // MARK: - Actions + @IBAction func slidersValueChanged(_ sender: Any?) { + sliderTextX.text = "\(Int(sliderX.value))" + sliderTextY.text = "\(Int(sliderY.value))" + + self.updateChartData() + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CubicLineChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CubicLineChartViewController.xib new file mode 100644 index 0000000000..debfd87e93 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/CubicLineChartViewController.xib @@ -0,0 +1,100 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HalfPieChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HalfPieChartViewController.swift new file mode 100644 index 0000000000..e203833273 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HalfPieChartViewController.swift @@ -0,0 +1,142 @@ +// +// HalfPieChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class HalfPieChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: PieChartView! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Half Pie Bar Chart" + + self.options = [.toggleValues, + .toggleXValues, + .togglePercent, + .toggleHole, + .animateX, + .animateY, + .animateXY, + .spin, + .drawCenter, + .saveToGallery, + .toggleData] + + self.setup(pieChartView: chartView) + + chartView.delegate = self + + chartView.holeColor = .white + chartView.transparentCircleColor = Color.white.withAlphaComponent(0.43) + chartView.holeRadiusPercent = 0.58 + chartView.isRotationEnabled = false + chartView.isHighlightPerTapEnabled = true + + chartView.maxAngle = 180 // Half chart + chartView.rotationAngle = 180 // Rotate to make the half on the upper side + chartView.centerTextOffset = CGPoint(x: 0, y: -20) + + var l = chartView.legend + l.horizontalAlignment = .center + l.verticalAlignment = .top + l.orientation = .horizontal + l.drawInside = false + l.xEntrySpace = 7 + l.yEntrySpace = 0 + l.yOffset = 0 + chartView.legend = l + + // entry label styling + chartView.entryLabelColor = .white + chartView.entryLabelFont = UIFont(name:"HelveticaNeue-Light", size:12)! + + self.updateChartData() + + chartView.animate(xAxisDuration: 1.4, easingOption: .easeOutBack) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(4, range: 100) + } + + func setDataCount(_ count: Int, range: UInt32) { + let entries = (0.. PieChartDataEntry in + // IMPORTANT: In a PieChart, no values (Entry) should have the same xIndex (even if from different DataSets), since no values can be drawn above each other. + return PieChartDataEntry(value: Double(arc4random_uniform(range) + range / 5), + label: parties[i % parties.count]) + } + + let set = PieChartDataSet(values: entries, label: "Election Results") + set.sliceSpace = 3 + set.selectionShift = 5 + set.colors = ChartColorTemplates.material + + let data = PieChartData(dataSet: set) + + let pFormatter = NumberFormatter() + pFormatter.numberStyle = .percent + pFormatter.maximumFractionDigits = 1 + pFormatter.multiplier = 1 + pFormatter.percentSymbol = " %" + data.setValueFormatter(DefaultValueFormatter(formatter: pFormatter)) + + data.setValueFont(UIFont(name: "HelveticaNeue-Light", size: 11)!) + data.setValueTextColor(.white) + + chartView.data = data + + chartView.setNeedsDisplay() + } + + override func optionTapped(_ option: Option) { + switch option { + case .toggleXValues: + chartView.isDrawEntryLabelsEnabled = !chartView.isDrawEntryLabelsEnabled + chartView.setNeedsDisplay() + + case .togglePercent: + chartView.usePercentValues = !chartView.usePercentValues + chartView.setNeedsDisplay() + + case .toggleHole: + chartView.isDrawHoleEnabled = !chartView.isDrawHoleEnabled + chartView.setNeedsDisplay() + + case .drawCenter: + chartView.isDrawCenterTextEnabled = !chartView.isDrawCenterTextEnabled + chartView.setNeedsDisplay() + + case .animateX: + chartView.animate(xAxisDuration: 1.4) + + case .animateY: + chartView.animate(yAxisDuration: 1.4) + + case .animateXY: + chartView.animate(xAxisDuration: 1.4, yAxisDuration: 1.4) + + case .spin: + chartView.spin(duration: 2, + fromAngle: chartView.rotationAngle, + toAngle: chartView.rotationAngle + 360, + easingOption: .easeInCubic) + + default: + handleOption(option, forChartView: chartView) + } + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HalfPieChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HalfPieChartViewController.xib new file mode 100644 index 0000000000..d757d173bf --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HalfPieChartViewController.xib @@ -0,0 +1,56 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HorizontalBarChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HorizontalBarChartViewController.swift new file mode 100644 index 0000000000..896b655a57 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HorizontalBarChartViewController.swift @@ -0,0 +1,124 @@ +// +// HorizontalBarChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class HorizontalBarChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: HorizontalBarChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Horizontal Bar Char" + self.options = [.toggleValues, + .toggleIcons, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleAutoScaleMinMax, + .toggleData, + .toggleBarBorders] + + self.setup(barLineChartView: chartView) + + chartView.delegate = self + + chartView.isDrawBarShadowEnabled = false + chartView.isDrawValueAboveBarEnabled = true + + chartView.maxVisibleCount = 60 + + let xAxis = chartView.xAxis + xAxis.labelPosition = .bottom + xAxis.labelFont = .systemFont(ofSize: 10) + xAxis.isDrawAxisLineEnabled = true + xAxis.granularity = 10 + + let leftAxis = chartView.leftAxis + leftAxis.labelFont = .systemFont(ofSize: 10) + leftAxis.isDrawAxisLineEnabled = true + leftAxis.isDrawGridLinesEnabled = true + leftAxis.axisMinimum = 0 + + let rightAxis = chartView.rightAxis + rightAxis.isEnabled = true + rightAxis.labelFont = .systemFont(ofSize: 10) + rightAxis.isDrawAxisLineEnabled = true + rightAxis.axisMinimum = 0 + + var l = chartView.legend + l.horizontalAlignment = .left + l.verticalAlignment = .bottom + l.orientation = .horizontal + l.drawInside = false + l.form = .square + l.formSize = 8 + l.font = UIFont(name: "HelveticaNeue-Light", size: 11)! + l.xEntrySpace = 4 + chartView.legend = l + + chartView.fitBars = true + + sliderX.value = 12 + sliderY.value = 50 + slidersValueChanged(nil) + + chartView.animate(yAxisDuration: 2.5) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value) + 1, range: UInt32(sliderY.value)) + } + + func setDataCount(_ count: Int, range: UInt32) { + let barWidth = 9.0 + let spaceForBar = 10.0 + + let yVals = (0.. BarChartDataEntry in + let mult = range + 1 + let val = Double(arc4random_uniform(mult)) + return BarChartDataEntry(x: Double(i)*spaceForBar, y: val, icon: #imageLiteral(resourceName: "icon")) + } + + let set1 = BarChartDataSet(values: yVals, label: "DataSet") + set1.isDrawIconsEnabled = false + + let data = BarChartData(dataSet: set1) + data.setValueFont(UIFont(name:"HelveticaNeue-Light", size:10)!) + data.barWidth = barWidth + + chartView.data = data + } + + override func optionTapped(_ option: Option) { + super.handleOption(option, forChartView: chartView) + } + + // MARK: - Actions + @IBAction func slidersValueChanged(_ sender: Any?) { + sliderTextX.text = "\(Int(sliderX.value))" + sliderTextY.text = "\(Int(sliderY.value))" + + self.updateChartData() + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HorizontalBarChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HorizontalBarChartViewController.xib new file mode 100644 index 0000000000..19560cd484 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/HorizontalBarChartViewController.xib @@ -0,0 +1,100 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart1ViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart1ViewController.swift new file mode 100644 index 0000000000..8681cd099d --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart1ViewController.swift @@ -0,0 +1,187 @@ +// +// LineChart1ViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class LineChart1ViewController: DemoBaseViewController { + + @IBOutlet var chartView: LineChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Line Chart 1" + self.options = [.toggleValues, + .toggleFilled, + .toggleCircles, + .toggleCubic, + .toggleHorizontalCubic, + .toggleIcons, + .toggleStepped, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleAutoScaleMinMax, + .toggleData] + + chartView.delegate = self + + chartView.chartDescription?.isEnabled = false + chartView.isDragEnabled = true + chartView.setScaleEnabled(true) + chartView.isPinchZoomEnabled = true + + // x-axis limit line + let llXAxis = ChartLimitLine(limit: 10, label: "Index 10") + llXAxis.lineWidth = 4 + llXAxis.lineDashLengths = [10, 10, 0] + llXAxis.labelPosition = .rightBottom + llXAxis.valueFont = .systemFont(ofSize: 10) + + chartView.xAxis.gridLineDashLengths = [10, 10] + chartView.xAxis.gridLineDashPhase = 0 + + let ll1 = ChartLimitLine(limit: 150, label: "Upper Limit") + ll1.lineWidth = 4 + ll1.lineDashLengths = [5, 5] + ll1.labelPosition = .rightTop + ll1.valueFont = .systemFont(ofSize: 10) + + let ll2 = ChartLimitLine(limit: -30, label: "Lower Limit") + ll2.lineWidth = 4 + ll2.lineDashLengths = [5,5] + ll2.labelPosition = .rightBottom + ll2.valueFont = .systemFont(ofSize: 10) + + let leftAxis = chartView.leftAxis + leftAxis.removeAllLimitLines() + leftAxis.addLimitLine(ll1) + leftAxis.addLimitLine(ll2) + leftAxis.axisMaximum = 200 + leftAxis.axisMinimum = -50 + leftAxis.gridLineDashLengths = [5, 5] + leftAxis.isDrawLimitLinesBehindDataEnabled = true + + chartView.rightAxis.isEnabled = false + + //[_chartView.viewPortHandler setMaximumScaleY: 2.f]; + //[_chartView.viewPortHandler setMaximumScaleX: 2.f]; + + let marker = BalloonMarker(color: UIColor(white: 180/255, alpha: 1), + font: .systemFont(ofSize: 12), + textColor: .white, + insets: UIEdgeInsets(top: 8, left: 8, bottom: 20, right: 8)) + marker.chartView = chartView + marker.minimumSize = CGSize(width: 80, height: 40) + chartView.marker = marker + + chartView.legend.form = .line + + sliderX.value = 45 + sliderY.value = 100 + slidersValueChanged(nil) + + chartView.animate(xAxisDuration: 2.5) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value), range: UInt32(sliderY.value)) + } + + func setDataCount(_ count: Int, range: UInt32) { + let values = (0.. ChartDataEntry in + let val = Double(arc4random_uniform(range) + 3) + return ChartDataEntry(x: Double(i), y: val, icon: #imageLiteral(resourceName: "icon")) + } + + let set1 = LineChartDataSet(values: values, label: "DataSet 1") + set1.isDrawIconsEnabled = false + + set1.lineDashLengths = [5, 2.5] + set1.highlightLineDashLengths = [5, 2.5] + set1.setColor(.black) + set1.setCircleColor(.black) + set1.lineWidth = 1 + set1.circleRadius = 3 + set1.isDrawCircleHoleEnabled = false + set1.valueFont = .systemFont(ofSize: 9) + set1.formLineDashLengths = [5, 2.5] + set1.formLineWidth = 1 + set1.formLineWidth = 15 + + let gradientColors = [Color(string: "#00ff0000").cgColor, + Color(string: "#ffff0000").cgColor] as CFArray + let gradient = CGGradient(colorsSpace: nil, colors: gradientColors, locations: nil)! + + set1.fillAlpha = 1 + set1.fill = .linearGradient(gradient, angle: 90) + set1.isDrawFilledEnabled = true + + let data = LineChartData(dataSet: set1) + + chartView.data = data + } + + override func optionTapped(_ option: Option) { + switch option { + case .toggleFilled: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.isDrawFilledEnabled = !set.isDrawFilledEnabled + } + chartView.setNeedsDisplay() + + case .toggleCircles: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.isDrawCirclesEnabled = !set.isDrawCirclesEnabled + } + chartView.setNeedsDisplay() + + case .toggleCubic: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.mode = (set.mode == .cubicBezier) ? .linear : .cubicBezier + } + chartView.setNeedsDisplay() + + case .toggleStepped: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.mode = (set.mode == .stepped) ? .linear : .stepped + } + chartView.setNeedsDisplay() + + case .toggleHorizontalCubic: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.mode = (set.mode == .cubicBezier) ? .horizontalBezier : .cubicBezier + } + chartView.setNeedsDisplay() + + default: + super.handleOption(option, forChartView: chartView) + } + } + + @IBAction func slidersValueChanged(_ sender: Any?) { + sliderTextX.text = "\(Int(sliderX.value))" + sliderTextY.text = "\(Int(sliderY.value))" + + self.updateChartData() + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart1ViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart1ViewController.xib new file mode 100644 index 0000000000..274c26069c --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart1ViewController.xib @@ -0,0 +1,100 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart2ViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart2ViewController.swift new file mode 100644 index 0000000000..8f9206e173 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart2ViewController.swift @@ -0,0 +1,200 @@ +// +// LineChart2ViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class LineChart2ViewController: DemoBaseViewController { + + @IBOutlet var chartView: LineChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Line Chart 2" + self.options = [.toggleValues, + .toggleFilled, + .toggleCircles, + .toggleCubic, + .toggleHorizontalCubic, + .toggleStepped, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleAutoScaleMinMax, + .toggleData] + + chartView.delegate = self + + chartView.chartDescription?.isEnabled = false + chartView.isDragEnabled = true + chartView.setScaleEnabled(true) + chartView.isPinchZoomEnabled = true + + var l = chartView.legend + l.form = .line + l.font = UIFont(name: "HelveticaNeue-Light", size: 11)! + l.textColor = .white + l.horizontalAlignment = .left + l.verticalAlignment = .bottom + l.orientation = .horizontal + l.drawInside = false + + let xAxis = chartView.xAxis + xAxis.labelFont = .systemFont(ofSize: 11) + xAxis.labelTextColor = .white + xAxis.isDrawAxisLineEnabled = false + + let leftAxis = chartView.leftAxis + leftAxis.labelTextColor = UIColor(red: 51/255, green: 181/255, blue: 229/255, alpha: 1) + leftAxis.axisMaximum = 200 + leftAxis.axisMinimum = 0 + leftAxis.isDrawGridLinesEnabled = true + leftAxis.isGranularityEnabled = true + + let rightAxis = chartView.rightAxis + rightAxis.labelTextColor = .red + rightAxis.axisMaximum = 900 + rightAxis.axisMinimum = -200 + rightAxis.isGranularityEnabled = false + + sliderX.value = 20 + sliderY.value = 30 + slidersValueChanged(nil) + + chartView.animate(xAxisDuration: 2.5) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value + 1), range: UInt32(sliderY.value)) + } + + func setDataCount(_ count: Int, range: UInt32) { + let yVals1 = (0.. ChartDataEntry in + let mult = range / 2 + let val = Double(arc4random_uniform(mult) + 50) + return ChartDataEntry(x: Double(i), y: val) + } + let yVals2 = (0.. ChartDataEntry in + let val = Double(arc4random_uniform(range) + 450) + return ChartDataEntry(x: Double(i), y: val) + } + let yVals3 = (0.. ChartDataEntry in + let val = Double(arc4random_uniform(range) + 500) + return ChartDataEntry(x: Double(i), y: val) + } + + let set1 = LineChartDataSet(values: yVals1, label: "DataSet 1") + set1.axisDependency = .left + set1.setColor(UIColor(red: 51/255, green: 181/255, blue: 229/255, alpha: 1)) + set1.setCircleColor(.white) + set1.lineWidth = 2 + set1.circleRadius = 3 + set1.fillAlpha = 65/255 + set1.fillColor = UIColor(red: 51/255, green: 181/255, blue: 229/255, alpha: 1) + set1.highlightColor = UIColor(red: 244/255, green: 117/255, blue: 117/255, alpha: 1) + set1.isDrawCircleHoleEnabled = false + + let set2 = LineChartDataSet(values: yVals2, label: "DataSet 2") + set2.axisDependency = .right + set2.setColor(.red) + set2.setCircleColor(.white) + set2.lineWidth = 2 + set2.circleRadius = 3 + set2.fillAlpha = 65/255 + set2.fillColor = .red + set2.highlightColor = UIColor(red: 244/255, green: 117/255, blue: 117/255, alpha: 1) + set2.isDrawCircleHoleEnabled = false + + let set3 = LineChartDataSet(values: yVals3, label: "DataSet 3") + set3.axisDependency = .right + set3.setColor(.yellow) + set3.setCircleColor(.white) + set3.lineWidth = 2 + set3.circleRadius = 3 + set3.fillAlpha = 65/255 + set3.fillColor = UIColor.yellow.withAlphaComponent(200/255) + set3.highlightColor = UIColor(red: 244/255, green: 117/255, blue: 117/255, alpha: 1) + set3.isDrawCircleHoleEnabled = false + + let data = LineChartData(dataSets: [set1, set2, set3]) + data.setValueTextColor(.white) + data.setValueFont(.systemFont(ofSize: 9)) + + chartView.data = data + } + + override func optionTapped(_ option: Option) { + switch option { + case .toggleFilled: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.isDrawFilledEnabled = !set.isDrawFilledEnabled + } + chartView.setNeedsDisplay() + + case .toggleCircles: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.isDrawCirclesEnabled = !set.isDrawCirclesEnabled + } + chartView.setNeedsDisplay() + + case .toggleCubic: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.mode = (set.mode == .cubicBezier) ? .linear : .cubicBezier + } + chartView.setNeedsDisplay() + + case .toggleStepped: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.mode = (set.mode == .stepped) ? .linear : .stepped + } + chartView.setNeedsDisplay() + + case .toggleHorizontalCubic: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.mode = (set.mode == .cubicBezier) ? .horizontalBezier : .cubicBezier + } + chartView.setNeedsDisplay() + + default: + super.handleOption(option, forChartView: chartView) + } + } + + @IBAction func slidersValueChanged(_ sender: Any?) { + sliderTextX.text = "\(Int(sliderX.value))" + sliderTextY.text = "\(Int(sliderY.value))" + + self.updateChartData() + } +//} + // TODO: Declarations in extensions cannot override yet. +//extension LineChart2ViewController { + override func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) { + super.chartValueSelected(chartView, entry: entry, highlight: highlight) + + self.chartView.centerViewToAnimated(xValue: entry.x, yValue: entry.y, + axis: self.chartView.data!.getDataSetByIndex(highlight.dataSetIndex).axisDependency, + duration: 1) + //[_chartView moveViewToAnimatedWithXValue:entry.x yValue:entry.y axis:[_chartView.data getDataSetByIndex:dataSetIndex].axisDependency duration:1.0]; + //[_chartView zoomAndCenterViewAnimatedWithScaleX:1.8 scaleY:1.8 xValue:entry.x yValue:entry.y axis:[_chartView.data getDataSetByIndex:dataSetIndex].axisDependency duration:1.0]; + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart2ViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart2ViewController.xib new file mode 100644 index 0000000000..08ccd86308 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChart2ViewController.xib @@ -0,0 +1,100 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartFilledViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartFilledViewController.swift new file mode 100644 index 0000000000..01f87f69cb --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartFilledViewController.swift @@ -0,0 +1,117 @@ +// +// LineChartFilledViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class LineChartFilledViewController: DemoBaseViewController { + + @IBOutlet var chartView: LineChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Filled Line Chart" + + chartView.delegate = self + + chartView.backgroundColor = .white + chartView.gridBackgroundColor = UIColor(red: 51/255, green: 181/255, blue: 229/255, alpha: 150/255) + chartView.isDrawGridBackgroundEnabled = true + + chartView.isDrawBordersEnabled = true + + chartView.chartDescription?.isEnabled = false + + chartView.isPinchZoomEnabled = false + chartView.isDragEnabled = true + chartView.setScaleEnabled(true) + + chartView.legend.isEnabled = false + + chartView.xAxis.isEnabled = false + + let leftAxis = chartView.leftAxis + leftAxis.axisMaximum = 900 + leftAxis.axisMinimum = -250 + leftAxis.isDrawAxisLineEnabled = false + + chartView.rightAxis.isEnabled = false + + sliderX.value = 100 + sliderY.value = 60 + slidersValueChanged(nil) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value), range: UInt32(sliderY.value)) + } + + func setDataCount(_ count: Int, range: UInt32) { + let yVals1 = (0.. ChartDataEntry in + let val = Double(arc4random_uniform(range) + 50) + return ChartDataEntry(x: Double(i), y: val) + } + let yVals2 = (0.. ChartDataEntry in + let val = Double(arc4random_uniform(range) + 450) + return ChartDataEntry(x: Double(i), y: val) + } + + let set1 = LineChartDataSet(values: yVals1, label: "DataSet 1") + set1.axisDependency = .left + set1.setColor(UIColor(red: 255/255, green: 241/255, blue: 46/255, alpha: 1)) + set1.isDrawCirclesEnabled = false + set1.lineWidth = 2 + set1.circleRadius = 3 + set1.fillAlpha = 1 + set1.isDrawFilledEnabled = true + set1.fillColor = .white + set1.highlightColor = UIColor(red: 244/255, green: 117/255, blue: 117/255, alpha: 1) + set1.isDrawCircleHoleEnabled = false + set1.fillFormatter = DefaultFillFormatter { _,_ -> CGFloat in + return CGFloat(self.chartView.leftAxis.axisMinimum) + } + + let set2 = LineChartDataSet(values: yVals2, label: "DataSet 2") + set2.axisDependency = .left + set2.setColor(UIColor(red: 255/255, green: 241/255, blue: 46/255, alpha: 1)) + set2.isDrawCirclesEnabled = false + set2.lineWidth = 2 + set2.circleRadius = 3 + set2.fillAlpha = 1 + set2.isDrawFilledEnabled = true + set2.fillColor = .white + set2.highlightColor = UIColor(red: 244/255, green: 117/255, blue: 117/255, alpha: 1) + set2.isDrawCircleHoleEnabled = false + set2.fillFormatter = DefaultFillFormatter { _,_ -> CGFloat in + return CGFloat(self.chartView.leftAxis.axisMaximum) + } + + let data = LineChartData(dataSets: [set1, set2]) + data.setDrawValues(false) + + chartView.data = data + } + + @IBAction func slidersValueChanged(_ sender: Any?) { + sliderTextX.text = "\(Int(sliderX.value))" + sliderTextY.text = "\(Int(sliderY.value))" + + self.updateChartData() + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartFilledViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartFilledViewController.xib new file mode 100644 index 0000000000..08c6253a69 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartFilledViewController.xib @@ -0,0 +1,86 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartTimeViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartTimeViewController.swift new file mode 100644 index 0000000000..e41761ec9b --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartTimeViewController.swift @@ -0,0 +1,161 @@ +// +// LineChartTimeViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class LineChartTimeViewController: DemoBaseViewController { + @IBOutlet var chartView: LineChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderTextX: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Line Chart 2" + self.options = [.toggleValues, + .toggleFilled, + .toggleCircles, + .toggleCubic, + .toggleHorizontalCubic, + .toggleStepped, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleAutoScaleMinMax, + .toggleData] + + chartView.delegate = self + + chartView.chartDescription?.isEnabled = false + + chartView.isDragEnabled = true + chartView.setScaleEnabled(true) + chartView.isPinchZoomEnabled = false + chartView.isHighlightPerDragEnabled = true + + chartView.backgroundColor = .white + + chartView.legend.isEnabled = false + + let xAxis = chartView.xAxis + xAxis.labelPosition = .topInside + xAxis.labelFont = .systemFont(ofSize: 10, weight: .light) + xAxis.labelTextColor = UIColor(red: 255/255, green: 192/255, blue: 56/255, alpha: 1) + xAxis.isDrawAxisLineEnabled = false + xAxis.isDrawGridLinesEnabled = true + xAxis.isCenterAxisLabelsEnabled = true + xAxis.granularity = 3600 + xAxis.valueFormatter = DateValueFormatter() + + let leftAxis = chartView.leftAxis + leftAxis.labelPosition = .insideChart + leftAxis.labelFont = .systemFont(ofSize: 12, weight: .light) + leftAxis.isDrawGridLinesEnabled = true + leftAxis.isGranularityEnabled = true + leftAxis.axisMinimum = 0 + leftAxis.axisMaximum = 170 + leftAxis.yOffset = -9 + leftAxis.labelTextColor = UIColor(red: 255/255, green: 192/255, blue: 56/255, alpha: 1) + + + chartView.rightAxis.isEnabled = false + + chartView.legend.form = .line + + sliderX.value = 100 + slidersValueChanged(nil) + + chartView.animate(xAxisDuration: 2.5) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value), range: 30) + } + + func setDataCount(_ count: Int, range: UInt32) { + let now = Date().timeIntervalSince1970 + let hourSeconds: TimeInterval = 3600 + + let from = now - (Double(count) / 2) * hourSeconds + let to = now + (Double(count) / 2) * hourSeconds + + let values = stride(from: from, to: to, by: hourSeconds).map { (x) -> ChartDataEntry in + let y = arc4random_uniform(range) + 50 + return ChartDataEntry(x: x, y: Double(y)) + } + + let set1 = LineChartDataSet(values: values, label: "DataSet 1") + set1.axisDependency = .left + set1.setColor(UIColor(red: 51/255, green: 181/255, blue: 229/255, alpha: 1)) + set1.lineWidth = 1.5 + set1.isDrawCirclesEnabled = false + set1.isDrawValuesEnabled = false + set1.fillAlpha = 0.26 + set1.fillColor = UIColor(red: 51/255, green: 181/255, blue: 229/255, alpha: 1) + set1.highlightColor = UIColor(red: 244/255, green: 117/255, blue: 117/255, alpha: 1) + set1.isDrawCircleHoleEnabled = false + + let data = LineChartData(dataSet: set1) + data.setValueTextColor(.white) + data.setValueFont(.systemFont(ofSize: 9, weight: .light)) + + chartView.data = data + } + + override func optionTapped(_ option: Option) { + switch option { + case .toggleFilled: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.isDrawFilledEnabled = !set.isDrawFilledEnabled + } + chartView.setNeedsDisplay() + + case .toggleCircles: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.isDrawCirclesEnabled = !set.isDrawCirclesEnabled + } + chartView.setNeedsDisplay() + + case .toggleCubic: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.mode = (set.mode == .cubicBezier) ? .linear : .cubicBezier + } + chartView.setNeedsDisplay() + + case .toggleStepped: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.mode = (set.mode == .stepped) ? .linear : .stepped + } + chartView.setNeedsDisplay() + + case .toggleHorizontalCubic: + for set in chartView.data!.dataSets as! [LineChartDataSet] { + set.mode = (set.mode == .cubicBezier) ? .horizontalBezier : .cubicBezier + } + chartView.setNeedsDisplay() + + default: + super.handleOption(option, forChartView: chartView) + } + } + + @IBAction func slidersValueChanged(_ sender: Any?) { + sliderTextX.text = "\(Int(sliderX.value))" + self.updateChartData() + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartTimeViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartTimeViewController.xib new file mode 100644 index 0000000000..f4daf06a19 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/LineChartTimeViewController.xib @@ -0,0 +1,78 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/MultipleBarChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/MultipleBarChartViewController.swift new file mode 100644 index 0000000000..2e9b3ad992 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/MultipleBarChartViewController.swift @@ -0,0 +1,154 @@ +// +// MultipleBarChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class MultipleBarChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: BarChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Multiple Bar Chart" + + self.options = [.toggleValues, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleAutoScaleMinMax, + .toggleData, + .toggleBarBorders] + + chartView.delegate = self + + chartView.chartDescription?.isEnabled = false + + chartView.isPinchZoomEnabled = false + chartView.isDrawBarShadowEnabled = false + + let marker = BalloonMarker(color: UIColor(white: 180/255, alpha: 1), font: .systemFont(ofSize: 12), textColor: .white, insets: UIEdgeInsets(top: 8, left: 8, bottom: 20, right: 8)) + marker.chartView = chartView + marker.minimumSize = CGSize(width: 80, height: 40) + chartView.marker = marker + + var l = chartView.legend + l.horizontalAlignment = .right + l.verticalAlignment = .top + l.orientation = .vertical + l.drawInside = true + l.font = .systemFont(ofSize: 8, weight: .light) + l.yOffset = 10 + l.xOffset = 10 + l.yEntrySpace = 0 + chartView.legend = l + + let xAxis = chartView.xAxis + xAxis.labelFont = .systemFont(ofSize: 10, weight: .light) + xAxis.granularity = 1 + xAxis.isCenterAxisLabelsEnabled = true + xAxis.valueFormatter = IntAxisValueFormatter() + + let leftAxisFormatter = NumberFormatter() + leftAxisFormatter.maximumFractionDigits = 1 + + let leftAxis = chartView.leftAxis + leftAxis.labelFont = .systemFont(ofSize: 10, weight: .light) + leftAxis.valueFormatter = LargeValueFormatter() + leftAxis.spaceTop = 0.35 + leftAxis.axisMinimum = 0 + + chartView.rightAxis.isEnabled = false + + sliderX.value = 10 + sliderY.value = 100 + slidersValueChanged(nil) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value), range: UInt32(sliderY.value)) + } + + func setDataCount(_ count: Int, range: UInt32) { + let groupSpace = 0.08 + let barSpace = 0.03 + let barWidth = 0.2 + // (0.2 + 0.03) * 4 + 0.08 = 1.00 -> interval per "group" + + let randomMultiplier = range * 100000 + let groupCount = count + 1 + let startYear = 1980 + let endYear = startYear + groupCount + + let block: (Int) -> BarChartDataEntry = { (i) -> BarChartDataEntry in + return BarChartDataEntry(x: Double(i), y: Double(arc4random_uniform(randomMultiplier))) + } + let yVals1 = (startYear ..< endYear).map(block) + let yVals2 = (startYear ..< endYear).map(block) + let yVals3 = (startYear ..< endYear).map(block) + let yVals4 = (startYear ..< endYear).map(block) + + let set1 = BarChartDataSet(values: yVals1, label: "Company A") + set1.setColor(UIColor(red: 104/255, green: 241/255, blue: 175/255, alpha: 1)) + + let set2 = BarChartDataSet(values: yVals2, label: "Company B") + set2.setColor(UIColor(red: 164/255, green: 228/255, blue: 251/255, alpha: 1)) + + let set3 = BarChartDataSet(values: yVals3, label: "Company C") + set3.setColor(UIColor(red: 242/255, green: 247/255, blue: 158/255, alpha: 1)) + + let set4 = BarChartDataSet(values: yVals4, label: "Company D") + set4.setColor(UIColor(red: 255/255, green: 102/255, blue: 0/255, alpha: 1)) + + let data = BarChartData(dataSets: [set1, set2, set3, set4]) + data.setValueFont(.systemFont(ofSize: 10, weight: .light)) + data.setValueFormatter(LargeValueFormatter()) + + // specify the width each bar should have + data.barWidth = barWidth + + // restrict the x-axis range + chartView.xAxis.axisMinimum = Double(startYear) + + // groupWidthWithGroupSpace(...) is a helper that calculates the width each group needs based on the provided parameters + chartView.xAxis.axisMaximum = Double(startYear) + data.groupWidth(groupSpace: groupSpace, barSpace: barSpace) * Double(groupCount) + + data.groupBars(fromX: Double(startYear), groupSpace: groupSpace, barSpace: barSpace) + + chartView.data = data + } + + override func optionTapped(_ option: Option) { + super.handleOption(option, forChartView: chartView) + } + + // MARK: - Actions + @IBAction func slidersValueChanged(_ sender: Any?) { + let startYear = 1980 + let endYear = startYear + Int(sliderX.value) + + sliderTextX.text = "\(startYear)-\(endYear)" + sliderTextY.text = "\(Int(sliderY.value))" + + self.updateChartData() + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/MultipleBarChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/MultipleBarChartViewController.xib new file mode 100644 index 0000000000..5a67858835 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/MultipleBarChartViewController.xib @@ -0,0 +1,99 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/MultipleLinesChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/MultipleLinesChartViewController.swift new file mode 100644 index 0000000000..7ccb56c029 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/MultipleLinesChartViewController.swift @@ -0,0 +1,138 @@ +// +// MultipleLinesChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class MultipleLinesChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: LineChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Multiple Lines Chart" + self.options = [.toggleValues, + .toggleFilled, + .toggleCircles, + .toggleCubic, + .toggleStepped, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleAutoScaleMinMax, + .toggleData] + + chartView.delegate = self + + chartView.chartDescription?.isEnabled = false + + chartView.leftAxis.isEnabled = false + chartView.rightAxis.isDrawAxisLineEnabled = false + chartView.xAxis.isDrawAxisLineEnabled = false + + chartView.isDrawBordersEnabled = false + chartView.setScaleEnabled(true) + + var l = chartView.legend + l.horizontalAlignment = .right + l.verticalAlignment = .top + l.orientation = .vertical + l.drawInside = false + chartView.legend = l + + sliderX.value = 20 + sliderY.value = 100 + slidersValueChanged(nil) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value), range: UInt32(sliderY.value)) + } + + // TODO: Refine data creation + func setDataCount(_ count: Int, range: UInt32) { + let colors = ChartColorTemplates.vordiplom[0...2] + + let block: (Int) -> ChartDataEntry = { (i) -> ChartDataEntry in + let val = Double(arc4random_uniform(range) + 3) + return ChartDataEntry(x: Double(i), y: val) + } + let dataSets = (0..<3).map { i -> LineChartDataSet in + let yVals = (0.. + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/NegativeStackedBarChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/NegativeStackedBarChartViewController.swift new file mode 100644 index 0000000000..6edcd712b5 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/NegativeStackedBarChartViewController.swift @@ -0,0 +1,134 @@ +// +// NegativeStackedBarChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class NegativeStackedBarChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: HorizontalBarChartView! + + lazy var customFormatter: NumberFormatter = { + let formatter = NumberFormatter() + formatter.negativePrefix = "" + formatter.positiveSuffix = "m" + formatter.negativeSuffix = "m" + formatter.minimumSignificantDigits = 1 + formatter.minimumFractionDigits = 1 + return formatter + }() + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Stacked Bar Chart Negative" + self.options = [.toggleValues, + .toggleIcons, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleAutoScaleMinMax, + .toggleData, + .toggleBarBorders] + + + chartView.delegate = self + + chartView.chartDescription?.isEnabled = false + + chartView.isDrawBarShadowEnabled = false + chartView.isDrawValueAboveBarEnabled = true + + chartView.leftAxis.isEnabled = false + let rightAxis = chartView.rightAxis + rightAxis.axisMaximum = 25 + rightAxis.axisMinimum = -25 + rightAxis.isDrawZeroLineEnabled = true + rightAxis.labelCount = 7 + rightAxis.valueFormatter = DefaultAxisValueFormatter(formatter: customFormatter) + rightAxis.labelFont = .systemFont(ofSize: 9) + + let xAxis = chartView.xAxis + xAxis.labelPosition = .bothSided + xAxis.isDrawAxisLineEnabled = false + xAxis.axisMinimum = 0 + xAxis.axisMaximum = 110 + xAxis.isCenterAxisLabelsEnabled = true + xAxis.labelCount = 12 + xAxis.granularity = 10 + xAxis.valueFormatter = self + xAxis.labelFont = .systemFont(ofSize: 9) + + var l = chartView.legend + l.horizontalAlignment = .right + l.verticalAlignment = .bottom + l.orientation = .horizontal + l.formSize = 8 + l.formToTextSpace = 8 + l.xEntrySpace = 6 + chartView.legend = l + + self.updateChartData() + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setChartData() + } + + func setChartData() { + let yVals = [BarChartDataEntry(x: 5, yValues: [-10, 10]), + BarChartDataEntry(x: 15, yValues: [-12, 13]), + BarChartDataEntry(x: 25, yValues: [-15, 15]), + BarChartDataEntry(x: 35, yValues: [-17, 17]), + BarChartDataEntry(x: 45, yValues: [-19, 120]), + BarChartDataEntry(x: 55, yValues: [-19, 19]), + BarChartDataEntry(x: 65, yValues: [-16, 16]), + BarChartDataEntry(x: 75, yValues: [-13, 14]), + BarChartDataEntry(x: 85, yValues: [-10, 11]), + BarChartDataEntry(x: 95, yValues: [-5, 6]), + BarChartDataEntry(x: 105, yValues: [-1, 2]) + ] + + let set = BarChartDataSet(values: yVals, label: "Age Distribution") + set.isDrawIconsEnabled = false + set.valueFormatter = DefaultValueFormatter(formatter: customFormatter) + set.valueFont = .systemFont(ofSize: 7) + set.axisDependency = .right + set.colors = [UIColor(red: 67/255, green: 67/255, blue: 72/255, alpha: 1), + UIColor(red: 124/255, green: 181/255, blue: 236/255, alpha: 1) + ] + set.stackLabels = ["Men", "Women"] + + let data = BarChartData(dataSet: set) + data.barWidth = 8.5 + + chartView.data = data + chartView.setNeedsDisplay() + } + + override func optionTapped(_ option: Option) { + super.handleOption(option, forChartView: chartView) + } +} + +extension NegativeStackedBarChartViewController: AxisValueFormatter { + func stringForValue(_ value: Double, axis: AxisBase) -> String { + return String(format: "%03.0f-%03.0f", value, value + 10) + } + + +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/NegativeStackedBarChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/NegativeStackedBarChartViewController.xib new file mode 100644 index 0000000000..f30f9f8646 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/NegativeStackedBarChartViewController.xib @@ -0,0 +1,56 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PieChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PieChartViewController.swift new file mode 100644 index 0000000000..d5c4d4d9ad --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PieChartViewController.swift @@ -0,0 +1,153 @@ +// +// PieChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class PieChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: PieChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Half Pie Bar Chart" + + self.options = [.toggleValues, + .toggleXValues, + .togglePercent, + .toggleHole, + .toggleIcons, + .animateX, + .animateY, + .animateXY, + .spin, + .drawCenter, + .saveToGallery, + .toggleData] + + self.setup(pieChartView: chartView) + + chartView.delegate = self + + var l = chartView.legend + l.horizontalAlignment = .right + l.verticalAlignment = .top + l.orientation = .vertical + l.xEntrySpace = 7 + l.yEntrySpace = 0 + l.yOffset = 0 + chartView.legend = l + + // entry label styling + chartView.entryLabelColor = .white + chartView.entryLabelFont = .systemFont(ofSize: 12, weight: .light) + + sliderX.value = 4 + sliderY.value = 100 + self.slidersValueChanged(nil) + + chartView.animate(xAxisDuration: 1.4, easingOption: .easeOutBack) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value), range: UInt32(sliderY.value)) + } + + func setDataCount(_ count: Int, range: UInt32) { + let entries = (0.. PieChartDataEntry in + // IMPORTANT: In a PieChart, no values (Entry) should have the same xIndex (even if from different DataSets), since no values can be drawn above each other. + return PieChartDataEntry(value: Double(arc4random_uniform(range) + range / 5), + label: parties[i % parties.count], + icon: #imageLiteral(resourceName: "icon")) + } + + let set = PieChartDataSet(values: entries, label: "Election Results") + set.isDrawIconsEnabled = false + set.sliceSpace = 2 + + + set.colors = ChartColorTemplates.vordiplom + + ChartColorTemplates.joyful + + ChartColorTemplates.colorful + + ChartColorTemplates.liberty + + ChartColorTemplates.pastel + + [UIColor(red: 51/255, green: 181/255, blue: 229/255, alpha: 1)] + + let data = PieChartData(dataSet: set) + + let pFormatter = NumberFormatter() + pFormatter.numberStyle = .percent + pFormatter.maximumFractionDigits = 1 + pFormatter.multiplier = 1 + pFormatter.percentSymbol = " %" + data.setValueFormatter(DefaultValueFormatter(formatter: pFormatter)) + + data.setValueFont(.systemFont(ofSize: 11, weight: .light)) + data.setValueTextColor(.white) + + chartView.data = data + chartView.highlightValues(nil) + } + + override func optionTapped(_ option: Option) { + switch option { + case .toggleXValues: + chartView.isDrawEntryLabelsEnabled = !chartView.isDrawEntryLabelsEnabled + chartView.setNeedsDisplay() + + case .togglePercent: + chartView.usePercentValues = !chartView.usePercentValues + chartView.setNeedsDisplay() + + case .toggleHole: + chartView.isDrawHoleEnabled = !chartView.isDrawHoleEnabled + chartView.setNeedsDisplay() + + case .drawCenter: + chartView.isDrawCenterTextEnabled = !chartView.isDrawCenterTextEnabled + chartView.setNeedsDisplay() + + case .animateX: + chartView.animate(xAxisDuration: 1.4) + + case .animateY: + chartView.animate(yAxisDuration: 1.4) + + case .animateXY: + chartView.animate(xAxisDuration: 1.4, yAxisDuration: 1.4) + + case .spin: + chartView.spin(duration: 2, + fromAngle: chartView.rotationAngle, + toAngle: chartView.rotationAngle + 360, + easingOption: .easeInCubic) + + default: + handleOption(option, forChartView: chartView) + } + } + + // MARK: - Actions + @IBAction func slidersValueChanged(_ sender: Any?) { + sliderTextX.text = "\(Int(sliderX.value))" + sliderTextY.text = "\(Int(sliderY.value))" + + self.updateChartData() + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PieChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PieChartViewController.xib new file mode 100644 index 0000000000..1fc7060ae3 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PieChartViewController.xib @@ -0,0 +1,100 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PiePolylineChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PiePolylineChartViewController.swift new file mode 100644 index 0000000000..8e9ff773de --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PiePolylineChartViewController.swift @@ -0,0 +1,145 @@ +// +// PiePolylineChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class PiePolylineChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: PieChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Pie Bar Chart" + + self.options = [.toggleValues, + .toggleXValues, + .togglePercent, + .toggleHole, + .animateX, + .animateY, + .animateXY, + .spin, + .drawCenter, + .saveToGallery, + .toggleData] + + self.setup(pieChartView: chartView) + + chartView.delegate = self + + chartView.legend.isEnabled = false + chartView.setExtraOffsets(left: 20, top: 0, right: 20, bottom: 0) + + sliderX.value = 40 + sliderY.value = 100 + self.slidersValueChanged(nil) + + chartView.animate(xAxisDuration: 1.4, easingOption: .easeOutBack) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value), range: UInt32(sliderY.value)) + } + + func setDataCount(_ count: Int, range: UInt32) { + let entries = (0.. PieChartDataEntry in + // IMPORTANT: In a PieChart, no values (Entry) should have the same xIndex (even if from different DataSets), since no values can be drawn above each other. + return PieChartDataEntry(value: Double(arc4random_uniform(range) + range / 5), + label: parties[i % parties.count]) + } + + let set = PieChartDataSet(values: entries, label: "Election Results") + set.sliceSpace = 2 + + + set.colors = ChartColorTemplates.vordiplom + + ChartColorTemplates.joyful + + ChartColorTemplates.colorful + + ChartColorTemplates.liberty + + ChartColorTemplates.pastel + + [UIColor(red: 51/255, green: 181/255, blue: 229/255, alpha: 1)] + + set.valueLinePart1OffsetPercentage = 0.8 + set.valueLinePart1Length = 0.2 + set.valueLinePart2Length = 0.4 + //set.xValuePosition = .outsideSlice + set.yValuePosition = .outsideSlice + + let data = PieChartData(dataSet: set) + + let pFormatter = NumberFormatter() + pFormatter.numberStyle = .percent + pFormatter.maximumFractionDigits = 1 + pFormatter.multiplier = 1 + pFormatter.percentSymbol = " %" + data.setValueFormatter(DefaultValueFormatter(formatter: pFormatter)) + data.setValueFont(.systemFont(ofSize: 11, weight: .light)) + data.setValueTextColor(.black) + + chartView.data = data + chartView.highlightValues(nil) + } + + override func optionTapped(_ option: Option) { + switch option { + case .toggleXValues: + chartView.isDrawEntryLabelsEnabled = !chartView.isDrawEntryLabelsEnabled + chartView.setNeedsDisplay() + + case .togglePercent: + chartView.usePercentValues = !chartView.usePercentValues + chartView.setNeedsDisplay() + + case .toggleHole: + chartView.isDrawHoleEnabled = !chartView.isDrawHoleEnabled + chartView.setNeedsDisplay() + + case .drawCenter: + chartView.isDrawCenterTextEnabled = !chartView.isDrawCenterTextEnabled + chartView.setNeedsDisplay() + + case .animateX: + chartView.animate(xAxisDuration: 1.4) + + case .animateY: + chartView.animate(yAxisDuration: 1.4) + + case .animateXY: + chartView.animate(xAxisDuration: 1.4, yAxisDuration: 1.4) + + case .spin: + chartView.spin(duration: 2, + fromAngle: chartView.rotationAngle, + toAngle: chartView.rotationAngle + 360, + easingOption: .easeInCubic) + + default: + handleOption(option, forChartView: chartView) + } + } + + // MARK: - Actions + @IBAction func slidersValueChanged(_ sender: Any?) { + sliderTextX.text = "\(Int(sliderX.value))" + sliderTextY.text = "\(Int(sliderY.value))" + + self.updateChartData() + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PiePolylineChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PiePolylineChartViewController.xib new file mode 100644 index 0000000000..d355365551 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PiePolylineChartViewController.xib @@ -0,0 +1,114 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PositiveNegativeBarChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PositiveNegativeBarChartViewController.swift new file mode 100644 index 0000000000..75aacbd6c5 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PositiveNegativeBarChartViewController.swift @@ -0,0 +1,120 @@ +// +// PositiveNegativeBarChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class PositiveNegativeBarChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: BarChartView! + + let dataLabels = ["12-19", + "12-30", + "12-31", + "01-01", + "01-02"] + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Bar Chart" + self.options = [.toggleValues, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleAutoScaleMinMax, + .toggleData, + .toggleBarBorders] + + self.setup(barLineChartView: chartView) + + chartView.delegate = self + + chartView.setExtraOffsets(left: 70, top: -30, right: 70, bottom: 10) + + chartView.isDrawBarShadowEnabled = false + chartView.isDrawValueAboveBarEnabled = true + + chartView.chartDescription?.isEnabled = false + + chartView.rightAxis.isEnabled = false + + let xAxis = chartView.xAxis + xAxis.labelPosition = .bottom + xAxis.labelFont = .systemFont(ofSize: 13) + xAxis.isDrawAxisLineEnabled = false + xAxis.labelTextColor = .lightGray + xAxis.labelCount = 5 + xAxis.isCenterAxisLabelsEnabled = true + xAxis.granularity = 1 + xAxis.valueFormatter = self + + let leftAxis = chartView.leftAxis + leftAxis.isDrawLabelsEnabled = false + leftAxis.spaceTop = 0.25 + leftAxis.spaceBottom = 0.25 + leftAxis.isDrawAxisLineEnabled = false + leftAxis.isDrawZeroLineEnabled = true + leftAxis.zeroLineColor = .gray + leftAxis.zeroLineWidth = 0.7 + + self.updateChartData() + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setChartData() + } + + func setChartData() { + let yVals = [BarChartDataEntry(x: 0, y: -224.1), + BarChartDataEntry(x: 1, y: 238.5), + BarChartDataEntry(x: 2, y: 1280.1), + BarChartDataEntry(x: 3, y: -442.3), + BarChartDataEntry(x: 4, y: -2280.1) + ] + + let red = UIColor(red: 211/255, green: 74/255, blue: 88/255, alpha: 1) + let green = UIColor(red: 110/255, green: 190/255, blue: 102/255, alpha: 1) + let colors = yVals.map { (entry) -> Color in + return entry.y > 0 ? red : green + } + + let set = BarChartDataSet(values: yVals, label: "Values") + set.colors = colors + set.valueColors = colors + + let data = BarChartData(dataSet: set) + data.setValueFont(.systemFont(ofSize: 13)) + + let formatter = NumberFormatter() + formatter.maximumFractionDigits = 1 + data.setValueFormatter(DefaultValueFormatter(formatter: formatter)) + data.barWidth = 0.8 + + chartView.data = data + } + + override func optionTapped(_ option: Option) { + super.handleOption(option, forChartView: chartView) + } +} + +extension PositiveNegativeBarChartViewController: AxisValueFormatter { + func stringForValue(_ value: Double, axis: AxisBase) -> String { + return dataLabels[min(max(Int(value), 0), dataLabels.count - 1)] + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PositiveNegativeBarChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PositiveNegativeBarChartViewController.xib new file mode 100644 index 0000000000..9b13e52d8d --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/PositiveNegativeBarChartViewController.xib @@ -0,0 +1,56 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/RadarChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/RadarChartViewController.swift new file mode 100644 index 0000000000..f04db3cfb5 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/RadarChartViewController.swift @@ -0,0 +1,203 @@ +// +// RadarChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class RadarChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: RadarChartView! + + let activities = ["Burger", "Steak", "Salad", "Pasta", "Pizza"] + var originalBarBgColor: UIColor! + var originalBarTintColor: UIColor! + var originalBarStyle: UIBarStyle! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Radar Bar Chart" + self.options = [.toggleValues, + .toggleHighlight, + .toggleHighlightCircle, + .toggleXLabels, + .toggleYLabels, + .toggleRotate, + .toggleFilled, + .animateX, + .animateY, + .animateXY, + .spin, + .saveToGallery, + .toggleData] + + chartView.delegate = self + + chartView.chartDescription?.isEnabled = false + chartView.webLineWidth = 1 + chartView.innerWebLineWidth = 1 + chartView.webColor = .lightGray + chartView.innerWebColor = .lightGray + chartView.webAlpha = 1 + + let marker = RadarMarkerView.viewFromXib()! + marker.chartView = chartView + chartView.marker = marker + + let xAxis = chartView.xAxis + xAxis.labelFont = .systemFont(ofSize: 9, weight: .light) + xAxis.xOffset = 0 + xAxis.yOffset = 0 + xAxis.valueFormatter = self + xAxis.labelTextColor = .white + + let yAxis = chartView.yAxis + yAxis.labelFont = .systemFont(ofSize: 9, weight: .light) + yAxis.labelCount = 5 + yAxis.axisMinimum = 0 + yAxis.axisMaximum = 80 + yAxis.isDrawLabelsEnabled = false + + var l = chartView.legend + l.horizontalAlignment = .center + l.verticalAlignment = .top + l.orientation = .horizontal + l.drawInside = false + l.font = .systemFont(ofSize: 10, weight: .light) + l.xEntrySpace = 7 + l.yEntrySpace = 5 + l.textColor = .white + chartView.legend = l + + self.updateChartData() + + chartView.animate(xAxisDuration: 1.4, yAxisDuration: 1.4, easingOption: .easeOutBack) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + UIView.animate(withDuration: 0.15) { + let navBar = self.navigationController!.navigationBar + self.originalBarBgColor = navBar.barTintColor + self.originalBarTintColor = navBar.tintColor + self.originalBarStyle = navBar.barStyle + + navBar.barTintColor = self.view.backgroundColor + navBar.tintColor = .white + navBar.barStyle = .black + } + } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + + UIView.animate(withDuration: 0.15) { + let navBar = self.navigationController!.navigationBar + navBar.barTintColor = self.originalBarBgColor + navBar.tintColor = self.originalBarTintColor + navBar.barStyle = self.originalBarStyle + } + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setChartData() + } + + func setChartData() { + let mult: UInt32 = 80 + let min: UInt32 = 20 + let cnt = 5 + + let block: (Int) -> RadarChartDataEntry = { _ in return RadarChartDataEntry(value: Double(arc4random_uniform(mult) + min))} + let entries1 = (0.. String { + return activities[Int(value) % activities.count] + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/RadarChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/RadarChartViewController.xib new file mode 100644 index 0000000000..a3dfdabb90 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/RadarChartViewController.xib @@ -0,0 +1,65 @@ + + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ScatterChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ScatterChartViewController.swift new file mode 100644 index 0000000000..54e9b52774 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ScatterChartViewController.swift @@ -0,0 +1,124 @@ +// +// ScatterChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class ScatterChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: ScatterChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Scatter Bar Chart" + self.options = [.toggleValues, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleAutoScaleMinMax, + .toggleData] + + chartView.delegate = self + + chartView.chartDescription?.isEnabled = false + + chartView.isDragEnabled = true + chartView.setScaleEnabled(true) + chartView.maxVisibleCount = 200 + chartView.isPinchZoomEnabled = true + + var l = chartView.legend + l.horizontalAlignment = .right + l.verticalAlignment = .top + l.orientation = .vertical + l.drawInside = false + l.font = .systemFont(ofSize: 10, weight: .light) + l.xOffset = 5 + + let leftAxis = chartView.leftAxis + leftAxis.labelFont = .systemFont(ofSize: 10, weight: .light) + leftAxis.axisMinimum = 0 + + chartView.rightAxis.isEnabled = false + + + let xAxis = chartView.xAxis + xAxis.labelFont = .systemFont(ofSize: 10, weight: .light) + + sliderX.value = 45 + sliderY.value = 100 + slidersValueChanged(nil) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value + 1), range: UInt32(sliderY.value)) + } + + func setDataCount(_ count: Int, range: UInt32) { + let values1 = (0.. ChartDataEntry in + let val = Double(arc4random_uniform(range) + 3) + return ChartDataEntry(x: Double(i), y: val) + } + let values2 = (0.. ChartDataEntry in + let val = Double(arc4random_uniform(range) + 3) + return ChartDataEntry(x: Double(i) + 0.33, y: val) + } + let values3 = (0.. ChartDataEntry in + let val = Double(arc4random_uniform(range) + 3) + return ChartDataEntry(x: Double(i) + 0.66, y: val) + } + + + let set1 = ScatterChartDataSet(values: values1, label: "DS 1") + set1.setScatterShape(.square) + set1.setColor(ChartColorTemplates.colorful[0]) + set1.scatterShapeSize = 8 + + let set2 = ScatterChartDataSet(values: values2, label: "DS 2") + set2.setScatterShape(.circle) + set2.scatterShapeHoleColor = ChartColorTemplates.colorful[3] + set2.scatterShapeHoleRadius = 3.5 + set2.setColor(ChartColorTemplates.colorful[1]) + set2.scatterShapeSize = 8 + + let set3 = ScatterChartDataSet(values: values3, label: "DS 3") + set3.setScatterShape(.cross) + set3.setColor(ChartColorTemplates.colorful[2]) + set3.scatterShapeSize = 8 + + let data = ScatterChartData(dataSets: [set1, set2, set3]) + data.setValueFont(.systemFont(ofSize: 7, weight: .light)) + + chartView.data = data + } + + override func optionTapped(_ option: Option) { + super.handleOption(option, forChartView: chartView) + } + + @IBAction func slidersValueChanged(_ sender: Any?) { + sliderTextX.text = "\(Int(sliderX.value))" + sliderTextY.text = "\(Int(sliderY.value))" + + self.updateChartData() + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ScatterChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ScatterChartViewController.xib new file mode 100644 index 0000000000..289fe5fe0d --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/ScatterChartViewController.xib @@ -0,0 +1,100 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/SinusBarChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/SinusBarChartViewController.swift new file mode 100644 index 0000000000..32bbc79bb4 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/SinusBarChartViewController.swift @@ -0,0 +1,108 @@ +// +// SinusBarChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class SinusBarChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: BarChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderTextX: UITextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Line Chart 2" + self.options = [.toggleValues, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleAutoScaleMinMax, + .toggleData] + + chartView.delegate = self + + chartView.chartDescription?.isEnabled = false + + chartView.isDrawBarShadowEnabled = false + chartView.isDrawValueAboveBarEnabled = false + chartView.maxVisibleCount = 60 + + let xAxis = chartView.xAxis + xAxis.labelPosition = .bottom + xAxis.isEnabled = false + + let leftAxis = chartView.leftAxis + leftAxis.labelCount = 6 + leftAxis.axisMinimum = -2.5 + leftAxis.axisMaximum = 2.5 + leftAxis.isGranularityEnabled = true + leftAxis.granularity = 0.1 + + let rightAxis = chartView.rightAxis + rightAxis.labelCount = 6 + rightAxis.axisMinimum = -2.5 + rightAxis.axisMaximum = 2.5 + rightAxis.granularity = 0.1 + + var l = chartView.legend + l.horizontalAlignment = .left + l.verticalAlignment = .bottom + l.orientation = .horizontal + l.drawInside = false + l.form = .square + l.formSize = 9 + l.font = .systemFont(ofSize: 11) + l.xEntrySpace = 4 + chartView.legend = l + + sliderX.value = 150 + slidersValueChanged(nil) + + chartView.animate(xAxisDuration: 2, yAxisDuration: 2) + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setDataCount(Int(sliderX.value)) + } + + func setDataCount(_ count: Int) { + let entries = (0.. + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/StackedBarChartViewController.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/StackedBarChartViewController.swift new file mode 100644 index 0000000000..6dd0322805 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/StackedBarChartViewController.swift @@ -0,0 +1,125 @@ +// +// StackedBarChartViewController.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import UIKit +import Charts + +class StackedBarChartViewController: DemoBaseViewController { + + @IBOutlet var chartView: BarChartView! + @IBOutlet var sliderX: UISlider! + @IBOutlet var sliderY: UISlider! + @IBOutlet var sliderTextX: UITextField! + @IBOutlet var sliderTextY: UITextField! + + lazy var formatter: NumberFormatter = { + let formatter = NumberFormatter() + formatter.maximumFractionDigits = 1 + formatter.negativeSuffix = " $" + formatter.positiveSuffix = " $" + + return formatter + }() + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.title = "Stacked Bar Chart" + self.options = [.toggleValues, + .toggleIcons, + .toggleHighlight, + .animateX, + .animateY, + .animateXY, + .saveToGallery, + .togglePinchZoom, + .toggleAutoScaleMinMax, + .toggleData, + .toggleBarBorders] + + + chartView.delegate = self + + chartView.chartDescription?.isEnabled = false + + chartView.maxVisibleCount = 40 + chartView.isDrawBarShadowEnabled = false + chartView.isDrawValueAboveBarEnabled = false + chartView.isHighlightFullBarEnabled = false + + let leftAxis = chartView.leftAxis + leftAxis.valueFormatter = DefaultAxisValueFormatter(formatter: formatter) + leftAxis.axisMinimum = 0 + + chartView.rightAxis.isEnabled = false + + let xAxis = chartView.xAxis + xAxis.labelPosition = .top + + var l = chartView.legend + l.horizontalAlignment = .right + l.verticalAlignment = .bottom + l.orientation = .horizontal + l.drawInside = false + l.form = .square + l.formToTextSpace = 4 + l.xEntrySpace = 6 + chartView.legend = l + + sliderX.value = 12 + sliderY.value = 100 + slidersValueChanged(nil) + + self.updateChartData() + } + + override func updateChartData() { + if self.shouldHideData { + chartView.data = nil + return + } + + self.setChartData(count: Int(sliderX.value + 1), range: UInt32(sliderY.value)) + } + + func setChartData(count: Int, range: UInt32) { + let yVals = (0.. BarChartDataEntry in + let mult = range + 1 + let val1 = Double(arc4random_uniform(mult) + mult / 3) + let val2 = Double(arc4random_uniform(mult) + mult / 3) + let val3 = Double(arc4random_uniform(mult) + mult / 3) + + return BarChartDataEntry(x: Double(i), yValues: [val1, val2, val3], icon: #imageLiteral(resourceName: "icon")) + } + + let set = BarChartDataSet(values: yVals, label: "Statistics Vienna 2014") + set.isDrawIconsEnabled = false + set.colors = [ChartColorTemplates.material[0], ChartColorTemplates.material[1], ChartColorTemplates.material[2]] + set.stackLabels = ["Births", "Divorces", "Marriages"] + + let data = BarChartData(dataSet: set) + data.setValueFont(.systemFont(ofSize: 7, weight: .light)) + data.setValueFormatter(DefaultValueFormatter(formatter: formatter)) + data.setValueTextColor(.white) + + chartView.fitBars = true + chartView.data = data + } + + override func optionTapped(_ option: Option) { + super.handleOption(option, forChartView: chartView) + } + + @IBAction func slidersValueChanged(_ sender: Any?) { + sliderTextX.text = "\(Int(sliderX.value))" + sliderTextY.text = "\(Int(sliderY.value))" + + updateChartData() + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/StackedBarChartViewController.xib b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/StackedBarChartViewController.xib new file mode 100644 index 0000000000..dca9b05421 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Demos/StackedBarChartViewController.xib @@ -0,0 +1,100 @@ + + + + + + + + + + + + HelveticaNeue-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/DateValueFormatter.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/DateValueFormatter.swift new file mode 100644 index 0000000000..32367910ed --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/DateValueFormatter.swift @@ -0,0 +1,22 @@ +// +// DateValueFormatter.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import Foundation +import Charts + +public class DateValueFormatter: AxisValueFormatter { + private let dateFormatter = DateFormatter() + + init() { + dateFormatter.dateFormat = "dd MMM HH:mm" + } + + public func stringForValue(_ value: Double, axis: AxisBase) -> String { + return dateFormatter.string(from: Date(timeIntervalSince1970: value)) + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/DayAxisValueFormatter.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/DayAxisValueFormatter.swift new file mode 100644 index 0000000000..df9e781ab7 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/DayAxisValueFormatter.swift @@ -0,0 +1,109 @@ +// +// DayAxisValueFormatter.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import Foundation +import Charts + +public class DayAxisValueFormatter: AxisValueFormatter { + weak var chart: BarLineChartViewBase? + let months = ["Jan", "Feb", "Mar", + "Apr", "May", "Jun", + "Jul", "Aug", "Sep", + "Oct", "Nov", "Dec"] + + init(chart: BarLineChartViewBase) { + self.chart = chart + } + + public func stringForValue(_ value: Double, axis: AxisBase) -> String { + let days = Int(value) + let year = determineYear(forDays: days) + let month = determineMonth(forDayOfYear: days) + + let monthName = months[month % months.count] + let yearName = "\(year)" + + if let chart = chart, + chart.visibleXRange > 30 * 6 { + return monthName + yearName + } else { + let dayOfMonth = determineDayOfMonth(forDays: days, month: month + 12 * (year - 2016)) + var appendix: String + + switch dayOfMonth { + case 1, 21, 31: appendix = "st" + case 2, 22: appendix = "nd" + case 3, 23: appendix = "rd" + default: appendix = "th" + } + + return dayOfMonth == 0 ? "" : String(format: "%d\(appendix) \(monthName)", dayOfMonth) + } + } + + private func days(forMonth month: Int, year: Int) -> Int { + // month is 0-based + switch month { + case 1: + var is29Feb = false + if year < 1582 { + is29Feb = (year < 1 ? year + 1 : year) % 4 == 0 + } else if year > 1582 { + is29Feb = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) + } + + return is29Feb ? 29 : 28 + + case 3, 5, 8, 10: + return 30 + + default: + return 31 + } + } + + private func determineMonth(forDayOfYear dayOfYear: Int) -> Int { + var month = -1 + var days = 0 + + while days < dayOfYear { + month += 1 + if month >= 12 { + month = 0 + } + + let year = determineYear(forDays: days) + days += self.days(forMonth: month, year: year) + } + + return max(month, 0) + } + + private func determineDayOfMonth(forDays days: Int, month: Int) -> Int { + var count = 0 + var daysForMonth = 0 + + while count < month { + let year = determineYear(forDays: days) + daysForMonth += self.days(forMonth: count % 12, year: year) + count += 1 + } + + return days - daysForMonth + } + + private func determineYear(forDays days: Int) -> Int { + switch days { + case ...366: return 2016 + case 367...730: return 2017 + case 731...1094: return 2018 + case 1095...1458: return 2019 + default: return 2020 + } + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/IntAxisValueFormatter.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/IntAxisValueFormatter.swift new file mode 100644 index 0000000000..3599910d1b --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/IntAxisValueFormatter.swift @@ -0,0 +1,16 @@ +// +// IntAxisValueFormatter.swift +// ChartsDemo-iOS +// +// Created by Jacob Christie on 2017-07-09. +// Copyright © 2017 jc. All rights reserved. +// + +import Foundation +import Charts + +public class IntAxisValueFormatter: AxisValueFormatter { + public func stringForValue(_ value: Double, axis: AxisBase) -> String { + return "\(Int(value))" + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/LargeValueFormatter.swift b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/LargeValueFormatter.swift new file mode 100644 index 0000000000..4cbe42f431 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Classes/Formatters/LargeValueFormatter.swift @@ -0,0 +1,56 @@ +// +// LargeValueFormatter.swift +// ChartsDemo +// Copyright © 2016 dcg. All rights reserved. +// + +import Foundation +import Charts + +private let MAX_LENGTH = 5 + +public class LargeValueFormatter: ValueFormatter, AxisValueFormatter { + + /// Suffix to be appended after the values. + /// + /// **default**: suffix: ["", "k", "m", "b", "t"] + public var suffix = ["", "k", "m", "b", "t"] + + /// An appendix text to be added at the end of the formatted value. + public var appendix: String? + + public init(appendix: String? = nil) { + self.appendix = appendix + } + + fileprivate func format(value: Double) -> String { + var sig = value + var length = 0 + let maxLength = suffix.count - 1 + + while sig >= 1000.0 && length < maxLength { + sig /= 1000.0 + length += 1 + } + + var r = String(format: "%2.f", sig) + suffix[length] + + if let appendix = appendix { + r += appendix + } + + return r + } + + public func stringForValue(_ value: Double, axis: AxisBase) -> String { + return format(value: value) + } + + public func stringForValue( + _ value: Double, + entry: ChartDataEntry, + dataSetIndex: Int, + viewPortHandler: ViewPortHandler?) -> String { + return format(value: value) + } +} diff --git a/ChartsDemo-iOS/ChartsDemo-iOS/Info.plist b/ChartsDemo-iOS/ChartsDemo-iOS/Info.plist new file mode 100644 index 0000000000..4222ac2dd3 --- /dev/null +++ b/ChartsDemo-iOS/ChartsDemo-iOS/Info.plist @@ -0,0 +1,43 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + From 469b6361d4943e948d518a9857eb540fa8d622af Mon Sep 17 00:00:00 2001 From: jjatie Date: Fri, 21 Jul 2017 17:30:29 -0400 Subject: [PATCH 07/64] .xcodeproj won't add to git Uploading from GitHub --- ChartsDemo-iOS/ChartsDemo-iOS.xcodeproj.zip | Bin 0 -> 38193 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ChartsDemo-iOS/ChartsDemo-iOS.xcodeproj.zip diff --git a/ChartsDemo-iOS/ChartsDemo-iOS.xcodeproj.zip b/ChartsDemo-iOS/ChartsDemo-iOS.xcodeproj.zip new file mode 100644 index 0000000000000000000000000000000000000000..dde27ae2ba68387d5dd90877285a1aa3440e3f8f GIT binary patch literal 38193 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

S^pvhYR^W$;o%< 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 Date: Fri, 21 Jul 2017 17:41:32 -0400 Subject: [PATCH 08/64] Replaced unnecessary NSObjectProtocol `class` is better as it allows Swift classes to avoid the NSObject overhead. --- Source/Charts/Components/IMarker.swift | 2 +- Source/Charts/Formatters/IAxisValueFormatter.swift | 2 +- Source/Charts/Formatters/IValueFormatter.swift | 2 +- Source/Charts/Highlight/IHighlighter.swift | 2 +- Source/Charts/Renderers/Scatter/IShapeRenderer.swift | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/Charts/Components/IMarker.swift b/Source/Charts/Components/IMarker.swift index b11d627ee3..59abfad7bb 100644 --- a/Source/Charts/Components/IMarker.swift +++ b/Source/Charts/Components/IMarker.swift @@ -13,7 +13,7 @@ import Foundation import CoreGraphics @objc(IChartMarker) -public protocol IMarker: NSObjectProtocol +public protocol IMarker: class { /// - returns: The desired (general) offset you wish the IMarker to have on the x-axis. /// diff --git a/Source/Charts/Formatters/IAxisValueFormatter.swift b/Source/Charts/Formatters/IAxisValueFormatter.swift index 022f610b9b..9634334cb5 100644 --- a/Source/Charts/Formatters/IAxisValueFormatter.swift +++ b/Source/Charts/Formatters/IAxisValueFormatter.swift @@ -13,7 +13,7 @@ import Foundation /// An interface for providing custom axis Strings. @objc(IChartAxisValueFormatter) -public protocol IAxisValueFormatter : NSObjectProtocol +public protocol IAxisValueFormatter: class { /// Called when a value from an axis is formatted before being drawn. diff --git a/Source/Charts/Formatters/IValueFormatter.swift b/Source/Charts/Formatters/IValueFormatter.swift index 4d06ef6369..bd7c0c90f8 100644 --- a/Source/Charts/Formatters/IValueFormatter.swift +++ b/Source/Charts/Formatters/IValueFormatter.swift @@ -17,7 +17,7 @@ import Foundation /// /// Then override the getFormattedValue(...) method and return whatever you want. @objc(IChartValueFormatter) -public protocol IValueFormatter : NSObjectProtocol +public protocol IValueFormatter: class { /// Called when a value (from labels inside the chart) is formatted before being drawn. diff --git a/Source/Charts/Highlight/IHighlighter.swift b/Source/Charts/Highlight/IHighlighter.swift index 4b3a2f62e5..56acfcc226 100644 --- a/Source/Charts/Highlight/IHighlighter.swift +++ b/Source/Charts/Highlight/IHighlighter.swift @@ -13,7 +13,7 @@ import Foundation import CoreGraphics @objc(IChartHighlighter) -public protocol IHighlighter : NSObjectProtocol +public protocol IHighlighter: class { /// - returns: A Highlight object corresponding to the given x- and y- touch positions in pixels. /// - parameter x: diff --git a/Source/Charts/Renderers/Scatter/IShapeRenderer.swift b/Source/Charts/Renderers/Scatter/IShapeRenderer.swift index 51578a99ba..f521b9e923 100644 --- a/Source/Charts/Renderers/Scatter/IShapeRenderer.swift +++ b/Source/Charts/Renderers/Scatter/IShapeRenderer.swift @@ -12,7 +12,7 @@ import Foundation @objc -public protocol IShapeRenderer : NSObjectProtocol +public protocol IShapeRenderer: class { /// Renders the provided ScatterDataSet with a shape. /// From 9b1ab68aa859f70678c859b2aa524e92210ee0c7 Mon Sep 17 00:00:00 2001 From: xzysun Date: Fri, 11 Aug 2017 18:30:32 +0800 Subject: [PATCH 09/64] Fix CombinedChartView not draw markers --- Source/Charts/Charts/CombinedChartView.swift | 42 +++++++++++++++++++ .../Standard/CombinedChartData.swift | 27 ++++++++++++ 2 files changed, 69 insertions(+) diff --git a/Source/Charts/Charts/CombinedChartView.swift b/Source/Charts/Charts/CombinedChartView.swift index 0fce9e8d94..abbdbd4642 100644 --- a/Source/Charts/Charts/CombinedChartView.swift +++ b/Source/Charts/Charts/CombinedChartView.swift @@ -222,4 +222,46 @@ open class CombinedChartView: BarLineChartViewBase, CombinedChartDataProvider /// - returns: `true` the highlight is be full-bar oriented, `false` ifsingle-value open var isHighlightFullBarEnabled: Bool { return highlightFullBarEnabled } + + // MARK:- override drawMarkers + + /// draws all MarkerViews on the highlighted positions. override here for combined chart view's special data structure + override func drawMarkers(context: CGContext) + { + guard + let marker = marker + , isDrawMarkersEnabled && + valuesToHighlight() + else { return } + + for i in 0 ..< _indicesToHighlight.count + { + let highlight = _indicesToHighlight[i] + + guard let + set = combinedData?.getDataSetByHighlight(highlight), + let e = _data?.entryForHighlight(highlight) + else { continue } + + let entryIndex = set.entryIndex(entry: e) + if entryIndex > Int(Double(set.entryCount) * _animator.phaseX) + { + continue + } + + let pos = getMarkerPosition(highlight: highlight) + + // check bounds + if !_viewPortHandler.isInBounds(x: pos.x, y: pos.y) + { + continue + } + + // callbacks to update the content + marker.refreshContent(entry: e, highlight: highlight) + + // draw the marker + marker.draw(context: context, point: pos) + } + } } diff --git a/Source/Charts/Data/Implementations/Standard/CombinedChartData.swift b/Source/Charts/Data/Implementations/Standard/CombinedChartData.swift index d356d32994..31ba2a2082 100644 --- a/Source/Charts/Data/Implementations/Standard/CombinedChartData.swift +++ b/Source/Charts/Data/Implementations/Standard/CombinedChartData.swift @@ -296,4 +296,31 @@ open class CombinedChartData: BarLineScatterCandleBubbleChartData return nil } } + + + /// get data set for highlight + /// + /// - Parameter highlight: current highlight + /// - Returns: dataset related to highlight + open func getDataSetByHighlight(_ highlight: Highlight) -> IChartDataSet! + { + let dataObjects = allData + + if highlight.dataIndex >= dataObjects.count + { + return nil + } + + let data = dataObjects[highlight.dataIndex] + + if highlight.dataSetIndex >= data.dataSetCount + { + return nil + } + else + { + return data.dataSets[highlight.dataSetIndex] + } + + } } From 7635f5f34c3e7927fea743659d5679e9e145ff21 Mon Sep 17 00:00:00 2001 From: Seil Oh Date: Mon, 14 Aug 2017 15:14:45 +0900 Subject: [PATCH 10/64] conform to macOS api changes in swift 3.2 --- Source/Charts/Utils/Platform.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Charts/Utils/Platform.swift b/Source/Charts/Utils/Platform.swift index ec3963b6f6..3f81ea8171 100644 --- a/Source/Charts/Utils/Platform.swift +++ b/Source/Charts/Utils/Platform.swift @@ -550,7 +550,7 @@ types are aliased to either their UI* implementation (on iOS) or their NS* imple image.lockFocus() let rep = NSBitmapImageRep(focusedViewRect: NSMakeRect(0, 0, image.size.width, image.size.height)) image.unlockFocus() - return rep?.representation(using: NSPNGFileType, properties: [:]) + return rep?.representation(using: .PNG, properties: [:]) } func NSUIImageJPEGRepresentation(_ image: NSUIImage, _ quality: CGFloat = 0.9) -> Data? @@ -558,7 +558,7 @@ types are aliased to either their UI* implementation (on iOS) or their NS* imple image.lockFocus() let rep = NSBitmapImageRep(focusedViewRect: NSMakeRect(0, 0, image.size.width, image.size.height)) image.unlockFocus() - return rep?.representation(using: NSJPEGFileType, properties: [NSImageCompressionFactor: quality]) + return rep?.representation(using: .JPEG, properties: [NSImageCompressionFactor: quality]) } private var imageContextStack: [CGFloat] = [] From 80a45c01db77ef2752ea689cc19c117abeb2da69 Mon Sep 17 00:00:00 2001 From: Xinran Wang Date: Fri, 4 Aug 2017 15:33:15 -0400 Subject: [PATCH 11/64] Reduce build time with minor reference change Adding a `self.` reference to a instance variable reduced the compile time significantly (over 10x improvement). A single line evaluation of a variable was further broken out into separate steps to reduce the compile time as well. --- Source/Charts/Renderers/ChartDataRendererBase.swift | 3 +-- Source/Charts/Renderers/HorizontalBarChartRenderer.swift | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Source/Charts/Renderers/ChartDataRendererBase.swift b/Source/Charts/Renderers/ChartDataRendererBase.swift index f5773e1229..14c32e367f 100644 --- a/Source/Charts/Renderers/ChartDataRendererBase.swift +++ b/Source/Charts/Renderers/ChartDataRendererBase.swift @@ -55,7 +55,6 @@ open class DataRenderer: Renderer { guard let data = dataProvider?.data else { return false } - - return data.entryCount < Int(CGFloat(dataProvider?.maxVisibleCount ?? 0) * (viewPortHandler?.scaleX ?? 1.0)) + return data.entryCount < Int(CGFloat(dataProvider?.maxVisibleCount ?? 0) * (self.viewPortHandler?.scaleX ?? 1.0)) } } diff --git a/Source/Charts/Renderers/HorizontalBarChartRenderer.swift b/Source/Charts/Renderers/HorizontalBarChartRenderer.swift index 7d2b03f14e..140b4ed162 100644 --- a/Source/Charts/Renderers/HorizontalBarChartRenderer.swift +++ b/Source/Charts/Renderers/HorizontalBarChartRenderer.swift @@ -610,8 +610,7 @@ open class HorizontalBarChartRenderer: BarChartRenderer { guard let data = dataProvider?.data else { return false } - - return data.entryCount < Int(CGFloat(dataProvider?.maxVisibleCount ?? 0) * (viewPortHandler?.scaleY ?? 1.0)) + return data.entryCount < Int(CGFloat(dataProvider?.maxVisibleCount ?? 0) * (self.viewPortHandler?.scaleY ?? 1.0)) } /// Sets the drawing position of the highlight object based on the riven bar-rect. From e23d186192663e03ea76c96f35057ac2617335e9 Mon Sep 17 00:00:00 2001 From: Martin Stemmle Date: Mon, 28 Aug 2017 21:38:31 +0200 Subject: [PATCH 12/64] Fixed value setter on PieChartDataEntry --- .../Data/Implementations/Standard/PieChartDataEntry.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Charts/Data/Implementations/Standard/PieChartDataEntry.swift b/Source/Charts/Data/Implementations/Standard/PieChartDataEntry.swift index 9040fc9f46..38395658b7 100644 --- a/Source/Charts/Data/Implementations/Standard/PieChartDataEntry.swift +++ b/Source/Charts/Data/Implementations/Standard/PieChartDataEntry.swift @@ -88,7 +88,7 @@ open class PieChartDataEntry: ChartDataEntry open var value: Double { get { return y } - set { y = value } + set { y = newValue } } @available(*, deprecated: 1.0, message: "Pie entries do not have x values") From f6525a044370709964e50f8cfe57cd383d6d3035 Mon Sep 17 00:00:00 2001 From: Pierre-Marc Airoldi Date: Sat, 2 Sep 2017 01:15:06 -0400 Subject: [PATCH 13/64] update xcode project for xcode 9 --- Charts.xcodeproj/project.pbxproj | 1651 +++++++++-------- .../xcshareddata/xcschemes/Charts.xcscheme | 31 +- .../xcschemes/ChartsTests.xcscheme | 25 +- .../Media.xcassets/Contents.json | 0 .../icon.imageset/Contents.json | 0 .../Media.xcassets/icon.imageset/star-1.png | Bin .../Media.xcassets/icon.imageset/star-2.png | Bin .../Media.xcassets/icon.imageset/star.png | Bin scripts/copy-carthage-frameworks.sh | 2 +- 9 files changed, 865 insertions(+), 844 deletions(-) rename {Charts/ChartsTests => Tests/Supporting Files}/Media.xcassets/Contents.json (100%) rename {Charts/ChartsTests => Tests/Supporting Files}/Media.xcassets/icon.imageset/Contents.json (100%) rename {Charts/ChartsTests => Tests/Supporting Files}/Media.xcassets/icon.imageset/star-1.png (100%) rename {Charts/ChartsTests => Tests/Supporting Files}/Media.xcassets/icon.imageset/star-2.png (100%) rename {Charts/ChartsTests => Tests/Supporting Files}/Media.xcassets/icon.imageset/star.png (100%) diff --git a/Charts.xcodeproj/project.pbxproj b/Charts.xcodeproj/project.pbxproj index cd1b497477..6dfed3e78c 100644 --- a/Charts.xcodeproj/project.pbxproj +++ b/Charts.xcodeproj/project.pbxproj @@ -7,684 +7,678 @@ objects = { /* Begin PBXBuildFile section */ - 06165F2F1D8110E600722320 /* Charts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06165F241D8110E600722320 /* Charts.framework */; }; - 06761B5E1D98176000D5CE09 /* ChartUtilsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06761B5D1D98176000D5CE09 /* ChartUtilsTests.swift */; }; - 06B11FAF1D811B7000D14B02 /* Charts.h in Headers */ = {isa = PBXBuildFile; fileRef = 06B11FAE1D811B7000D14B02 /* Charts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 06B120431D811B8900D14B02 /* Animator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FB11D811B8900D14B02 /* Animator.swift */; }; - 06B120441D811B8900D14B02 /* ChartAnimationEasing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FB21D811B8900D14B02 /* ChartAnimationEasing.swift */; }; - 06B120451D811B8900D14B02 /* BarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FB41D811B8900D14B02 /* BarChartView.swift */; }; - 06B120461D811B8900D14B02 /* BarLineChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FB51D811B8900D14B02 /* BarLineChartViewBase.swift */; }; - 06B120471D811B8900D14B02 /* BubbleChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FB61D811B8900D14B02 /* BubbleChartView.swift */; }; - 06B120481D811B8900D14B02 /* CandleStickChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FB71D811B8900D14B02 /* CandleStickChartView.swift */; }; - 06B120491D811B8900D14B02 /* ChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FB81D811B8900D14B02 /* ChartViewBase.swift */; }; - 06B1204A1D811B8900D14B02 /* CombinedChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FB91D811B8900D14B02 /* CombinedChartView.swift */; }; - 06B1204B1D811B8900D14B02 /* HorizontalBarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FBA1D811B8900D14B02 /* HorizontalBarChartView.swift */; }; - 06B1204C1D811B8900D14B02 /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FBB1D811B8900D14B02 /* LineChartView.swift */; }; - 06B1204D1D811B8900D14B02 /* PieChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FBC1D811B8900D14B02 /* PieChartView.swift */; }; - 06B1204E1D811B8900D14B02 /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FBD1D811B8900D14B02 /* PieRadarChartViewBase.swift */; }; - 06B1204F1D811B8900D14B02 /* RadarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FBE1D811B8900D14B02 /* RadarChartView.swift */; }; - 06B120501D811B8900D14B02 /* ScatterChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FBF1D811B8900D14B02 /* ScatterChartView.swift */; }; - 06B120511D811B8900D14B02 /* AxisBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FC11D811B8900D14B02 /* AxisBase.swift */; }; - 06B120521D811B8900D14B02 /* ChartLimitLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FC21D811B8900D14B02 /* ChartLimitLine.swift */; }; - 06B120531D811B8900D14B02 /* ComponentBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FC31D811B8900D14B02 /* ComponentBase.swift */; }; - 06B120541D811B8900D14B02 /* IMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FC41D811B8900D14B02 /* IMarker.swift */; }; - 06B120551D811B8900D14B02 /* Legend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FC51D811B8900D14B02 /* Legend.swift */; }; - 06B120561D811B8900D14B02 /* LegendEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FC61D811B8900D14B02 /* LegendEntry.swift */; }; - 06B120571D811B8900D14B02 /* MarkerImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FC71D811B8900D14B02 /* MarkerImage.swift */; }; - 06B120581D811B8900D14B02 /* MarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FC81D811B8900D14B02 /* MarkerView.swift */; }; - 06B120591D811B8900D14B02 /* XAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FC91D811B8900D14B02 /* XAxis.swift */; }; - 06B1205A1D811B8900D14B02 /* YAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FCA1D811B8900D14B02 /* YAxis.swift */; }; - 06B1205B1D811B8900D14B02 /* ChartBaseDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FCD1D811B8900D14B02 /* ChartBaseDataSet.swift */; }; - 06B1205C1D811B8900D14B02 /* BarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FCF1D811B8900D14B02 /* BarChartData.swift */; }; - 06B1205D1D811B8900D14B02 /* BarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FD01D811B8900D14B02 /* BarChartDataEntry.swift */; }; - 06B1205E1D811B8900D14B02 /* BarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FD11D811B8900D14B02 /* BarChartDataSet.swift */; }; - 06B1205F1D811B8900D14B02 /* BarLineScatterCandleBubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FD21D811B8900D14B02 /* BarLineScatterCandleBubbleChartData.swift */; }; - 06B120601D811B8900D14B02 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FD31D811B8900D14B02 /* BarLineScatterCandleBubbleChartDataSet.swift */; }; - 06B120611D811B8900D14B02 /* BubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FD41D811B8900D14B02 /* BubbleChartData.swift */; }; - 06B120621D811B8900D14B02 /* BubbleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FD51D811B8900D14B02 /* BubbleChartDataEntry.swift */; }; - 06B120631D811B8900D14B02 /* BubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FD61D811B8900D14B02 /* BubbleChartDataSet.swift */; }; - 06B120641D811B8900D14B02 /* CandleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FD71D811B8900D14B02 /* CandleChartData.swift */; }; - 06B120651D811B8900D14B02 /* CandleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FD81D811B8900D14B02 /* CandleChartDataEntry.swift */; }; - 06B120661D811B8900D14B02 /* CandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FD91D811B8900D14B02 /* CandleChartDataSet.swift */; }; - 06B120671D811B8900D14B02 /* ChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FDA1D811B8900D14B02 /* ChartData.swift */; }; - 06B120681D811B8900D14B02 /* ChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FDB1D811B8900D14B02 /* ChartDataEntry.swift */; }; - 06B120691D811B8900D14B02 /* ChartDataEntryBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FDC1D811B8900D14B02 /* ChartDataEntryBase.swift */; }; - 06B1206A1D811B8900D14B02 /* ChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FDD1D811B8900D14B02 /* ChartDataSet.swift */; }; - 06B1206B1D811B8900D14B02 /* CombinedChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FDE1D811B8900D14B02 /* CombinedChartData.swift */; }; - 06B1206C1D811B8900D14B02 /* LineChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FDF1D811B8900D14B02 /* LineChartData.swift */; }; - 06B1206D1D811B8900D14B02 /* LineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FE01D811B8900D14B02 /* LineChartDataSet.swift */; }; - 06B1206E1D811B8900D14B02 /* LineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FE11D811B8900D14B02 /* LineRadarChartDataSet.swift */; }; - 06B1206F1D811B8900D14B02 /* LineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FE21D811B8900D14B02 /* LineScatterCandleRadarChartDataSet.swift */; }; - 06B120701D811B8900D14B02 /* PieChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FE31D811B8900D14B02 /* PieChartData.swift */; }; - 06B120711D811B8900D14B02 /* PieChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FE41D811B8900D14B02 /* PieChartDataEntry.swift */; }; - 06B120721D811B8900D14B02 /* PieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FE51D811B8900D14B02 /* PieChartDataSet.swift */; }; - 06B120731D811B8900D14B02 /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FE61D811B8900D14B02 /* RadarChartData.swift */; }; - 06B120741D811B8900D14B02 /* RadarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FE71D811B8900D14B02 /* RadarChartDataEntry.swift */; }; - 06B120751D811B8900D14B02 /* RadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FE81D811B8900D14B02 /* RadarChartDataSet.swift */; }; - 06B120761D811B8900D14B02 /* ScatterChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FE91D811B8900D14B02 /* ScatterChartData.swift */; }; - 06B120771D811B8900D14B02 /* ScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FEA1D811B8900D14B02 /* ScatterChartDataSet.swift */; }; - 06B120781D811B8900D14B02 /* IBarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FEC1D811B8900D14B02 /* IBarChartDataSet.swift */; }; - 06B120791D811B8900D14B02 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FED1D811B8900D14B02 /* IBarLineScatterCandleBubbleChartDataSet.swift */; }; - 06B1207A1D811B8900D14B02 /* IBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FEE1D811B8900D14B02 /* IBubbleChartDataSet.swift */; }; - 06B1207B1D811B8900D14B02 /* ICandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FEF1D811B8900D14B02 /* ICandleChartDataSet.swift */; }; - 06B1207C1D811B8900D14B02 /* IChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FF01D811B8900D14B02 /* IChartDataSet.swift */; }; - 06B1207D1D811B8900D14B02 /* ILineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FF11D811B8900D14B02 /* ILineChartDataSet.swift */; }; - 06B1207E1D811B8900D14B02 /* ILineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FF21D811B8900D14B02 /* ILineRadarChartDataSet.swift */; }; - 06B1207F1D811B8900D14B02 /* ILineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FF31D811B8900D14B02 /* ILineScatterCandleRadarChartDataSet.swift */; }; - 06B120801D811B8900D14B02 /* IPieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FF41D811B8900D14B02 /* IPieChartDataSet.swift */; }; - 06B120811D811B8900D14B02 /* IRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FF51D811B8900D14B02 /* IRadarChartDataSet.swift */; }; - 06B120821D811B8900D14B02 /* IScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FF61D811B8900D14B02 /* IScatterChartDataSet.swift */; }; - 06B120831D811B8900D14B02 /* DataApproximator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FF81D811B8900D14B02 /* DataApproximator.swift */; }; - 06B120841D811B8900D14B02 /* DefaultAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FFA1D811B8900D14B02 /* DefaultAxisValueFormatter.swift */; }; - 06B120851D811B8900D14B02 /* DefaultFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FFB1D811B8900D14B02 /* DefaultFillFormatter.swift */; }; - 06B120861D811B8900D14B02 /* DefaultValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FFC1D811B8900D14B02 /* DefaultValueFormatter.swift */; }; - 06B120871D811B8900D14B02 /* IAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FFD1D811B8900D14B02 /* IAxisValueFormatter.swift */; }; - 06B120881D811B8900D14B02 /* IFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FFE1D811B8900D14B02 /* IFillFormatter.swift */; }; - 06B120891D811B8900D14B02 /* IValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B11FFF1D811B8900D14B02 /* IValueFormatter.swift */; }; - 06B1208A1D811B8900D14B02 /* BarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120011D811B8900D14B02 /* BarHighlighter.swift */; }; - 06B1208B1D811B8900D14B02 /* ChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120021D811B8900D14B02 /* ChartHighlighter.swift */; }; - 06B1208C1D811B8900D14B02 /* CombinedHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120031D811B8900D14B02 /* CombinedHighlighter.swift */; }; - 06B1208D1D811B8900D14B02 /* Highlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120041D811B8900D14B02 /* Highlight.swift */; }; - 06B1208E1D811B8900D14B02 /* HorizontalBarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120051D811B8900D14B02 /* HorizontalBarHighlighter.swift */; }; - 06B1208F1D811B8900D14B02 /* IHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120061D811B8900D14B02 /* IHighlighter.swift */; }; - 06B120901D811B8900D14B02 /* PieHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120071D811B8900D14B02 /* PieHighlighter.swift */; }; - 06B120911D811B8900D14B02 /* PieRadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120081D811B8900D14B02 /* PieRadarHighlighter.swift */; }; - 06B120921D811B8900D14B02 /* RadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120091D811B8900D14B02 /* RadarHighlighter.swift */; }; - 06B120931D811B8900D14B02 /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1200A1D811B8900D14B02 /* Range.swift */; }; - 06B120941D811B8900D14B02 /* BarChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1200C1D811B8900D14B02 /* BarChartDataProvider.swift */; }; - 06B120951D811B8900D14B02 /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1200D1D811B8900D14B02 /* BarLineScatterCandleBubbleChartDataProvider.swift */; }; - 06B120961D811B8900D14B02 /* BubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1200E1D811B8900D14B02 /* BubbleChartDataProvider.swift */; }; - 06B120971D811B8900D14B02 /* CandleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1200F1D811B8900D14B02 /* CandleChartDataProvider.swift */; }; - 06B120981D811B8900D14B02 /* ChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120101D811B8900D14B02 /* ChartDataProvider.swift */; }; - 06B120991D811B8900D14B02 /* CombinedChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120111D811B8900D14B02 /* CombinedChartDataProvider.swift */; }; - 06B1209A1D811B8900D14B02 /* LineChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120121D811B8900D14B02 /* LineChartDataProvider.swift */; }; - 06B1209B1D811B8900D14B02 /* ScatterChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120131D811B8900D14B02 /* ScatterChartDataProvider.swift */; }; - 06B1209C1D811B8900D14B02 /* AnimatedMoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120151D811B8900D14B02 /* AnimatedMoveViewJob.swift */; }; - 06B1209D1D811B8900D14B02 /* AnimatedViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120161D811B8900D14B02 /* AnimatedViewPortJob.swift */; }; - 06B1209E1D811B8900D14B02 /* AnimatedZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120171D811B8900D14B02 /* AnimatedZoomViewJob.swift */; }; - 06B1209F1D811B8900D14B02 /* MoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120181D811B8900D14B02 /* MoveViewJob.swift */; }; - 06B120A01D811B8900D14B02 /* ViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120191D811B8900D14B02 /* ViewPortJob.swift */; }; - 06B120A11D811B8900D14B02 /* ZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1201A1D811B8900D14B02 /* ZoomViewJob.swift */; }; - 06B120A21D811B8900D14B02 /* AxisRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1201C1D811B8900D14B02 /* AxisRendererBase.swift */; }; - 06B120A31D811B8900D14B02 /* BarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1201D1D811B8900D14B02 /* BarChartRenderer.swift */; }; - 06B120A41D811B8900D14B02 /* BarLineScatterCandleBubbleRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1201E1D811B8900D14B02 /* BarLineScatterCandleBubbleRenderer.swift */; }; - 06B120A51D811B8900D14B02 /* BubbleChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1201F1D811B8900D14B02 /* BubbleChartRenderer.swift */; }; - 06B120A61D811B8900D14B02 /* CandleStickChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120201D811B8900D14B02 /* CandleStickChartRenderer.swift */; }; - 06B120A71D811B8900D14B02 /* ChartDataRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120211D811B8900D14B02 /* ChartDataRendererBase.swift */; }; - 06B120A81D811B8900D14B02 /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120221D811B8900D14B02 /* CombinedChartRenderer.swift */; }; - 06B120A91D811B8900D14B02 /* HorizontalBarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120231D811B8900D14B02 /* HorizontalBarChartRenderer.swift */; }; - 06B120AA1D811B8900D14B02 /* LegendRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120241D811B8900D14B02 /* LegendRenderer.swift */; }; - 06B120AB1D811B8900D14B02 /* LineChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120251D811B8900D14B02 /* LineChartRenderer.swift */; }; - 06B120AC1D811B8900D14B02 /* LineRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120261D811B8900D14B02 /* LineRadarRenderer.swift */; }; - 06B120AD1D811B8900D14B02 /* LineScatterCandleRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120271D811B8900D14B02 /* LineScatterCandleRadarRenderer.swift */; }; - 06B120AE1D811B8900D14B02 /* PieChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120281D811B8900D14B02 /* PieChartRenderer.swift */; }; - 06B120AF1D811B8900D14B02 /* RadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120291D811B8900D14B02 /* RadarChartRenderer.swift */; }; - 06B120B01D811B8900D14B02 /* Renderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1202A1D811B8900D14B02 /* Renderer.swift */; }; - 06B120B11D811B8900D14B02 /* ChevronDownShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1202C1D811B8900D14B02 /* ChevronDownShapeRenderer.swift */; }; - 06B120B21D811B8900D14B02 /* ChevronUpShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1202D1D811B8900D14B02 /* ChevronUpShapeRenderer.swift */; }; - 06B120B31D811B8900D14B02 /* CircleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1202E1D811B8900D14B02 /* CircleShapeRenderer.swift */; }; - 06B120B41D811B8900D14B02 /* CrossShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1202F1D811B8900D14B02 /* CrossShapeRenderer.swift */; }; - 06B120B51D811B8900D14B02 /* IShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120301D811B8900D14B02 /* IShapeRenderer.swift */; }; - 06B120B61D811B8900D14B02 /* SquareShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120311D811B8900D14B02 /* SquareShapeRenderer.swift */; }; - 06B120B71D811B8900D14B02 /* TriangleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120321D811B8900D14B02 /* TriangleShapeRenderer.swift */; }; - 06B120B81D811B8900D14B02 /* XShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120331D811B8900D14B02 /* XShapeRenderer.swift */; }; - 06B120B91D811B8900D14B02 /* ScatterChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120341D811B8900D14B02 /* ScatterChartRenderer.swift */; }; - 06B120BA1D811B8900D14B02 /* XAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120351D811B8900D14B02 /* XAxisRenderer.swift */; }; - 06B120BB1D811B8900D14B02 /* XAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120361D811B8900D14B02 /* XAxisRendererHorizontalBarChart.swift */; }; - 06B120BC1D811B8900D14B02 /* XAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120371D811B8900D14B02 /* XAxisRendererRadarChart.swift */; }; - 06B120BD1D811B8900D14B02 /* YAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120381D811B8900D14B02 /* YAxisRenderer.swift */; }; - 06B120BE1D811B8900D14B02 /* YAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120391D811B8900D14B02 /* YAxisRendererHorizontalBarChart.swift */; }; - 06B120BF1D811B8900D14B02 /* YAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1203A1D811B8900D14B02 /* YAxisRendererRadarChart.swift */; }; - 06B120C01D811B8900D14B02 /* ChartColorTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1203C1D811B8900D14B02 /* ChartColorTemplates.swift */; }; - 06B120C11D811B8900D14B02 /* ChartUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1203D1D811B8900D14B02 /* ChartUtils.swift */; }; - 06B120C21D811B8900D14B02 /* Fill.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1203E1D811B8900D14B02 /* Fill.swift */; }; - 06B120C31D811B8900D14B02 /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B1203F1D811B8900D14B02 /* Platform.swift */; }; - 06B120C41D811B8900D14B02 /* Transformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120401D811B8900D14B02 /* Transformer.swift */; }; - 06B120C51D811B8900D14B02 /* TransformerHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120411D811B8900D14B02 /* TransformerHorizontalBarChart.swift */; }; - 06B120C61D811B8900D14B02 /* ViewPortHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B120421D811B8900D14B02 /* ViewPortHandler.swift */; }; - 06B3C0F71D99F85400B1DF43 /* BarChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B3C0F31D99F85400B1DF43 /* BarChartTests.swift */; }; - 06B3C0F81D99F85400B1DF43 /* LineChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06B3C0F41D99F85400B1DF43 /* LineChartTests.swift */; }; - 5B56A9CD1D905EB300F58178 /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B56A9CC1D905EB300F58178 /* Description.swift */; }; - 5BF8813B1DDC4DF70033370C /* IndexAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF8813A1DDC4DF70033370C /* IndexAxisValueFormatter.swift */; }; - D8A58A411DCE2EF8007BB012 /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D8A58A401DCE2EF8007BB012 /* Media.xcassets */; }; + 005C0F30B90039BB263CC09C /* BarChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B3EC8B2C8773CAC101E7602 /* BarChartDataProvider.swift */; }; + 01D0E7A3BBE960F3D0521C47 /* HorizontalBarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E589BDED5BCBDA3DD513DF2E /* HorizontalBarHighlighter.swift */; }; + 06906C3D3899AF3C9ED9A72C /* ChartDataEntryBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEFC467BF898951FC84F5620 /* ChartDataEntryBase.swift */; }; + 072313063701CBB1C6D8FA89 /* Transformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4CECECF10D0F9E6C6F1EADF /* Transformer.swift */; }; + 08A07712EDB571E1181B09DC /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B823EAAC1085D605F6853B3C /* PieRadarChartViewBase.swift */; }; + 09E3FB9BE8CA8B0299D577BB /* ScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01DA223D26779DE263719CBE /* ScatterChartDataSet.swift */; }; + 0AEBA5C5AC92953241274BFE /* ChartAnimationEasing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 921AE48B7930AB73B0BC3622 /* ChartAnimationEasing.swift */; }; + 0E78C9B270B82F430F2C4DFF /* XAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46B4D1787163393D707EC41E /* XAxisRendererHorizontalBarChart.swift */; }; + 0EC2659FE4759919DEDB4289 /* ChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44C0384291A7B7BAAF37054C /* ChartDataSet.swift */; }; + 0EC4920E6D62D7A277EF34F5 /* Fill.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1ECC9837848C09ED27D61B6 /* Fill.swift */; }; + 0FE64EA8621892B4ACFD0233 /* CandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10269C9C7DA0EB41AFF8179D /* CandleChartDataSet.swift */; }; + 1142DD089AD10AD7954FA888 /* LineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64316E9D8713E8205E8E2138 /* LineRadarChartDataSet.swift */; }; + 11B665756E905BEE10A01295 /* ChartDataRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56A98D84882867B6477E381 /* ChartDataRendererBase.swift */; }; + 12A460F5BACF0370935876FA /* MarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FCB684BEAE6CB77FD2B93A /* MarkerView.swift */; }; + 130F9478760D89A01878954F /* ILineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D550CF387F5245880BD5DC0C /* ILineChartDataSet.swift */; }; + 143E308EA31773820D35AB42 /* IAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92189F78A1B752D037836F76 /* IAxisValueFormatter.swift */; }; + 1486B2729EFA2D4ED659DE07 /* LineChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D791F8AEF54D65EFB82885D5 /* LineChartData.swift */; }; + 1992D1214A1C379F7084B1BE /* LineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F6029784CCA16923E0D40A7 /* LineScatterCandleRadarChartDataSet.swift */; }; + 1C9D51F1565BEADA1C60AD73 /* IndexAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65996B15286414897CFB54DE /* IndexAxisValueFormatter.swift */; }; + 1E2AB4085B35F6D495FC2795 /* PieHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BCB037E3E4632D32B172416 /* PieHighlighter.swift */; }; + 2133C9E6EA7DB4F09D9F2DAC /* ScatterChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E71ED326B1D0CE4EF0EDA3E /* ScatterChartView.swift */; }; + 2230C8E2C83AAC9DE76495B4 /* IRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A76C66149E5E54D0192EDEF /* IRadarChartDataSet.swift */; }; + 225F213C6F7215F8EB6292B5 /* PieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57095F04BE877E056F574A69 /* PieChartDataSet.swift */; }; + 23B8C89AEAFCCF6AEA3247C8 /* IScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC6FD8E0E0AD2219A80EB6CB /* IScatterChartDataSet.swift */; }; + 255FE5B497AE131B4BAF0FD2 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEDCE8799474F36EE86F2E7C /* IBarLineScatterCandleBubbleChartDataSet.swift */; }; + 268258CE356AE52A1D29BA46 /* ChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80F66082CE39F8C911700716 /* ChartData.swift */; }; + 2972AB282AF22E4447DBDDEC /* ScatterChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A864254C6C98A851E825E595 /* ScatterChartRenderer.swift */; }; + 2BD923143656FAC51F574F46 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F1FCAB00443E2AB277CBD25 /* BarLineScatterCandleBubbleChartDataSet.swift */; }; + 2BED5962FC328365F9EFE04A /* Animator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E28662F0CC85BA5E4D38F1D /* Animator.swift */; }; + 2D1A4882F20E8DA1B05086DD /* LegendEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7C8584612950FF07CD0393 /* LegendEntry.swift */; }; + 2E36DC7E689F160DC88BBCC5 /* RadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0714E1877E4AD5B6661F2AD /* RadarHighlighter.swift */; }; + 308137F9C0CF2B7A0372D6E8 /* CandleStickChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95A43F3797B98EFCB599A5A5 /* CandleStickChartView.swift */; }; + 3468AC966A4A206BD8F43903 /* DefaultFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C2E16EA4C8F49E027A2F60 /* DefaultFillFormatter.swift */; }; + 35A9F009C73FCF279578B376 /* IBarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63246976C392BF9B64BCF258 /* IBarChartDataSet.swift */; }; + 369A2D30FB61620C6FBA4754 /* HorizontalBarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FA17F5F3DF8E28312431A7A /* HorizontalBarChartView.swift */; }; + 36C33400348CA56BB48D5B22 /* YAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58BDDF3816E546E58DDDFC32 /* YAxisRendererHorizontalBarChart.swift */; }; + 39C2BE4577CFA1419B6638BC /* SquareShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 108629BC8694704357C8CE5F /* SquareShapeRenderer.swift */; }; + 442CEC159FCD65EC6ABEFCD8 /* XAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F3A6D4F74635182FE860669 /* XAxisRenderer.swift */; }; + 44D2CFF515D87AD2E4B90870 /* IFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7B9E373774F56E255EFF371 /* IFillFormatter.swift */; }; + 46FCCAF956979208C770B6C0 /* DefaultValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9536B2806512D7A92DABDC0 /* DefaultValueFormatter.swift */; }; + 493A66BBB5F3E4371FB39361 /* TransformerHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C4A1F34D7D988C582C75E68 /* TransformerHorizontalBarChart.swift */; }; + 4BECEE4BAEB476CCE0255839 /* BarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E900D0DA64F61906B3A972B6 /* BarChartRenderer.swift */; }; + 4CC1719914125CF01E93D969 /* CombinedHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE4090926DF0D2F1DF4B704F /* CombinedHighlighter.swift */; }; + 4DCE8DE16A155C396A61DD14 /* YAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29F47B7715AE71224707C537 /* YAxis.swift */; }; + 4E1BC25E708D7D689EB67B95 /* CandleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = A32C5E3102705F2870B96F79 /* CandleChartDataEntry.swift */; }; + 509AC4C6E1E536203C75519E /* ChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 551F33797F809B771301C195 /* ChartViewBase.swift */; }; + 50E8388181E2459070AC375D /* ChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD3DB32A6A1E1688123C74FD /* ChartDataProvider.swift */; }; + 51FAFA98725F06E01652C980 /* BubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3FBF17C465CE2D517E8434D /* BubbleChartDataSet.swift */; }; + 54AC4F50C05F371B148E8A91 /* CandleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C783070D5024BB05A18D40BC /* CandleChartDataProvider.swift */; }; + 552FBE36C7BC655C38B09143 /* LegendRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3DB00B9CD55F694BE9248DE /* LegendRenderer.swift */; }; + 5AA082FD22A0D20841C80162 /* BubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9B11503D9F796E8F595162E /* BubbleChartData.swift */; }; + 63BAACA8931D14A608769360 /* ILineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 669F55F7D0E1BF19D4B77350 /* ILineRadarChartDataSet.swift */; }; + 653022BC36654E7387295464 /* PieChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62976B4BA67502A246C835CB /* PieChartDataEntry.swift */; }; + 65ECC1C648CB25D8FA44CB42 /* BarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A44639A41BB3B018840AF18 /* BarHighlighter.swift */; }; + 68C35C82535E7020A718EE1C /* PieChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 870AD43CF130D5D1C8027204 /* PieChartData.swift */; }; + 69E96F71CA26A2D1435ACB93 /* ChartLimitLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74BB5C736918A4E468891AD /* ChartLimitLine.swift */; }; + 6B6A73F822415C89E982A7F3 /* LineScatterCandleRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5682800FD192526C848311DD /* LineScatterCandleRadarRenderer.swift */; }; + 6BA29A3B85C5B26613EF890B /* AxisRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 330B982A603F02ACF2B3BF50 /* AxisRendererBase.swift */; }; + 6CAA18D1987552B252713159 /* BarChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3924333873B79C3FD65EF769 /* BarChartTests.swift */; }; + 6E650F98D3642AD4A35A57B1 /* BarLineScatterCandleBubbleRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7496CB3625CD04C2F0EF32D6 /* BarLineScatterCandleBubbleRenderer.swift */; }; + 6F78DF2FA8AE178940E682BE /* RadarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E03E58F7CB004886241B48F /* RadarChartView.swift */; }; + 6F90773A0B6D242A532898CA /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF5EB8DDC7477A6FF777F14 /* Description.swift */; }; + 707BD8B3A9AC29A5744F35E5 /* CandleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C968BFD307DE10BB78EE199 /* CandleChartData.swift */; }; + 718FCE8A805306DCF7252C9E /* Charts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46E69EF766B94AF3A39A7685 /* Charts.framework */; }; + 720E258628568FBC465283A1 /* PieRadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF8B64973E23097CC929AFA8 /* PieRadarHighlighter.swift */; }; + 733A21A4F11900F1D01FD786 /* Charts.h in Headers */ = {isa = PBXBuildFile; fileRef = FE05FD9A0072660A9D3E7983 /* Charts.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 74219D78A8A1DC65C4E3B669 /* Highlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = E03001CA8FFE8AD77585E075 /* Highlight.swift */; }; + 7423BD75D10028298C72000E /* IBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4BFEFFE56F1711A761CE159 /* IBubbleChartDataSet.swift */; }; + 766055D10C91B2AE4DDA1D0F /* RadarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE3063C08937E060E2D9160C /* RadarChartDataEntry.swift */; }; + 76BC27AFAD431BA80B5AD478 /* RadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB06C3A5B7098E78C4BFAC4 /* RadarChartRenderer.swift */; }; + 79C7A52225B62A0460E113B4 /* ViewPortHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17494E808658CD9E1061FFA3 /* ViewPortHandler.swift */; }; + 7CC75938F8C6DA0E10010AC7 /* LineRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F3536DBBF2345532BC7669B /* LineRadarRenderer.swift */; }; + 7DF82423B2D0B36DD6EF68C3 /* IHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F4D9CD5DDF41101892A6DDC /* IHighlighter.swift */; }; + 7F43F7E4F0E9D5070384C60B /* XAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AD7B089A211288BC7F27536 /* XAxisRendererRadarChart.swift */; }; + 82C88896605FB53C2BBEFE6D /* MarkerImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF05F5525C471B27F31B8289 /* MarkerImage.swift */; }; + 87A00389DC37682EB0587361 /* RadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70FAC75EA27D5A2EDB5DA85 /* RadarChartDataSet.swift */; }; + 896C5052307EAE609B3C9371 /* PieChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F38FC51A5FD01E25F57B577 /* PieChartRenderer.swift */; }; + 8B3259AC8A525C9B9C378C6F /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6A1C8A414F3FE239827DF9B /* LineChartView.swift */; }; + 8CE471B6C29C727AA56F4863 /* TriangleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 105050D3D37FCAABB1C79710 /* TriangleShapeRenderer.swift */; }; + 8D20EAE2CDA357A63949EF6E /* BarLineChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E728B3DF368497D817BF75 /* BarLineChartViewBase.swift */; }; + 90945C09073B26274532B16E /* ICandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFC2E2F689AA8A307FED418E /* ICandleChartDataSet.swift */; }; + 910B631C21F51E3251269A28 /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 771D402037874303F699DC38 /* RadarChartData.swift */; }; + 94F1D922BFDCA0682A2106E1 /* BubbleChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC7995E0C9C4F33F3EE5CC3A /* BubbleChartRenderer.swift */; }; + 969438983603FBAB8F178CEC /* LineChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 256025862664CA428E01840B /* LineChartTests.swift */; }; + 96C0CB726AED7262B833C5A5 /* LineChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF6DE50212A6E4344805288 /* LineChartRenderer.swift */; }; + 9E7350B6286FA8CA9853E83B /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D6EFE6DE14B144522DBEC25 /* CombinedChartRenderer.swift */; }; + A0C490C7C6C3011A2D27A6C6 /* BubbleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6903776E41A0F47B70A50AF /* BubbleChartDataEntry.swift */; }; + A5D1CE0DAE3014D1172DA25A /* CombinedChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B7E9097209550C98B703D35 /* CombinedChartDataProvider.swift */; }; + A7F2C09F6E9C079443B75296 /* AxisBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A9B2FE97C8C777A674C3D62 /* AxisBase.swift */; }; + A85225CB2CD56D3A8B6A2A90 /* XShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D76A9CDA402721AA92EE331 /* XShapeRenderer.swift */; }; + A9B542B57C6ADF07382FB3FB /* ComponentBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C20E02263A796EEEF5BFF9C2 /* ComponentBase.swift */; }; + ABF7BB919BB4E09E2F0F334F /* IChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D09EF5E8A5D34CE92BFEF9A /* IChartDataSet.swift */; }; + AC60152B982EAFE8A90DAAC4 /* LineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 466660ED2EC61BAF6977E05F /* LineChartDataSet.swift */; }; + ADED6329E0EF4B175393FDD8 /* BarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437FB9556010D9185DA2911D /* BarChartDataEntry.swift */; }; + ADFEFB1E41234B94FEA24566 /* AnimatedZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E84FF13690C87B851E9D4A7 /* AnimatedZoomViewJob.swift */; }; + B1629D7C69F65A9301361673 /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63DD2AD5AFC6A69F542C711B /* Range.swift */; }; + B60B915377BF81E6F8FBE196 /* ViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCD6CECB85C6F8A52483E4A /* ViewPortJob.swift */; }; + B6954A329F734B0D55C6C56E /* PieChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4082BEB6E9CCC68ADEB65ACB /* PieChartView.swift */; }; + B7258870917D6C761191C2E9 /* IValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F9EFCF1374CB627942BE05A /* IValueFormatter.swift */; }; + B75F7CC7313FA00407747290 /* ChartUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71375616D924B5E0E10055ED /* ChartUtils.swift */; }; + BA2F43A78AD1400F8BECA357 /* IShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C72B66BC2402D8A2C6D781AC /* IShapeRenderer.swift */; }; + BB9E5479B3B4517978C1A13D /* YAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983471C084DEE134AC889C69 /* YAxisRenderer.swift */; }; + BC3995CB7EBC502CE71A89D3 /* ChevronDownShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F3BA870CEA772438553529A /* ChevronDownShapeRenderer.swift */; }; + BD8D78D8B26A3B3A87B54B99 /* AnimatedMoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC16599CC5F22F5A2B0A1F8 /* AnimatedMoveViewJob.swift */; }; + C19DD82E1483AF4C9A24E230 /* ChartBaseDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16CB9FF9FDF77A0C9BE9946 /* ChartBaseDataSet.swift */; }; + C2AFB4C82ED84EF1D944C3BD /* LineChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DE1FDA8509235D7E272CBC2 /* LineChartDataProvider.swift */; }; + C3647550473CEBC072F2EAF1 /* ChevronUpShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8474B5177C777286153F5859 /* ChevronUpShapeRenderer.swift */; }; + C57F7BD809195465B9E70685 /* ChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42E6C6F8026177DB5EB69A66 /* ChartDataEntry.swift */; }; + C71785FFAA2F2CF25FD21F30 /* BubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E24D7EEA82A893EBBE27882 /* BubbleChartDataProvider.swift */; }; + C7B8F8DED72C9394AA1227ED /* HorizontalBarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6906DD6D28D6C7226833585A /* HorizontalBarChartRenderer.swift */; }; + C894F93A974CD1F921D0F446 /* ScatterChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72786BC1CB2C4ED1858FD4F7 /* ScatterChartData.swift */; }; + CEA939DFCD02953FFA285990 /* AnimatedViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D826DBA70947C847354B011 /* AnimatedViewPortJob.swift */; }; + D147B92A77E257FE015075C2 /* DataApproximator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28FCA501619C01FCE44BB3C4 /* DataApproximator.swift */; }; + D36E5A7AD311BB93A011D75E /* ZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35E32810A6ED200A893C8811 /* ZoomViewJob.swift */; }; + D565E57B0C83E315C913D979 /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3DB1ADB25B8EE00D670597C0 /* Media.xcassets */; }; + D66C3D070239CF161A7CEDB2 /* CircleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C9873D834BD9446DCBD88B /* CircleShapeRenderer.swift */; }; + D868000D81CF4DA2FF804230 /* DefaultAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BA5E67E0C1A36E25785C197 /* DefaultAxisValueFormatter.swift */; }; + DB91F074AEA21362DF80863B /* BarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C306AB21A7FFA4608349917 /* BarChartDataSet.swift */; }; + DC7897BF3E4CEF01A14BC47A /* ChartUtilsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 569DAB96951B01DF38B71CDF /* ChartUtilsTests.swift */; }; + DD0B94A153EDB846E93293E2 /* MoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = A30F2546C4D51E23B8C23AA9 /* MoveViewJob.swift */; }; + DD5DB6F369B070B787513365 /* BarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F84DF3598531694C567D4DA /* BarChartData.swift */; }; + DDBEAA65509435155E287373 /* ScatterChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92F04F75EDAD3C4A98A31526 /* ScatterChartDataProvider.swift */; }; + DE8B9684CD729E7097025856 /* IMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B005E477BC1846F0C12807F /* IMarker.swift */; }; + DEDB8D7B8032580B8B01CFE5 /* XAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19480DF7CC0538A529972E83 /* XAxis.swift */; }; + E22369BCD81AD64619FAE3B6 /* ChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79114B8C62A2E95836E36712 /* ChartHighlighter.swift */; }; + E4B8FDE7081EF22C4529D628 /* YAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79D685F9B5268D2E817D0D90 /* YAxisRendererRadarChart.swift */; }; + E740FB705944655AEDC2CF96 /* IPieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 720FD446EC4A5BC344EDE951 /* IPieChartDataSet.swift */; }; + ED0899005F6784C86FD499FC /* BarLineScatterCandleBubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFD9181255A5600E14DF9363 /* BarLineScatterCandleBubbleChartData.swift */; }; + EE3B04B6C5F9209FE5642C02 /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 372A8ED813FDE992A046448A /* Platform.swift */; }; + EF889355A3A5F21D8478CCEB /* CrossShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ADB6DC89F00931580D1C00A /* CrossShapeRenderer.swift */; }; + F00640DA4C6A74D51B9EFBC8 /* ILineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68181468776BE8E69970A47A /* ILineScatterCandleRadarChartDataSet.swift */; }; + F235A3B8989F0AB6F5D924F3 /* BarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05DB9869CA6EEE4C6E06A3FB /* BarChartView.swift */; }; + F24723FC6A4BA9AF18D6EB82 /* Legend.swift in Sources */ = {isa = PBXBuildFile; fileRef = B41F3486B3AEF2F237819280 /* Legend.swift */; }; + F3947C20CD8B09841B750D54 /* Renderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78AE6B35EF05E81122CAAEFA /* Renderer.swift */; }; + F45631E7C0DFE9321DB96891 /* ChartColorTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6DDD2F4CAFF90385DE59D4 /* ChartColorTemplates.swift */; }; + F5AF34DB8AAEACBEE560C057 /* CandleStickChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7C1B9B0ECA4A3D8E3193D49 /* CandleStickChartRenderer.swift */; }; + F5E349C4D4D1BE11B492E3CB /* BubbleChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DB3E824CE6958EFDC0E010A /* BubbleChartView.swift */; }; + F977CF3DBB6EABD38CF47C99 /* CombinedChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D82F5451A8B27204F87F8BA /* CombinedChartView.swift */; }; + FA29A2213BABD5C18B776395 /* CombinedChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A9B5EA6E98E20A126D600CC /* CombinedChartData.swift */; }; + FEC6B26E4D2B1F3380A0FB1C /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE68DA203280938B1D0DF5A4 /* BarLineScatterCandleBubbleChartDataProvider.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 06165F301D8110E600722320 /* PBXContainerItemProxy */ = { + 35F78304E8930C633456BF6E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 06165F1B1D8110E600722320 /* Project object */; + containerPortal = 9FCA2B965470A4CDBE439A35 /* Project object */; proxyType = 1; - remoteGlobalIDString = 06165F231D8110E600722320; + remoteGlobalIDString = 5FE6E04B0BD1A05295AA30D4; remoteInfo = Charts; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 06165F241D8110E600722320 /* Charts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Charts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 06165F2E1D8110E600722320 /* ChartsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ChartsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 063FF0401D8CC9940094A042 /* Carthage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Carthage.xcconfig; sourceTree = ""; }; - 06761B5D1D98176000D5CE09 /* ChartUtilsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ChartUtilsTests.swift; path = Tests/Charts/ChartUtilsTests.swift; sourceTree = SOURCE_ROOT; }; - 06B11FAC1D811B6600D14B02 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Source/Supporting Files/Info.plist"; sourceTree = ""; }; - 06B11FAE1D811B7000D14B02 /* Charts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Charts.h; path = "Source/Supporting Files/Charts.h"; sourceTree = ""; }; - 06B11FB11D811B8900D14B02 /* Animator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Animator.swift; sourceTree = ""; }; - 06B11FB21D811B8900D14B02 /* ChartAnimationEasing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartAnimationEasing.swift; sourceTree = ""; }; - 06B11FB41D811B8900D14B02 /* BarChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarChartView.swift; sourceTree = ""; }; - 06B11FB51D811B8900D14B02 /* BarLineChartViewBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarLineChartViewBase.swift; sourceTree = ""; }; - 06B11FB61D811B8900D14B02 /* BubbleChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BubbleChartView.swift; sourceTree = ""; }; - 06B11FB71D811B8900D14B02 /* CandleStickChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CandleStickChartView.swift; sourceTree = ""; }; - 06B11FB81D811B8900D14B02 /* ChartViewBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartViewBase.swift; sourceTree = ""; }; - 06B11FB91D811B8900D14B02 /* CombinedChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CombinedChartView.swift; sourceTree = ""; }; - 06B11FBA1D811B8900D14B02 /* HorizontalBarChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalBarChartView.swift; sourceTree = ""; }; - 06B11FBB1D811B8900D14B02 /* LineChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineChartView.swift; sourceTree = ""; }; - 06B11FBC1D811B8900D14B02 /* PieChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PieChartView.swift; sourceTree = ""; }; - 06B11FBD1D811B8900D14B02 /* PieRadarChartViewBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PieRadarChartViewBase.swift; sourceTree = ""; }; - 06B11FBE1D811B8900D14B02 /* RadarChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadarChartView.swift; sourceTree = ""; }; - 06B11FBF1D811B8900D14B02 /* ScatterChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScatterChartView.swift; sourceTree = ""; }; - 06B11FC11D811B8900D14B02 /* AxisBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AxisBase.swift; sourceTree = ""; }; - 06B11FC21D811B8900D14B02 /* ChartLimitLine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartLimitLine.swift; sourceTree = ""; }; - 06B11FC31D811B8900D14B02 /* ComponentBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ComponentBase.swift; sourceTree = ""; }; - 06B11FC41D811B8900D14B02 /* IMarker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IMarker.swift; sourceTree = ""; }; - 06B11FC51D811B8900D14B02 /* Legend.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Legend.swift; sourceTree = ""; }; - 06B11FC61D811B8900D14B02 /* LegendEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegendEntry.swift; sourceTree = ""; }; - 06B11FC71D811B8900D14B02 /* MarkerImage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MarkerImage.swift; sourceTree = ""; }; - 06B11FC81D811B8900D14B02 /* MarkerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MarkerView.swift; sourceTree = ""; }; - 06B11FC91D811B8900D14B02 /* XAxis.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XAxis.swift; sourceTree = ""; }; - 06B11FCA1D811B8900D14B02 /* YAxis.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YAxis.swift; sourceTree = ""; }; - 06B11FCD1D811B8900D14B02 /* ChartBaseDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartBaseDataSet.swift; sourceTree = ""; }; - 06B11FCF1D811B8900D14B02 /* BarChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarChartData.swift; sourceTree = ""; }; - 06B11FD01D811B8900D14B02 /* BarChartDataEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarChartDataEntry.swift; sourceTree = ""; }; - 06B11FD11D811B8900D14B02 /* BarChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarChartDataSet.swift; sourceTree = ""; }; - 06B11FD21D811B8900D14B02 /* BarLineScatterCandleBubbleChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarLineScatterCandleBubbleChartData.swift; sourceTree = ""; }; - 06B11FD31D811B8900D14B02 /* BarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; - 06B11FD41D811B8900D14B02 /* BubbleChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BubbleChartData.swift; sourceTree = ""; }; - 06B11FD51D811B8900D14B02 /* BubbleChartDataEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BubbleChartDataEntry.swift; sourceTree = ""; }; - 06B11FD61D811B8900D14B02 /* BubbleChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BubbleChartDataSet.swift; sourceTree = ""; }; - 06B11FD71D811B8900D14B02 /* CandleChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CandleChartData.swift; sourceTree = ""; }; - 06B11FD81D811B8900D14B02 /* CandleChartDataEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CandleChartDataEntry.swift; sourceTree = ""; }; - 06B11FD91D811B8900D14B02 /* CandleChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CandleChartDataSet.swift; sourceTree = ""; }; - 06B11FDA1D811B8900D14B02 /* ChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartData.swift; sourceTree = ""; }; - 06B11FDB1D811B8900D14B02 /* ChartDataEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartDataEntry.swift; sourceTree = ""; }; - 06B11FDC1D811B8900D14B02 /* ChartDataEntryBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartDataEntryBase.swift; sourceTree = ""; }; - 06B11FDD1D811B8900D14B02 /* ChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartDataSet.swift; sourceTree = ""; }; - 06B11FDE1D811B8900D14B02 /* CombinedChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CombinedChartData.swift; sourceTree = ""; }; - 06B11FDF1D811B8900D14B02 /* LineChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineChartData.swift; sourceTree = ""; }; - 06B11FE01D811B8900D14B02 /* LineChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineChartDataSet.swift; sourceTree = ""; }; - 06B11FE11D811B8900D14B02 /* LineRadarChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineRadarChartDataSet.swift; sourceTree = ""; }; - 06B11FE21D811B8900D14B02 /* LineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; - 06B11FE31D811B8900D14B02 /* PieChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PieChartData.swift; sourceTree = ""; }; - 06B11FE41D811B8900D14B02 /* PieChartDataEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PieChartDataEntry.swift; sourceTree = ""; }; - 06B11FE51D811B8900D14B02 /* PieChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PieChartDataSet.swift; sourceTree = ""; }; - 06B11FE61D811B8900D14B02 /* RadarChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadarChartData.swift; sourceTree = ""; }; - 06B11FE71D811B8900D14B02 /* RadarChartDataEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadarChartDataEntry.swift; sourceTree = ""; }; - 06B11FE81D811B8900D14B02 /* RadarChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadarChartDataSet.swift; sourceTree = ""; }; - 06B11FE91D811B8900D14B02 /* ScatterChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScatterChartData.swift; sourceTree = ""; }; - 06B11FEA1D811B8900D14B02 /* ScatterChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScatterChartDataSet.swift; sourceTree = ""; }; - 06B11FEC1D811B8900D14B02 /* IBarChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IBarChartDataSet.swift; sourceTree = ""; }; - 06B11FED1D811B8900D14B02 /* IBarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IBarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; - 06B11FEE1D811B8900D14B02 /* IBubbleChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IBubbleChartDataSet.swift; sourceTree = ""; }; - 06B11FEF1D811B8900D14B02 /* ICandleChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ICandleChartDataSet.swift; sourceTree = ""; }; - 06B11FF01D811B8900D14B02 /* IChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IChartDataSet.swift; sourceTree = ""; }; - 06B11FF11D811B8900D14B02 /* ILineChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ILineChartDataSet.swift; sourceTree = ""; }; - 06B11FF21D811B8900D14B02 /* ILineRadarChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ILineRadarChartDataSet.swift; sourceTree = ""; }; - 06B11FF31D811B8900D14B02 /* ILineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ILineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; - 06B11FF41D811B8900D14B02 /* IPieChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IPieChartDataSet.swift; sourceTree = ""; }; - 06B11FF51D811B8900D14B02 /* IRadarChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IRadarChartDataSet.swift; sourceTree = ""; }; - 06B11FF61D811B8900D14B02 /* IScatterChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IScatterChartDataSet.swift; sourceTree = ""; }; - 06B11FF81D811B8900D14B02 /* DataApproximator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataApproximator.swift; sourceTree = ""; }; - 06B11FFA1D811B8900D14B02 /* DefaultAxisValueFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultAxisValueFormatter.swift; sourceTree = ""; }; - 06B11FFB1D811B8900D14B02 /* DefaultFillFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultFillFormatter.swift; sourceTree = ""; }; - 06B11FFC1D811B8900D14B02 /* DefaultValueFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultValueFormatter.swift; sourceTree = ""; }; - 06B11FFD1D811B8900D14B02 /* IAxisValueFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IAxisValueFormatter.swift; sourceTree = ""; }; - 06B11FFE1D811B8900D14B02 /* IFillFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IFillFormatter.swift; sourceTree = ""; }; - 06B11FFF1D811B8900D14B02 /* IValueFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IValueFormatter.swift; sourceTree = ""; }; - 06B120011D811B8900D14B02 /* BarHighlighter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarHighlighter.swift; sourceTree = ""; }; - 06B120021D811B8900D14B02 /* ChartHighlighter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartHighlighter.swift; sourceTree = ""; }; - 06B120031D811B8900D14B02 /* CombinedHighlighter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CombinedHighlighter.swift; sourceTree = ""; }; - 06B120041D811B8900D14B02 /* Highlight.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Highlight.swift; sourceTree = ""; }; - 06B120051D811B8900D14B02 /* HorizontalBarHighlighter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalBarHighlighter.swift; sourceTree = ""; }; - 06B120061D811B8900D14B02 /* IHighlighter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IHighlighter.swift; sourceTree = ""; }; - 06B120071D811B8900D14B02 /* PieHighlighter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PieHighlighter.swift; sourceTree = ""; }; - 06B120081D811B8900D14B02 /* PieRadarHighlighter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PieRadarHighlighter.swift; sourceTree = ""; }; - 06B120091D811B8900D14B02 /* RadarHighlighter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadarHighlighter.swift; sourceTree = ""; }; - 06B1200A1D811B8900D14B02 /* Range.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Range.swift; sourceTree = ""; }; - 06B1200C1D811B8900D14B02 /* BarChartDataProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarChartDataProvider.swift; sourceTree = ""; }; - 06B1200D1D811B8900D14B02 /* BarLineScatterCandleBubbleChartDataProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarLineScatterCandleBubbleChartDataProvider.swift; sourceTree = ""; }; - 06B1200E1D811B8900D14B02 /* BubbleChartDataProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BubbleChartDataProvider.swift; sourceTree = ""; }; - 06B1200F1D811B8900D14B02 /* CandleChartDataProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CandleChartDataProvider.swift; sourceTree = ""; }; - 06B120101D811B8900D14B02 /* ChartDataProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartDataProvider.swift; sourceTree = ""; }; - 06B120111D811B8900D14B02 /* CombinedChartDataProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CombinedChartDataProvider.swift; sourceTree = ""; }; - 06B120121D811B8900D14B02 /* LineChartDataProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineChartDataProvider.swift; sourceTree = ""; }; - 06B120131D811B8900D14B02 /* ScatterChartDataProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScatterChartDataProvider.swift; sourceTree = ""; }; - 06B120151D811B8900D14B02 /* AnimatedMoveViewJob.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatedMoveViewJob.swift; sourceTree = ""; }; - 06B120161D811B8900D14B02 /* AnimatedViewPortJob.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatedViewPortJob.swift; sourceTree = ""; }; - 06B120171D811B8900D14B02 /* AnimatedZoomViewJob.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatedZoomViewJob.swift; sourceTree = ""; }; - 06B120181D811B8900D14B02 /* MoveViewJob.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoveViewJob.swift; sourceTree = ""; }; - 06B120191D811B8900D14B02 /* ViewPortJob.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewPortJob.swift; sourceTree = ""; }; - 06B1201A1D811B8900D14B02 /* ZoomViewJob.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZoomViewJob.swift; sourceTree = ""; }; - 06B1201C1D811B8900D14B02 /* AxisRendererBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AxisRendererBase.swift; sourceTree = ""; }; - 06B1201D1D811B8900D14B02 /* BarChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarChartRenderer.swift; sourceTree = ""; }; - 06B1201E1D811B8900D14B02 /* BarLineScatterCandleBubbleRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarLineScatterCandleBubbleRenderer.swift; sourceTree = ""; }; - 06B1201F1D811B8900D14B02 /* BubbleChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BubbleChartRenderer.swift; sourceTree = ""; }; - 06B120201D811B8900D14B02 /* CandleStickChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CandleStickChartRenderer.swift; sourceTree = ""; }; - 06B120211D811B8900D14B02 /* ChartDataRendererBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartDataRendererBase.swift; sourceTree = ""; }; - 06B120221D811B8900D14B02 /* CombinedChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CombinedChartRenderer.swift; sourceTree = ""; }; - 06B120231D811B8900D14B02 /* HorizontalBarChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalBarChartRenderer.swift; sourceTree = ""; }; - 06B120241D811B8900D14B02 /* LegendRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegendRenderer.swift; sourceTree = ""; }; - 06B120251D811B8900D14B02 /* LineChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineChartRenderer.swift; sourceTree = ""; }; - 06B120261D811B8900D14B02 /* LineRadarRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineRadarRenderer.swift; sourceTree = ""; }; - 06B120271D811B8900D14B02 /* LineScatterCandleRadarRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineScatterCandleRadarRenderer.swift; sourceTree = ""; }; - 06B120281D811B8900D14B02 /* PieChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PieChartRenderer.swift; sourceTree = ""; }; - 06B120291D811B8900D14B02 /* RadarChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadarChartRenderer.swift; sourceTree = ""; }; - 06B1202A1D811B8900D14B02 /* Renderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Renderer.swift; sourceTree = ""; }; - 06B1202C1D811B8900D14B02 /* ChevronDownShapeRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChevronDownShapeRenderer.swift; sourceTree = ""; }; - 06B1202D1D811B8900D14B02 /* ChevronUpShapeRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChevronUpShapeRenderer.swift; sourceTree = ""; }; - 06B1202E1D811B8900D14B02 /* CircleShapeRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CircleShapeRenderer.swift; sourceTree = ""; }; - 06B1202F1D811B8900D14B02 /* CrossShapeRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrossShapeRenderer.swift; sourceTree = ""; }; - 06B120301D811B8900D14B02 /* IShapeRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IShapeRenderer.swift; sourceTree = ""; }; - 06B120311D811B8900D14B02 /* SquareShapeRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SquareShapeRenderer.swift; sourceTree = ""; }; - 06B120321D811B8900D14B02 /* TriangleShapeRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TriangleShapeRenderer.swift; sourceTree = ""; }; - 06B120331D811B8900D14B02 /* XShapeRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XShapeRenderer.swift; sourceTree = ""; }; - 06B120341D811B8900D14B02 /* ScatterChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScatterChartRenderer.swift; sourceTree = ""; }; - 06B120351D811B8900D14B02 /* XAxisRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XAxisRenderer.swift; sourceTree = ""; }; - 06B120361D811B8900D14B02 /* XAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; - 06B120371D811B8900D14B02 /* XAxisRendererRadarChart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XAxisRendererRadarChart.swift; sourceTree = ""; }; - 06B120381D811B8900D14B02 /* YAxisRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YAxisRenderer.swift; sourceTree = ""; }; - 06B120391D811B8900D14B02 /* YAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; - 06B1203A1D811B8900D14B02 /* YAxisRendererRadarChart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YAxisRendererRadarChart.swift; sourceTree = ""; }; - 06B1203C1D811B8900D14B02 /* ChartColorTemplates.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartColorTemplates.swift; sourceTree = ""; }; - 06B1203D1D811B8900D14B02 /* ChartUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartUtils.swift; sourceTree = ""; }; - 06B1203E1D811B8900D14B02 /* Fill.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Fill.swift; sourceTree = ""; }; - 06B1203F1D811B8900D14B02 /* Platform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Platform.swift; sourceTree = ""; }; - 06B120401D811B8900D14B02 /* Transformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Transformer.swift; sourceTree = ""; }; - 06B120411D811B8900D14B02 /* TransformerHorizontalBarChart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransformerHorizontalBarChart.swift; sourceTree = ""; }; - 06B120421D811B8900D14B02 /* ViewPortHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewPortHandler.swift; sourceTree = ""; }; - 06B121111D81201C00D14B02 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Tests/Supporting Files/Info.plist"; sourceTree = SOURCE_ROOT; }; - 06B3C0F31D99F85400B1DF43 /* BarChartTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarChartTests.swift; sourceTree = ""; }; - 06B3C0F41D99F85400B1DF43 /* LineChartTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineChartTests.swift; sourceTree = ""; }; - 5B56A9CC1D905EB300F58178 /* Description.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Description.swift; sourceTree = ""; }; - 5BF8813A1DDC4DF70033370C /* IndexAxisValueFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IndexAxisValueFormatter.swift; sourceTree = ""; }; - D8A58A401DCE2EF8007BB012 /* Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Media.xcassets; path = Charts/ChartsTests/Media.xcassets; sourceTree = SOURCE_ROOT; }; + 01DA223D26779DE263719CBE /* ScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartDataSet.swift; sourceTree = ""; }; + 02E728B3DF368497D817BF75 /* BarLineChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineChartViewBase.swift; path = Source/Charts/Charts/BarLineChartViewBase.swift; sourceTree = ""; }; + 0419F1A9AEC7CB7CEF9E589D /* ChartsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ChartsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 05DB9869CA6EEE4C6E06A3FB /* BarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartView.swift; path = Source/Charts/Charts/BarChartView.swift; sourceTree = ""; }; + 0A76C66149E5E54D0192EDEF /* IRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/IRadarChartDataSet.swift; sourceTree = ""; }; + 0B7E9097209550C98B703D35 /* CombinedChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartDataProvider.swift; path = Source/Charts/Interfaces/CombinedChartDataProvider.swift; sourceTree = ""; }; + 0BCB037E3E4632D32B172416 /* PieHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieHighlighter.swift; path = Source/Charts/Highlight/PieHighlighter.swift; sourceTree = ""; }; + 0C4A1F34D7D988C582C75E68 /* TransformerHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformerHorizontalBarChart.swift; path = Source/Charts/Utils/TransformerHorizontalBarChart.swift; sourceTree = ""; }; + 0D76A9CDA402721AA92EE331 /* XShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/XShapeRenderer.swift; sourceTree = ""; }; + 0F3BA870CEA772438553529A /* ChevronDownShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronDownShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift; sourceTree = ""; }; + 0F4D9CD5DDF41101892A6DDC /* IHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IHighlighter.swift; path = Source/Charts/Highlight/IHighlighter.swift; sourceTree = ""; }; + 10269C9C7DA0EB41AFF8179D /* CandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataSet.swift; sourceTree = ""; }; + 105050D3D37FCAABB1C79710 /* TriangleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TriangleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift; sourceTree = ""; }; + 108629BC8694704357C8CE5F /* SquareShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SquareShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift; sourceTree = ""; }; + 17494E808658CD9E1061FFA3 /* ViewPortHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortHandler.swift; path = Source/Charts/Utils/ViewPortHandler.swift; sourceTree = ""; }; + 19480DF7CC0538A529972E83 /* XAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxis.swift; path = Source/Charts/Components/XAxis.swift; sourceTree = ""; }; + 1ADB6DC89F00931580D1C00A /* CrossShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CrossShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift; sourceTree = ""; }; + 1DE1FDA8509235D7E272CBC2 /* LineChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataProvider.swift; path = Source/Charts/Interfaces/LineChartDataProvider.swift; sourceTree = ""; }; + 1F3536DBBF2345532BC7669B /* LineRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarRenderer.swift; path = Source/Charts/Renderers/LineRadarRenderer.swift; sourceTree = ""; }; + 256025862664CA428E01840B /* LineChartTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartTests.swift; path = Tests/Charts/LineChartTests.swift; sourceTree = ""; }; + 28FCA501619C01FCE44BB3C4 /* DataApproximator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataApproximator.swift; path = Source/Charts/Filters/DataApproximator.swift; sourceTree = ""; }; + 29F47B7715AE71224707C537 /* YAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxis.swift; path = Source/Charts/Components/YAxis.swift; sourceTree = ""; }; + 2BA5E67E0C1A36E25785C197 /* DefaultAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultAxisValueFormatter.swift; path = Source/Charts/Formatters/DefaultAxisValueFormatter.swift; sourceTree = ""; }; + 330B982A603F02ACF2B3BF50 /* AxisRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisRendererBase.swift; path = Source/Charts/Renderers/AxisRendererBase.swift; sourceTree = ""; }; + 35E32810A6ED200A893C8811 /* ZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZoomViewJob.swift; path = Source/Charts/Jobs/ZoomViewJob.swift; sourceTree = ""; }; + 372A8ED813FDE992A046448A /* Platform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.swift; path = Source/Charts/Utils/Platform.swift; sourceTree = ""; }; + 3924333873B79C3FD65EF769 /* BarChartTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartTests.swift; path = Tests/Charts/BarChartTests.swift; sourceTree = ""; }; + 3AD7B089A211288BC7F27536 /* XAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererRadarChart.swift; path = Source/Charts/Renderers/XAxisRendererRadarChart.swift; sourceTree = ""; }; + 3B005E477BC1846F0C12807F /* IMarker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IMarker.swift; path = Source/Charts/Components/IMarker.swift; sourceTree = ""; }; + 3B4C6CF2D10F3033CE2C5C25 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Tests/Supporting Files/Info.plist"; sourceTree = ""; }; + 3C968BFD307DE10BB78EE199 /* CandleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartData.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartData.swift; sourceTree = ""; }; + 3DB1ADB25B8EE00D670597C0 /* Media.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Media.xcassets; path = "Tests/Supporting Files/Media.xcassets"; sourceTree = ""; }; + 3DB3E824CE6958EFDC0E010A /* BubbleChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartView.swift; path = Source/Charts/Charts/BubbleChartView.swift; sourceTree = ""; }; + 3F1FCAB00443E2AB277CBD25 /* BarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; + 3F9EFCF1374CB627942BE05A /* IValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IValueFormatter.swift; path = Source/Charts/Formatters/IValueFormatter.swift; sourceTree = ""; }; + 4082BEB6E9CCC68ADEB65ACB /* PieChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartView.swift; path = Source/Charts/Charts/PieChartView.swift; sourceTree = ""; }; + 42E6C6F8026177DB5EB69A66 /* ChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntry.swift; sourceTree = ""; }; + 437FB9556010D9185DA2911D /* BarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataEntry.swift; sourceTree = ""; }; + 44C0384291A7B7BAAF37054C /* ChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataSet.swift; sourceTree = ""; }; + 466660ED2EC61BAF6977E05F /* LineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineChartDataSet.swift; sourceTree = ""; }; + 46B4D1787163393D707EC41E /* XAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/XAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; + 46E69EF766B94AF3A39A7685 /* Charts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Charts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 551F33797F809B771301C195 /* ChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartViewBase.swift; path = Source/Charts/Charts/ChartViewBase.swift; sourceTree = ""; }; + 5682800FD192526C848311DD /* LineScatterCandleRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarRenderer.swift; path = Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift; sourceTree = ""; }; + 569DAB96951B01DF38B71CDF /* ChartUtilsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtilsTests.swift; path = Tests/Charts/ChartUtilsTests.swift; sourceTree = ""; }; + 57095F04BE877E056F574A69 /* PieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataSet.swift; sourceTree = ""; }; + 58BDDF3816E546E58DDDFC32 /* YAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/YAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; + 5A9B2FE97C8C777A674C3D62 /* AxisBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisBase.swift; path = Source/Charts/Components/AxisBase.swift; sourceTree = ""; }; + 5D6EFE6DE14B144522DBEC25 /* CombinedChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartRenderer.swift; path = Source/Charts/Renderers/CombinedChartRenderer.swift; sourceTree = ""; }; + 5E24D7EEA82A893EBBE27882 /* BubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BubbleChartDataProvider.swift; sourceTree = ""; }; + 62976B4BA67502A246C835CB /* PieChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataEntry.swift; sourceTree = ""; }; + 63246976C392BF9B64BCF258 /* IBarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBarChartDataSet.swift; sourceTree = ""; }; + 63DD2AD5AFC6A69F542C711B /* Range.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Range.swift; path = Source/Charts/Highlight/Range.swift; sourceTree = ""; }; + 64316E9D8713E8205E8E2138 /* LineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineRadarChartDataSet.swift; sourceTree = ""; }; + 65996B15286414897CFB54DE /* IndexAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IndexAxisValueFormatter.swift; path = Source/Charts/Formatters/IndexAxisValueFormatter.swift; sourceTree = ""; }; + 669F55F7D0E1BF19D4B77350 /* ILineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineRadarChartDataSet.swift; sourceTree = ""; }; + 68181468776BE8E69970A47A /* ILineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; + 6906DD6D28D6C7226833585A /* HorizontalBarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartRenderer.swift; path = Source/Charts/Renderers/HorizontalBarChartRenderer.swift; sourceTree = ""; }; + 6B6DDD2F4CAFF90385DE59D4 /* ChartColorTemplates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartColorTemplates.swift; path = Source/Charts/Utils/ChartColorTemplates.swift; sourceTree = ""; }; + 6C306AB21A7FFA4608349917 /* BarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift; sourceTree = ""; }; + 6FA17F5F3DF8E28312431A7A /* HorizontalBarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartView.swift; path = Source/Charts/Charts/HorizontalBarChartView.swift; sourceTree = ""; }; + 71375616D924B5E0E10055ED /* ChartUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtils.swift; path = Source/Charts/Utils/ChartUtils.swift; sourceTree = ""; }; + 720FD446EC4A5BC344EDE951 /* IPieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IPieChartDataSet.swift; path = Source/Charts/Data/Interfaces/IPieChartDataSet.swift; sourceTree = ""; }; + 72786BC1CB2C4ED1858FD4F7 /* ScatterChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartData.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartData.swift; sourceTree = ""; }; + 7496CB3625CD04C2F0EF32D6 /* BarLineScatterCandleBubbleRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleRenderer.swift; path = Source/Charts/Renderers/BarLineScatterCandleBubbleRenderer.swift; sourceTree = ""; }; + 771D402037874303F699DC38 /* RadarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartData.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartData.swift; sourceTree = ""; }; + 78AE6B35EF05E81122CAAEFA /* Renderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Renderer.swift; path = Source/Charts/Renderers/Renderer.swift; sourceTree = ""; }; + 79114B8C62A2E95836E36712 /* ChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartHighlighter.swift; path = Source/Charts/Highlight/ChartHighlighter.swift; sourceTree = ""; }; + 79D685F9B5268D2E817D0D90 /* YAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererRadarChart.swift; path = Source/Charts/Renderers/YAxisRendererRadarChart.swift; sourceTree = ""; }; + 7A44639A41BB3B018840AF18 /* BarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarHighlighter.swift; path = Source/Charts/Highlight/BarHighlighter.swift; sourceTree = ""; }; + 7E71ED326B1D0CE4EF0EDA3E /* ScatterChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartView.swift; path = Source/Charts/Charts/ScatterChartView.swift; sourceTree = ""; }; + 7F84DF3598531694C567D4DA /* BarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarChartData.swift; sourceTree = ""; }; + 80F66082CE39F8C911700716 /* ChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartData.swift; path = Source/Charts/Data/Implementations/Standard/ChartData.swift; sourceTree = ""; }; + 8474B5177C777286153F5859 /* ChevronUpShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronUpShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift; sourceTree = ""; }; + 870AD43CF130D5D1C8027204 /* PieChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartData.swift; path = Source/Charts/Data/Implementations/Standard/PieChartData.swift; sourceTree = ""; }; + 8A9B5EA6E98E20A126D600CC /* CombinedChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartData.swift; path = Source/Charts/Data/Implementations/Standard/CombinedChartData.swift; sourceTree = ""; }; + 8E03E58F7CB004886241B48F /* RadarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartView.swift; path = Source/Charts/Charts/RadarChartView.swift; sourceTree = ""; }; + 8F3A6D4F74635182FE860669 /* XAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRenderer.swift; path = Source/Charts/Renderers/XAxisRenderer.swift; sourceTree = ""; }; + 8F6029784CCA16923E0D40A7 /* LineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; + 92189F78A1B752D037836F76 /* IAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IAxisValueFormatter.swift; path = Source/Charts/Formatters/IAxisValueFormatter.swift; sourceTree = ""; }; + 921AE48B7930AB73B0BC3622 /* ChartAnimationEasing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAnimationEasing.swift; path = Source/Charts/Animation/ChartAnimationEasing.swift; sourceTree = ""; }; + 92F04F75EDAD3C4A98A31526 /* ScatterChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataProvider.swift; path = Source/Charts/Interfaces/ScatterChartDataProvider.swift; sourceTree = ""; }; + 95A43F3797B98EFCB599A5A5 /* CandleStickChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartView.swift; path = Source/Charts/Charts/CandleStickChartView.swift; sourceTree = ""; }; + 95C2E16EA4C8F49E027A2F60 /* DefaultFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultFillFormatter.swift; path = Source/Charts/Formatters/DefaultFillFormatter.swift; sourceTree = ""; }; + 95C9873D834BD9446DCBD88B /* CircleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CircleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift; sourceTree = ""; }; + 983471C084DEE134AC889C69 /* YAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRenderer.swift; path = Source/Charts/Renderers/YAxisRenderer.swift; sourceTree = ""; }; + 98FCB684BEAE6CB77FD2B93A /* MarkerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerView.swift; path = Source/Charts/Components/MarkerView.swift; sourceTree = ""; }; + 9A7C8584612950FF07CD0393 /* LegendEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendEntry.swift; path = Source/Charts/Components/LegendEntry.swift; sourceTree = ""; }; + 9B3EC8B2C8773CAC101E7602 /* BarChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataProvider.swift; path = Source/Charts/Interfaces/BarChartDataProvider.swift; sourceTree = ""; }; + 9D09EF5E8A5D34CE92BFEF9A /* IChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IChartDataSet.swift; path = Source/Charts/Data/Interfaces/IChartDataSet.swift; sourceTree = ""; }; + 9D826DBA70947C847354B011 /* AnimatedViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedViewPortJob.swift; path = Source/Charts/Jobs/AnimatedViewPortJob.swift; sourceTree = ""; }; + 9D82F5451A8B27204F87F8BA /* CombinedChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartView.swift; path = Source/Charts/Charts/CombinedChartView.swift; sourceTree = ""; }; + 9E28662F0CC85BA5E4D38F1D /* Animator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Animator.swift; path = Source/Charts/Animation/Animator.swift; sourceTree = ""; }; + 9E84FF13690C87B851E9D4A7 /* AnimatedZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedZoomViewJob.swift; path = Source/Charts/Jobs/AnimatedZoomViewJob.swift; sourceTree = ""; }; + 9F38FC51A5FD01E25F57B577 /* PieChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartRenderer.swift; path = Source/Charts/Renderers/PieChartRenderer.swift; sourceTree = ""; }; + A0714E1877E4AD5B6661F2AD /* RadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarHighlighter.swift; path = Source/Charts/Highlight/RadarHighlighter.swift; sourceTree = ""; }; + A30F2546C4D51E23B8C23AA9 /* MoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoveViewJob.swift; path = Source/Charts/Jobs/MoveViewJob.swift; sourceTree = ""; }; + A32C5E3102705F2870B96F79 /* CandleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataEntry.swift; sourceTree = ""; }; + A4BFEFFE56F1711A761CE159 /* IBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBubbleChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBubbleChartDataSet.swift; sourceTree = ""; }; + A4CECECF10D0F9E6C6F1EADF /* Transformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transformer.swift; path = Source/Charts/Utils/Transformer.swift; sourceTree = ""; }; + A6A1C8A414F3FE239827DF9B /* LineChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartView.swift; path = Source/Charts/Charts/LineChartView.swift; sourceTree = ""; }; + A7C1B9B0ECA4A3D8E3193D49 /* CandleStickChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartRenderer.swift; path = Source/Charts/Renderers/CandleStickChartRenderer.swift; sourceTree = ""; }; + A864254C6C98A851E825E595 /* ScatterChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartRenderer.swift; path = Source/Charts/Renderers/ScatterChartRenderer.swift; sourceTree = ""; }; + A9B11503D9F796E8F595162E /* BubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartData.swift; sourceTree = ""; }; + AFC2E2F689AA8A307FED418E /* ICandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ICandleChartDataSet.swift; path = Source/Charts/Data/Interfaces/ICandleChartDataSet.swift; sourceTree = ""; }; + AFCD6CECB85C6F8A52483E4A /* ViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortJob.swift; path = Source/Charts/Jobs/ViewPortJob.swift; sourceTree = ""; }; + B134ADA10C91F8D50037220D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Source/Supporting Files/Info.plist"; sourceTree = ""; }; + B1ECC9837848C09ED27D61B6 /* Fill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Fill.swift; path = Source/Charts/Utils/Fill.swift; sourceTree = ""; }; + B41F3486B3AEF2F237819280 /* Legend.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Legend.swift; path = Source/Charts/Components/Legend.swift; sourceTree = ""; }; + B56A98D84882867B6477E381 /* ChartDataRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataRendererBase.swift; path = Source/Charts/Renderers/ChartDataRendererBase.swift; sourceTree = ""; }; + B7B9E373774F56E255EFF371 /* IFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IFillFormatter.swift; path = Source/Charts/Formatters/IFillFormatter.swift; sourceTree = ""; }; + B823EAAC1085D605F6853B3C /* PieRadarChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarChartViewBase.swift; path = Source/Charts/Charts/PieRadarChartViewBase.swift; sourceTree = ""; }; + BBB06C3A5B7098E78C4BFAC4 /* RadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartRenderer.swift; path = Source/Charts/Renderers/RadarChartRenderer.swift; sourceTree = ""; }; + BD3DB32A6A1E1688123C74FD /* ChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataProvider.swift; path = Source/Charts/Interfaces/ChartDataProvider.swift; sourceTree = ""; }; + BE68DA203280938B1D0DF5A4 /* BarLineScatterCandleBubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift; sourceTree = ""; }; + BFC16599CC5F22F5A2B0A1F8 /* AnimatedMoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedMoveViewJob.swift; path = Source/Charts/Jobs/AnimatedMoveViewJob.swift; sourceTree = ""; }; + BFF5EB8DDC7477A6FF777F14 /* Description.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Description.swift; path = Source/Charts/Components/Description.swift; sourceTree = ""; }; + C20E02263A796EEEF5BFF9C2 /* ComponentBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComponentBase.swift; path = Source/Charts/Components/ComponentBase.swift; sourceTree = ""; }; + C3FBF17C465CE2D517E8434D /* BubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift; sourceTree = ""; }; + C72B66BC2402D8A2C6D781AC /* IShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/IShapeRenderer.swift; sourceTree = ""; }; + C783070D5024BB05A18D40BC /* CandleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataProvider.swift; path = Source/Charts/Interfaces/CandleChartDataProvider.swift; sourceTree = ""; }; + CEDCE8799474F36EE86F2E7C /* IBarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; + CF05F5525C471B27F31B8289 /* MarkerImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerImage.swift; path = Source/Charts/Components/MarkerImage.swift; sourceTree = ""; }; + D16CB9FF9FDF77A0C9BE9946 /* ChartBaseDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartBaseDataSet.swift; path = Source/Charts/Data/Implementations/ChartBaseDataSet.swift; sourceTree = ""; }; + D3DB00B9CD55F694BE9248DE /* LegendRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendRenderer.swift; path = Source/Charts/Renderers/LegendRenderer.swift; sourceTree = ""; }; + D550CF387F5245880BD5DC0C /* ILineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineChartDataSet.swift; sourceTree = ""; }; + D6903776E41A0F47B70A50AF /* BubbleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataEntry.swift; sourceTree = ""; }; + D74BB5C736918A4E468891AD /* ChartLimitLine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartLimitLine.swift; path = Source/Charts/Components/ChartLimitLine.swift; sourceTree = ""; }; + D791F8AEF54D65EFB82885D5 /* LineChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartData.swift; path = Source/Charts/Data/Implementations/Standard/LineChartData.swift; sourceTree = ""; }; + DEFC467BF898951FC84F5620 /* ChartDataEntryBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntryBase.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntryBase.swift; sourceTree = ""; }; + E03001CA8FFE8AD77585E075 /* Highlight.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Highlight.swift; path = Source/Charts/Highlight/Highlight.swift; sourceTree = ""; }; + E589BDED5BCBDA3DD513DF2E /* HorizontalBarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarHighlighter.swift; path = Source/Charts/Highlight/HorizontalBarHighlighter.swift; sourceTree = ""; }; + E900D0DA64F61906B3A972B6 /* BarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartRenderer.swift; path = Source/Charts/Renderers/BarChartRenderer.swift; sourceTree = ""; }; + EC7995E0C9C4F33F3EE5CC3A /* BubbleChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartRenderer.swift; path = Source/Charts/Renderers/BubbleChartRenderer.swift; sourceTree = ""; }; + EDF6DE50212A6E4344805288 /* LineChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartRenderer.swift; path = Source/Charts/Renderers/LineChartRenderer.swift; sourceTree = ""; }; + EE3063C08937E060E2D9160C /* RadarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift; sourceTree = ""; }; + EF8B64973E23097CC929AFA8 /* PieRadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarHighlighter.swift; path = Source/Charts/Highlight/PieRadarHighlighter.swift; sourceTree = ""; }; + F70FAC75EA27D5A2EDB5DA85 /* RadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift; sourceTree = ""; }; + F9536B2806512D7A92DABDC0 /* DefaultValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultValueFormatter.swift; path = Source/Charts/Formatters/DefaultValueFormatter.swift; sourceTree = ""; }; + FC6FD8E0E0AD2219A80EB6CB /* IScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IScatterChartDataSet.swift; path = Source/Charts/Data/Interfaces/IScatterChartDataSet.swift; sourceTree = ""; }; + FE05FD9A0072660A9D3E7983 /* Charts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Charts.h; path = "Source/Supporting Files/Charts.h"; sourceTree = ""; }; + FE4090926DF0D2F1DF4B704F /* CombinedHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedHighlighter.swift; path = Source/Charts/Highlight/CombinedHighlighter.swift; sourceTree = ""; }; + FFD9181255A5600E14DF9363 /* BarLineScatterCandleBubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 06165F201D8110E600722320 /* Frameworks */ = { + 5AA7EB0E6DA1D80708E79E13 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 06165F2B1D8110E600722320 /* Frameworks */ = { + 6691302A7193BE2498A20CD2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 06165F2F1D8110E600722320 /* Charts.framework in Frameworks */, + 718FCE8A805306DCF7252C9E /* Charts.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 06165F1A1D8110E600722320 = { + 02326A22F520AE9B8DB914D0 /* Standard */ = { isa = PBXGroup; children = ( - 063FF0401D8CC9940094A042 /* Carthage.xcconfig */, - 06500D381D81115900156E8A /* Charts */, - 06165F321D8110E700722320 /* ChartsTests */, - 06165F251D8110E600722320 /* Products */, + 7F84DF3598531694C567D4DA /* BarChartData.swift */, + 437FB9556010D9185DA2911D /* BarChartDataEntry.swift */, + 6C306AB21A7FFA4608349917 /* BarChartDataSet.swift */, + FFD9181255A5600E14DF9363 /* BarLineScatterCandleBubbleChartData.swift */, + 3F1FCAB00443E2AB277CBD25 /* BarLineScatterCandleBubbleChartDataSet.swift */, + A9B11503D9F796E8F595162E /* BubbleChartData.swift */, + D6903776E41A0F47B70A50AF /* BubbleChartDataEntry.swift */, + C3FBF17C465CE2D517E8434D /* BubbleChartDataSet.swift */, + 3C968BFD307DE10BB78EE199 /* CandleChartData.swift */, + A32C5E3102705F2870B96F79 /* CandleChartDataEntry.swift */, + 10269C9C7DA0EB41AFF8179D /* CandleChartDataSet.swift */, + 80F66082CE39F8C911700716 /* ChartData.swift */, + 42E6C6F8026177DB5EB69A66 /* ChartDataEntry.swift */, + DEFC467BF898951FC84F5620 /* ChartDataEntryBase.swift */, + 44C0384291A7B7BAAF37054C /* ChartDataSet.swift */, + 8A9B5EA6E98E20A126D600CC /* CombinedChartData.swift */, + D791F8AEF54D65EFB82885D5 /* LineChartData.swift */, + 466660ED2EC61BAF6977E05F /* LineChartDataSet.swift */, + 64316E9D8713E8205E8E2138 /* LineRadarChartDataSet.swift */, + 8F6029784CCA16923E0D40A7 /* LineScatterCandleRadarChartDataSet.swift */, + 870AD43CF130D5D1C8027204 /* PieChartData.swift */, + 62976B4BA67502A246C835CB /* PieChartDataEntry.swift */, + 57095F04BE877E056F574A69 /* PieChartDataSet.swift */, + 771D402037874303F699DC38 /* RadarChartData.swift */, + EE3063C08937E060E2D9160C /* RadarChartDataEntry.swift */, + F70FAC75EA27D5A2EDB5DA85 /* RadarChartDataSet.swift */, + 72786BC1CB2C4ED1858FD4F7 /* ScatterChartData.swift */, + 01DA223D26779DE263719CBE /* ScatterChartDataSet.swift */, ); + name = Standard; sourceTree = ""; }; - 06165F251D8110E600722320 /* Products */ = { + 0323F0398A82BC5071495502 /* Charts */ = { isa = PBXGroup; children = ( - 06165F241D8110E600722320 /* Charts.framework */, - 06165F2E1D8110E600722320 /* ChartsTests.xctest */, + 3924333873B79C3FD65EF769 /* BarChartTests.swift */, + 569DAB96951B01DF38B71CDF /* ChartUtilsTests.swift */, + 256025862664CA428E01840B /* LineChartTests.swift */, ); - name = Products; + name = Charts; sourceTree = ""; }; - 06165F321D8110E700722320 /* ChartsTests */ = { + 080ECFD494FF1518DDAC94B8 /* Renderers */ = { isa = PBXGroup; children = ( - 06B3C0F21D99F85400B1DF43 /* Charts */, - 06761B5D1D98176000D5CE09 /* ChartUtilsTests.swift */, - 06B1210D1D811FF200D14B02 /* Supporting Files */, + 330B982A603F02ACF2B3BF50 /* AxisRendererBase.swift */, + E900D0DA64F61906B3A972B6 /* BarChartRenderer.swift */, + 7496CB3625CD04C2F0EF32D6 /* BarLineScatterCandleBubbleRenderer.swift */, + EC7995E0C9C4F33F3EE5CC3A /* BubbleChartRenderer.swift */, + A7C1B9B0ECA4A3D8E3193D49 /* CandleStickChartRenderer.swift */, + B56A98D84882867B6477E381 /* ChartDataRendererBase.swift */, + 5D6EFE6DE14B144522DBEC25 /* CombinedChartRenderer.swift */, + 6906DD6D28D6C7226833585A /* HorizontalBarChartRenderer.swift */, + D3DB00B9CD55F694BE9248DE /* LegendRenderer.swift */, + EDF6DE50212A6E4344805288 /* LineChartRenderer.swift */, + 1F3536DBBF2345532BC7669B /* LineRadarRenderer.swift */, + 5682800FD192526C848311DD /* LineScatterCandleRadarRenderer.swift */, + 9F38FC51A5FD01E25F57B577 /* PieChartRenderer.swift */, + BBB06C3A5B7098E78C4BFAC4 /* RadarChartRenderer.swift */, + 78AE6B35EF05E81122CAAEFA /* Renderer.swift */, + 4022C17232A9CFA8968676B6 /* Scatter */, + A864254C6C98A851E825E595 /* ScatterChartRenderer.swift */, + 8F3A6D4F74635182FE860669 /* XAxisRenderer.swift */, + 46B4D1787163393D707EC41E /* XAxisRendererHorizontalBarChart.swift */, + 3AD7B089A211288BC7F27536 /* XAxisRendererRadarChart.swift */, + 983471C084DEE134AC889C69 /* YAxisRenderer.swift */, + 58BDDF3816E546E58DDDFC32 /* YAxisRendererHorizontalBarChart.swift */, + 79D685F9B5268D2E817D0D90 /* YAxisRendererRadarChart.swift */, ); - path = ChartsTests; + name = Renderers; sourceTree = ""; }; - 06500D381D81115900156E8A /* Charts */ = { + 138E7FBA58D4B0FB4F451E71 /* Components */ = { isa = PBXGroup; children = ( - 06B11FAA1D811B4300D14B02 /* Classes */, - 06B11FAB1D811B5600D14B02 /* Supporting Files */, + 5A9B2FE97C8C777A674C3D62 /* AxisBase.swift */, + D74BB5C736918A4E468891AD /* ChartLimitLine.swift */, + C20E02263A796EEEF5BFF9C2 /* ComponentBase.swift */, + BFF5EB8DDC7477A6FF777F14 /* Description.swift */, + 3B005E477BC1846F0C12807F /* IMarker.swift */, + B41F3486B3AEF2F237819280 /* Legend.swift */, + 9A7C8584612950FF07CD0393 /* LegendEntry.swift */, + CF05F5525C471B27F31B8289 /* MarkerImage.swift */, + 98FCB684BEAE6CB77FD2B93A /* MarkerView.swift */, + 19480DF7CC0538A529972E83 /* XAxis.swift */, + 29F47B7715AE71224707C537 /* YAxis.swift */, ); - name = Charts; + name = Components; sourceTree = ""; }; - 06B11FAA1D811B4300D14B02 /* Classes */ = { + 149DA4CE58111FDC0CB089F9 /* Filters */ = { isa = PBXGroup; children = ( - 06B11FB01D811B8900D14B02 /* Animation */, - 06B11FB31D811B8900D14B02 /* Charts */, - 06B11FC01D811B8900D14B02 /* Components */, - 06B11FCB1D811B8900D14B02 /* Data */, - 06B11FF71D811B8900D14B02 /* Filters */, - 06B11FF91D811B8900D14B02 /* Formatters */, - 06B120001D811B8900D14B02 /* Highlight */, - 06B1200B1D811B8900D14B02 /* Interfaces */, - 06B120141D811B8900D14B02 /* Jobs */, - 06B1201B1D811B8900D14B02 /* Renderers */, - 06B1203B1D811B8900D14B02 /* Utils */, + 28FCA501619C01FCE44BB3C4 /* DataApproximator.swift */, ); - name = Classes; + name = Filters; sourceTree = ""; }; - 06B11FAB1D811B5600D14B02 /* Supporting Files */ = { + 1E4355CBB7AB43A65D71A5CB /* Utils */ = { isa = PBXGroup; children = ( - 06B11FAE1D811B7000D14B02 /* Charts.h */, - 06B11FAC1D811B6600D14B02 /* Info.plist */, + 6B6DDD2F4CAFF90385DE59D4 /* ChartColorTemplates.swift */, + 71375616D924B5E0E10055ED /* ChartUtils.swift */, + B1ECC9837848C09ED27D61B6 /* Fill.swift */, + 372A8ED813FDE992A046448A /* Platform.swift */, + A4CECECF10D0F9E6C6F1EADF /* Transformer.swift */, + 0C4A1F34D7D988C582C75E68 /* TransformerHorizontalBarChart.swift */, + 17494E808658CD9E1061FFA3 /* ViewPortHandler.swift */, ); - name = "Supporting Files"; + name = Utils; sourceTree = ""; }; - 06B11FB01D811B8900D14B02 /* Animation */ = { + 233A64AB907EB6FBD9FCDCE4 /* Charts */ = { isa = PBXGroup; children = ( - 06B11FB11D811B8900D14B02 /* Animator.swift */, - 06B11FB21D811B8900D14B02 /* ChartAnimationEasing.swift */, + 6BCF372F06E4172978A2D991 /* Animation */, + 548B5997C099AA3ADB7AB514 /* Charts */, + 138E7FBA58D4B0FB4F451E71 /* Components */, + 6B9DCEC4C2EB8D80B717B596 /* Data */, + 149DA4CE58111FDC0CB089F9 /* Filters */, + EC938B33DCD50744415D1325 /* Formatters */, + 6F8578B01EBEB6FA500AB320 /* Highlight */, + CEDDF868C3CE77292DBB894C /* Interfaces */, + F5EE92A73DEE2F59A8EF3A16 /* Jobs */, + 080ECFD494FF1518DDAC94B8 /* Renderers */, + 1E4355CBB7AB43A65D71A5CB /* Utils */, ); - name = Animation; - path = Source/Charts/Animation; + name = Charts; sourceTree = ""; }; - 06B11FB31D811B8900D14B02 /* Charts */ = { + 259D29D8A12DE8D64A302759 /* Tests */ = { isa = PBXGroup; children = ( - 06B11FB41D811B8900D14B02 /* BarChartView.swift */, - 06B11FB51D811B8900D14B02 /* BarLineChartViewBase.swift */, - 06B11FB61D811B8900D14B02 /* BubbleChartView.swift */, - 06B11FB71D811B8900D14B02 /* CandleStickChartView.swift */, - 06B11FB81D811B8900D14B02 /* ChartViewBase.swift */, - 06B11FB91D811B8900D14B02 /* CombinedChartView.swift */, - 06B11FBA1D811B8900D14B02 /* HorizontalBarChartView.swift */, - 06B11FBB1D811B8900D14B02 /* LineChartView.swift */, - 06B11FBC1D811B8900D14B02 /* PieChartView.swift */, - 06B11FBD1D811B8900D14B02 /* PieRadarChartViewBase.swift */, - 06B11FBE1D811B8900D14B02 /* RadarChartView.swift */, - 06B11FBF1D811B8900D14B02 /* ScatterChartView.swift */, + 960D39442C14F94BE3FC9867 /* Supporting Files */, + 0323F0398A82BC5071495502 /* Charts */, ); - name = Charts; - path = Source/Charts/Charts; + name = Tests; sourceTree = ""; }; - 06B11FC01D811B8900D14B02 /* Components */ = { + 2E3BB3945DB12640F6017AC9 /* Source */ = { isa = PBXGroup; children = ( - 06B11FC11D811B8900D14B02 /* AxisBase.swift */, - 06B11FC21D811B8900D14B02 /* ChartLimitLine.swift */, - 06B11FC31D811B8900D14B02 /* ComponentBase.swift */, - 5B56A9CC1D905EB300F58178 /* Description.swift */, - 06B11FC41D811B8900D14B02 /* IMarker.swift */, - 06B11FC51D811B8900D14B02 /* Legend.swift */, - 06B11FC61D811B8900D14B02 /* LegendEntry.swift */, - 06B11FC71D811B8900D14B02 /* MarkerImage.swift */, - 06B11FC81D811B8900D14B02 /* MarkerView.swift */, - 06B11FC91D811B8900D14B02 /* XAxis.swift */, - 06B11FCA1D811B8900D14B02 /* YAxis.swift */, + 582F26E1876214EDE375192C /* Supporting Files */, + 233A64AB907EB6FBD9FCDCE4 /* Charts */, ); - name = Components; - path = Source/Charts/Components; + name = Source; sourceTree = ""; }; - 06B11FCB1D811B8900D14B02 /* Data */ = { + 4022C17232A9CFA8968676B6 /* Scatter */ = { isa = PBXGroup; children = ( - 06B11FCC1D811B8900D14B02 /* Implementations */, - 06B11FEB1D811B8900D14B02 /* Interfaces */, + 0F3BA870CEA772438553529A /* ChevronDownShapeRenderer.swift */, + 8474B5177C777286153F5859 /* ChevronUpShapeRenderer.swift */, + 95C9873D834BD9446DCBD88B /* CircleShapeRenderer.swift */, + 1ADB6DC89F00931580D1C00A /* CrossShapeRenderer.swift */, + C72B66BC2402D8A2C6D781AC /* IShapeRenderer.swift */, + 108629BC8694704357C8CE5F /* SquareShapeRenderer.swift */, + 105050D3D37FCAABB1C79710 /* TriangleShapeRenderer.swift */, + 0D76A9CDA402721AA92EE331 /* XShapeRenderer.swift */, ); - name = Data; - path = Source/Charts/Data; + name = Scatter; sourceTree = ""; }; - 06B11FCC1D811B8900D14B02 /* Implementations */ = { + 5162836D67424B2727AD8F47 = { isa = PBXGroup; children = ( - 06B11FCD1D811B8900D14B02 /* ChartBaseDataSet.swift */, - 06B11FCE1D811B8900D14B02 /* Standard */, + B4152DB490FA30B206141699 /* Products */, + 6714768E272DAA68600CCE71 /* Frameworks */, + 2E3BB3945DB12640F6017AC9 /* Source */, + 259D29D8A12DE8D64A302759 /* Tests */, ); - path = Implementations; sourceTree = ""; }; - 06B11FCE1D811B8900D14B02 /* Standard */ = { + 548B5997C099AA3ADB7AB514 /* Charts */ = { isa = PBXGroup; children = ( - 06B11FCF1D811B8900D14B02 /* BarChartData.swift */, - 06B11FD01D811B8900D14B02 /* BarChartDataEntry.swift */, - 06B11FD11D811B8900D14B02 /* BarChartDataSet.swift */, - 06B11FD21D811B8900D14B02 /* BarLineScatterCandleBubbleChartData.swift */, - 06B11FD31D811B8900D14B02 /* BarLineScatterCandleBubbleChartDataSet.swift */, - 06B11FD41D811B8900D14B02 /* BubbleChartData.swift */, - 06B11FD51D811B8900D14B02 /* BubbleChartDataEntry.swift */, - 06B11FD61D811B8900D14B02 /* BubbleChartDataSet.swift */, - 06B11FD71D811B8900D14B02 /* CandleChartData.swift */, - 06B11FD81D811B8900D14B02 /* CandleChartDataEntry.swift */, - 06B11FD91D811B8900D14B02 /* CandleChartDataSet.swift */, - 06B11FDA1D811B8900D14B02 /* ChartData.swift */, - 06B11FDB1D811B8900D14B02 /* ChartDataEntry.swift */, - 06B11FDC1D811B8900D14B02 /* ChartDataEntryBase.swift */, - 06B11FDD1D811B8900D14B02 /* ChartDataSet.swift */, - 06B11FDE1D811B8900D14B02 /* CombinedChartData.swift */, - 06B11FDF1D811B8900D14B02 /* LineChartData.swift */, - 06B11FE01D811B8900D14B02 /* LineChartDataSet.swift */, - 06B11FE11D811B8900D14B02 /* LineRadarChartDataSet.swift */, - 06B11FE21D811B8900D14B02 /* LineScatterCandleRadarChartDataSet.swift */, - 06B11FE31D811B8900D14B02 /* PieChartData.swift */, - 06B11FE41D811B8900D14B02 /* PieChartDataEntry.swift */, - 06B11FE51D811B8900D14B02 /* PieChartDataSet.swift */, - 06B11FE61D811B8900D14B02 /* RadarChartData.swift */, - 06B11FE71D811B8900D14B02 /* RadarChartDataEntry.swift */, - 06B11FE81D811B8900D14B02 /* RadarChartDataSet.swift */, - 06B11FE91D811B8900D14B02 /* ScatterChartData.swift */, - 06B11FEA1D811B8900D14B02 /* ScatterChartDataSet.swift */, + 05DB9869CA6EEE4C6E06A3FB /* BarChartView.swift */, + 02E728B3DF368497D817BF75 /* BarLineChartViewBase.swift */, + 3DB3E824CE6958EFDC0E010A /* BubbleChartView.swift */, + 95A43F3797B98EFCB599A5A5 /* CandleStickChartView.swift */, + 551F33797F809B771301C195 /* ChartViewBase.swift */, + 9D82F5451A8B27204F87F8BA /* CombinedChartView.swift */, + 6FA17F5F3DF8E28312431A7A /* HorizontalBarChartView.swift */, + A6A1C8A414F3FE239827DF9B /* LineChartView.swift */, + 4082BEB6E9CCC68ADEB65ACB /* PieChartView.swift */, + B823EAAC1085D605F6853B3C /* PieRadarChartViewBase.swift */, + 8E03E58F7CB004886241B48F /* RadarChartView.swift */, + 7E71ED326B1D0CE4EF0EDA3E /* ScatterChartView.swift */, ); - path = Standard; + name = Charts; sourceTree = ""; }; - 06B11FEB1D811B8900D14B02 /* Interfaces */ = { + 582F26E1876214EDE375192C /* Supporting Files */ = { isa = PBXGroup; children = ( - 06B11FEC1D811B8900D14B02 /* IBarChartDataSet.swift */, - 06B11FED1D811B8900D14B02 /* IBarLineScatterCandleBubbleChartDataSet.swift */, - 06B11FEE1D811B8900D14B02 /* IBubbleChartDataSet.swift */, - 06B11FEF1D811B8900D14B02 /* ICandleChartDataSet.swift */, - 06B11FF01D811B8900D14B02 /* IChartDataSet.swift */, - 06B11FF11D811B8900D14B02 /* ILineChartDataSet.swift */, - 06B11FF21D811B8900D14B02 /* ILineRadarChartDataSet.swift */, - 06B11FF31D811B8900D14B02 /* ILineScatterCandleRadarChartDataSet.swift */, - 06B11FF41D811B8900D14B02 /* IPieChartDataSet.swift */, - 06B11FF51D811B8900D14B02 /* IRadarChartDataSet.swift */, - 06B11FF61D811B8900D14B02 /* IScatterChartDataSet.swift */, + B134ADA10C91F8D50037220D /* Info.plist */, + FE05FD9A0072660A9D3E7983 /* Charts.h */, ); - path = Interfaces; + name = "Supporting Files"; sourceTree = ""; }; - 06B11FF71D811B8900D14B02 /* Filters */ = { + 6714768E272DAA68600CCE71 /* Frameworks */ = { isa = PBXGroup; children = ( - 06B11FF81D811B8900D14B02 /* DataApproximator.swift */, ); - name = Filters; - path = Source/Charts/Filters; + name = Frameworks; sourceTree = ""; }; - 06B11FF91D811B8900D14B02 /* Formatters */ = { + 6B9DCEC4C2EB8D80B717B596 /* Data */ = { isa = PBXGroup; children = ( - 06B11FFA1D811B8900D14B02 /* DefaultAxisValueFormatter.swift */, - 06B11FFB1D811B8900D14B02 /* DefaultFillFormatter.swift */, - 06B11FFC1D811B8900D14B02 /* DefaultValueFormatter.swift */, - 06B11FFD1D811B8900D14B02 /* IAxisValueFormatter.swift */, - 06B11FFE1D811B8900D14B02 /* IFillFormatter.swift */, - 06B11FFF1D811B8900D14B02 /* IValueFormatter.swift */, - 5BF8813A1DDC4DF70033370C /* IndexAxisValueFormatter.swift */, + 94FA89D7E33E8E2C7261300E /* Implementations */, + F51F07FD7761598927A17A3C /* Interfaces */, ); - name = Formatters; - path = Source/Charts/Formatters; + name = Data; sourceTree = ""; }; - 06B120001D811B8900D14B02 /* Highlight */ = { + 6BCF372F06E4172978A2D991 /* Animation */ = { isa = PBXGroup; children = ( - 06B120011D811B8900D14B02 /* BarHighlighter.swift */, - 06B120021D811B8900D14B02 /* ChartHighlighter.swift */, - 06B120031D811B8900D14B02 /* CombinedHighlighter.swift */, - 06B120041D811B8900D14B02 /* Highlight.swift */, - 06B120051D811B8900D14B02 /* HorizontalBarHighlighter.swift */, - 06B120061D811B8900D14B02 /* IHighlighter.swift */, - 06B120071D811B8900D14B02 /* PieHighlighter.swift */, - 06B120081D811B8900D14B02 /* PieRadarHighlighter.swift */, - 06B120091D811B8900D14B02 /* RadarHighlighter.swift */, - 06B1200A1D811B8900D14B02 /* Range.swift */, + 9E28662F0CC85BA5E4D38F1D /* Animator.swift */, + 921AE48B7930AB73B0BC3622 /* ChartAnimationEasing.swift */, + ); + name = Animation; + sourceTree = ""; + }; + 6F8578B01EBEB6FA500AB320 /* Highlight */ = { + isa = PBXGroup; + children = ( + 7A44639A41BB3B018840AF18 /* BarHighlighter.swift */, + 79114B8C62A2E95836E36712 /* ChartHighlighter.swift */, + FE4090926DF0D2F1DF4B704F /* CombinedHighlighter.swift */, + E03001CA8FFE8AD77585E075 /* Highlight.swift */, + E589BDED5BCBDA3DD513DF2E /* HorizontalBarHighlighter.swift */, + 0F4D9CD5DDF41101892A6DDC /* IHighlighter.swift */, + 0BCB037E3E4632D32B172416 /* PieHighlighter.swift */, + EF8B64973E23097CC929AFA8 /* PieRadarHighlighter.swift */, + A0714E1877E4AD5B6661F2AD /* RadarHighlighter.swift */, + 63DD2AD5AFC6A69F542C711B /* Range.swift */, ); name = Highlight; - path = Source/Charts/Highlight; sourceTree = ""; }; - 06B1200B1D811B8900D14B02 /* Interfaces */ = { + 94FA89D7E33E8E2C7261300E /* Implementations */ = { isa = PBXGroup; children = ( - 06B1200C1D811B8900D14B02 /* BarChartDataProvider.swift */, - 06B1200D1D811B8900D14B02 /* BarLineScatterCandleBubbleChartDataProvider.swift */, - 06B1200E1D811B8900D14B02 /* BubbleChartDataProvider.swift */, - 06B1200F1D811B8900D14B02 /* CandleChartDataProvider.swift */, - 06B120101D811B8900D14B02 /* ChartDataProvider.swift */, - 06B120111D811B8900D14B02 /* CombinedChartDataProvider.swift */, - 06B120121D811B8900D14B02 /* LineChartDataProvider.swift */, - 06B120131D811B8900D14B02 /* ScatterChartDataProvider.swift */, + D16CB9FF9FDF77A0C9BE9946 /* ChartBaseDataSet.swift */, + 02326A22F520AE9B8DB914D0 /* Standard */, ); - name = Interfaces; - path = Source/Charts/Interfaces; + name = Implementations; sourceTree = ""; }; - 06B120141D811B8900D14B02 /* Jobs */ = { + 960D39442C14F94BE3FC9867 /* Supporting Files */ = { isa = PBXGroup; children = ( - 06B120151D811B8900D14B02 /* AnimatedMoveViewJob.swift */, - 06B120161D811B8900D14B02 /* AnimatedViewPortJob.swift */, - 06B120171D811B8900D14B02 /* AnimatedZoomViewJob.swift */, - 06B120181D811B8900D14B02 /* MoveViewJob.swift */, - 06B120191D811B8900D14B02 /* ViewPortJob.swift */, - 06B1201A1D811B8900D14B02 /* ZoomViewJob.swift */, + 3B4C6CF2D10F3033CE2C5C25 /* Info.plist */, + 3DB1ADB25B8EE00D670597C0 /* Media.xcassets */, ); - name = Jobs; - path = Source/Charts/Jobs; + name = "Supporting Files"; sourceTree = ""; }; - 06B1201B1D811B8900D14B02 /* Renderers */ = { + B4152DB490FA30B206141699 /* Products */ = { isa = PBXGroup; children = ( - 06B1201C1D811B8900D14B02 /* AxisRendererBase.swift */, - 06B1201D1D811B8900D14B02 /* BarChartRenderer.swift */, - 06B1201E1D811B8900D14B02 /* BarLineScatterCandleBubbleRenderer.swift */, - 06B1201F1D811B8900D14B02 /* BubbleChartRenderer.swift */, - 06B120201D811B8900D14B02 /* CandleStickChartRenderer.swift */, - 06B120211D811B8900D14B02 /* ChartDataRendererBase.swift */, - 06B120221D811B8900D14B02 /* CombinedChartRenderer.swift */, - 06B120231D811B8900D14B02 /* HorizontalBarChartRenderer.swift */, - 06B120241D811B8900D14B02 /* LegendRenderer.swift */, - 06B120251D811B8900D14B02 /* LineChartRenderer.swift */, - 06B120261D811B8900D14B02 /* LineRadarRenderer.swift */, - 06B120271D811B8900D14B02 /* LineScatterCandleRadarRenderer.swift */, - 06B120281D811B8900D14B02 /* PieChartRenderer.swift */, - 06B120291D811B8900D14B02 /* RadarChartRenderer.swift */, - 06B1202A1D811B8900D14B02 /* Renderer.swift */, - 06B1202B1D811B8900D14B02 /* Scatter */, - 06B120341D811B8900D14B02 /* ScatterChartRenderer.swift */, - 06B120351D811B8900D14B02 /* XAxisRenderer.swift */, - 06B120361D811B8900D14B02 /* XAxisRendererHorizontalBarChart.swift */, - 06B120371D811B8900D14B02 /* XAxisRendererRadarChart.swift */, - 06B120381D811B8900D14B02 /* YAxisRenderer.swift */, - 06B120391D811B8900D14B02 /* YAxisRendererHorizontalBarChart.swift */, - 06B1203A1D811B8900D14B02 /* YAxisRendererRadarChart.swift */, + 46E69EF766B94AF3A39A7685 /* Charts.framework */, + 0419F1A9AEC7CB7CEF9E589D /* ChartsTests.xctest */, ); - name = Renderers; - path = Source/Charts/Renderers; + name = Products; sourceTree = ""; }; - 06B1202B1D811B8900D14B02 /* Scatter */ = { + CEDDF868C3CE77292DBB894C /* Interfaces */ = { isa = PBXGroup; children = ( - 06B1202C1D811B8900D14B02 /* ChevronDownShapeRenderer.swift */, - 06B1202D1D811B8900D14B02 /* ChevronUpShapeRenderer.swift */, - 06B1202E1D811B8900D14B02 /* CircleShapeRenderer.swift */, - 06B1202F1D811B8900D14B02 /* CrossShapeRenderer.swift */, - 06B120301D811B8900D14B02 /* IShapeRenderer.swift */, - 06B120311D811B8900D14B02 /* SquareShapeRenderer.swift */, - 06B120321D811B8900D14B02 /* TriangleShapeRenderer.swift */, - 06B120331D811B8900D14B02 /* XShapeRenderer.swift */, + 9B3EC8B2C8773CAC101E7602 /* BarChartDataProvider.swift */, + BE68DA203280938B1D0DF5A4 /* BarLineScatterCandleBubbleChartDataProvider.swift */, + 5E24D7EEA82A893EBBE27882 /* BubbleChartDataProvider.swift */, + C783070D5024BB05A18D40BC /* CandleChartDataProvider.swift */, + BD3DB32A6A1E1688123C74FD /* ChartDataProvider.swift */, + 0B7E9097209550C98B703D35 /* CombinedChartDataProvider.swift */, + 1DE1FDA8509235D7E272CBC2 /* LineChartDataProvider.swift */, + 92F04F75EDAD3C4A98A31526 /* ScatterChartDataProvider.swift */, ); - path = Scatter; + name = Interfaces; sourceTree = ""; }; - 06B1203B1D811B8900D14B02 /* Utils */ = { + EC938B33DCD50744415D1325 /* Formatters */ = { isa = PBXGroup; children = ( - 06B1203C1D811B8900D14B02 /* ChartColorTemplates.swift */, - 06B1203D1D811B8900D14B02 /* ChartUtils.swift */, - 06B1203E1D811B8900D14B02 /* Fill.swift */, - 06B1203F1D811B8900D14B02 /* Platform.swift */, - 06B120401D811B8900D14B02 /* Transformer.swift */, - 06B120411D811B8900D14B02 /* TransformerHorizontalBarChart.swift */, - 06B120421D811B8900D14B02 /* ViewPortHandler.swift */, + 2BA5E67E0C1A36E25785C197 /* DefaultAxisValueFormatter.swift */, + 95C2E16EA4C8F49E027A2F60 /* DefaultFillFormatter.swift */, + F9536B2806512D7A92DABDC0 /* DefaultValueFormatter.swift */, + 92189F78A1B752D037836F76 /* IAxisValueFormatter.swift */, + B7B9E373774F56E255EFF371 /* IFillFormatter.swift */, + 65996B15286414897CFB54DE /* IndexAxisValueFormatter.swift */, + 3F9EFCF1374CB627942BE05A /* IValueFormatter.swift */, ); - name = Utils; - path = Source/Charts/Utils; + name = Formatters; sourceTree = ""; }; - 06B1210D1D811FF200D14B02 /* Supporting Files */ = { + F51F07FD7761598927A17A3C /* Interfaces */ = { isa = PBXGroup; children = ( - 06B121111D81201C00D14B02 /* Info.plist */, - D8A58A401DCE2EF8007BB012 /* Media.xcassets */, + 63246976C392BF9B64BCF258 /* IBarChartDataSet.swift */, + CEDCE8799474F36EE86F2E7C /* IBarLineScatterCandleBubbleChartDataSet.swift */, + A4BFEFFE56F1711A761CE159 /* IBubbleChartDataSet.swift */, + AFC2E2F689AA8A307FED418E /* ICandleChartDataSet.swift */, + 9D09EF5E8A5D34CE92BFEF9A /* IChartDataSet.swift */, + D550CF387F5245880BD5DC0C /* ILineChartDataSet.swift */, + 669F55F7D0E1BF19D4B77350 /* ILineRadarChartDataSet.swift */, + 68181468776BE8E69970A47A /* ILineScatterCandleRadarChartDataSet.swift */, + 720FD446EC4A5BC344EDE951 /* IPieChartDataSet.swift */, + 0A76C66149E5E54D0192EDEF /* IRadarChartDataSet.swift */, + FC6FD8E0E0AD2219A80EB6CB /* IScatterChartDataSet.swift */, ); - name = "Supporting Files"; + name = Interfaces; sourceTree = ""; }; - 06B3C0F21D99F85400B1DF43 /* Charts */ = { + F5EE92A73DEE2F59A8EF3A16 /* Jobs */ = { isa = PBXGroup; children = ( - 06B3C0F31D99F85400B1DF43 /* BarChartTests.swift */, - 06B3C0F41D99F85400B1DF43 /* LineChartTests.swift */, + BFC16599CC5F22F5A2B0A1F8 /* AnimatedMoveViewJob.swift */, + 9D826DBA70947C847354B011 /* AnimatedViewPortJob.swift */, + 9E84FF13690C87B851E9D4A7 /* AnimatedZoomViewJob.swift */, + A30F2546C4D51E23B8C23AA9 /* MoveViewJob.swift */, + AFCD6CECB85C6F8A52483E4A /* ViewPortJob.swift */, + 35E32810A6ED200A893C8811 /* ZoomViewJob.swift */, ); - name = Charts; - path = Tests/Charts; - sourceTree = SOURCE_ROOT; + name = Jobs; + sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 06165F211D8110E600722320 /* Headers */ = { + A3D19532C7F1E537763AEE5E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 06B11FAF1D811B7000D14B02 /* Charts.h in Headers */, + 733A21A4F11900F1D01FD786 /* Charts.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 06165F231D8110E600722320 /* Charts */ = { + 5FE6E04B0BD1A05295AA30D4 /* Charts */ = { isa = PBXNativeTarget; - buildConfigurationList = 06165F381D8110E700722320 /* Build configuration list for PBXNativeTarget "Charts" */; + buildConfigurationList = CAAFFB0CDB22406DAC0F0CEC /* Build configuration list for PBXNativeTarget "Charts" */; buildPhases = ( - 06165F1F1D8110E600722320 /* Sources */, - 06165F201D8110E600722320 /* Frameworks */, - 06165F211D8110E600722320 /* Headers */, - 06165F221D8110E600722320 /* Resources */, + A3D19532C7F1E537763AEE5E /* Headers */, + 03AB6EE03F90347FC0893DC8 /* Sources */, + 2776CC7F34B54E17FFD7719E /* Resources */, + 5AA7EB0E6DA1D80708E79E13 /* Frameworks */, ); buildRules = ( ); @@ -692,104 +686,94 @@ ); name = Charts; productName = Charts; - productReference = 06165F241D8110E600722320 /* Charts.framework */; + productReference = 46E69EF766B94AF3A39A7685 /* Charts.framework */; productType = "com.apple.product-type.framework"; }; - 06165F2D1D8110E600722320 /* ChartsTests */ = { + FA416F5A67B98B3910AC1D86 /* ChartsTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 06165F3B1D8110E700722320 /* Build configuration list for PBXNativeTarget "ChartsTests" */; + buildConfigurationList = 8B972693E2E6FF7550683288 /* Build configuration list for PBXNativeTarget "ChartsTests" */; buildPhases = ( - 064DBAE11D93813D002584CD /* Build Dependencies */, - 06165F2A1D8110E600722320 /* Sources */, - 06165F2B1D8110E600722320 /* Frameworks */, - 06165F2C1D8110E600722320 /* Resources */, - B6355D621EA9B71800B74B2E /* Copy Carthage Frameworks */, + 2F4DFBD5428A745FF3F0050B /* Build Dependencies */, + 4EB6CD6073AB2C7910F7D648 /* Sources */, + AD65C74F76A982180F20A790 /* Resources */, + 6691302A7193BE2498A20CD2 /* Frameworks */, + EF369AF94C21146E0A1DAD7A /* Copy Carthage Frameworks */, ); buildRules = ( ); dependencies = ( - 06165F311D8110E600722320 /* PBXTargetDependency */, + 411EFA5DEF09D4E155A61BFB /* PBXTargetDependency */, ); name = ChartsTests; productName = ChartsTests; - productReference = 06165F2E1D8110E600722320 /* ChartsTests.xctest */; + productReference = 0419F1A9AEC7CB7CEF9E589D /* ChartsTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 06165F1B1D8110E600722320 /* Project object */ = { + 9FCA2B965470A4CDBE439A35 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0730; - LastUpgradeCheck = 0800; - TargetAttributes = { - 06165F231D8110E600722320 = { - CreatedOnToolsVersion = 7.3.1; - }; - 06165F2D1D8110E600722320 = { - CreatedOnToolsVersion = 7.3.1; - }; - }; + LastSwiftUpdateCheck = 0830; + LastUpgradeCheck = 0700; }; - buildConfigurationList = 06165F1E1D8110E600722320 /* Build configuration list for PBXProject "Charts" */; + buildConfigurationList = CFDA49DB66628CEFB8CFE40F /* Build configuration list for PBXProject "Charts" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); - mainGroup = 06165F1A1D8110E600722320; - productRefGroup = 06165F251D8110E600722320 /* Products */; + mainGroup = 5162836D67424B2727AD8F47; + productRefGroup = B4152DB490FA30B206141699 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 06165F231D8110E600722320 /* Charts */, - 06165F2D1D8110E600722320 /* ChartsTests */, + 5FE6E04B0BD1A05295AA30D4 /* Charts */, + FA416F5A67B98B3910AC1D86 /* ChartsTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 06165F221D8110E600722320 /* Resources */ = { + 2776CC7F34B54E17FFD7719E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 06165F2C1D8110E600722320 /* Resources */ = { + AD65C74F76A982180F20A790 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D8A58A411DCE2EF8007BB012 /* Media.xcassets in Resources */, + D565E57B0C83E315C913D979 /* Media.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 064DBAE11D93813D002584CD /* Build Dependencies */ = { + 2F4DFBD5428A745FF3F0050B /* Build Dependencies */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - ); name = "Build Dependencies"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "exec \"${SRCROOT}/scripts/build-dependencies.sh\"\n"; + shellScript = "exec \"${SRCROOT}/scripts/build-dependencies.sh\""; }; - B6355D621EA9B71800B74B2E /* Copy Carthage Frameworks */ = { + EF369AF94C21146E0A1DAD7A /* Copy Carthage Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - FBSnapshotTestCase, + FBSnapshotTestCase.framework, ); name = "Copy Carthage Frameworks"; outputPaths = ( @@ -801,217 +785,197 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 06165F1F1D8110E600722320 /* Sources */ = { + 03AB6EE03F90347FC0893DC8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 06B120AD1D811B8900D14B02 /* LineScatterCandleRadarRenderer.swift in Sources */, - 06B120C51D811B8900D14B02 /* TransformerHorizontalBarChart.swift in Sources */, - 06B1204A1D811B8900D14B02 /* CombinedChartView.swift in Sources */, - 06B1204C1D811B8900D14B02 /* LineChartView.swift in Sources */, - 06B120AF1D811B8900D14B02 /* RadarChartRenderer.swift in Sources */, - 06B1207B1D811B8900D14B02 /* ICandleChartDataSet.swift in Sources */, - 06B120511D811B8900D14B02 /* AxisBase.swift in Sources */, - 06B1209F1D811B8900D14B02 /* MoveViewJob.swift in Sources */, - 06B1209C1D811B8900D14B02 /* AnimatedMoveViewJob.swift in Sources */, - 06B1208B1D811B8900D14B02 /* ChartHighlighter.swift in Sources */, - 06B1209A1D811B8900D14B02 /* LineChartDataProvider.swift in Sources */, - 06B120571D811B8900D14B02 /* MarkerImage.swift in Sources */, - 06B1207D1D811B8900D14B02 /* ILineChartDataSet.swift in Sources */, - 06B120801D811B8900D14B02 /* IPieChartDataSet.swift in Sources */, - 06B120C41D811B8900D14B02 /* Transformer.swift in Sources */, - 06B1206C1D811B8900D14B02 /* LineChartData.swift in Sources */, - 06B1208F1D811B8900D14B02 /* IHighlighter.swift in Sources */, - 5B56A9CD1D905EB300F58178 /* Description.swift in Sources */, - 06B120921D811B8900D14B02 /* RadarHighlighter.swift in Sources */, - 06B120771D811B8900D14B02 /* ScatterChartDataSet.swift in Sources */, - 06B120791D811B8900D14B02 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */, - 06B1205A1D811B8900D14B02 /* YAxis.swift in Sources */, - 06B120651D811B8900D14B02 /* CandleChartDataEntry.swift in Sources */, - 06B120911D811B8900D14B02 /* PieRadarHighlighter.swift in Sources */, - 06B1207A1D811B8900D14B02 /* IBubbleChartDataSet.swift in Sources */, - 06B120841D811B8900D14B02 /* DefaultAxisValueFormatter.swift in Sources */, - 06B120711D811B8900D14B02 /* PieChartDataEntry.swift in Sources */, - 06B120C61D811B8900D14B02 /* ViewPortHandler.swift in Sources */, - 06B120881D811B8900D14B02 /* IFillFormatter.swift in Sources */, - 06B1204F1D811B8900D14B02 /* RadarChartView.swift in Sources */, - 06B120611D811B8900D14B02 /* BubbleChartData.swift in Sources */, - 06B120441D811B8900D14B02 /* ChartAnimationEasing.swift in Sources */, - 06B120761D811B8900D14B02 /* ScatterChartData.swift in Sources */, - 06B120691D811B8900D14B02 /* ChartDataEntryBase.swift in Sources */, - 06B120891D811B8900D14B02 /* IValueFormatter.swift in Sources */, - 06B120811D811B8900D14B02 /* IRadarChartDataSet.swift in Sources */, - 06B120581D811B8900D14B02 /* MarkerView.swift in Sources */, - 06B120751D811B8900D14B02 /* RadarChartDataSet.swift in Sources */, - 06B120B11D811B8900D14B02 /* ChevronDownShapeRenderer.swift in Sources */, - 06B120501D811B8900D14B02 /* ScatterChartView.swift in Sources */, - 06B120551D811B8900D14B02 /* Legend.swift in Sources */, - 06B1205F1D811B8900D14B02 /* BarLineScatterCandleBubbleChartData.swift in Sources */, - 06B120631D811B8900D14B02 /* BubbleChartDataSet.swift in Sources */, - 06B1205D1D811B8900D14B02 /* BarChartDataEntry.swift in Sources */, - 06B120481D811B8900D14B02 /* CandleStickChartView.swift in Sources */, - 06B120B81D811B8900D14B02 /* XShapeRenderer.swift in Sources */, - 06B120B21D811B8900D14B02 /* ChevronUpShapeRenderer.swift in Sources */, - 06B120591D811B8900D14B02 /* XAxis.swift in Sources */, - 06B120681D811B8900D14B02 /* ChartDataEntry.swift in Sources */, - 06B120A71D811B8900D14B02 /* ChartDataRendererBase.swift in Sources */, - 06B1209B1D811B8900D14B02 /* ScatterChartDataProvider.swift in Sources */, - 06B1204D1D811B8900D14B02 /* PieChartView.swift in Sources */, - 06B120521D811B8900D14B02 /* ChartLimitLine.swift in Sources */, - 06B120B31D811B8900D14B02 /* CircleShapeRenderer.swift in Sources */, - 06B1206A1D811B8900D14B02 /* ChartDataSet.swift in Sources */, - 06B120431D811B8900D14B02 /* Animator.swift in Sources */, - 06B120B01D811B8900D14B02 /* Renderer.swift in Sources */, - 06B120851D811B8900D14B02 /* DefaultFillFormatter.swift in Sources */, - 06B120A91D811B8900D14B02 /* HorizontalBarChartRenderer.swift in Sources */, - 06B120BB1D811B8900D14B02 /* XAxisRendererHorizontalBarChart.swift in Sources */, - 06B1205B1D811B8900D14B02 /* ChartBaseDataSet.swift in Sources */, - 06B120471D811B8900D14B02 /* BubbleChartView.swift in Sources */, - 06B120BE1D811B8900D14B02 /* YAxisRendererHorizontalBarChart.swift in Sources */, - 06B120B51D811B8900D14B02 /* IShapeRenderer.swift in Sources */, - 06B120B71D811B8900D14B02 /* TriangleShapeRenderer.swift in Sources */, - 06B120971D811B8900D14B02 /* CandleChartDataProvider.swift in Sources */, - 06B120C11D811B8900D14B02 /* ChartUtils.swift in Sources */, - 06B120BD1D811B8900D14B02 /* YAxisRenderer.swift in Sources */, - 06B1206F1D811B8900D14B02 /* LineScatterCandleRadarChartDataSet.swift in Sources */, - 06B120BC1D811B8900D14B02 /* XAxisRendererRadarChart.swift in Sources */, - 06B120461D811B8900D14B02 /* BarLineChartViewBase.swift in Sources */, - 06B120A61D811B8900D14B02 /* CandleStickChartRenderer.swift in Sources */, - 06B120491D811B8900D14B02 /* ChartViewBase.swift in Sources */, - 06B120541D811B8900D14B02 /* IMarker.swift in Sources */, - 06B120BF1D811B8900D14B02 /* YAxisRendererRadarChart.swift in Sources */, - 06B1207C1D811B8900D14B02 /* IChartDataSet.swift in Sources */, - 06B120941D811B8900D14B02 /* BarChartDataProvider.swift in Sources */, - 06B1205E1D811B8900D14B02 /* BarChartDataSet.swift in Sources */, - 06B120A31D811B8900D14B02 /* BarChartRenderer.swift in Sources */, - 06B120781D811B8900D14B02 /* IBarChartDataSet.swift in Sources */, - 06B120601D811B8900D14B02 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */, - 06B1208D1D811B8900D14B02 /* Highlight.swift in Sources */, - 06B120821D811B8900D14B02 /* IScatterChartDataSet.swift in Sources */, - 06B120951D811B8900D14B02 /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */, - 06B120A81D811B8900D14B02 /* CombinedChartRenderer.swift in Sources */, - 06B120981D811B8900D14B02 /* ChartDataProvider.swift in Sources */, - 06B1204B1D811B8900D14B02 /* HorizontalBarChartView.swift in Sources */, - 06B120871D811B8900D14B02 /* IAxisValueFormatter.swift in Sources */, - 06B1208A1D811B8900D14B02 /* BarHighlighter.swift in Sources */, - 06B120A11D811B8900D14B02 /* ZoomViewJob.swift in Sources */, - 06B120731D811B8900D14B02 /* RadarChartData.swift in Sources */, - 06B1208C1D811B8900D14B02 /* CombinedHighlighter.swift in Sources */, - 06B1204E1D811B8900D14B02 /* PieRadarChartViewBase.swift in Sources */, - 06B120901D811B8900D14B02 /* PieHighlighter.swift in Sources */, - 06B120AC1D811B8900D14B02 /* LineRadarRenderer.swift in Sources */, - 06B120561D811B8900D14B02 /* LegendEntry.swift in Sources */, - 06B120701D811B8900D14B02 /* PieChartData.swift in Sources */, - 06B120C01D811B8900D14B02 /* ChartColorTemplates.swift in Sources */, - 06B120B61D811B8900D14B02 /* SquareShapeRenderer.swift in Sources */, - 06B120661D811B8900D14B02 /* CandleChartDataSet.swift in Sources */, - 06B120AE1D811B8900D14B02 /* PieChartRenderer.swift in Sources */, - 06B1207F1D811B8900D14B02 /* ILineScatterCandleRadarChartDataSet.swift in Sources */, - 06B1209D1D811B8900D14B02 /* AnimatedViewPortJob.swift in Sources */, - 06B120721D811B8900D14B02 /* PieChartDataSet.swift in Sources */, - 06B1206B1D811B8900D14B02 /* CombinedChartData.swift in Sources */, - 5BF8813B1DDC4DF70033370C /* IndexAxisValueFormatter.swift in Sources */, - 06B120AB1D811B8900D14B02 /* LineChartRenderer.swift in Sources */, - 06B120C31D811B8900D14B02 /* Platform.swift in Sources */, - 06B1207E1D811B8900D14B02 /* ILineRadarChartDataSet.swift in Sources */, - 06B120831D811B8900D14B02 /* DataApproximator.swift in Sources */, - 06B1206D1D811B8900D14B02 /* LineChartDataSet.swift in Sources */, - 06B120451D811B8900D14B02 /* BarChartView.swift in Sources */, - 06B120861D811B8900D14B02 /* DefaultValueFormatter.swift in Sources */, - 06B120A01D811B8900D14B02 /* ViewPortJob.swift in Sources */, - 06B120C21D811B8900D14B02 /* Fill.swift in Sources */, - 06B1205C1D811B8900D14B02 /* BarChartData.swift in Sources */, - 06B120961D811B8900D14B02 /* BubbleChartDataProvider.swift in Sources */, - 06B120A51D811B8900D14B02 /* BubbleChartRenderer.swift in Sources */, - 06B120B91D811B8900D14B02 /* ScatterChartRenderer.swift in Sources */, - 06B120741D811B8900D14B02 /* RadarChartDataEntry.swift in Sources */, - 06B120BA1D811B8900D14B02 /* XAxisRenderer.swift in Sources */, - 06B120641D811B8900D14B02 /* CandleChartData.swift in Sources */, - 06B120AA1D811B8900D14B02 /* LegendRenderer.swift in Sources */, - 06B120B41D811B8900D14B02 /* CrossShapeRenderer.swift in Sources */, - 06B120931D811B8900D14B02 /* Range.swift in Sources */, - 06B120A21D811B8900D14B02 /* AxisRendererBase.swift in Sources */, - 06B1208E1D811B8900D14B02 /* HorizontalBarHighlighter.swift in Sources */, - 06B1206E1D811B8900D14B02 /* LineRadarChartDataSet.swift in Sources */, - 06B120A41D811B8900D14B02 /* BarLineScatterCandleBubbleRenderer.swift in Sources */, - 06B120531D811B8900D14B02 /* ComponentBase.swift in Sources */, - 06B120991D811B8900D14B02 /* CombinedChartDataProvider.swift in Sources */, - 06B120671D811B8900D14B02 /* ChartData.swift in Sources */, - 06B1209E1D811B8900D14B02 /* AnimatedZoomViewJob.swift in Sources */, - 06B120621D811B8900D14B02 /* BubbleChartDataEntry.swift in Sources */, + 2BED5962FC328365F9EFE04A /* Animator.swift in Sources */, + 0AEBA5C5AC92953241274BFE /* ChartAnimationEasing.swift in Sources */, + F235A3B8989F0AB6F5D924F3 /* BarChartView.swift in Sources */, + 8D20EAE2CDA357A63949EF6E /* BarLineChartViewBase.swift in Sources */, + F5E349C4D4D1BE11B492E3CB /* BubbleChartView.swift in Sources */, + 308137F9C0CF2B7A0372D6E8 /* CandleStickChartView.swift in Sources */, + 509AC4C6E1E536203C75519E /* ChartViewBase.swift in Sources */, + F977CF3DBB6EABD38CF47C99 /* CombinedChartView.swift in Sources */, + 369A2D30FB61620C6FBA4754 /* HorizontalBarChartView.swift in Sources */, + 8B3259AC8A525C9B9C378C6F /* LineChartView.swift in Sources */, + B6954A329F734B0D55C6C56E /* PieChartView.swift in Sources */, + 08A07712EDB571E1181B09DC /* PieRadarChartViewBase.swift in Sources */, + 6F78DF2FA8AE178940E682BE /* RadarChartView.swift in Sources */, + 2133C9E6EA7DB4F09D9F2DAC /* ScatterChartView.swift in Sources */, + A7F2C09F6E9C079443B75296 /* AxisBase.swift in Sources */, + 69E96F71CA26A2D1435ACB93 /* ChartLimitLine.swift in Sources */, + A9B542B57C6ADF07382FB3FB /* ComponentBase.swift in Sources */, + 6F90773A0B6D242A532898CA /* Description.swift in Sources */, + DE8B9684CD729E7097025856 /* IMarker.swift in Sources */, + F24723FC6A4BA9AF18D6EB82 /* Legend.swift in Sources */, + 2D1A4882F20E8DA1B05086DD /* LegendEntry.swift in Sources */, + 82C88896605FB53C2BBEFE6D /* MarkerImage.swift in Sources */, + 12A460F5BACF0370935876FA /* MarkerView.swift in Sources */, + DEDB8D7B8032580B8B01CFE5 /* XAxis.swift in Sources */, + 4DCE8DE16A155C396A61DD14 /* YAxis.swift in Sources */, + C19DD82E1483AF4C9A24E230 /* ChartBaseDataSet.swift in Sources */, + DD5DB6F369B070B787513365 /* BarChartData.swift in Sources */, + ADED6329E0EF4B175393FDD8 /* BarChartDataEntry.swift in Sources */, + DB91F074AEA21362DF80863B /* BarChartDataSet.swift in Sources */, + ED0899005F6784C86FD499FC /* BarLineScatterCandleBubbleChartData.swift in Sources */, + 2BD923143656FAC51F574F46 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */, + 5AA082FD22A0D20841C80162 /* BubbleChartData.swift in Sources */, + A0C490C7C6C3011A2D27A6C6 /* BubbleChartDataEntry.swift in Sources */, + 51FAFA98725F06E01652C980 /* BubbleChartDataSet.swift in Sources */, + 707BD8B3A9AC29A5744F35E5 /* CandleChartData.swift in Sources */, + 4E1BC25E708D7D689EB67B95 /* CandleChartDataEntry.swift in Sources */, + 0FE64EA8621892B4ACFD0233 /* CandleChartDataSet.swift in Sources */, + 268258CE356AE52A1D29BA46 /* ChartData.swift in Sources */, + C57F7BD809195465B9E70685 /* ChartDataEntry.swift in Sources */, + 06906C3D3899AF3C9ED9A72C /* ChartDataEntryBase.swift in Sources */, + 0EC2659FE4759919DEDB4289 /* ChartDataSet.swift in Sources */, + FA29A2213BABD5C18B776395 /* CombinedChartData.swift in Sources */, + 1486B2729EFA2D4ED659DE07 /* LineChartData.swift in Sources */, + AC60152B982EAFE8A90DAAC4 /* LineChartDataSet.swift in Sources */, + 1142DD089AD10AD7954FA888 /* LineRadarChartDataSet.swift in Sources */, + 1992D1214A1C379F7084B1BE /* LineScatterCandleRadarChartDataSet.swift in Sources */, + 68C35C82535E7020A718EE1C /* PieChartData.swift in Sources */, + 653022BC36654E7387295464 /* PieChartDataEntry.swift in Sources */, + 225F213C6F7215F8EB6292B5 /* PieChartDataSet.swift in Sources */, + 910B631C21F51E3251269A28 /* RadarChartData.swift in Sources */, + 766055D10C91B2AE4DDA1D0F /* RadarChartDataEntry.swift in Sources */, + 87A00389DC37682EB0587361 /* RadarChartDataSet.swift in Sources */, + C894F93A974CD1F921D0F446 /* ScatterChartData.swift in Sources */, + 09E3FB9BE8CA8B0299D577BB /* ScatterChartDataSet.swift in Sources */, + 35A9F009C73FCF279578B376 /* IBarChartDataSet.swift in Sources */, + 255FE5B497AE131B4BAF0FD2 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */, + 7423BD75D10028298C72000E /* IBubbleChartDataSet.swift in Sources */, + 90945C09073B26274532B16E /* ICandleChartDataSet.swift in Sources */, + ABF7BB919BB4E09E2F0F334F /* IChartDataSet.swift in Sources */, + 130F9478760D89A01878954F /* ILineChartDataSet.swift in Sources */, + 63BAACA8931D14A608769360 /* ILineRadarChartDataSet.swift in Sources */, + F00640DA4C6A74D51B9EFBC8 /* ILineScatterCandleRadarChartDataSet.swift in Sources */, + E740FB705944655AEDC2CF96 /* IPieChartDataSet.swift in Sources */, + 2230C8E2C83AAC9DE76495B4 /* IRadarChartDataSet.swift in Sources */, + 23B8C89AEAFCCF6AEA3247C8 /* IScatterChartDataSet.swift in Sources */, + D147B92A77E257FE015075C2 /* DataApproximator.swift in Sources */, + D868000D81CF4DA2FF804230 /* DefaultAxisValueFormatter.swift in Sources */, + 3468AC966A4A206BD8F43903 /* DefaultFillFormatter.swift in Sources */, + 46FCCAF956979208C770B6C0 /* DefaultValueFormatter.swift in Sources */, + 143E308EA31773820D35AB42 /* IAxisValueFormatter.swift in Sources */, + 44D2CFF515D87AD2E4B90870 /* IFillFormatter.swift in Sources */, + 1C9D51F1565BEADA1C60AD73 /* IndexAxisValueFormatter.swift in Sources */, + B7258870917D6C761191C2E9 /* IValueFormatter.swift in Sources */, + 65ECC1C648CB25D8FA44CB42 /* BarHighlighter.swift in Sources */, + E22369BCD81AD64619FAE3B6 /* ChartHighlighter.swift in Sources */, + 4CC1719914125CF01E93D969 /* CombinedHighlighter.swift in Sources */, + 74219D78A8A1DC65C4E3B669 /* Highlight.swift in Sources */, + 01D0E7A3BBE960F3D0521C47 /* HorizontalBarHighlighter.swift in Sources */, + 7DF82423B2D0B36DD6EF68C3 /* IHighlighter.swift in Sources */, + 1E2AB4085B35F6D495FC2795 /* PieHighlighter.swift in Sources */, + 720E258628568FBC465283A1 /* PieRadarHighlighter.swift in Sources */, + 2E36DC7E689F160DC88BBCC5 /* RadarHighlighter.swift in Sources */, + B1629D7C69F65A9301361673 /* Range.swift in Sources */, + 005C0F30B90039BB263CC09C /* BarChartDataProvider.swift in Sources */, + FEC6B26E4D2B1F3380A0FB1C /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */, + C71785FFAA2F2CF25FD21F30 /* BubbleChartDataProvider.swift in Sources */, + 54AC4F50C05F371B148E8A91 /* CandleChartDataProvider.swift in Sources */, + 50E8388181E2459070AC375D /* ChartDataProvider.swift in Sources */, + A5D1CE0DAE3014D1172DA25A /* CombinedChartDataProvider.swift in Sources */, + C2AFB4C82ED84EF1D944C3BD /* LineChartDataProvider.swift in Sources */, + DDBEAA65509435155E287373 /* ScatterChartDataProvider.swift in Sources */, + BD8D78D8B26A3B3A87B54B99 /* AnimatedMoveViewJob.swift in Sources */, + CEA939DFCD02953FFA285990 /* AnimatedViewPortJob.swift in Sources */, + ADFEFB1E41234B94FEA24566 /* AnimatedZoomViewJob.swift in Sources */, + DD0B94A153EDB846E93293E2 /* MoveViewJob.swift in Sources */, + B60B915377BF81E6F8FBE196 /* ViewPortJob.swift in Sources */, + D36E5A7AD311BB93A011D75E /* ZoomViewJob.swift in Sources */, + 6BA29A3B85C5B26613EF890B /* AxisRendererBase.swift in Sources */, + 4BECEE4BAEB476CCE0255839 /* BarChartRenderer.swift in Sources */, + 6E650F98D3642AD4A35A57B1 /* BarLineScatterCandleBubbleRenderer.swift in Sources */, + 94F1D922BFDCA0682A2106E1 /* BubbleChartRenderer.swift in Sources */, + F5AF34DB8AAEACBEE560C057 /* CandleStickChartRenderer.swift in Sources */, + 11B665756E905BEE10A01295 /* ChartDataRendererBase.swift in Sources */, + 9E7350B6286FA8CA9853E83B /* CombinedChartRenderer.swift in Sources */, + C7B8F8DED72C9394AA1227ED /* HorizontalBarChartRenderer.swift in Sources */, + 552FBE36C7BC655C38B09143 /* LegendRenderer.swift in Sources */, + 96C0CB726AED7262B833C5A5 /* LineChartRenderer.swift in Sources */, + 7CC75938F8C6DA0E10010AC7 /* LineRadarRenderer.swift in Sources */, + 6B6A73F822415C89E982A7F3 /* LineScatterCandleRadarRenderer.swift in Sources */, + 896C5052307EAE609B3C9371 /* PieChartRenderer.swift in Sources */, + 76BC27AFAD431BA80B5AD478 /* RadarChartRenderer.swift in Sources */, + F3947C20CD8B09841B750D54 /* Renderer.swift in Sources */, + BC3995CB7EBC502CE71A89D3 /* ChevronDownShapeRenderer.swift in Sources */, + C3647550473CEBC072F2EAF1 /* ChevronUpShapeRenderer.swift in Sources */, + D66C3D070239CF161A7CEDB2 /* CircleShapeRenderer.swift in Sources */, + EF889355A3A5F21D8478CCEB /* CrossShapeRenderer.swift in Sources */, + BA2F43A78AD1400F8BECA357 /* IShapeRenderer.swift in Sources */, + 39C2BE4577CFA1419B6638BC /* SquareShapeRenderer.swift in Sources */, + 8CE471B6C29C727AA56F4863 /* TriangleShapeRenderer.swift in Sources */, + A85225CB2CD56D3A8B6A2A90 /* XShapeRenderer.swift in Sources */, + 2972AB282AF22E4447DBDDEC /* ScatterChartRenderer.swift in Sources */, + 442CEC159FCD65EC6ABEFCD8 /* XAxisRenderer.swift in Sources */, + 0E78C9B270B82F430F2C4DFF /* XAxisRendererHorizontalBarChart.swift in Sources */, + 7F43F7E4F0E9D5070384C60B /* XAxisRendererRadarChart.swift in Sources */, + BB9E5479B3B4517978C1A13D /* YAxisRenderer.swift in Sources */, + 36C33400348CA56BB48D5B22 /* YAxisRendererHorizontalBarChart.swift in Sources */, + E4B8FDE7081EF22C4529D628 /* YAxisRendererRadarChart.swift in Sources */, + F45631E7C0DFE9321DB96891 /* ChartColorTemplates.swift in Sources */, + B75F7CC7313FA00407747290 /* ChartUtils.swift in Sources */, + 0EC4920E6D62D7A277EF34F5 /* Fill.swift in Sources */, + EE3B04B6C5F9209FE5642C02 /* Platform.swift in Sources */, + 072313063701CBB1C6D8FA89 /* Transformer.swift in Sources */, + 493A66BBB5F3E4371FB39361 /* TransformerHorizontalBarChart.swift in Sources */, + 79C7A52225B62A0460E113B4 /* ViewPortHandler.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 06165F2A1D8110E600722320 /* Sources */ = { + 4EB6CD6073AB2C7910F7D648 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 06B3C0F81D99F85400B1DF43 /* LineChartTests.swift in Sources */, - 06B3C0F71D99F85400B1DF43 /* BarChartTests.swift in Sources */, - 06761B5E1D98176000D5CE09 /* ChartUtilsTests.swift in Sources */, + 6CAA18D1987552B252713159 /* BarChartTests.swift in Sources */, + DC7897BF3E4CEF01A14BC47A /* ChartUtilsTests.swift in Sources */, + 969438983603FBAB8F178CEC /* LineChartTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 06165F311D8110E600722320 /* PBXTargetDependency */ = { + 411EFA5DEF09D4E155A61BFB /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 06165F231D8110E600722320 /* Charts */; - targetProxy = 06165F301D8110E600722320 /* PBXContainerItemProxy */; + name = Charts; + target = 5FE6E04B0BD1A05295AA30D4 /* Charts */; + targetProxy = 35F78304E8930C633456BF6E /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 06165F361D8110E700722320 /* Debug */ = { + 23152C9A81520D22A90EDF62 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; + APPLICATION_EXTENSION_API_ONLY = YES; + COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; + FRAMEWORK_VERSION = A; 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; + INFOPLIST_FILE = "Source/Supporting Files/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.dcg.Charts; + PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos appletvsimulator appletvos macosx"; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4"; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -1019,154 +983,235 @@ }; name = Debug; }; - 06165F371D8110E700722320 /* Release */ = { + 277311CAE322EC53D7BE818A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + "FRAMEWORK_SEARCH_PATHS[sdk=appletv*]" = ( + "$(SRCROOT)/Carthage/Build/tvOS/", + "$(inherited)", + ); + "FRAMEWORK_SEARCH_PATHS[sdk=iphone*]" = ( + "$(SRCROOT)/Carthage/Build/iOS/", + "$(inherited)", + ); + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Tests/Supporting Files/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.dcg.ChartsTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator appletvos appletvsimulator"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TVOS_DEPLOYMENT_TARGET = 9.0; + }; + name = Debug; + }; + 2DAFFA40B7E88315BFBA987B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + 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_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = ""; + COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; + ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos appletvsimulator appletvos macosx"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2,3,4"; - TVOS_DEPLOYMENT_TARGET = 9.0; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - WATCHOS_DEPLOYMENT_TARGET = 2.0; }; - name = Release; + name = Debug; }; - 06165F391D8110E700722320 /* Debug */ = { + 50F7207F806F56F07EDF0E2F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = "$(SRCROOT)/Source/Supporting Files/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.dcg.Charts; + APPLICATION_EXTENSION_API_ONLY = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + "FRAMEWORK_SEARCH_PATHS[sdk=appletv*]" = ( + "$(SRCROOT)/Carthage/Build/tvOS/", + "$(inherited)", + ); + "FRAMEWORK_SEARCH_PATHS[sdk=iphone*]" = ( + "$(SRCROOT)/Carthage/Build/iOS/", + "$(inherited)", + ); + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Tests/Supporting Files/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.dcg.ChartsTests; PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; + SDKROOT = macosx; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator appletvos appletvsimulator"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; + TVOS_DEPLOYMENT_TARGET = 9.0; }; - name = Debug; + name = Release; }; - 06165F3A1D8110E700722320 /* Release */ = { + 89D760868DF2B3FE21E75581 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_VERSION = A; - INFOPLIST_FILE = "$(SRCROOT)/Source/Supporting Files/Info.plist"; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Source/Supporting Files/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = com.dcg.Charts; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; + TVOS_DEPLOYMENT_TARGET = 9.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Release; }; - 06165F3C1D8110E700722320 /* Debug */ = { + B76233F84F6BF92380A7BEF5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 063FF0401D8CC9940094A042 /* Carthage.xcconfig */; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = "$(SRCROOT)/Tests/Supporting Files/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.dcg.ChartsTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 06165F3D1D8110E700722320 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 063FF0401D8CC9940094A042 /* Carthage.xcconfig */; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + 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_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = ""; COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = "$(SRCROOT)/Tests/Supporting Files/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.dcg.ChartsTests; - PRODUCT_NAME = "$(TARGET_NAME)"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + SDKROOT = macosx; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2,3,4"; + VALIDATE_PRODUCT = YES; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 06165F1E1D8110E600722320 /* Build configuration list for PBXProject "Charts" */ = { + 8B972693E2E6FF7550683288 /* Build configuration list for PBXNativeTarget "ChartsTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 06165F361D8110E700722320 /* Debug */, - 06165F371D8110E700722320 /* Release */, + 50F7207F806F56F07EDF0E2F /* Release */, + 277311CAE322EC53D7BE818A /* Debug */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 06165F381D8110E700722320 /* Build configuration list for PBXNativeTarget "Charts" */ = { + CAAFFB0CDB22406DAC0F0CEC /* Build configuration list for PBXNativeTarget "Charts" */ = { isa = XCConfigurationList; buildConfigurations = ( - 06165F391D8110E700722320 /* Debug */, - 06165F3A1D8110E700722320 /* Release */, + 89D760868DF2B3FE21E75581 /* Release */, + 23152C9A81520D22A90EDF62 /* Debug */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 06165F3B1D8110E700722320 /* Build configuration list for PBXNativeTarget "ChartsTests" */ = { + CFDA49DB66628CEFB8CFE40F /* Build configuration list for PBXProject "Charts" */ = { isa = XCConfigurationList; buildConfigurations = ( - 06165F3C1D8110E700722320 /* Debug */, - 06165F3D1D8110E700722320 /* Release */, + 2DAFFA40B7E88315BFBA987B /* Debug */, + B76233F84F6BF92380A7BEF5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 06165F1B1D8110E600722320 /* Project object */; + rootObject = 9FCA2B965470A4CDBE439A35 /* Project object */; } diff --git a/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme b/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme index 4002aea0ad..d8c483c25f 100644 --- a/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme +++ b/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme @@ -1,6 +1,6 @@ @@ -26,29 +26,20 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES" - codeCoverageEnabled = "YES"> + language = "" + shouldUseLaunchSchemeArgsEnv = "YES"> - - - - @@ -56,6 +47,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" @@ -65,7 +57,7 @@ @@ -87,15 +79,6 @@ savedToolIdentifier = "" useCustomWorkingDirectory = "NO" debugDocumentVersioning = "YES"> - - - - diff --git a/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTests.xcscheme b/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTests.xcscheme index 1e75bd68d3..dad76361aa 100644 --- a/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTests.xcscheme +++ b/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTests.xcscheme @@ -1,6 +1,6 @@ + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> @@ -26,6 +26,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" shouldUseLaunchSchemeArgsEnv = "YES" codeCoverageEnabled = "YES"> @@ -33,7 +34,7 @@ skipped = "NO"> @@ -47,6 +48,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" @@ -56,7 +58,7 @@ @@ -78,15 +80,6 @@ savedToolIdentifier = "" useCustomWorkingDirectory = "NO" debugDocumentVersioning = "YES"> - - - - diff --git a/Charts/ChartsTests/Media.xcassets/Contents.json b/Tests/Supporting Files/Media.xcassets/Contents.json similarity index 100% rename from Charts/ChartsTests/Media.xcassets/Contents.json rename to Tests/Supporting Files/Media.xcassets/Contents.json diff --git a/Charts/ChartsTests/Media.xcassets/icon.imageset/Contents.json b/Tests/Supporting Files/Media.xcassets/icon.imageset/Contents.json similarity index 100% rename from Charts/ChartsTests/Media.xcassets/icon.imageset/Contents.json rename to Tests/Supporting Files/Media.xcassets/icon.imageset/Contents.json diff --git a/Charts/ChartsTests/Media.xcassets/icon.imageset/star-1.png b/Tests/Supporting Files/Media.xcassets/icon.imageset/star-1.png similarity index 100% rename from Charts/ChartsTests/Media.xcassets/icon.imageset/star-1.png rename to Tests/Supporting Files/Media.xcassets/icon.imageset/star-1.png diff --git a/Charts/ChartsTests/Media.xcassets/icon.imageset/star-2.png b/Tests/Supporting Files/Media.xcassets/icon.imageset/star-2.png similarity index 100% rename from Charts/ChartsTests/Media.xcassets/icon.imageset/star-2.png rename to Tests/Supporting Files/Media.xcassets/icon.imageset/star-2.png diff --git a/Charts/ChartsTests/Media.xcassets/icon.imageset/star.png b/Tests/Supporting Files/Media.xcassets/icon.imageset/star.png similarity index 100% rename from Charts/ChartsTests/Media.xcassets/icon.imageset/star.png rename to Tests/Supporting Files/Media.xcassets/icon.imageset/star.png diff --git a/scripts/copy-carthage-frameworks.sh b/scripts/copy-carthage-frameworks.sh index fe47804c64..435f2c32ea 100755 --- a/scripts/copy-carthage-frameworks.sh +++ b/scripts/copy-carthage-frameworks.sh @@ -11,7 +11,7 @@ esac for (( n = 0; n < SCRIPT_INPUT_FILE_COUNT; n++ )); do VAR=SCRIPT_INPUT_FILE_$n framework=$(basename "${!VAR}") - export SCRIPT_INPUT_FILE_$n="$SRCROOT"/Carthage/Build/$plat/"$framework".framework + export SCRIPT_INPUT_FILE_$n="$SRCROOT"/Carthage/Build/$plat/"$framework" done /usr/local/bin/carthage copy-frameworks || exit From 252a7bc281e474967889e4851ff137ca0845579f Mon Sep 17 00:00:00 2001 From: Pierre-Marc Airoldi Date: Sun, 3 Sep 2017 14:10:11 -0400 Subject: [PATCH 14/64] remove unused Carthage.xcconfig --- Carthage.xcconfig | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 Carthage.xcconfig diff --git a/Carthage.xcconfig b/Carthage.xcconfig deleted file mode 100644 index 1b9b96db98..0000000000 --- a/Carthage.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -// -// Carthage.xcconfig -// Charts -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -FRAMEWORK_SEARCH_PATHS[sdk=macosx*] = $(SRCROOT)/Carthage/Build/Mac/ $(inherited) -FRAMEWORK_SEARCH_PATHS[sdk=iphone*] = $(SRCROOT)/Carthage/Build/iOS/ $(inherited) -FRAMEWORK_SEARCH_PATHS[sdk=watch*] = $(SRCROOT)/Carthage/Build/watchOS/ $(inherited) -FRAMEWORK_SEARCH_PATHS[sdk=appletv*] = $(SRCROOT)/Carthage/Build/tvOS/ $(inherited) From 225ec3db7a3862a471fd1a4993a639f9f0233917 Mon Sep 17 00:00:00 2001 From: Pierre-Marc Airoldi Date: Sun, 3 Sep 2017 14:22:00 -0400 Subject: [PATCH 15/64] remove rvm version to fix travis --- .travis.yml | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3f56fe5082..24a3c6ec6e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,21 @@ osx_image: xcode8.3 language: objective-c -rvm: -- 2.2 env: global: - - LANG=en_US.UTF-8 - - secure: HRl5Cg3/LmTJYCSDGtV8Fiqf6OgWXR6C5YkNviOElU9YmcCTvnmE7MCm+gK8hJNIQ2mWCBTlxTC7jJxeYlx0D+JQ6IhRc75B4zXgbtth6HCzlvhWDcBbNU/K+JPDjy2EAoVgvf8Xseq6GqM4WcVg2Pwr9PS3aaH/SKDE6yVoPXRM2wXRAxIdxayqm/RQgG88jAKgg+Ub5DKW/c9NLLbUf/WdY9SgQDJtqeZCMv7G3/IzW34KZgVPsqSrPByzZXbf7KgYkYLQlscH4mcUctk1qxhdCae//zcgUZo/utpXWbPXQqtvDpuqrg9IRvoGxa/D1I7dLSJsVnk4aP7RW18vn4HJ82C2AiEp+lU2TQE9y5lXcGssZVIa5aZNTWL90HVer3Kg6AnHffvdCSZ/UHsMZJFURUXL9fRIlWVGuEDeQOqlV6lUmEtp/BiEdV4D5PuCyT6snsmEwkc51goyqh6uS6XhJyqYEQdxdoybznwp91tVmASsRybppIGHTkcWN5csF4zQt40tEwd8LoqM+bBUo0wxKiKsNsecL4JA+YDYs2saZY9U3s8jAaIon+qDu071fPRaPEvBhYHYDhy4cTvBXibyGUYGHkrgLu0w19wDfHcJKt2In58yOmaCCLNoTGp/ZLNVRyZ8VDlj/NdJ2dWpMsL2Aj7OxU065kCL2FlvuRU= + - LANG=en_US.UTF-8 + - secure: HRl5Cg3/LmTJYCSDGtV8Fiqf6OgWXR6C5YkNviOElU9YmcCTvnmE7MCm+gK8hJNIQ2mWCBTlxTC7jJxeYlx0D+JQ6IhRc75B4zXgbtth6HCzlvhWDcBbNU/K+JPDjy2EAoVgvf8Xseq6GqM4WcVg2Pwr9PS3aaH/SKDE6yVoPXRM2wXRAxIdxayqm/RQgG88jAKgg+Ub5DKW/c9NLLbUf/WdY9SgQDJtqeZCMv7G3/IzW34KZgVPsqSrPByzZXbf7KgYkYLQlscH4mcUctk1qxhdCae//zcgUZo/utpXWbPXQqtvDpuqrg9IRvoGxa/D1I7dLSJsVnk4aP7RW18vn4HJ82C2AiEp+lU2TQE9y5lXcGssZVIa5aZNTWL90HVer3Kg6AnHffvdCSZ/UHsMZJFURUXL9fRIlWVGuEDeQOqlV6lUmEtp/BiEdV4D5PuCyT6snsmEwkc51goyqh6uS6XhJyqYEQdxdoybznwp91tVmASsRybppIGHTkcWN5csF4zQt40tEwd8LoqM+bBUo0wxKiKsNsecL4JA+YDYs2saZY9U3s8jAaIon+qDu071fPRaPEvBhYHYDhy4cTvBXibyGUYGHkrgLu0w19wDfHcJKt2In58yOmaCCLNoTGp/ZLNVRyZ8VDlj/NdJ2dWpMsL2Aj7OxU065kCL2FlvuRU= matrix: - - PLATFORM="iOS" - - PLATFORM="tvOS" - - PLATFORM="macOS" + - PLATFORM="iOS" + - PLATFORM="tvOS" + - PLATFORM="macOS" cache: -- bundler + - bundler before_install: -- brew update -- brew upgrade carthage || true -- carthage version -- carthage bootstrap --platform $PLATFORM + - brew update + - brew upgrade carthage || true + - carthage version + - carthage bootstrap --platform $PLATFORM script: -- bundle exec rake ci[$PLATFORM] + - bundle exec rake ci[$PLATFORM] after_success: -- bash <(curl -s https://codecov.io/bash) + - bash <(curl -s https://codecov.io/bash) From 0a01d345bdc6710087f0e1630f36c814cb7d6813 Mon Sep 17 00:00:00 2001 From: Pierre-Marc Airoldi Date: Sun, 3 Sep 2017 15:03:11 -0400 Subject: [PATCH 16/64] remove watchOS platform --- Charts.xcodeproj/project.pbxproj | 1528 ++++++++--------- .../xcshareddata/xcschemes/Charts.xcscheme | 64 +- .../xcschemes/ChartsTests.xcscheme | 61 +- FrameworkSpec | 62 + 4 files changed, 877 insertions(+), 838 deletions(-) create mode 100644 FrameworkSpec diff --git a/Charts.xcodeproj/project.pbxproj b/Charts.xcodeproj/project.pbxproj index 6dfed3e78c..4249380778 100644 --- a/Charts.xcodeproj/project.pbxproj +++ b/Charts.xcodeproj/project.pbxproj @@ -7,678 +7,678 @@ objects = { /* Begin PBXBuildFile section */ - 005C0F30B90039BB263CC09C /* BarChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B3EC8B2C8773CAC101E7602 /* BarChartDataProvider.swift */; }; - 01D0E7A3BBE960F3D0521C47 /* HorizontalBarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E589BDED5BCBDA3DD513DF2E /* HorizontalBarHighlighter.swift */; }; - 06906C3D3899AF3C9ED9A72C /* ChartDataEntryBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEFC467BF898951FC84F5620 /* ChartDataEntryBase.swift */; }; - 072313063701CBB1C6D8FA89 /* Transformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4CECECF10D0F9E6C6F1EADF /* Transformer.swift */; }; - 08A07712EDB571E1181B09DC /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B823EAAC1085D605F6853B3C /* PieRadarChartViewBase.swift */; }; - 09E3FB9BE8CA8B0299D577BB /* ScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01DA223D26779DE263719CBE /* ScatterChartDataSet.swift */; }; - 0AEBA5C5AC92953241274BFE /* ChartAnimationEasing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 921AE48B7930AB73B0BC3622 /* ChartAnimationEasing.swift */; }; - 0E78C9B270B82F430F2C4DFF /* XAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46B4D1787163393D707EC41E /* XAxisRendererHorizontalBarChart.swift */; }; - 0EC2659FE4759919DEDB4289 /* ChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44C0384291A7B7BAAF37054C /* ChartDataSet.swift */; }; - 0EC4920E6D62D7A277EF34F5 /* Fill.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1ECC9837848C09ED27D61B6 /* Fill.swift */; }; - 0FE64EA8621892B4ACFD0233 /* CandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10269C9C7DA0EB41AFF8179D /* CandleChartDataSet.swift */; }; - 1142DD089AD10AD7954FA888 /* LineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64316E9D8713E8205E8E2138 /* LineRadarChartDataSet.swift */; }; - 11B665756E905BEE10A01295 /* ChartDataRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56A98D84882867B6477E381 /* ChartDataRendererBase.swift */; }; - 12A460F5BACF0370935876FA /* MarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FCB684BEAE6CB77FD2B93A /* MarkerView.swift */; }; - 130F9478760D89A01878954F /* ILineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D550CF387F5245880BD5DC0C /* ILineChartDataSet.swift */; }; - 143E308EA31773820D35AB42 /* IAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92189F78A1B752D037836F76 /* IAxisValueFormatter.swift */; }; - 1486B2729EFA2D4ED659DE07 /* LineChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D791F8AEF54D65EFB82885D5 /* LineChartData.swift */; }; - 1992D1214A1C379F7084B1BE /* LineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F6029784CCA16923E0D40A7 /* LineScatterCandleRadarChartDataSet.swift */; }; - 1C9D51F1565BEADA1C60AD73 /* IndexAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65996B15286414897CFB54DE /* IndexAxisValueFormatter.swift */; }; - 1E2AB4085B35F6D495FC2795 /* PieHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BCB037E3E4632D32B172416 /* PieHighlighter.swift */; }; - 2133C9E6EA7DB4F09D9F2DAC /* ScatterChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E71ED326B1D0CE4EF0EDA3E /* ScatterChartView.swift */; }; - 2230C8E2C83AAC9DE76495B4 /* IRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A76C66149E5E54D0192EDEF /* IRadarChartDataSet.swift */; }; - 225F213C6F7215F8EB6292B5 /* PieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57095F04BE877E056F574A69 /* PieChartDataSet.swift */; }; - 23B8C89AEAFCCF6AEA3247C8 /* IScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC6FD8E0E0AD2219A80EB6CB /* IScatterChartDataSet.swift */; }; - 255FE5B497AE131B4BAF0FD2 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEDCE8799474F36EE86F2E7C /* IBarLineScatterCandleBubbleChartDataSet.swift */; }; - 268258CE356AE52A1D29BA46 /* ChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80F66082CE39F8C911700716 /* ChartData.swift */; }; - 2972AB282AF22E4447DBDDEC /* ScatterChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A864254C6C98A851E825E595 /* ScatterChartRenderer.swift */; }; - 2BD923143656FAC51F574F46 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F1FCAB00443E2AB277CBD25 /* BarLineScatterCandleBubbleChartDataSet.swift */; }; - 2BED5962FC328365F9EFE04A /* Animator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E28662F0CC85BA5E4D38F1D /* Animator.swift */; }; - 2D1A4882F20E8DA1B05086DD /* LegendEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7C8584612950FF07CD0393 /* LegendEntry.swift */; }; - 2E36DC7E689F160DC88BBCC5 /* RadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0714E1877E4AD5B6661F2AD /* RadarHighlighter.swift */; }; - 308137F9C0CF2B7A0372D6E8 /* CandleStickChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95A43F3797B98EFCB599A5A5 /* CandleStickChartView.swift */; }; - 3468AC966A4A206BD8F43903 /* DefaultFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C2E16EA4C8F49E027A2F60 /* DefaultFillFormatter.swift */; }; - 35A9F009C73FCF279578B376 /* IBarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63246976C392BF9B64BCF258 /* IBarChartDataSet.swift */; }; - 369A2D30FB61620C6FBA4754 /* HorizontalBarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FA17F5F3DF8E28312431A7A /* HorizontalBarChartView.swift */; }; - 36C33400348CA56BB48D5B22 /* YAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58BDDF3816E546E58DDDFC32 /* YAxisRendererHorizontalBarChart.swift */; }; - 39C2BE4577CFA1419B6638BC /* SquareShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 108629BC8694704357C8CE5F /* SquareShapeRenderer.swift */; }; - 442CEC159FCD65EC6ABEFCD8 /* XAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F3A6D4F74635182FE860669 /* XAxisRenderer.swift */; }; - 44D2CFF515D87AD2E4B90870 /* IFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7B9E373774F56E255EFF371 /* IFillFormatter.swift */; }; - 46FCCAF956979208C770B6C0 /* DefaultValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9536B2806512D7A92DABDC0 /* DefaultValueFormatter.swift */; }; - 493A66BBB5F3E4371FB39361 /* TransformerHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C4A1F34D7D988C582C75E68 /* TransformerHorizontalBarChart.swift */; }; - 4BECEE4BAEB476CCE0255839 /* BarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E900D0DA64F61906B3A972B6 /* BarChartRenderer.swift */; }; - 4CC1719914125CF01E93D969 /* CombinedHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE4090926DF0D2F1DF4B704F /* CombinedHighlighter.swift */; }; - 4DCE8DE16A155C396A61DD14 /* YAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29F47B7715AE71224707C537 /* YAxis.swift */; }; - 4E1BC25E708D7D689EB67B95 /* CandleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = A32C5E3102705F2870B96F79 /* CandleChartDataEntry.swift */; }; - 509AC4C6E1E536203C75519E /* ChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 551F33797F809B771301C195 /* ChartViewBase.swift */; }; - 50E8388181E2459070AC375D /* ChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD3DB32A6A1E1688123C74FD /* ChartDataProvider.swift */; }; - 51FAFA98725F06E01652C980 /* BubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3FBF17C465CE2D517E8434D /* BubbleChartDataSet.swift */; }; - 54AC4F50C05F371B148E8A91 /* CandleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C783070D5024BB05A18D40BC /* CandleChartDataProvider.swift */; }; - 552FBE36C7BC655C38B09143 /* LegendRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3DB00B9CD55F694BE9248DE /* LegendRenderer.swift */; }; - 5AA082FD22A0D20841C80162 /* BubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9B11503D9F796E8F595162E /* BubbleChartData.swift */; }; - 63BAACA8931D14A608769360 /* ILineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 669F55F7D0E1BF19D4B77350 /* ILineRadarChartDataSet.swift */; }; - 653022BC36654E7387295464 /* PieChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62976B4BA67502A246C835CB /* PieChartDataEntry.swift */; }; - 65ECC1C648CB25D8FA44CB42 /* BarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A44639A41BB3B018840AF18 /* BarHighlighter.swift */; }; - 68C35C82535E7020A718EE1C /* PieChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 870AD43CF130D5D1C8027204 /* PieChartData.swift */; }; - 69E96F71CA26A2D1435ACB93 /* ChartLimitLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74BB5C736918A4E468891AD /* ChartLimitLine.swift */; }; - 6B6A73F822415C89E982A7F3 /* LineScatterCandleRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5682800FD192526C848311DD /* LineScatterCandleRadarRenderer.swift */; }; - 6BA29A3B85C5B26613EF890B /* AxisRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 330B982A603F02ACF2B3BF50 /* AxisRendererBase.swift */; }; - 6CAA18D1987552B252713159 /* BarChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3924333873B79C3FD65EF769 /* BarChartTests.swift */; }; - 6E650F98D3642AD4A35A57B1 /* BarLineScatterCandleBubbleRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7496CB3625CD04C2F0EF32D6 /* BarLineScatterCandleBubbleRenderer.swift */; }; - 6F78DF2FA8AE178940E682BE /* RadarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E03E58F7CB004886241B48F /* RadarChartView.swift */; }; - 6F90773A0B6D242A532898CA /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF5EB8DDC7477A6FF777F14 /* Description.swift */; }; - 707BD8B3A9AC29A5744F35E5 /* CandleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C968BFD307DE10BB78EE199 /* CandleChartData.swift */; }; - 718FCE8A805306DCF7252C9E /* Charts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46E69EF766B94AF3A39A7685 /* Charts.framework */; }; - 720E258628568FBC465283A1 /* PieRadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF8B64973E23097CC929AFA8 /* PieRadarHighlighter.swift */; }; - 733A21A4F11900F1D01FD786 /* Charts.h in Headers */ = {isa = PBXBuildFile; fileRef = FE05FD9A0072660A9D3E7983 /* Charts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74219D78A8A1DC65C4E3B669 /* Highlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = E03001CA8FFE8AD77585E075 /* Highlight.swift */; }; - 7423BD75D10028298C72000E /* IBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4BFEFFE56F1711A761CE159 /* IBubbleChartDataSet.swift */; }; - 766055D10C91B2AE4DDA1D0F /* RadarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE3063C08937E060E2D9160C /* RadarChartDataEntry.swift */; }; - 76BC27AFAD431BA80B5AD478 /* RadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB06C3A5B7098E78C4BFAC4 /* RadarChartRenderer.swift */; }; - 79C7A52225B62A0460E113B4 /* ViewPortHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17494E808658CD9E1061FFA3 /* ViewPortHandler.swift */; }; - 7CC75938F8C6DA0E10010AC7 /* LineRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F3536DBBF2345532BC7669B /* LineRadarRenderer.swift */; }; - 7DF82423B2D0B36DD6EF68C3 /* IHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F4D9CD5DDF41101892A6DDC /* IHighlighter.swift */; }; - 7F43F7E4F0E9D5070384C60B /* XAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AD7B089A211288BC7F27536 /* XAxisRendererRadarChart.swift */; }; - 82C88896605FB53C2BBEFE6D /* MarkerImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF05F5525C471B27F31B8289 /* MarkerImage.swift */; }; - 87A00389DC37682EB0587361 /* RadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70FAC75EA27D5A2EDB5DA85 /* RadarChartDataSet.swift */; }; - 896C5052307EAE609B3C9371 /* PieChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F38FC51A5FD01E25F57B577 /* PieChartRenderer.swift */; }; - 8B3259AC8A525C9B9C378C6F /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6A1C8A414F3FE239827DF9B /* LineChartView.swift */; }; - 8CE471B6C29C727AA56F4863 /* TriangleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 105050D3D37FCAABB1C79710 /* TriangleShapeRenderer.swift */; }; - 8D20EAE2CDA357A63949EF6E /* BarLineChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E728B3DF368497D817BF75 /* BarLineChartViewBase.swift */; }; - 90945C09073B26274532B16E /* ICandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFC2E2F689AA8A307FED418E /* ICandleChartDataSet.swift */; }; - 910B631C21F51E3251269A28 /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 771D402037874303F699DC38 /* RadarChartData.swift */; }; - 94F1D922BFDCA0682A2106E1 /* BubbleChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC7995E0C9C4F33F3EE5CC3A /* BubbleChartRenderer.swift */; }; - 969438983603FBAB8F178CEC /* LineChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 256025862664CA428E01840B /* LineChartTests.swift */; }; - 96C0CB726AED7262B833C5A5 /* LineChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF6DE50212A6E4344805288 /* LineChartRenderer.swift */; }; - 9E7350B6286FA8CA9853E83B /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D6EFE6DE14B144522DBEC25 /* CombinedChartRenderer.swift */; }; - A0C490C7C6C3011A2D27A6C6 /* BubbleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6903776E41A0F47B70A50AF /* BubbleChartDataEntry.swift */; }; - A5D1CE0DAE3014D1172DA25A /* CombinedChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B7E9097209550C98B703D35 /* CombinedChartDataProvider.swift */; }; - A7F2C09F6E9C079443B75296 /* AxisBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A9B2FE97C8C777A674C3D62 /* AxisBase.swift */; }; - A85225CB2CD56D3A8B6A2A90 /* XShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D76A9CDA402721AA92EE331 /* XShapeRenderer.swift */; }; - A9B542B57C6ADF07382FB3FB /* ComponentBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C20E02263A796EEEF5BFF9C2 /* ComponentBase.swift */; }; - ABF7BB919BB4E09E2F0F334F /* IChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D09EF5E8A5D34CE92BFEF9A /* IChartDataSet.swift */; }; - AC60152B982EAFE8A90DAAC4 /* LineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 466660ED2EC61BAF6977E05F /* LineChartDataSet.swift */; }; - ADED6329E0EF4B175393FDD8 /* BarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437FB9556010D9185DA2911D /* BarChartDataEntry.swift */; }; - ADFEFB1E41234B94FEA24566 /* AnimatedZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E84FF13690C87B851E9D4A7 /* AnimatedZoomViewJob.swift */; }; - B1629D7C69F65A9301361673 /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63DD2AD5AFC6A69F542C711B /* Range.swift */; }; - B60B915377BF81E6F8FBE196 /* ViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCD6CECB85C6F8A52483E4A /* ViewPortJob.swift */; }; - B6954A329F734B0D55C6C56E /* PieChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4082BEB6E9CCC68ADEB65ACB /* PieChartView.swift */; }; - B7258870917D6C761191C2E9 /* IValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F9EFCF1374CB627942BE05A /* IValueFormatter.swift */; }; - B75F7CC7313FA00407747290 /* ChartUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71375616D924B5E0E10055ED /* ChartUtils.swift */; }; - BA2F43A78AD1400F8BECA357 /* IShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C72B66BC2402D8A2C6D781AC /* IShapeRenderer.swift */; }; - BB9E5479B3B4517978C1A13D /* YAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983471C084DEE134AC889C69 /* YAxisRenderer.swift */; }; - BC3995CB7EBC502CE71A89D3 /* ChevronDownShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F3BA870CEA772438553529A /* ChevronDownShapeRenderer.swift */; }; - BD8D78D8B26A3B3A87B54B99 /* AnimatedMoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC16599CC5F22F5A2B0A1F8 /* AnimatedMoveViewJob.swift */; }; - C19DD82E1483AF4C9A24E230 /* ChartBaseDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16CB9FF9FDF77A0C9BE9946 /* ChartBaseDataSet.swift */; }; - C2AFB4C82ED84EF1D944C3BD /* LineChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DE1FDA8509235D7E272CBC2 /* LineChartDataProvider.swift */; }; - C3647550473CEBC072F2EAF1 /* ChevronUpShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8474B5177C777286153F5859 /* ChevronUpShapeRenderer.swift */; }; - C57F7BD809195465B9E70685 /* ChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42E6C6F8026177DB5EB69A66 /* ChartDataEntry.swift */; }; - C71785FFAA2F2CF25FD21F30 /* BubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E24D7EEA82A893EBBE27882 /* BubbleChartDataProvider.swift */; }; - C7B8F8DED72C9394AA1227ED /* HorizontalBarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6906DD6D28D6C7226833585A /* HorizontalBarChartRenderer.swift */; }; - C894F93A974CD1F921D0F446 /* ScatterChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72786BC1CB2C4ED1858FD4F7 /* ScatterChartData.swift */; }; - CEA939DFCD02953FFA285990 /* AnimatedViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D826DBA70947C847354B011 /* AnimatedViewPortJob.swift */; }; - D147B92A77E257FE015075C2 /* DataApproximator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28FCA501619C01FCE44BB3C4 /* DataApproximator.swift */; }; - D36E5A7AD311BB93A011D75E /* ZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35E32810A6ED200A893C8811 /* ZoomViewJob.swift */; }; - D565E57B0C83E315C913D979 /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3DB1ADB25B8EE00D670597C0 /* Media.xcassets */; }; - D66C3D070239CF161A7CEDB2 /* CircleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C9873D834BD9446DCBD88B /* CircleShapeRenderer.swift */; }; - D868000D81CF4DA2FF804230 /* DefaultAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BA5E67E0C1A36E25785C197 /* DefaultAxisValueFormatter.swift */; }; - DB91F074AEA21362DF80863B /* BarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C306AB21A7FFA4608349917 /* BarChartDataSet.swift */; }; - DC7897BF3E4CEF01A14BC47A /* ChartUtilsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 569DAB96951B01DF38B71CDF /* ChartUtilsTests.swift */; }; - DD0B94A153EDB846E93293E2 /* MoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = A30F2546C4D51E23B8C23AA9 /* MoveViewJob.swift */; }; - DD5DB6F369B070B787513365 /* BarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F84DF3598531694C567D4DA /* BarChartData.swift */; }; - DDBEAA65509435155E287373 /* ScatterChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92F04F75EDAD3C4A98A31526 /* ScatterChartDataProvider.swift */; }; - DE8B9684CD729E7097025856 /* IMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B005E477BC1846F0C12807F /* IMarker.swift */; }; - DEDB8D7B8032580B8B01CFE5 /* XAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19480DF7CC0538A529972E83 /* XAxis.swift */; }; - E22369BCD81AD64619FAE3B6 /* ChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79114B8C62A2E95836E36712 /* ChartHighlighter.swift */; }; - E4B8FDE7081EF22C4529D628 /* YAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79D685F9B5268D2E817D0D90 /* YAxisRendererRadarChart.swift */; }; - E740FB705944655AEDC2CF96 /* IPieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 720FD446EC4A5BC344EDE951 /* IPieChartDataSet.swift */; }; - ED0899005F6784C86FD499FC /* BarLineScatterCandleBubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFD9181255A5600E14DF9363 /* BarLineScatterCandleBubbleChartData.swift */; }; - EE3B04B6C5F9209FE5642C02 /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 372A8ED813FDE992A046448A /* Platform.swift */; }; - EF889355A3A5F21D8478CCEB /* CrossShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ADB6DC89F00931580D1C00A /* CrossShapeRenderer.swift */; }; - F00640DA4C6A74D51B9EFBC8 /* ILineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68181468776BE8E69970A47A /* ILineScatterCandleRadarChartDataSet.swift */; }; - F235A3B8989F0AB6F5D924F3 /* BarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05DB9869CA6EEE4C6E06A3FB /* BarChartView.swift */; }; - F24723FC6A4BA9AF18D6EB82 /* Legend.swift in Sources */ = {isa = PBXBuildFile; fileRef = B41F3486B3AEF2F237819280 /* Legend.swift */; }; - F3947C20CD8B09841B750D54 /* Renderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78AE6B35EF05E81122CAAEFA /* Renderer.swift */; }; - F45631E7C0DFE9321DB96891 /* ChartColorTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6DDD2F4CAFF90385DE59D4 /* ChartColorTemplates.swift */; }; - F5AF34DB8AAEACBEE560C057 /* CandleStickChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7C1B9B0ECA4A3D8E3193D49 /* CandleStickChartRenderer.swift */; }; - F5E349C4D4D1BE11B492E3CB /* BubbleChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DB3E824CE6958EFDC0E010A /* BubbleChartView.swift */; }; - F977CF3DBB6EABD38CF47C99 /* CombinedChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D82F5451A8B27204F87F8BA /* CombinedChartView.swift */; }; - FA29A2213BABD5C18B776395 /* CombinedChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A9B5EA6E98E20A126D600CC /* CombinedChartData.swift */; }; - FEC6B26E4D2B1F3380A0FB1C /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE68DA203280938B1D0DF5A4 /* BarLineScatterCandleBubbleChartDataProvider.swift */; }; + 00B8BF5901C2D220357B0B2A /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 41DDB768A1D033A34F0EF9E0 /* Media.xcassets */; }; + 00BC23EF0E04E17188344403 /* BarChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D7184C8A5A60A3522AB9B05 /* BarChartDataProvider.swift */; }; + 02A6E6E1A82A27A66B8D08C4 /* MoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 266E162DA8B29D9AEB6A9397 /* MoveViewJob.swift */; }; + 03960E8148C6AEDACE4B77CC /* IMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 596963A429D485E3894C4666 /* IMarker.swift */; }; + 0511E43EF3FD2CDE7F7F15DB /* ScatterChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FD37A55B4D85D883E29C744 /* ScatterChartDataProvider.swift */; }; + 05253AFC448C107DEF54C2FE /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52265C1B343CCC41AF2300E3 /* CombinedChartRenderer.swift */; }; + 0529DD51622C8769C1121F90 /* CrossShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 823F7DB281C6C6F069A69605 /* CrossShapeRenderer.swift */; }; + 0577C2B38BCE4C871F262714 /* AnimatedZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2EA58CB336967198D30D20 /* AnimatedZoomViewJob.swift */; }; + 0A772AEC08246FEC480673E5 /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A6C9631C69B2D772BBD9232 /* PieRadarChartViewBase.swift */; }; + 0C52C70C6E6EA09BD7426386 /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBB57D6FA41029B08F26D7B /* RadarChartData.swift */; }; + 0CAF514A280FF6A14E2A1A23 /* CombinedChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11EF1FE22549E885C8F40738 /* CombinedChartView.swift */; }; + 0D8A89398F9BD5DCC8D7F976 /* ICandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18BFB0A14A5C47A302A597D9 /* ICandleChartDataSet.swift */; }; + 11F68AA2EBF822D7208EE002 /* YAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA5A16F4A382813C4FE8BDF9 /* YAxisRendererRadarChart.swift */; }; + 1311BEC21E9CC264E971EFAF /* ILineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F7E6A99D82E6AE3804D5A39 /* ILineRadarChartDataSet.swift */; }; + 146EE16342C2BADC92E45BF2 /* ILineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9249AD9AEC8C85772365A128 /* ILineScatterCandleRadarChartDataSet.swift */; }; + 17E994DA88777AA1D8CCFC58 /* BarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C31AA65EA27776F8C653C7E8 /* BarChartDataSet.swift */; }; + 203A39685CC96FC625F616E4 /* IHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 998F2BFE318471AFC05B50AC /* IHighlighter.swift */; }; + 219192CA6B4895319AB49DCA /* BarLineScatterCandleBubbleRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B1C588E9DF6FFD56D7ADF8E /* BarLineScatterCandleBubbleRenderer.swift */; }; + 23649EFC635A76022F07FFA6 /* PieChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD02157CF8CEE1189BF681DA /* PieChartDataEntry.swift */; }; + 23FA50B2730D8C7ACA091C4F /* BarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F279974FE650E57A061B09 /* BarChartRenderer.swift */; }; + 24151B0729D77251A8494D70 /* LineRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 105FFC9D3773A9C7A60A897F /* LineRadarRenderer.swift */; }; + 2876E17AEB1D92D7BBC4C38A /* PieChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DCD13D558BA177D5952AD66 /* PieChartView.swift */; }; + 28FEE609C5B22FD64C7E5D10 /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FF03960A871A092F5B54315 /* BarLineScatterCandleBubbleChartDataProvider.swift */; }; + 2A94F1724FEA9E16A81A8E1F /* XAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F3D55A7E6176D52DC957D27 /* XAxisRendererHorizontalBarChart.swift */; }; + 2B791E64E7C4523B1A63F72A /* ScatterChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7AD2FC320A16CA1EE0A52F4 /* ScatterChartData.swift */; }; + 2B821AAC3EBD60A73EACBCE6 /* LegendRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F715DB2C56C9E0615542625B /* LegendRenderer.swift */; }; + 2BA03CEC36BADCF682F1328B /* LineChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFABD027DAF6851088F002AC /* LineChartDataProvider.swift */; }; + 2BF85BEA981B359A65E9BF67 /* LineChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2E1819D72CD7B6C4A4E8048 /* LineChartTests.swift */; }; + 2C40CFFC8D88BEA70E0A50B0 /* IBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3788EC55EF908B0805D7C2F /* IBubbleChartDataSet.swift */; }; + 2C879FC24D7A15D70BE4063F /* PieChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E03A4987F72414A02A0631B /* PieChartData.swift */; }; + 2FBA7E982EB57932B9F3E9B5 /* YAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB92A80F861C1362EED8D946 /* YAxis.swift */; }; + 3097296AC7FFA994FE4AD312 /* PieRadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04F7B9DF1F2D66E7279771D4 /* PieRadarHighlighter.swift */; }; + 30DCC4BAA5601B154ABADA13 /* CandleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F8146ABC9FC311AF8CA699C /* CandleChartDataProvider.swift */; }; + 331AA2C4BC34F56C23012F02 /* CombinedChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDE409E9ECF54D2C146A6F0 /* CombinedChartData.swift */; }; + 3395682A1E27756651FF6F4D /* BarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0108D5925E21A47DA36A66AA /* BarChartData.swift */; }; + 369DEB23452CB436A3A1A644 /* MarkerImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 392AAEB02DD7B351D92907C2 /* MarkerImage.swift */; }; + 383D68A13E1C3D6A251E5147 /* CandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 274116834B1B0345D622E027 /* CandleChartDataSet.swift */; }; + 3B11556EB7DC034E2FC958E4 /* BarChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3F5E1A69EC06E86505F7B1 /* BarChartTests.swift */; }; + 3CBE95F1E9394FA08CDCF31E /* BarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 543729805D897CC03E5F78D3 /* BarHighlighter.swift */; }; + 40C82F2209E1BA9E41E8F3DA /* ChartColorTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6227A646166E248F90F86AD /* ChartColorTemplates.swift */; }; + 41B13F3179ACB5A3837C6E55 /* YAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 688B80F1AA88AE54152BE768 /* YAxisRenderer.swift */; }; + 41BEBF8BDB9DC403B5697D67 /* XAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C02C3AF5C92FCFC18224C35 /* XAxisRenderer.swift */; }; + 4272DA5D44AF7DA05A5A8287 /* BubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDEAF554FD0D68EA4C0E7E49 /* BubbleChartDataProvider.swift */; }; + 4390D74986A92DEF4F4F2BF0 /* ChartLimitLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6DEBFAB1D73E944ED430B4F /* ChartLimitLine.swift */; }; + 45C459FA25DFCBE62FA6A06C /* BarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3F8BFF1CBC58D5B9DBFFB9B /* BarChartDataEntry.swift */; }; + 48E875BBD6540BDE1C1B7D3D /* AxisBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B7AEFBF4D85B9D2EAAB3071 /* AxisBase.swift */; }; + 4E98788ABEF6496C23F3E6C6 /* HorizontalBarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33BE9A97FFA41D3D85CAFFC7 /* HorizontalBarHighlighter.swift */; }; + 4FACC6FD308AFB231EB4A93D /* XAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC19DC2434D65FFB446A61B7 /* XAxisRendererRadarChart.swift */; }; + 50476F8E6662CAFC1EFE0723 /* IScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219BC9CEA037F897E92E45D1 /* IScatterChartDataSet.swift */; }; + 515E286E6C47594D3FFA3DD1 /* ViewPortHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72EAEBB7CF73E33565FC2896 /* ViewPortHandler.swift */; }; + 53A91F6F86740E26FE733639 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D717F0808DE7EC8A4AE9C2A /* BarLineScatterCandleBubbleChartDataSet.swift */; }; + 56E0F5EA9255B9B92876E040 /* BubbleChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2194AA554712E6BA2677F114 /* BubbleChartRenderer.swift */; }; + 5C457D9A50DA20869AD1739D /* ScatterChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18462BFDD9DEE76D51D40503 /* ScatterChartView.swift */; }; + 5DC9BC1B6C128B2C9995AB84 /* ScatterChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D5B764EC0AE1E17E55DC67 /* ScatterChartRenderer.swift */; }; + 5F96E95C7073D21EFE02BCF7 /* LineChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DABDBBCCE6B3620C967F04A /* LineChartRenderer.swift */; }; + 60EDF735AAB7195DCFA5FE4D /* CandleStickChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA1A58428DC4780BAB4EAADC /* CandleStickChartView.swift */; }; + 6303DBDEE4FAB8E40D023BCE /* RadarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2440DB759AB93B4A928A3F6F /* RadarChartView.swift */; }; + 63C0A21D145BFEDED5406E4D /* BubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44829AF0ADA583F1F0279B7 /* BubbleChartDataSet.swift */; }; + 64FA1EDB4DC1F65727D52D10 /* CombinedHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2465CB73738EBAFB46C57288 /* CombinedHighlighter.swift */; }; + 65EA404AE098EBCE8D5DE04B /* CombinedChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = A140F644332704916947B58C /* CombinedChartDataProvider.swift */; }; + 66A18A8EEBAAAC2EDA31ABEC /* ChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CEC0C69C89CE9B99F3B4409 /* ChartDataSet.swift */; }; + 69EA073EDF75D49ABE1715D6 /* RadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC9C3D69ACB5BDE22421E15 /* RadarChartRenderer.swift */; }; + 73EDF662AD989E930D365B72 /* PieHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7036F11832C017E26AC750A4 /* PieHighlighter.swift */; }; + 758EB1C75063ED3373542F3B /* Highlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D64616883374310C505EC39 /* Highlight.swift */; }; + 779B46E9F13A087BFA47D539 /* DefaultAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A4770E0F75EFFC30707A7C8 /* DefaultAxisValueFormatter.swift */; }; + 78084A4F1D850D5775BC139E /* XAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5225ABC3C0C2F65FC094EEBB /* XAxis.swift */; }; + 795E100895C24049509F1EDE /* PieChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46D8013D44629521B1746364 /* PieChartRenderer.swift */; }; + 796D3E63A37A95FD9D1AB9A1 /* ChevronDownShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C52E8344160B5E689DA3C25C /* ChevronDownShapeRenderer.swift */; }; + 7C9CE6718D18859A35146098 /* BarLineScatterCandleBubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 559DB735FEA17AB90676D6CA /* BarLineScatterCandleBubbleChartData.swift */; }; + 7CB7F74752619B0270CCB0A9 /* LineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E31A4356CC6F283C29954B /* LineRadarChartDataSet.swift */; }; + 7D546013F3A14FF5BB7F3294 /* ChartDataEntryBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12409C3EA15787C11AF0D2BC /* ChartDataEntryBase.swift */; }; + 7E7561DE19DC7CABBE0B2D3A /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0619A877C69A95ECCC440A44 /* LineChartView.swift */; }; + 7EE6EFE70CF4D8B09CAFCD01 /* AnimatedMoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA157EFF2F952192C11DF937 /* AnimatedMoveViewJob.swift */; }; + 8102A555DD6C93AC1290EA7C /* Fill.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A4CFFFB65819121595F06F1 /* Fill.swift */; }; + 81892994002C0640AD858748 /* ChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = E120E76C6F1B5877D56126DD /* ChartData.swift */; }; + 83BBAF3EDC31FD452F8BF1DB /* IRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EAD807534620E3B53327F04 /* IRadarChartDataSet.swift */; }; + 846AC09831FA93F66732591B /* YAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAE417AAA0FCA0DD00E77489 /* YAxisRendererHorizontalBarChart.swift */; }; + 8A463E2947F211C594CA5E95 /* TransformerHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 324C9127B53A8D39C8B49277 /* TransformerHorizontalBarChart.swift */; }; + 8A9FF54E2075A9047CC8E953 /* IShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA1D3D13180C2E3893A82546 /* IShapeRenderer.swift */; }; + 8BCCD709AACC565613D9DA68 /* CandleStickChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD5C6D20243EC2F19069AACD /* CandleStickChartRenderer.swift */; }; + 8E1192F7A7152E9DA92C56A9 /* ChartUtilsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AB9062A28AAB9469752A954 /* ChartUtilsTests.swift */; }; + 8EF7B3FBE37F72CC030CD865 /* SquareShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FC01A016DFF1BA73AF9182 /* SquareShapeRenderer.swift */; }; + 8F4B1A9060472764073DFA0B /* TriangleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8FB6219B143F8F7DA762950 /* TriangleShapeRenderer.swift */; }; + 9360348A04723E653FBC8B18 /* MarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48164CCD83C51B496533CB77 /* MarkerView.swift */; }; + 93A94E1FF55041A6032891FE /* XShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23D35CF6F9177D77B6B97AE1 /* XShapeRenderer.swift */; }; + 9400725714D0DA707DDECD2E /* ViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA7BDB22C97F39A4B33E38A7 /* ViewPortJob.swift */; }; + 95B6D6F35684292A62DBEA74 /* LineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5A75AA73C5AA381DA517959 /* LineChartDataSet.swift */; }; + 967EE2EDDE3337C5C4337C59 /* IndexAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10DD0A02E3CF611BD11EBA9B /* IndexAxisValueFormatter.swift */; }; + 97E033CC0ABEF0F448DAFA8E /* DataApproximator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93EF9709CF635BEE70D1ABC5 /* DataApproximator.swift */; }; + 98E2EEF45E8933E4AD182D58 /* ChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30EFAD7920F76360ADB3B5F5 /* ChartViewBase.swift */; }; + 9C91C151608E2D6E19B1EAD1 /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F099502DA50C56204E7B744 /* Range.swift */; }; + 9F760570BCECB0BF5727AF90 /* BarLineChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45C6D3723C4E001B119CA0C8 /* BarLineChartViewBase.swift */; }; + A40ACF0CCE96EEE104B0463D /* IValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EAA8AA30C377D54D22A577A /* IValueFormatter.swift */; }; + A692D8BDE42717F69DB790BE /* HorizontalBarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6021C9E424C36116AEA78CC9 /* HorizontalBarChartView.swift */; }; + AEE9C4E4AC02B8FB3CD21975 /* ZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB3A4F5987E58F3E5BE855F9 /* ZoomViewJob.swift */; }; + AF4AAF3709ED9DDF6362EAE8 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5649B272BF3EBFC8A1EF0C1 /* IBarLineScatterCandleBubbleChartDataSet.swift */; }; + B0D28C68BB9A958DC56EB214 /* DefaultValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 107D8F8163EE54D6D9E916B0 /* DefaultValueFormatter.swift */; }; + B13C74B4FF705D7B595D01EF /* IAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BD9DF16AF59680A3BB49452 /* IAxisValueFormatter.swift */; }; + B539114951455C35BADAE3F3 /* PieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4FB5E3761EF8B4D1E1E1014 /* PieChartDataSet.swift */; }; + B6C9F450D937B87224D29D5C /* IFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818AC6B12505B7C0A53D62F9 /* IFillFormatter.swift */; }; + B6DCC229615EFE706F64A37D /* LineScatterCandleRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 923206233CA89FD03565FF87 /* LineScatterCandleRadarRenderer.swift */; }; + B85DEB06B4C1AFFC8A0E3295 /* CircleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECE1B1623D3AF69CECAE8562 /* CircleShapeRenderer.swift */; }; + BEFD9518F3A74ACF8FA33308 /* Charts.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F9922F0641F7955DC6CD324 /* Charts.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C04D269AD4A373FD2B621C43 /* LineChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C978F31F23C7D21197DC2A1 /* LineChartData.swift */; }; + C09E91F67A4AC43C277E7D82 /* BubbleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8ED233775EEC31243A6919 /* BubbleChartDataEntry.swift */; }; + C20A62D8CB9120523D5FB650 /* LegendEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E7C673B9ED4340F550A9283 /* LegendEntry.swift */; }; + C2EFB4EC8C97FA9987F1B50D /* RadarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91EEEDE2AB8F2DA3AFCF0733 /* RadarChartDataEntry.swift */; }; + C33E1AF5471A60BA42DAF52E /* RadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F368CF209744D8F3B85B1028 /* RadarHighlighter.swift */; }; + C3F0DDB7F0A922F0BB7EDB8A /* IBarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A53A9E42FC07FFDACA937C1 /* IBarChartDataSet.swift */; }; + C7B150D740255670DEB9F455 /* Charts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 65AD9E95D9ED4DC0BD73A743 /* Charts.framework */; }; + CB785FE9B6B312408D17BC3B /* ChartUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FDA09EF973925A110506799 /* ChartUtils.swift */; }; + CC7F8198A13249B5DEBBF25E /* AnimatedViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 710D7C9B2F1DB4A331EE405A /* AnimatedViewPortJob.swift */; }; + CEF68F42A5390A73113F3663 /* Renderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F66B32AD8A878CBD6DB6ED2 /* Renderer.swift */; }; + D29BBEF55C9CC90114919CD2 /* BarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E783CFB4889A767C76510917 /* BarChartView.swift */; }; + D326491E8BCDE54A0921E137 /* ChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5983826927D825EF5F855C28 /* ChartHighlighter.swift */; }; + D50B0EC2BB2245F32E757C50 /* CandleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2E698FF540029B70AC97AD7 /* CandleChartDataEntry.swift */; }; + D819331DA581C7E0AC5F8CEF /* Animator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3976E5F9D60E30CD94CE6156 /* Animator.swift */; }; + DBC9DB402CC9BB84B76968C4 /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = B137428B41C143D5115726C4 /* Description.swift */; }; + DDE704689FDF2C0E0338488B /* CandleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4785FEACAE4367F36FB8868 /* CandleChartData.swift */; }; + DE0F434FE8C24C52B023370F /* Transformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF475B9593B9898853814340 /* Transformer.swift */; }; + E3B28EA1E21279DF3889BCE8 /* RadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1BA6B21CBDF77A15848994F /* RadarChartDataSet.swift */; }; + E4B2F363414E84C4D4B8A885 /* BubbleChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EED352A98860E031F13AFB7 /* BubbleChartView.swift */; }; + E50D291A6B6E69BF0B56A67C /* ChartBaseDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9FE42E868A225C116537368 /* ChartBaseDataSet.swift */; }; + E68CA3DC66EB638C956E09B8 /* BubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EDA3AD550AEFC93C8D15B9C /* BubbleChartData.swift */; }; + E8F0F4F47CD7D72B4EE5A794 /* IChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A32510073A303CBB38E094A /* IChartDataSet.swift */; }; + E9FF0ECB5E0CA92DBF4C1BC4 /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED23C354AFE81818D78E645 /* Platform.swift */; }; + EAEA60D22CA8C1B7E18D3F7D /* ChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F22750328058DEC2F019646F /* ChartDataEntry.swift */; }; + EB56849433A76B08606B73EB /* ScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB1DD1A0F64266A10EE94194 /* ScatterChartDataSet.swift */; }; + ECE7EAE7179A7F57CE9BBD8F /* Legend.swift in Sources */ = {isa = PBXBuildFile; fileRef = E64A75540C627E09080B402A /* Legend.swift */; }; + ECECC58CEF03B1718F8267E8 /* AxisRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75935E899183DDFA181E2CC /* AxisRendererBase.swift */; }; + F100D68395F169B93590FA96 /* HorizontalBarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539382766378B702660FDFB2 /* HorizontalBarChartRenderer.swift */; }; + F103D90FC5DEEA0D7BB4407E /* ChevronUpShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA70259ED16FF80D8EEB0F94 /* ChevronUpShapeRenderer.swift */; }; + F37B07008B8AE7F3909FFB9C /* ChartDataRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0216EDC6A1FE272F4EB19FCF /* ChartDataRendererBase.swift */; }; + F5A209116FAC68F5903D0B46 /* ChartAnimationEasing.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB762958EE8E6521563665D /* ChartAnimationEasing.swift */; }; + F744C510DA9B85C228BBB335 /* DefaultFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6C1BEFDF17404666C7B6054 /* DefaultFillFormatter.swift */; }; + F941C88BF814DF51C465CB95 /* ILineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 429E88F2729735DC092EE556 /* ILineChartDataSet.swift */; }; + FA07D034D9C3BC7795184ACA /* LineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C58BD7B14BEA440783ED8D2B /* LineScatterCandleRadarChartDataSet.swift */; }; + FAAD9FF6565DED2652188584 /* IPieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA2AA6CC89F809DCCD7605B4 /* IPieChartDataSet.swift */; }; + FD37AAC0270F390FFC470A65 /* ChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62B73FCEDD3841E7B958F6A9 /* ChartDataProvider.swift */; }; + FDBDAFA7A5337C6E3992DACE /* ComponentBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C9A105A7DB64F39DDA648B /* ComponentBase.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 35F78304E8930C633456BF6E /* PBXContainerItemProxy */ = { + C2005F425A98942473657ED2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 9FCA2B965470A4CDBE439A35 /* Project object */; + containerPortal = 193FC8DF32D250560C5F5D77 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5FE6E04B0BD1A05295AA30D4; + remoteGlobalIDString = A58A4ED274A941CA248EA921; remoteInfo = Charts; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 01DA223D26779DE263719CBE /* ScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartDataSet.swift; sourceTree = ""; }; - 02E728B3DF368497D817BF75 /* BarLineChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineChartViewBase.swift; path = Source/Charts/Charts/BarLineChartViewBase.swift; sourceTree = ""; }; - 0419F1A9AEC7CB7CEF9E589D /* ChartsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ChartsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 05DB9869CA6EEE4C6E06A3FB /* BarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartView.swift; path = Source/Charts/Charts/BarChartView.swift; sourceTree = ""; }; - 0A76C66149E5E54D0192EDEF /* IRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/IRadarChartDataSet.swift; sourceTree = ""; }; - 0B7E9097209550C98B703D35 /* CombinedChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartDataProvider.swift; path = Source/Charts/Interfaces/CombinedChartDataProvider.swift; sourceTree = ""; }; - 0BCB037E3E4632D32B172416 /* PieHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieHighlighter.swift; path = Source/Charts/Highlight/PieHighlighter.swift; sourceTree = ""; }; - 0C4A1F34D7D988C582C75E68 /* TransformerHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformerHorizontalBarChart.swift; path = Source/Charts/Utils/TransformerHorizontalBarChart.swift; sourceTree = ""; }; - 0D76A9CDA402721AA92EE331 /* XShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/XShapeRenderer.swift; sourceTree = ""; }; - 0F3BA870CEA772438553529A /* ChevronDownShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronDownShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift; sourceTree = ""; }; - 0F4D9CD5DDF41101892A6DDC /* IHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IHighlighter.swift; path = Source/Charts/Highlight/IHighlighter.swift; sourceTree = ""; }; - 10269C9C7DA0EB41AFF8179D /* CandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataSet.swift; sourceTree = ""; }; - 105050D3D37FCAABB1C79710 /* TriangleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TriangleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift; sourceTree = ""; }; - 108629BC8694704357C8CE5F /* SquareShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SquareShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift; sourceTree = ""; }; - 17494E808658CD9E1061FFA3 /* ViewPortHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortHandler.swift; path = Source/Charts/Utils/ViewPortHandler.swift; sourceTree = ""; }; - 19480DF7CC0538A529972E83 /* XAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxis.swift; path = Source/Charts/Components/XAxis.swift; sourceTree = ""; }; - 1ADB6DC89F00931580D1C00A /* CrossShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CrossShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift; sourceTree = ""; }; - 1DE1FDA8509235D7E272CBC2 /* LineChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataProvider.swift; path = Source/Charts/Interfaces/LineChartDataProvider.swift; sourceTree = ""; }; - 1F3536DBBF2345532BC7669B /* LineRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarRenderer.swift; path = Source/Charts/Renderers/LineRadarRenderer.swift; sourceTree = ""; }; - 256025862664CA428E01840B /* LineChartTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartTests.swift; path = Tests/Charts/LineChartTests.swift; sourceTree = ""; }; - 28FCA501619C01FCE44BB3C4 /* DataApproximator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataApproximator.swift; path = Source/Charts/Filters/DataApproximator.swift; sourceTree = ""; }; - 29F47B7715AE71224707C537 /* YAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxis.swift; path = Source/Charts/Components/YAxis.swift; sourceTree = ""; }; - 2BA5E67E0C1A36E25785C197 /* DefaultAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultAxisValueFormatter.swift; path = Source/Charts/Formatters/DefaultAxisValueFormatter.swift; sourceTree = ""; }; - 330B982A603F02ACF2B3BF50 /* AxisRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisRendererBase.swift; path = Source/Charts/Renderers/AxisRendererBase.swift; sourceTree = ""; }; - 35E32810A6ED200A893C8811 /* ZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZoomViewJob.swift; path = Source/Charts/Jobs/ZoomViewJob.swift; sourceTree = ""; }; - 372A8ED813FDE992A046448A /* Platform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.swift; path = Source/Charts/Utils/Platform.swift; sourceTree = ""; }; - 3924333873B79C3FD65EF769 /* BarChartTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartTests.swift; path = Tests/Charts/BarChartTests.swift; sourceTree = ""; }; - 3AD7B089A211288BC7F27536 /* XAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererRadarChart.swift; path = Source/Charts/Renderers/XAxisRendererRadarChart.swift; sourceTree = ""; }; - 3B005E477BC1846F0C12807F /* IMarker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IMarker.swift; path = Source/Charts/Components/IMarker.swift; sourceTree = ""; }; - 3B4C6CF2D10F3033CE2C5C25 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Tests/Supporting Files/Info.plist"; sourceTree = ""; }; - 3C968BFD307DE10BB78EE199 /* CandleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartData.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartData.swift; sourceTree = ""; }; - 3DB1ADB25B8EE00D670597C0 /* Media.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Media.xcassets; path = "Tests/Supporting Files/Media.xcassets"; sourceTree = ""; }; - 3DB3E824CE6958EFDC0E010A /* BubbleChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartView.swift; path = Source/Charts/Charts/BubbleChartView.swift; sourceTree = ""; }; - 3F1FCAB00443E2AB277CBD25 /* BarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; - 3F9EFCF1374CB627942BE05A /* IValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IValueFormatter.swift; path = Source/Charts/Formatters/IValueFormatter.swift; sourceTree = ""; }; - 4082BEB6E9CCC68ADEB65ACB /* PieChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartView.swift; path = Source/Charts/Charts/PieChartView.swift; sourceTree = ""; }; - 42E6C6F8026177DB5EB69A66 /* ChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntry.swift; sourceTree = ""; }; - 437FB9556010D9185DA2911D /* BarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataEntry.swift; sourceTree = ""; }; - 44C0384291A7B7BAAF37054C /* ChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataSet.swift; sourceTree = ""; }; - 466660ED2EC61BAF6977E05F /* LineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineChartDataSet.swift; sourceTree = ""; }; - 46B4D1787163393D707EC41E /* XAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/XAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; - 46E69EF766B94AF3A39A7685 /* Charts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Charts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 551F33797F809B771301C195 /* ChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartViewBase.swift; path = Source/Charts/Charts/ChartViewBase.swift; sourceTree = ""; }; - 5682800FD192526C848311DD /* LineScatterCandleRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarRenderer.swift; path = Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift; sourceTree = ""; }; - 569DAB96951B01DF38B71CDF /* ChartUtilsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtilsTests.swift; path = Tests/Charts/ChartUtilsTests.swift; sourceTree = ""; }; - 57095F04BE877E056F574A69 /* PieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataSet.swift; sourceTree = ""; }; - 58BDDF3816E546E58DDDFC32 /* YAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/YAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; - 5A9B2FE97C8C777A674C3D62 /* AxisBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisBase.swift; path = Source/Charts/Components/AxisBase.swift; sourceTree = ""; }; - 5D6EFE6DE14B144522DBEC25 /* CombinedChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartRenderer.swift; path = Source/Charts/Renderers/CombinedChartRenderer.swift; sourceTree = ""; }; - 5E24D7EEA82A893EBBE27882 /* BubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BubbleChartDataProvider.swift; sourceTree = ""; }; - 62976B4BA67502A246C835CB /* PieChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataEntry.swift; sourceTree = ""; }; - 63246976C392BF9B64BCF258 /* IBarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBarChartDataSet.swift; sourceTree = ""; }; - 63DD2AD5AFC6A69F542C711B /* Range.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Range.swift; path = Source/Charts/Highlight/Range.swift; sourceTree = ""; }; - 64316E9D8713E8205E8E2138 /* LineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineRadarChartDataSet.swift; sourceTree = ""; }; - 65996B15286414897CFB54DE /* IndexAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IndexAxisValueFormatter.swift; path = Source/Charts/Formatters/IndexAxisValueFormatter.swift; sourceTree = ""; }; - 669F55F7D0E1BF19D4B77350 /* ILineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineRadarChartDataSet.swift; sourceTree = ""; }; - 68181468776BE8E69970A47A /* ILineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; - 6906DD6D28D6C7226833585A /* HorizontalBarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartRenderer.swift; path = Source/Charts/Renderers/HorizontalBarChartRenderer.swift; sourceTree = ""; }; - 6B6DDD2F4CAFF90385DE59D4 /* ChartColorTemplates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartColorTemplates.swift; path = Source/Charts/Utils/ChartColorTemplates.swift; sourceTree = ""; }; - 6C306AB21A7FFA4608349917 /* BarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift; sourceTree = ""; }; - 6FA17F5F3DF8E28312431A7A /* HorizontalBarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartView.swift; path = Source/Charts/Charts/HorizontalBarChartView.swift; sourceTree = ""; }; - 71375616D924B5E0E10055ED /* ChartUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtils.swift; path = Source/Charts/Utils/ChartUtils.swift; sourceTree = ""; }; - 720FD446EC4A5BC344EDE951 /* IPieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IPieChartDataSet.swift; path = Source/Charts/Data/Interfaces/IPieChartDataSet.swift; sourceTree = ""; }; - 72786BC1CB2C4ED1858FD4F7 /* ScatterChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartData.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartData.swift; sourceTree = ""; }; - 7496CB3625CD04C2F0EF32D6 /* BarLineScatterCandleBubbleRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleRenderer.swift; path = Source/Charts/Renderers/BarLineScatterCandleBubbleRenderer.swift; sourceTree = ""; }; - 771D402037874303F699DC38 /* RadarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartData.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartData.swift; sourceTree = ""; }; - 78AE6B35EF05E81122CAAEFA /* Renderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Renderer.swift; path = Source/Charts/Renderers/Renderer.swift; sourceTree = ""; }; - 79114B8C62A2E95836E36712 /* ChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartHighlighter.swift; path = Source/Charts/Highlight/ChartHighlighter.swift; sourceTree = ""; }; - 79D685F9B5268D2E817D0D90 /* YAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererRadarChart.swift; path = Source/Charts/Renderers/YAxisRendererRadarChart.swift; sourceTree = ""; }; - 7A44639A41BB3B018840AF18 /* BarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarHighlighter.swift; path = Source/Charts/Highlight/BarHighlighter.swift; sourceTree = ""; }; - 7E71ED326B1D0CE4EF0EDA3E /* ScatterChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartView.swift; path = Source/Charts/Charts/ScatterChartView.swift; sourceTree = ""; }; - 7F84DF3598531694C567D4DA /* BarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarChartData.swift; sourceTree = ""; }; - 80F66082CE39F8C911700716 /* ChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartData.swift; path = Source/Charts/Data/Implementations/Standard/ChartData.swift; sourceTree = ""; }; - 8474B5177C777286153F5859 /* ChevronUpShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronUpShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift; sourceTree = ""; }; - 870AD43CF130D5D1C8027204 /* PieChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartData.swift; path = Source/Charts/Data/Implementations/Standard/PieChartData.swift; sourceTree = ""; }; - 8A9B5EA6E98E20A126D600CC /* CombinedChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartData.swift; path = Source/Charts/Data/Implementations/Standard/CombinedChartData.swift; sourceTree = ""; }; - 8E03E58F7CB004886241B48F /* RadarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartView.swift; path = Source/Charts/Charts/RadarChartView.swift; sourceTree = ""; }; - 8F3A6D4F74635182FE860669 /* XAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRenderer.swift; path = Source/Charts/Renderers/XAxisRenderer.swift; sourceTree = ""; }; - 8F6029784CCA16923E0D40A7 /* LineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; - 92189F78A1B752D037836F76 /* IAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IAxisValueFormatter.swift; path = Source/Charts/Formatters/IAxisValueFormatter.swift; sourceTree = ""; }; - 921AE48B7930AB73B0BC3622 /* ChartAnimationEasing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAnimationEasing.swift; path = Source/Charts/Animation/ChartAnimationEasing.swift; sourceTree = ""; }; - 92F04F75EDAD3C4A98A31526 /* ScatterChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataProvider.swift; path = Source/Charts/Interfaces/ScatterChartDataProvider.swift; sourceTree = ""; }; - 95A43F3797B98EFCB599A5A5 /* CandleStickChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartView.swift; path = Source/Charts/Charts/CandleStickChartView.swift; sourceTree = ""; }; - 95C2E16EA4C8F49E027A2F60 /* DefaultFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultFillFormatter.swift; path = Source/Charts/Formatters/DefaultFillFormatter.swift; sourceTree = ""; }; - 95C9873D834BD9446DCBD88B /* CircleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CircleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift; sourceTree = ""; }; - 983471C084DEE134AC889C69 /* YAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRenderer.swift; path = Source/Charts/Renderers/YAxisRenderer.swift; sourceTree = ""; }; - 98FCB684BEAE6CB77FD2B93A /* MarkerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerView.swift; path = Source/Charts/Components/MarkerView.swift; sourceTree = ""; }; - 9A7C8584612950FF07CD0393 /* LegendEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendEntry.swift; path = Source/Charts/Components/LegendEntry.swift; sourceTree = ""; }; - 9B3EC8B2C8773CAC101E7602 /* BarChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataProvider.swift; path = Source/Charts/Interfaces/BarChartDataProvider.swift; sourceTree = ""; }; - 9D09EF5E8A5D34CE92BFEF9A /* IChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IChartDataSet.swift; path = Source/Charts/Data/Interfaces/IChartDataSet.swift; sourceTree = ""; }; - 9D826DBA70947C847354B011 /* AnimatedViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedViewPortJob.swift; path = Source/Charts/Jobs/AnimatedViewPortJob.swift; sourceTree = ""; }; - 9D82F5451A8B27204F87F8BA /* CombinedChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartView.swift; path = Source/Charts/Charts/CombinedChartView.swift; sourceTree = ""; }; - 9E28662F0CC85BA5E4D38F1D /* Animator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Animator.swift; path = Source/Charts/Animation/Animator.swift; sourceTree = ""; }; - 9E84FF13690C87B851E9D4A7 /* AnimatedZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedZoomViewJob.swift; path = Source/Charts/Jobs/AnimatedZoomViewJob.swift; sourceTree = ""; }; - 9F38FC51A5FD01E25F57B577 /* PieChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartRenderer.swift; path = Source/Charts/Renderers/PieChartRenderer.swift; sourceTree = ""; }; - A0714E1877E4AD5B6661F2AD /* RadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarHighlighter.swift; path = Source/Charts/Highlight/RadarHighlighter.swift; sourceTree = ""; }; - A30F2546C4D51E23B8C23AA9 /* MoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoveViewJob.swift; path = Source/Charts/Jobs/MoveViewJob.swift; sourceTree = ""; }; - A32C5E3102705F2870B96F79 /* CandleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataEntry.swift; sourceTree = ""; }; - A4BFEFFE56F1711A761CE159 /* IBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBubbleChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBubbleChartDataSet.swift; sourceTree = ""; }; - A4CECECF10D0F9E6C6F1EADF /* Transformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transformer.swift; path = Source/Charts/Utils/Transformer.swift; sourceTree = ""; }; - A6A1C8A414F3FE239827DF9B /* LineChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartView.swift; path = Source/Charts/Charts/LineChartView.swift; sourceTree = ""; }; - A7C1B9B0ECA4A3D8E3193D49 /* CandleStickChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartRenderer.swift; path = Source/Charts/Renderers/CandleStickChartRenderer.swift; sourceTree = ""; }; - A864254C6C98A851E825E595 /* ScatterChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartRenderer.swift; path = Source/Charts/Renderers/ScatterChartRenderer.swift; sourceTree = ""; }; - A9B11503D9F796E8F595162E /* BubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartData.swift; sourceTree = ""; }; - AFC2E2F689AA8A307FED418E /* ICandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ICandleChartDataSet.swift; path = Source/Charts/Data/Interfaces/ICandleChartDataSet.swift; sourceTree = ""; }; - AFCD6CECB85C6F8A52483E4A /* ViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortJob.swift; path = Source/Charts/Jobs/ViewPortJob.swift; sourceTree = ""; }; - B134ADA10C91F8D50037220D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Source/Supporting Files/Info.plist"; sourceTree = ""; }; - B1ECC9837848C09ED27D61B6 /* Fill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Fill.swift; path = Source/Charts/Utils/Fill.swift; sourceTree = ""; }; - B41F3486B3AEF2F237819280 /* Legend.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Legend.swift; path = Source/Charts/Components/Legend.swift; sourceTree = ""; }; - B56A98D84882867B6477E381 /* ChartDataRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataRendererBase.swift; path = Source/Charts/Renderers/ChartDataRendererBase.swift; sourceTree = ""; }; - B7B9E373774F56E255EFF371 /* IFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IFillFormatter.swift; path = Source/Charts/Formatters/IFillFormatter.swift; sourceTree = ""; }; - B823EAAC1085D605F6853B3C /* PieRadarChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarChartViewBase.swift; path = Source/Charts/Charts/PieRadarChartViewBase.swift; sourceTree = ""; }; - BBB06C3A5B7098E78C4BFAC4 /* RadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartRenderer.swift; path = Source/Charts/Renderers/RadarChartRenderer.swift; sourceTree = ""; }; - BD3DB32A6A1E1688123C74FD /* ChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataProvider.swift; path = Source/Charts/Interfaces/ChartDataProvider.swift; sourceTree = ""; }; - BE68DA203280938B1D0DF5A4 /* BarLineScatterCandleBubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift; sourceTree = ""; }; - BFC16599CC5F22F5A2B0A1F8 /* AnimatedMoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedMoveViewJob.swift; path = Source/Charts/Jobs/AnimatedMoveViewJob.swift; sourceTree = ""; }; - BFF5EB8DDC7477A6FF777F14 /* Description.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Description.swift; path = Source/Charts/Components/Description.swift; sourceTree = ""; }; - C20E02263A796EEEF5BFF9C2 /* ComponentBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComponentBase.swift; path = Source/Charts/Components/ComponentBase.swift; sourceTree = ""; }; - C3FBF17C465CE2D517E8434D /* BubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift; sourceTree = ""; }; - C72B66BC2402D8A2C6D781AC /* IShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/IShapeRenderer.swift; sourceTree = ""; }; - C783070D5024BB05A18D40BC /* CandleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataProvider.swift; path = Source/Charts/Interfaces/CandleChartDataProvider.swift; sourceTree = ""; }; - CEDCE8799474F36EE86F2E7C /* IBarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; - CF05F5525C471B27F31B8289 /* MarkerImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerImage.swift; path = Source/Charts/Components/MarkerImage.swift; sourceTree = ""; }; - D16CB9FF9FDF77A0C9BE9946 /* ChartBaseDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartBaseDataSet.swift; path = Source/Charts/Data/Implementations/ChartBaseDataSet.swift; sourceTree = ""; }; - D3DB00B9CD55F694BE9248DE /* LegendRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendRenderer.swift; path = Source/Charts/Renderers/LegendRenderer.swift; sourceTree = ""; }; - D550CF387F5245880BD5DC0C /* ILineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineChartDataSet.swift; sourceTree = ""; }; - D6903776E41A0F47B70A50AF /* BubbleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataEntry.swift; sourceTree = ""; }; - D74BB5C736918A4E468891AD /* ChartLimitLine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartLimitLine.swift; path = Source/Charts/Components/ChartLimitLine.swift; sourceTree = ""; }; - D791F8AEF54D65EFB82885D5 /* LineChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartData.swift; path = Source/Charts/Data/Implementations/Standard/LineChartData.swift; sourceTree = ""; }; - DEFC467BF898951FC84F5620 /* ChartDataEntryBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntryBase.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntryBase.swift; sourceTree = ""; }; - E03001CA8FFE8AD77585E075 /* Highlight.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Highlight.swift; path = Source/Charts/Highlight/Highlight.swift; sourceTree = ""; }; - E589BDED5BCBDA3DD513DF2E /* HorizontalBarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarHighlighter.swift; path = Source/Charts/Highlight/HorizontalBarHighlighter.swift; sourceTree = ""; }; - E900D0DA64F61906B3A972B6 /* BarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartRenderer.swift; path = Source/Charts/Renderers/BarChartRenderer.swift; sourceTree = ""; }; - EC7995E0C9C4F33F3EE5CC3A /* BubbleChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartRenderer.swift; path = Source/Charts/Renderers/BubbleChartRenderer.swift; sourceTree = ""; }; - EDF6DE50212A6E4344805288 /* LineChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartRenderer.swift; path = Source/Charts/Renderers/LineChartRenderer.swift; sourceTree = ""; }; - EE3063C08937E060E2D9160C /* RadarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift; sourceTree = ""; }; - EF8B64973E23097CC929AFA8 /* PieRadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarHighlighter.swift; path = Source/Charts/Highlight/PieRadarHighlighter.swift; sourceTree = ""; }; - F70FAC75EA27D5A2EDB5DA85 /* RadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift; sourceTree = ""; }; - F9536B2806512D7A92DABDC0 /* DefaultValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultValueFormatter.swift; path = Source/Charts/Formatters/DefaultValueFormatter.swift; sourceTree = ""; }; - FC6FD8E0E0AD2219A80EB6CB /* IScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IScatterChartDataSet.swift; path = Source/Charts/Data/Interfaces/IScatterChartDataSet.swift; sourceTree = ""; }; - FE05FD9A0072660A9D3E7983 /* Charts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Charts.h; path = "Source/Supporting Files/Charts.h"; sourceTree = ""; }; - FE4090926DF0D2F1DF4B704F /* CombinedHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedHighlighter.swift; path = Source/Charts/Highlight/CombinedHighlighter.swift; sourceTree = ""; }; - FFD9181255A5600E14DF9363 /* BarLineScatterCandleBubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift; sourceTree = ""; }; + 0108D5925E21A47DA36A66AA /* BarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarChartData.swift; sourceTree = ""; }; + 0216EDC6A1FE272F4EB19FCF /* ChartDataRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataRendererBase.swift; path = Source/Charts/Renderers/ChartDataRendererBase.swift; sourceTree = ""; }; + 04F7B9DF1F2D66E7279771D4 /* PieRadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarHighlighter.swift; path = Source/Charts/Highlight/PieRadarHighlighter.swift; sourceTree = ""; }; + 0619A877C69A95ECCC440A44 /* LineChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartView.swift; path = Source/Charts/Charts/LineChartView.swift; sourceTree = ""; }; + 0BD9DF16AF59680A3BB49452 /* IAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IAxisValueFormatter.swift; path = Source/Charts/Formatters/IAxisValueFormatter.swift; sourceTree = ""; }; + 0DABDBBCCE6B3620C967F04A /* LineChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartRenderer.swift; path = Source/Charts/Renderers/LineChartRenderer.swift; sourceTree = ""; }; + 0DDE409E9ECF54D2C146A6F0 /* CombinedChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartData.swift; path = Source/Charts/Data/Implementations/Standard/CombinedChartData.swift; sourceTree = ""; }; + 0F099502DA50C56204E7B744 /* Range.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Range.swift; path = Source/Charts/Highlight/Range.swift; sourceTree = ""; }; + 105FFC9D3773A9C7A60A897F /* LineRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarRenderer.swift; path = Source/Charts/Renderers/LineRadarRenderer.swift; sourceTree = ""; }; + 107D8F8163EE54D6D9E916B0 /* DefaultValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultValueFormatter.swift; path = Source/Charts/Formatters/DefaultValueFormatter.swift; sourceTree = ""; }; + 10DD0A02E3CF611BD11EBA9B /* IndexAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IndexAxisValueFormatter.swift; path = Source/Charts/Formatters/IndexAxisValueFormatter.swift; sourceTree = ""; }; + 11EF1FE22549E885C8F40738 /* CombinedChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartView.swift; path = Source/Charts/Charts/CombinedChartView.swift; sourceTree = ""; }; + 12409C3EA15787C11AF0D2BC /* ChartDataEntryBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntryBase.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntryBase.swift; sourceTree = ""; }; + 18462BFDD9DEE76D51D40503 /* ScatterChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartView.swift; path = Source/Charts/Charts/ScatterChartView.swift; sourceTree = ""; }; + 18BFB0A14A5C47A302A597D9 /* ICandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ICandleChartDataSet.swift; path = Source/Charts/Data/Interfaces/ICandleChartDataSet.swift; sourceTree = ""; }; + 1C02C3AF5C92FCFC18224C35 /* XAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRenderer.swift; path = Source/Charts/Renderers/XAxisRenderer.swift; sourceTree = ""; }; + 1CBBC58C6CE1EBEE9852CE41 /* ChartsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ChartsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 1F3D55A7E6176D52DC957D27 /* XAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/XAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; + 2194AA554712E6BA2677F114 /* BubbleChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartRenderer.swift; path = Source/Charts/Renderers/BubbleChartRenderer.swift; sourceTree = ""; }; + 219BC9CEA037F897E92E45D1 /* IScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IScatterChartDataSet.swift; path = Source/Charts/Data/Interfaces/IScatterChartDataSet.swift; sourceTree = ""; }; + 23D35CF6F9177D77B6B97AE1 /* XShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/XShapeRenderer.swift; sourceTree = ""; }; + 2440DB759AB93B4A928A3F6F /* RadarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartView.swift; path = Source/Charts/Charts/RadarChartView.swift; sourceTree = ""; }; + 2465CB73738EBAFB46C57288 /* CombinedHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedHighlighter.swift; path = Source/Charts/Highlight/CombinedHighlighter.swift; sourceTree = ""; }; + 266E162DA8B29D9AEB6A9397 /* MoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoveViewJob.swift; path = Source/Charts/Jobs/MoveViewJob.swift; sourceTree = ""; }; + 274116834B1B0345D622E027 /* CandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataSet.swift; sourceTree = ""; }; + 2EAD807534620E3B53327F04 /* IRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/IRadarChartDataSet.swift; sourceTree = ""; }; + 2FD37A55B4D85D883E29C744 /* ScatterChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataProvider.swift; path = Source/Charts/Interfaces/ScatterChartDataProvider.swift; sourceTree = ""; }; + 30EFAD7920F76360ADB3B5F5 /* ChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartViewBase.swift; path = Source/Charts/Charts/ChartViewBase.swift; sourceTree = ""; }; + 324C9127B53A8D39C8B49277 /* TransformerHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformerHorizontalBarChart.swift; path = Source/Charts/Utils/TransformerHorizontalBarChart.swift; sourceTree = ""; }; + 32FC01A016DFF1BA73AF9182 /* SquareShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SquareShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift; sourceTree = ""; }; + 33BE9A97FFA41D3D85CAFFC7 /* HorizontalBarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarHighlighter.swift; path = Source/Charts/Highlight/HorizontalBarHighlighter.swift; sourceTree = ""; }; + 392AAEB02DD7B351D92907C2 /* MarkerImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerImage.swift; path = Source/Charts/Components/MarkerImage.swift; sourceTree = ""; }; + 3976E5F9D60E30CD94CE6156 /* Animator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Animator.swift; path = Source/Charts/Animation/Animator.swift; sourceTree = ""; }; + 3A32510073A303CBB38E094A /* IChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IChartDataSet.swift; path = Source/Charts/Data/Interfaces/IChartDataSet.swift; sourceTree = ""; }; + 3D64616883374310C505EC39 /* Highlight.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Highlight.swift; path = Source/Charts/Highlight/Highlight.swift; sourceTree = ""; }; + 3ED23C354AFE81818D78E645 /* Platform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.swift; path = Source/Charts/Utils/Platform.swift; sourceTree = ""; }; + 3F8146ABC9FC311AF8CA699C /* CandleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataProvider.swift; path = Source/Charts/Interfaces/CandleChartDataProvider.swift; sourceTree = ""; }; + 3FDA09EF973925A110506799 /* ChartUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtils.swift; path = Source/Charts/Utils/ChartUtils.swift; sourceTree = ""; }; + 41DDB768A1D033A34F0EF9E0 /* Media.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Media.xcassets; path = "Tests/Supporting Files/Media.xcassets"; sourceTree = ""; }; + 429E88F2729735DC092EE556 /* ILineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineChartDataSet.swift; sourceTree = ""; }; + 45C6D3723C4E001B119CA0C8 /* BarLineChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineChartViewBase.swift; path = Source/Charts/Charts/BarLineChartViewBase.swift; sourceTree = ""; }; + 45E31A4356CC6F283C29954B /* LineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineRadarChartDataSet.swift; sourceTree = ""; }; + 46D8013D44629521B1746364 /* PieChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartRenderer.swift; path = Source/Charts/Renderers/PieChartRenderer.swift; sourceTree = ""; }; + 48164CCD83C51B496533CB77 /* MarkerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerView.swift; path = Source/Charts/Components/MarkerView.swift; sourceTree = ""; }; + 4A6C9631C69B2D772BBD9232 /* PieRadarChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarChartViewBase.swift; path = Source/Charts/Charts/PieRadarChartViewBase.swift; sourceTree = ""; }; + 4B7AEFBF4D85B9D2EAAB3071 /* AxisBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisBase.swift; path = Source/Charts/Components/AxisBase.swift; sourceTree = ""; }; + 4BBB57D6FA41029B08F26D7B /* RadarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartData.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartData.swift; sourceTree = ""; }; + 4C2EA58CB336967198D30D20 /* AnimatedZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedZoomViewJob.swift; path = Source/Charts/Jobs/AnimatedZoomViewJob.swift; sourceTree = ""; }; + 4C978F31F23C7D21197DC2A1 /* LineChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartData.swift; path = Source/Charts/Data/Implementations/Standard/LineChartData.swift; sourceTree = ""; }; + 4EAA8AA30C377D54D22A577A /* IValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IValueFormatter.swift; path = Source/Charts/Formatters/IValueFormatter.swift; sourceTree = ""; }; + 4EED352A98860E031F13AFB7 /* BubbleChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartView.swift; path = Source/Charts/Charts/BubbleChartView.swift; sourceTree = ""; }; + 4F7E6A99D82E6AE3804D5A39 /* ILineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineRadarChartDataSet.swift; sourceTree = ""; }; + 4F9922F0641F7955DC6CD324 /* Charts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Charts.h; path = "Source/Supporting Files/Charts.h"; sourceTree = ""; }; + 5225ABC3C0C2F65FC094EEBB /* XAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxis.swift; path = Source/Charts/Components/XAxis.swift; sourceTree = ""; }; + 52265C1B343CCC41AF2300E3 /* CombinedChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartRenderer.swift; path = Source/Charts/Renderers/CombinedChartRenderer.swift; sourceTree = ""; }; + 539382766378B702660FDFB2 /* HorizontalBarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartRenderer.swift; path = Source/Charts/Renderers/HorizontalBarChartRenderer.swift; sourceTree = ""; }; + 543729805D897CC03E5F78D3 /* BarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarHighlighter.swift; path = Source/Charts/Highlight/BarHighlighter.swift; sourceTree = ""; }; + 559DB735FEA17AB90676D6CA /* BarLineScatterCandleBubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift; sourceTree = ""; }; + 596963A429D485E3894C4666 /* IMarker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IMarker.swift; path = Source/Charts/Components/IMarker.swift; sourceTree = ""; }; + 5983826927D825EF5F855C28 /* ChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartHighlighter.swift; path = Source/Charts/Highlight/ChartHighlighter.swift; sourceTree = ""; }; + 5A4CFFFB65819121595F06F1 /* Fill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Fill.swift; path = Source/Charts/Utils/Fill.swift; sourceTree = ""; }; + 5B1C588E9DF6FFD56D7ADF8E /* BarLineScatterCandleBubbleRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleRenderer.swift; path = Source/Charts/Renderers/BarLineScatterCandleBubbleRenderer.swift; sourceTree = ""; }; + 5C3F5E1A69EC06E86505F7B1 /* BarChartTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartTests.swift; path = Tests/Charts/BarChartTests.swift; sourceTree = ""; }; + 6021C9E424C36116AEA78CC9 /* HorizontalBarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartView.swift; path = Source/Charts/Charts/HorizontalBarChartView.swift; sourceTree = ""; }; + 62B73FCEDD3841E7B958F6A9 /* ChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataProvider.swift; path = Source/Charts/Interfaces/ChartDataProvider.swift; sourceTree = ""; }; + 65AD9E95D9ED4DC0BD73A743 /* Charts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Charts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 688B80F1AA88AE54152BE768 /* YAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRenderer.swift; path = Source/Charts/Renderers/YAxisRenderer.swift; sourceTree = ""; }; + 6A4770E0F75EFFC30707A7C8 /* DefaultAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultAxisValueFormatter.swift; path = Source/Charts/Formatters/DefaultAxisValueFormatter.swift; sourceTree = ""; }; + 6CEC0C69C89CE9B99F3B4409 /* ChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataSet.swift; sourceTree = ""; }; + 6D717F0808DE7EC8A4AE9C2A /* BarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; + 6E03A4987F72414A02A0631B /* PieChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartData.swift; path = Source/Charts/Data/Implementations/Standard/PieChartData.swift; sourceTree = ""; }; + 6F66B32AD8A878CBD6DB6ED2 /* Renderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Renderer.swift; path = Source/Charts/Renderers/Renderer.swift; sourceTree = ""; }; + 7036F11832C017E26AC750A4 /* PieHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieHighlighter.swift; path = Source/Charts/Highlight/PieHighlighter.swift; sourceTree = ""; }; + 710D7C9B2F1DB4A331EE405A /* AnimatedViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedViewPortJob.swift; path = Source/Charts/Jobs/AnimatedViewPortJob.swift; sourceTree = ""; }; + 72EAEBB7CF73E33565FC2896 /* ViewPortHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortHandler.swift; path = Source/Charts/Utils/ViewPortHandler.swift; sourceTree = ""; }; + 75F279974FE650E57A061B09 /* BarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartRenderer.swift; path = Source/Charts/Renderers/BarChartRenderer.swift; sourceTree = ""; }; + 7A53A9E42FC07FFDACA937C1 /* IBarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBarChartDataSet.swift; sourceTree = ""; }; + 7AB9062A28AAB9469752A954 /* ChartUtilsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtilsTests.swift; path = Tests/Charts/ChartUtilsTests.swift; sourceTree = ""; }; + 7AC9C3D69ACB5BDE22421E15 /* RadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartRenderer.swift; path = Source/Charts/Renderers/RadarChartRenderer.swift; sourceTree = ""; }; + 7EDA3AD550AEFC93C8D15B9C /* BubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartData.swift; sourceTree = ""; }; + 80D5B764EC0AE1E17E55DC67 /* ScatterChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartRenderer.swift; path = Source/Charts/Renderers/ScatterChartRenderer.swift; sourceTree = ""; }; + 818AC6B12505B7C0A53D62F9 /* IFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IFillFormatter.swift; path = Source/Charts/Formatters/IFillFormatter.swift; sourceTree = ""; }; + 823F7DB281C6C6F069A69605 /* CrossShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CrossShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift; sourceTree = ""; }; + 8FF03960A871A092F5B54315 /* BarLineScatterCandleBubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift; sourceTree = ""; }; + 910DBFE1DA1B2CA237A736DF /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Source/Supporting Files/Info.plist"; sourceTree = ""; }; + 91EEEDE2AB8F2DA3AFCF0733 /* RadarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift; sourceTree = ""; }; + 923206233CA89FD03565FF87 /* LineScatterCandleRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarRenderer.swift; path = Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift; sourceTree = ""; }; + 9249AD9AEC8C85772365A128 /* ILineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; + 93EF9709CF635BEE70D1ABC5 /* DataApproximator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataApproximator.swift; path = Source/Charts/Filters/DataApproximator.swift; sourceTree = ""; }; + 998F2BFE318471AFC05B50AC /* IHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IHighlighter.swift; path = Source/Charts/Highlight/IHighlighter.swift; sourceTree = ""; }; + 9D7184C8A5A60A3522AB9B05 /* BarChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataProvider.swift; path = Source/Charts/Interfaces/BarChartDataProvider.swift; sourceTree = ""; }; + 9DCD13D558BA177D5952AD66 /* PieChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartView.swift; path = Source/Charts/Charts/PieChartView.swift; sourceTree = ""; }; + 9E7C673B9ED4340F550A9283 /* LegendEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendEntry.swift; path = Source/Charts/Components/LegendEntry.swift; sourceTree = ""; }; + A140F644332704916947B58C /* CombinedChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartDataProvider.swift; path = Source/Charts/Interfaces/CombinedChartDataProvider.swift; sourceTree = ""; }; + A4FB5E3761EF8B4D1E1E1014 /* PieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataSet.swift; sourceTree = ""; }; + A5649B272BF3EBFC8A1EF0C1 /* IBarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; + A5A75AA73C5AA381DA517959 /* LineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineChartDataSet.swift; sourceTree = ""; }; + AA5A16F4A382813C4FE8BDF9 /* YAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererRadarChart.swift; path = Source/Charts/Renderers/YAxisRendererRadarChart.swift; sourceTree = ""; }; + AA70259ED16FF80D8EEB0F94 /* ChevronUpShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronUpShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift; sourceTree = ""; }; + B137428B41C143D5115726C4 /* Description.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Description.swift; path = Source/Charts/Components/Description.swift; sourceTree = ""; }; + B1BA6B21CBDF77A15848994F /* RadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift; sourceTree = ""; }; + B44829AF0ADA583F1F0279B7 /* BubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift; sourceTree = ""; }; + BA157EFF2F952192C11DF937 /* AnimatedMoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedMoveViewJob.swift; path = Source/Charts/Jobs/AnimatedMoveViewJob.swift; sourceTree = ""; }; + BA1A58428DC4780BAB4EAADC /* CandleStickChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartView.swift; path = Source/Charts/Charts/CandleStickChartView.swift; sourceTree = ""; }; + BC19DC2434D65FFB446A61B7 /* XAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererRadarChart.swift; path = Source/Charts/Renderers/XAxisRendererRadarChart.swift; sourceTree = ""; }; + BD02157CF8CEE1189BF681DA /* PieChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataEntry.swift; sourceTree = ""; }; + BD5C6D20243EC2F19069AACD /* CandleStickChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartRenderer.swift; path = Source/Charts/Renderers/CandleStickChartRenderer.swift; sourceTree = ""; }; + BFABD027DAF6851088F002AC /* LineChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataProvider.swift; path = Source/Charts/Interfaces/LineChartDataProvider.swift; sourceTree = ""; }; + C31AA65EA27776F8C653C7E8 /* BarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift; sourceTree = ""; }; + C52E8344160B5E689DA3C25C /* ChevronDownShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronDownShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift; sourceTree = ""; }; + C574E1BC7E12D937A5471EF8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Tests/Supporting Files/Info.plist"; sourceTree = ""; }; + C58BD7B14BEA440783ED8D2B /* LineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; + C75935E899183DDFA181E2CC /* AxisRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisRendererBase.swift; path = Source/Charts/Renderers/AxisRendererBase.swift; sourceTree = ""; }; + C8C9A105A7DB64F39DDA648B /* ComponentBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComponentBase.swift; path = Source/Charts/Components/ComponentBase.swift; sourceTree = ""; }; + C8FB6219B143F8F7DA762950 /* TriangleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TriangleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift; sourceTree = ""; }; + C9FE42E868A225C116537368 /* ChartBaseDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartBaseDataSet.swift; path = Source/Charts/Data/Implementations/ChartBaseDataSet.swift; sourceTree = ""; }; + CB1DD1A0F64266A10EE94194 /* ScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartDataSet.swift; sourceTree = ""; }; + D2E1819D72CD7B6C4A4E8048 /* LineChartTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartTests.swift; path = Tests/Charts/LineChartTests.swift; sourceTree = ""; }; + D2E698FF540029B70AC97AD7 /* CandleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataEntry.swift; sourceTree = ""; }; + D6C1BEFDF17404666C7B6054 /* DefaultFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultFillFormatter.swift; path = Source/Charts/Formatters/DefaultFillFormatter.swift; sourceTree = ""; }; + DA2AA6CC89F809DCCD7605B4 /* IPieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IPieChartDataSet.swift; path = Source/Charts/Data/Interfaces/IPieChartDataSet.swift; sourceTree = ""; }; + DD8ED233775EEC31243A6919 /* BubbleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataEntry.swift; sourceTree = ""; }; + DFB762958EE8E6521563665D /* ChartAnimationEasing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAnimationEasing.swift; path = Source/Charts/Animation/ChartAnimationEasing.swift; sourceTree = ""; }; + E120E76C6F1B5877D56126DD /* ChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartData.swift; path = Source/Charts/Data/Implementations/Standard/ChartData.swift; sourceTree = ""; }; + E3F8BFF1CBC58D5B9DBFFB9B /* BarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataEntry.swift; sourceTree = ""; }; + E64A75540C627E09080B402A /* Legend.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Legend.swift; path = Source/Charts/Components/Legend.swift; sourceTree = ""; }; + E783CFB4889A767C76510917 /* BarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartView.swift; path = Source/Charts/Charts/BarChartView.swift; sourceTree = ""; }; + E7AD2FC320A16CA1EE0A52F4 /* ScatterChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartData.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartData.swift; sourceTree = ""; }; + EAE417AAA0FCA0DD00E77489 /* YAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/YAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; + ECE1B1623D3AF69CECAE8562 /* CircleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CircleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift; sourceTree = ""; }; + EDEAF554FD0D68EA4C0E7E49 /* BubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BubbleChartDataProvider.swift; sourceTree = ""; }; + F22750328058DEC2F019646F /* ChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntry.swift; sourceTree = ""; }; + F368CF209744D8F3B85B1028 /* RadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarHighlighter.swift; path = Source/Charts/Highlight/RadarHighlighter.swift; sourceTree = ""; }; + F3788EC55EF908B0805D7C2F /* IBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBubbleChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBubbleChartDataSet.swift; sourceTree = ""; }; + F4785FEACAE4367F36FB8868 /* CandleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartData.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartData.swift; sourceTree = ""; }; + F6227A646166E248F90F86AD /* ChartColorTemplates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartColorTemplates.swift; path = Source/Charts/Utils/ChartColorTemplates.swift; sourceTree = ""; }; + F6DEBFAB1D73E944ED430B4F /* ChartLimitLine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartLimitLine.swift; path = Source/Charts/Components/ChartLimitLine.swift; sourceTree = ""; }; + F715DB2C56C9E0615542625B /* LegendRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendRenderer.swift; path = Source/Charts/Renderers/LegendRenderer.swift; sourceTree = ""; }; + FA1D3D13180C2E3893A82546 /* IShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/IShapeRenderer.swift; sourceTree = ""; }; + FA7BDB22C97F39A4B33E38A7 /* ViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortJob.swift; path = Source/Charts/Jobs/ViewPortJob.swift; sourceTree = ""; }; + FB3A4F5987E58F3E5BE855F9 /* ZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZoomViewJob.swift; path = Source/Charts/Jobs/ZoomViewJob.swift; sourceTree = ""; }; + FB92A80F861C1362EED8D946 /* YAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxis.swift; path = Source/Charts/Components/YAxis.swift; sourceTree = ""; }; + FF475B9593B9898853814340 /* Transformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transformer.swift; path = Source/Charts/Utils/Transformer.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 5AA7EB0E6DA1D80708E79E13 /* Frameworks */ = { + 77997192275C47C45A0A2E9A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + C7B150D740255670DEB9F455 /* Charts.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6691302A7193BE2498A20CD2 /* Frameworks */ = { + C16A09321DC2DCF289FF0E3B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 718FCE8A805306DCF7252C9E /* Charts.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 02326A22F520AE9B8DB914D0 /* Standard */ = { + 031D7C33F3BF172E30664862 /* Interfaces */ = { isa = PBXGroup; children = ( - 7F84DF3598531694C567D4DA /* BarChartData.swift */, - 437FB9556010D9185DA2911D /* BarChartDataEntry.swift */, - 6C306AB21A7FFA4608349917 /* BarChartDataSet.swift */, - FFD9181255A5600E14DF9363 /* BarLineScatterCandleBubbleChartData.swift */, - 3F1FCAB00443E2AB277CBD25 /* BarLineScatterCandleBubbleChartDataSet.swift */, - A9B11503D9F796E8F595162E /* BubbleChartData.swift */, - D6903776E41A0F47B70A50AF /* BubbleChartDataEntry.swift */, - C3FBF17C465CE2D517E8434D /* BubbleChartDataSet.swift */, - 3C968BFD307DE10BB78EE199 /* CandleChartData.swift */, - A32C5E3102705F2870B96F79 /* CandleChartDataEntry.swift */, - 10269C9C7DA0EB41AFF8179D /* CandleChartDataSet.swift */, - 80F66082CE39F8C911700716 /* ChartData.swift */, - 42E6C6F8026177DB5EB69A66 /* ChartDataEntry.swift */, - DEFC467BF898951FC84F5620 /* ChartDataEntryBase.swift */, - 44C0384291A7B7BAAF37054C /* ChartDataSet.swift */, - 8A9B5EA6E98E20A126D600CC /* CombinedChartData.swift */, - D791F8AEF54D65EFB82885D5 /* LineChartData.swift */, - 466660ED2EC61BAF6977E05F /* LineChartDataSet.swift */, - 64316E9D8713E8205E8E2138 /* LineRadarChartDataSet.swift */, - 8F6029784CCA16923E0D40A7 /* LineScatterCandleRadarChartDataSet.swift */, - 870AD43CF130D5D1C8027204 /* PieChartData.swift */, - 62976B4BA67502A246C835CB /* PieChartDataEntry.swift */, - 57095F04BE877E056F574A69 /* PieChartDataSet.swift */, - 771D402037874303F699DC38 /* RadarChartData.swift */, - EE3063C08937E060E2D9160C /* RadarChartDataEntry.swift */, - F70FAC75EA27D5A2EDB5DA85 /* RadarChartDataSet.swift */, - 72786BC1CB2C4ED1858FD4F7 /* ScatterChartData.swift */, - 01DA223D26779DE263719CBE /* ScatterChartDataSet.swift */, + 9D7184C8A5A60A3522AB9B05 /* BarChartDataProvider.swift */, + 8FF03960A871A092F5B54315 /* BarLineScatterCandleBubbleChartDataProvider.swift */, + EDEAF554FD0D68EA4C0E7E49 /* BubbleChartDataProvider.swift */, + 3F8146ABC9FC311AF8CA699C /* CandleChartDataProvider.swift */, + 62B73FCEDD3841E7B958F6A9 /* ChartDataProvider.swift */, + A140F644332704916947B58C /* CombinedChartDataProvider.swift */, + BFABD027DAF6851088F002AC /* LineChartDataProvider.swift */, + 2FD37A55B4D85D883E29C744 /* ScatterChartDataProvider.swift */, ); - name = Standard; + name = Interfaces; sourceTree = ""; }; - 0323F0398A82BC5071495502 /* Charts */ = { + 033FD152BB2F906750106A85 /* Frameworks */ = { isa = PBXGroup; children = ( - 3924333873B79C3FD65EF769 /* BarChartTests.swift */, - 569DAB96951B01DF38B71CDF /* ChartUtilsTests.swift */, - 256025862664CA428E01840B /* LineChartTests.swift */, ); - name = Charts; + name = Frameworks; sourceTree = ""; }; - 080ECFD494FF1518DDAC94B8 /* Renderers */ = { + 098621EDFBF928494B94BEA1 /* Data */ = { isa = PBXGroup; children = ( - 330B982A603F02ACF2B3BF50 /* AxisRendererBase.swift */, - E900D0DA64F61906B3A972B6 /* BarChartRenderer.swift */, - 7496CB3625CD04C2F0EF32D6 /* BarLineScatterCandleBubbleRenderer.swift */, - EC7995E0C9C4F33F3EE5CC3A /* BubbleChartRenderer.swift */, - A7C1B9B0ECA4A3D8E3193D49 /* CandleStickChartRenderer.swift */, - B56A98D84882867B6477E381 /* ChartDataRendererBase.swift */, - 5D6EFE6DE14B144522DBEC25 /* CombinedChartRenderer.swift */, - 6906DD6D28D6C7226833585A /* HorizontalBarChartRenderer.swift */, - D3DB00B9CD55F694BE9248DE /* LegendRenderer.swift */, - EDF6DE50212A6E4344805288 /* LineChartRenderer.swift */, - 1F3536DBBF2345532BC7669B /* LineRadarRenderer.swift */, - 5682800FD192526C848311DD /* LineScatterCandleRadarRenderer.swift */, - 9F38FC51A5FD01E25F57B577 /* PieChartRenderer.swift */, - BBB06C3A5B7098E78C4BFAC4 /* RadarChartRenderer.swift */, - 78AE6B35EF05E81122CAAEFA /* Renderer.swift */, - 4022C17232A9CFA8968676B6 /* Scatter */, - A864254C6C98A851E825E595 /* ScatterChartRenderer.swift */, - 8F3A6D4F74635182FE860669 /* XAxisRenderer.swift */, - 46B4D1787163393D707EC41E /* XAxisRendererHorizontalBarChart.swift */, - 3AD7B089A211288BC7F27536 /* XAxisRendererRadarChart.swift */, - 983471C084DEE134AC889C69 /* YAxisRenderer.swift */, - 58BDDF3816E546E58DDDFC32 /* YAxisRendererHorizontalBarChart.swift */, - 79D685F9B5268D2E817D0D90 /* YAxisRendererRadarChart.swift */, + 3B9DD76FCE8D873300A822C7 /* Implementations */, + DB2D9648877455028EBEAA8F /* Interfaces */, ); - name = Renderers; + name = Data; sourceTree = ""; }; - 138E7FBA58D4B0FB4F451E71 /* Components */ = { + 20C350D33133A4D89BB365B1 /* Source */ = { isa = PBXGroup; children = ( - 5A9B2FE97C8C777A674C3D62 /* AxisBase.swift */, - D74BB5C736918A4E468891AD /* ChartLimitLine.swift */, - C20E02263A796EEEF5BFF9C2 /* ComponentBase.swift */, - BFF5EB8DDC7477A6FF777F14 /* Description.swift */, - 3B005E477BC1846F0C12807F /* IMarker.swift */, - B41F3486B3AEF2F237819280 /* Legend.swift */, - 9A7C8584612950FF07CD0393 /* LegendEntry.swift */, - CF05F5525C471B27F31B8289 /* MarkerImage.swift */, - 98FCB684BEAE6CB77FD2B93A /* MarkerView.swift */, - 19480DF7CC0538A529972E83 /* XAxis.swift */, - 29F47B7715AE71224707C537 /* YAxis.swift */, + E9F158C8C566B26AFD775911 /* Supporting Files */, + 2647844720BC6574A544A337 /* Charts */, ); - name = Components; + name = Source; sourceTree = ""; }; - 149DA4CE58111FDC0CB089F9 /* Filters */ = { + 2647844720BC6574A544A337 /* Charts */ = { isa = PBXGroup; children = ( - 28FCA501619C01FCE44BB3C4 /* DataApproximator.swift */, + A49C1F0F9CCD6E5C143C29F4 /* Animation */, + 8C531E3F3C3DE5843C93C3DA /* Charts */, + 51EF1986C9884C25EED1C2CB /* Components */, + 098621EDFBF928494B94BEA1 /* Data */, + AA79AB82B0ADCA926510B73E /* Filters */, + 74A391010038924F637D6752 /* Formatters */, + 42824E1F334B0C484AF4C594 /* Highlight */, + 031D7C33F3BF172E30664862 /* Interfaces */, + AD1224C45A29A5C88D6B7450 /* Jobs */, + E7589D3E7C2BD2449960AD59 /* Renderers */, + D047819AB7170595896D6FE8 /* Utils */, ); - name = Filters; + name = Charts; sourceTree = ""; }; - 1E4355CBB7AB43A65D71A5CB /* Utils */ = { + 3B9DD76FCE8D873300A822C7 /* Implementations */ = { isa = PBXGroup; children = ( - 6B6DDD2F4CAFF90385DE59D4 /* ChartColorTemplates.swift */, - 71375616D924B5E0E10055ED /* ChartUtils.swift */, - B1ECC9837848C09ED27D61B6 /* Fill.swift */, - 372A8ED813FDE992A046448A /* Platform.swift */, - A4CECECF10D0F9E6C6F1EADF /* Transformer.swift */, - 0C4A1F34D7D988C582C75E68 /* TransformerHorizontalBarChart.swift */, - 17494E808658CD9E1061FFA3 /* ViewPortHandler.swift */, + C9FE42E868A225C116537368 /* ChartBaseDataSet.swift */, + 740017197A160047EBB8A9A0 /* Standard */, ); - name = Utils; + name = Implementations; sourceTree = ""; }; - 233A64AB907EB6FBD9FCDCE4 /* Charts */ = { + 42824E1F334B0C484AF4C594 /* Highlight */ = { isa = PBXGroup; children = ( - 6BCF372F06E4172978A2D991 /* Animation */, - 548B5997C099AA3ADB7AB514 /* Charts */, - 138E7FBA58D4B0FB4F451E71 /* Components */, - 6B9DCEC4C2EB8D80B717B596 /* Data */, - 149DA4CE58111FDC0CB089F9 /* Filters */, - EC938B33DCD50744415D1325 /* Formatters */, - 6F8578B01EBEB6FA500AB320 /* Highlight */, - CEDDF868C3CE77292DBB894C /* Interfaces */, - F5EE92A73DEE2F59A8EF3A16 /* Jobs */, - 080ECFD494FF1518DDAC94B8 /* Renderers */, - 1E4355CBB7AB43A65D71A5CB /* Utils */, + 543729805D897CC03E5F78D3 /* BarHighlighter.swift */, + 5983826927D825EF5F855C28 /* ChartHighlighter.swift */, + 2465CB73738EBAFB46C57288 /* CombinedHighlighter.swift */, + 3D64616883374310C505EC39 /* Highlight.swift */, + 33BE9A97FFA41D3D85CAFFC7 /* HorizontalBarHighlighter.swift */, + 998F2BFE318471AFC05B50AC /* IHighlighter.swift */, + 7036F11832C017E26AC750A4 /* PieHighlighter.swift */, + 04F7B9DF1F2D66E7279771D4 /* PieRadarHighlighter.swift */, + F368CF209744D8F3B85B1028 /* RadarHighlighter.swift */, + 0F099502DA50C56204E7B744 /* Range.swift */, ); - name = Charts; + name = Highlight; sourceTree = ""; }; - 259D29D8A12DE8D64A302759 /* Tests */ = { + 51EF1986C9884C25EED1C2CB /* Components */ = { isa = PBXGroup; children = ( - 960D39442C14F94BE3FC9867 /* Supporting Files */, - 0323F0398A82BC5071495502 /* Charts */, + 4B7AEFBF4D85B9D2EAAB3071 /* AxisBase.swift */, + F6DEBFAB1D73E944ED430B4F /* ChartLimitLine.swift */, + C8C9A105A7DB64F39DDA648B /* ComponentBase.swift */, + B137428B41C143D5115726C4 /* Description.swift */, + 596963A429D485E3894C4666 /* IMarker.swift */, + E64A75540C627E09080B402A /* Legend.swift */, + 9E7C673B9ED4340F550A9283 /* LegendEntry.swift */, + 392AAEB02DD7B351D92907C2 /* MarkerImage.swift */, + 48164CCD83C51B496533CB77 /* MarkerView.swift */, + 5225ABC3C0C2F65FC094EEBB /* XAxis.swift */, + FB92A80F861C1362EED8D946 /* YAxis.swift */, ); - name = Tests; + name = Components; sourceTree = ""; }; - 2E3BB3945DB12640F6017AC9 /* Source */ = { + 740017197A160047EBB8A9A0 /* Standard */ = { isa = PBXGroup; children = ( - 582F26E1876214EDE375192C /* Supporting Files */, - 233A64AB907EB6FBD9FCDCE4 /* Charts */, + 0108D5925E21A47DA36A66AA /* BarChartData.swift */, + E3F8BFF1CBC58D5B9DBFFB9B /* BarChartDataEntry.swift */, + C31AA65EA27776F8C653C7E8 /* BarChartDataSet.swift */, + 559DB735FEA17AB90676D6CA /* BarLineScatterCandleBubbleChartData.swift */, + 6D717F0808DE7EC8A4AE9C2A /* BarLineScatterCandleBubbleChartDataSet.swift */, + 7EDA3AD550AEFC93C8D15B9C /* BubbleChartData.swift */, + DD8ED233775EEC31243A6919 /* BubbleChartDataEntry.swift */, + B44829AF0ADA583F1F0279B7 /* BubbleChartDataSet.swift */, + F4785FEACAE4367F36FB8868 /* CandleChartData.swift */, + D2E698FF540029B70AC97AD7 /* CandleChartDataEntry.swift */, + 274116834B1B0345D622E027 /* CandleChartDataSet.swift */, + E120E76C6F1B5877D56126DD /* ChartData.swift */, + F22750328058DEC2F019646F /* ChartDataEntry.swift */, + 12409C3EA15787C11AF0D2BC /* ChartDataEntryBase.swift */, + 6CEC0C69C89CE9B99F3B4409 /* ChartDataSet.swift */, + 0DDE409E9ECF54D2C146A6F0 /* CombinedChartData.swift */, + 4C978F31F23C7D21197DC2A1 /* LineChartData.swift */, + A5A75AA73C5AA381DA517959 /* LineChartDataSet.swift */, + 45E31A4356CC6F283C29954B /* LineRadarChartDataSet.swift */, + C58BD7B14BEA440783ED8D2B /* LineScatterCandleRadarChartDataSet.swift */, + 6E03A4987F72414A02A0631B /* PieChartData.swift */, + BD02157CF8CEE1189BF681DA /* PieChartDataEntry.swift */, + A4FB5E3761EF8B4D1E1E1014 /* PieChartDataSet.swift */, + 4BBB57D6FA41029B08F26D7B /* RadarChartData.swift */, + 91EEEDE2AB8F2DA3AFCF0733 /* RadarChartDataEntry.swift */, + B1BA6B21CBDF77A15848994F /* RadarChartDataSet.swift */, + E7AD2FC320A16CA1EE0A52F4 /* ScatterChartData.swift */, + CB1DD1A0F64266A10EE94194 /* ScatterChartDataSet.swift */, ); - name = Source; + name = Standard; sourceTree = ""; }; - 4022C17232A9CFA8968676B6 /* Scatter */ = { + 74A391010038924F637D6752 /* Formatters */ = { isa = PBXGroup; children = ( - 0F3BA870CEA772438553529A /* ChevronDownShapeRenderer.swift */, - 8474B5177C777286153F5859 /* ChevronUpShapeRenderer.swift */, - 95C9873D834BD9446DCBD88B /* CircleShapeRenderer.swift */, - 1ADB6DC89F00931580D1C00A /* CrossShapeRenderer.swift */, - C72B66BC2402D8A2C6D781AC /* IShapeRenderer.swift */, - 108629BC8694704357C8CE5F /* SquareShapeRenderer.swift */, - 105050D3D37FCAABB1C79710 /* TriangleShapeRenderer.swift */, - 0D76A9CDA402721AA92EE331 /* XShapeRenderer.swift */, + 6A4770E0F75EFFC30707A7C8 /* DefaultAxisValueFormatter.swift */, + D6C1BEFDF17404666C7B6054 /* DefaultFillFormatter.swift */, + 107D8F8163EE54D6D9E916B0 /* DefaultValueFormatter.swift */, + 0BD9DF16AF59680A3BB49452 /* IAxisValueFormatter.swift */, + 818AC6B12505B7C0A53D62F9 /* IFillFormatter.swift */, + 10DD0A02E3CF611BD11EBA9B /* IndexAxisValueFormatter.swift */, + 4EAA8AA30C377D54D22A577A /* IValueFormatter.swift */, ); - name = Scatter; + name = Formatters; sourceTree = ""; }; - 5162836D67424B2727AD8F47 = { + 865A1CF149F52850CAB7F177 = { isa = PBXGroup; children = ( - B4152DB490FA30B206141699 /* Products */, - 6714768E272DAA68600CCE71 /* Frameworks */, - 2E3BB3945DB12640F6017AC9 /* Source */, - 259D29D8A12DE8D64A302759 /* Tests */, + AB2D554102718F209377399E /* Products */, + 033FD152BB2F906750106A85 /* Frameworks */, + 20C350D33133A4D89BB365B1 /* Source */, + D2C26AC015E753014C7571E4 /* Tests */, ); sourceTree = ""; }; - 548B5997C099AA3ADB7AB514 /* Charts */ = { + 8C531E3F3C3DE5843C93C3DA /* Charts */ = { isa = PBXGroup; children = ( - 05DB9869CA6EEE4C6E06A3FB /* BarChartView.swift */, - 02E728B3DF368497D817BF75 /* BarLineChartViewBase.swift */, - 3DB3E824CE6958EFDC0E010A /* BubbleChartView.swift */, - 95A43F3797B98EFCB599A5A5 /* CandleStickChartView.swift */, - 551F33797F809B771301C195 /* ChartViewBase.swift */, - 9D82F5451A8B27204F87F8BA /* CombinedChartView.swift */, - 6FA17F5F3DF8E28312431A7A /* HorizontalBarChartView.swift */, - A6A1C8A414F3FE239827DF9B /* LineChartView.swift */, - 4082BEB6E9CCC68ADEB65ACB /* PieChartView.swift */, - B823EAAC1085D605F6853B3C /* PieRadarChartViewBase.swift */, - 8E03E58F7CB004886241B48F /* RadarChartView.swift */, - 7E71ED326B1D0CE4EF0EDA3E /* ScatterChartView.swift */, + E783CFB4889A767C76510917 /* BarChartView.swift */, + 45C6D3723C4E001B119CA0C8 /* BarLineChartViewBase.swift */, + 4EED352A98860E031F13AFB7 /* BubbleChartView.swift */, + BA1A58428DC4780BAB4EAADC /* CandleStickChartView.swift */, + 30EFAD7920F76360ADB3B5F5 /* ChartViewBase.swift */, + 11EF1FE22549E885C8F40738 /* CombinedChartView.swift */, + 6021C9E424C36116AEA78CC9 /* HorizontalBarChartView.swift */, + 0619A877C69A95ECCC440A44 /* LineChartView.swift */, + 9DCD13D558BA177D5952AD66 /* PieChartView.swift */, + 4A6C9631C69B2D772BBD9232 /* PieRadarChartViewBase.swift */, + 2440DB759AB93B4A928A3F6F /* RadarChartView.swift */, + 18462BFDD9DEE76D51D40503 /* ScatterChartView.swift */, ); name = Charts; sourceTree = ""; }; - 582F26E1876214EDE375192C /* Supporting Files */ = { + 9613A7C800C7F065A823D587 /* Charts */ = { isa = PBXGroup; children = ( - B134ADA10C91F8D50037220D /* Info.plist */, - FE05FD9A0072660A9D3E7983 /* Charts.h */, + 5C3F5E1A69EC06E86505F7B1 /* BarChartTests.swift */, + 7AB9062A28AAB9469752A954 /* ChartUtilsTests.swift */, + D2E1819D72CD7B6C4A4E8048 /* LineChartTests.swift */, ); - name = "Supporting Files"; + name = Charts; sourceTree = ""; }; - 6714768E272DAA68600CCE71 /* Frameworks */ = { + A49C1F0F9CCD6E5C143C29F4 /* Animation */ = { isa = PBXGroup; children = ( + 3976E5F9D60E30CD94CE6156 /* Animator.swift */, + DFB762958EE8E6521563665D /* ChartAnimationEasing.swift */, ); - name = Frameworks; + name = Animation; sourceTree = ""; }; - 6B9DCEC4C2EB8D80B717B596 /* Data */ = { + AA79AB82B0ADCA926510B73E /* Filters */ = { isa = PBXGroup; children = ( - 94FA89D7E33E8E2C7261300E /* Implementations */, - F51F07FD7761598927A17A3C /* Interfaces */, + 93EF9709CF635BEE70D1ABC5 /* DataApproximator.swift */, ); - name = Data; + name = Filters; sourceTree = ""; }; - 6BCF372F06E4172978A2D991 /* Animation */ = { + AB2D554102718F209377399E /* Products */ = { isa = PBXGroup; children = ( - 9E28662F0CC85BA5E4D38F1D /* Animator.swift */, - 921AE48B7930AB73B0BC3622 /* ChartAnimationEasing.swift */, + 65AD9E95D9ED4DC0BD73A743 /* Charts.framework */, + 1CBBC58C6CE1EBEE9852CE41 /* ChartsTests.xctest */, ); - name = Animation; + name = Products; sourceTree = ""; }; - 6F8578B01EBEB6FA500AB320 /* Highlight */ = { + AD1224C45A29A5C88D6B7450 /* Jobs */ = { isa = PBXGroup; children = ( - 7A44639A41BB3B018840AF18 /* BarHighlighter.swift */, - 79114B8C62A2E95836E36712 /* ChartHighlighter.swift */, - FE4090926DF0D2F1DF4B704F /* CombinedHighlighter.swift */, - E03001CA8FFE8AD77585E075 /* Highlight.swift */, - E589BDED5BCBDA3DD513DF2E /* HorizontalBarHighlighter.swift */, - 0F4D9CD5DDF41101892A6DDC /* IHighlighter.swift */, - 0BCB037E3E4632D32B172416 /* PieHighlighter.swift */, - EF8B64973E23097CC929AFA8 /* PieRadarHighlighter.swift */, - A0714E1877E4AD5B6661F2AD /* RadarHighlighter.swift */, - 63DD2AD5AFC6A69F542C711B /* Range.swift */, + BA157EFF2F952192C11DF937 /* AnimatedMoveViewJob.swift */, + 710D7C9B2F1DB4A331EE405A /* AnimatedViewPortJob.swift */, + 4C2EA58CB336967198D30D20 /* AnimatedZoomViewJob.swift */, + 266E162DA8B29D9AEB6A9397 /* MoveViewJob.swift */, + FA7BDB22C97F39A4B33E38A7 /* ViewPortJob.swift */, + FB3A4F5987E58F3E5BE855F9 /* ZoomViewJob.swift */, ); - name = Highlight; + name = Jobs; sourceTree = ""; }; - 94FA89D7E33E8E2C7261300E /* Implementations */ = { + BF662941E21BC049994B2598 /* Supporting Files */ = { isa = PBXGroup; children = ( - D16CB9FF9FDF77A0C9BE9946 /* ChartBaseDataSet.swift */, - 02326A22F520AE9B8DB914D0 /* Standard */, + C574E1BC7E12D937A5471EF8 /* Info.plist */, + 41DDB768A1D033A34F0EF9E0 /* Media.xcassets */, ); - name = Implementations; + name = "Supporting Files"; sourceTree = ""; }; - 960D39442C14F94BE3FC9867 /* Supporting Files */ = { + D047819AB7170595896D6FE8 /* Utils */ = { isa = PBXGroup; children = ( - 3B4C6CF2D10F3033CE2C5C25 /* Info.plist */, - 3DB1ADB25B8EE00D670597C0 /* Media.xcassets */, + F6227A646166E248F90F86AD /* ChartColorTemplates.swift */, + 3FDA09EF973925A110506799 /* ChartUtils.swift */, + 5A4CFFFB65819121595F06F1 /* Fill.swift */, + 3ED23C354AFE81818D78E645 /* Platform.swift */, + FF475B9593B9898853814340 /* Transformer.swift */, + 324C9127B53A8D39C8B49277 /* TransformerHorizontalBarChart.swift */, + 72EAEBB7CF73E33565FC2896 /* ViewPortHandler.swift */, ); - name = "Supporting Files"; + name = Utils; sourceTree = ""; }; - B4152DB490FA30B206141699 /* Products */ = { + D2C26AC015E753014C7571E4 /* Tests */ = { isa = PBXGroup; children = ( - 46E69EF766B94AF3A39A7685 /* Charts.framework */, - 0419F1A9AEC7CB7CEF9E589D /* ChartsTests.xctest */, + BF662941E21BC049994B2598 /* Supporting Files */, + 9613A7C800C7F065A823D587 /* Charts */, ); - name = Products; + name = Tests; sourceTree = ""; }; - CEDDF868C3CE77292DBB894C /* Interfaces */ = { + DB2D9648877455028EBEAA8F /* Interfaces */ = { isa = PBXGroup; children = ( - 9B3EC8B2C8773CAC101E7602 /* BarChartDataProvider.swift */, - BE68DA203280938B1D0DF5A4 /* BarLineScatterCandleBubbleChartDataProvider.swift */, - 5E24D7EEA82A893EBBE27882 /* BubbleChartDataProvider.swift */, - C783070D5024BB05A18D40BC /* CandleChartDataProvider.swift */, - BD3DB32A6A1E1688123C74FD /* ChartDataProvider.swift */, - 0B7E9097209550C98B703D35 /* CombinedChartDataProvider.swift */, - 1DE1FDA8509235D7E272CBC2 /* LineChartDataProvider.swift */, - 92F04F75EDAD3C4A98A31526 /* ScatterChartDataProvider.swift */, + 7A53A9E42FC07FFDACA937C1 /* IBarChartDataSet.swift */, + A5649B272BF3EBFC8A1EF0C1 /* IBarLineScatterCandleBubbleChartDataSet.swift */, + F3788EC55EF908B0805D7C2F /* IBubbleChartDataSet.swift */, + 18BFB0A14A5C47A302A597D9 /* ICandleChartDataSet.swift */, + 3A32510073A303CBB38E094A /* IChartDataSet.swift */, + 429E88F2729735DC092EE556 /* ILineChartDataSet.swift */, + 4F7E6A99D82E6AE3804D5A39 /* ILineRadarChartDataSet.swift */, + 9249AD9AEC8C85772365A128 /* ILineScatterCandleRadarChartDataSet.swift */, + DA2AA6CC89F809DCCD7605B4 /* IPieChartDataSet.swift */, + 2EAD807534620E3B53327F04 /* IRadarChartDataSet.swift */, + 219BC9CEA037F897E92E45D1 /* IScatterChartDataSet.swift */, ); name = Interfaces; sourceTree = ""; }; - EC938B33DCD50744415D1325 /* Formatters */ = { + E7589D3E7C2BD2449960AD59 /* Renderers */ = { isa = PBXGroup; children = ( - 2BA5E67E0C1A36E25785C197 /* DefaultAxisValueFormatter.swift */, - 95C2E16EA4C8F49E027A2F60 /* DefaultFillFormatter.swift */, - F9536B2806512D7A92DABDC0 /* DefaultValueFormatter.swift */, - 92189F78A1B752D037836F76 /* IAxisValueFormatter.swift */, - B7B9E373774F56E255EFF371 /* IFillFormatter.swift */, - 65996B15286414897CFB54DE /* IndexAxisValueFormatter.swift */, - 3F9EFCF1374CB627942BE05A /* IValueFormatter.swift */, + C75935E899183DDFA181E2CC /* AxisRendererBase.swift */, + 75F279974FE650E57A061B09 /* BarChartRenderer.swift */, + 5B1C588E9DF6FFD56D7ADF8E /* BarLineScatterCandleBubbleRenderer.swift */, + 2194AA554712E6BA2677F114 /* BubbleChartRenderer.swift */, + BD5C6D20243EC2F19069AACD /* CandleStickChartRenderer.swift */, + 0216EDC6A1FE272F4EB19FCF /* ChartDataRendererBase.swift */, + 52265C1B343CCC41AF2300E3 /* CombinedChartRenderer.swift */, + 539382766378B702660FDFB2 /* HorizontalBarChartRenderer.swift */, + F715DB2C56C9E0615542625B /* LegendRenderer.swift */, + 0DABDBBCCE6B3620C967F04A /* LineChartRenderer.swift */, + 105FFC9D3773A9C7A60A897F /* LineRadarRenderer.swift */, + 923206233CA89FD03565FF87 /* LineScatterCandleRadarRenderer.swift */, + 46D8013D44629521B1746364 /* PieChartRenderer.swift */, + 7AC9C3D69ACB5BDE22421E15 /* RadarChartRenderer.swift */, + 6F66B32AD8A878CBD6DB6ED2 /* Renderer.swift */, + F7059584CB30EF419CFB3335 /* Scatter */, + 80D5B764EC0AE1E17E55DC67 /* ScatterChartRenderer.swift */, + 1C02C3AF5C92FCFC18224C35 /* XAxisRenderer.swift */, + 1F3D55A7E6176D52DC957D27 /* XAxisRendererHorizontalBarChart.swift */, + BC19DC2434D65FFB446A61B7 /* XAxisRendererRadarChart.swift */, + 688B80F1AA88AE54152BE768 /* YAxisRenderer.swift */, + EAE417AAA0FCA0DD00E77489 /* YAxisRendererHorizontalBarChart.swift */, + AA5A16F4A382813C4FE8BDF9 /* YAxisRendererRadarChart.swift */, ); - name = Formatters; + name = Renderers; sourceTree = ""; }; - F51F07FD7761598927A17A3C /* Interfaces */ = { + E9F158C8C566B26AFD775911 /* Supporting Files */ = { isa = PBXGroup; children = ( - 63246976C392BF9B64BCF258 /* IBarChartDataSet.swift */, - CEDCE8799474F36EE86F2E7C /* IBarLineScatterCandleBubbleChartDataSet.swift */, - A4BFEFFE56F1711A761CE159 /* IBubbleChartDataSet.swift */, - AFC2E2F689AA8A307FED418E /* ICandleChartDataSet.swift */, - 9D09EF5E8A5D34CE92BFEF9A /* IChartDataSet.swift */, - D550CF387F5245880BD5DC0C /* ILineChartDataSet.swift */, - 669F55F7D0E1BF19D4B77350 /* ILineRadarChartDataSet.swift */, - 68181468776BE8E69970A47A /* ILineScatterCandleRadarChartDataSet.swift */, - 720FD446EC4A5BC344EDE951 /* IPieChartDataSet.swift */, - 0A76C66149E5E54D0192EDEF /* IRadarChartDataSet.swift */, - FC6FD8E0E0AD2219A80EB6CB /* IScatterChartDataSet.swift */, + 910DBFE1DA1B2CA237A736DF /* Info.plist */, + 4F9922F0641F7955DC6CD324 /* Charts.h */, ); - name = Interfaces; + name = "Supporting Files"; sourceTree = ""; }; - F5EE92A73DEE2F59A8EF3A16 /* Jobs */ = { + F7059584CB30EF419CFB3335 /* Scatter */ = { isa = PBXGroup; children = ( - BFC16599CC5F22F5A2B0A1F8 /* AnimatedMoveViewJob.swift */, - 9D826DBA70947C847354B011 /* AnimatedViewPortJob.swift */, - 9E84FF13690C87B851E9D4A7 /* AnimatedZoomViewJob.swift */, - A30F2546C4D51E23B8C23AA9 /* MoveViewJob.swift */, - AFCD6CECB85C6F8A52483E4A /* ViewPortJob.swift */, - 35E32810A6ED200A893C8811 /* ZoomViewJob.swift */, + C52E8344160B5E689DA3C25C /* ChevronDownShapeRenderer.swift */, + AA70259ED16FF80D8EEB0F94 /* ChevronUpShapeRenderer.swift */, + ECE1B1623D3AF69CECAE8562 /* CircleShapeRenderer.swift */, + 823F7DB281C6C6F069A69605 /* CrossShapeRenderer.swift */, + FA1D3D13180C2E3893A82546 /* IShapeRenderer.swift */, + 32FC01A016DFF1BA73AF9182 /* SquareShapeRenderer.swift */, + C8FB6219B143F8F7DA762950 /* TriangleShapeRenderer.swift */, + 23D35CF6F9177D77B6B97AE1 /* XShapeRenderer.swift */, ); - name = Jobs; + name = Scatter; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - A3D19532C7F1E537763AEE5E /* Headers */ = { + B2B2DD73E237562739EE1F83 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 733A21A4F11900F1D01FD786 /* Charts.h in Headers */, + BEFD9518F3A74ACF8FA33308 /* Charts.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 5FE6E04B0BD1A05295AA30D4 /* Charts */ = { + A58A4ED274A941CA248EA921 /* Charts */ = { isa = PBXNativeTarget; - buildConfigurationList = CAAFFB0CDB22406DAC0F0CEC /* Build configuration list for PBXNativeTarget "Charts" */; + buildConfigurationList = F1D4AA9E26EA32041FC0E3B6 /* Build configuration list for PBXNativeTarget "Charts" */; buildPhases = ( - A3D19532C7F1E537763AEE5E /* Headers */, - 03AB6EE03F90347FC0893DC8 /* Sources */, - 2776CC7F34B54E17FFD7719E /* Resources */, - 5AA7EB0E6DA1D80708E79E13 /* Frameworks */, + B2B2DD73E237562739EE1F83 /* Headers */, + B5996DB2D9B6F0DB0E9D3F3E /* Sources */, + E257C254E738A8AE047C6FB6 /* Resources */, + C16A09321DC2DCF289FF0E3B /* Frameworks */, ); buildRules = ( ); @@ -686,269 +686,269 @@ ); name = Charts; productName = Charts; - productReference = 46E69EF766B94AF3A39A7685 /* Charts.framework */; + productReference = 65AD9E95D9ED4DC0BD73A743 /* Charts.framework */; productType = "com.apple.product-type.framework"; }; - FA416F5A67B98B3910AC1D86 /* ChartsTests */ = { + F2749BD5443C1CB5FE2080C2 /* ChartsTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 8B972693E2E6FF7550683288 /* Build configuration list for PBXNativeTarget "ChartsTests" */; + buildConfigurationList = E61E9728E2BF9CC4048B13D5 /* Build configuration list for PBXNativeTarget "ChartsTests" */; buildPhases = ( - 2F4DFBD5428A745FF3F0050B /* Build Dependencies */, - 4EB6CD6073AB2C7910F7D648 /* Sources */, - AD65C74F76A982180F20A790 /* Resources */, - 6691302A7193BE2498A20CD2 /* Frameworks */, - EF369AF94C21146E0A1DAD7A /* Copy Carthage Frameworks */, + D6BF00523905132F162A7710 /* Build Dependencies */, + E356A2384A2368AB3D2C7912 /* Sources */, + 5B102E31AA8399941CC6248D /* Resources */, + 77997192275C47C45A0A2E9A /* Frameworks */, + 6BA68666BDA3FCF79C2A6801 /* Copy Carthage Frameworks */, ); buildRules = ( ); dependencies = ( - 411EFA5DEF09D4E155A61BFB /* PBXTargetDependency */, + 8676F8A013D87F9961E92465 /* PBXTargetDependency */, ); name = ChartsTests; productName = ChartsTests; - productReference = 0419F1A9AEC7CB7CEF9E589D /* ChartsTests.xctest */; + productReference = 1CBBC58C6CE1EBEE9852CE41 /* ChartsTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 9FCA2B965470A4CDBE439A35 /* Project object */ = { + 193FC8DF32D250560C5F5D77 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0830; LastUpgradeCheck = 0700; }; - buildConfigurationList = CFDA49DB66628CEFB8CFE40F /* Build configuration list for PBXProject "Charts" */; + buildConfigurationList = 493FF4FB1D40FC7C51DDDA6B /* Build configuration list for PBXProject "Charts" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); - mainGroup = 5162836D67424B2727AD8F47; - productRefGroup = B4152DB490FA30B206141699 /* Products */; + mainGroup = 865A1CF149F52850CAB7F177; + productRefGroup = AB2D554102718F209377399E /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 5FE6E04B0BD1A05295AA30D4 /* Charts */, - FA416F5A67B98B3910AC1D86 /* ChartsTests */, + A58A4ED274A941CA248EA921 /* Charts */, + F2749BD5443C1CB5FE2080C2 /* ChartsTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 2776CC7F34B54E17FFD7719E /* Resources */ = { + 5B102E31AA8399941CC6248D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 00B8BF5901C2D220357B0B2A /* Media.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - AD65C74F76A982180F20A790 /* Resources */ = { + E257C254E738A8AE047C6FB6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D565E57B0C83E315C913D979 /* Media.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2F4DFBD5428A745FF3F0050B /* Build Dependencies */ = { + 6BA68666BDA3FCF79C2A6801 /* Copy Carthage Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - name = "Build Dependencies"; + inputPaths = ( + FBSnapshotTestCase.framework, + ); + name = "Copy Carthage Frameworks"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "exec \"${SRCROOT}/scripts/build-dependencies.sh\""; + shellScript = " exec \"${SRCROOT}/scripts/copy-carthage-frameworks.sh\""; }; - EF369AF94C21146E0A1DAD7A /* Copy Carthage Frameworks */ = { + D6BF00523905132F162A7710 /* Build Dependencies */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - FBSnapshotTestCase.framework, - ); - name = "Copy Carthage Frameworks"; + name = "Build Dependencies"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = " exec \"${SRCROOT}/scripts/copy-carthage-frameworks.sh\""; + shellScript = "exec \"${SRCROOT}/scripts/build-dependencies.sh\""; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 03AB6EE03F90347FC0893DC8 /* Sources */ = { + B5996DB2D9B6F0DB0E9D3F3E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2BED5962FC328365F9EFE04A /* Animator.swift in Sources */, - 0AEBA5C5AC92953241274BFE /* ChartAnimationEasing.swift in Sources */, - F235A3B8989F0AB6F5D924F3 /* BarChartView.swift in Sources */, - 8D20EAE2CDA357A63949EF6E /* BarLineChartViewBase.swift in Sources */, - F5E349C4D4D1BE11B492E3CB /* BubbleChartView.swift in Sources */, - 308137F9C0CF2B7A0372D6E8 /* CandleStickChartView.swift in Sources */, - 509AC4C6E1E536203C75519E /* ChartViewBase.swift in Sources */, - F977CF3DBB6EABD38CF47C99 /* CombinedChartView.swift in Sources */, - 369A2D30FB61620C6FBA4754 /* HorizontalBarChartView.swift in Sources */, - 8B3259AC8A525C9B9C378C6F /* LineChartView.swift in Sources */, - B6954A329F734B0D55C6C56E /* PieChartView.swift in Sources */, - 08A07712EDB571E1181B09DC /* PieRadarChartViewBase.swift in Sources */, - 6F78DF2FA8AE178940E682BE /* RadarChartView.swift in Sources */, - 2133C9E6EA7DB4F09D9F2DAC /* ScatterChartView.swift in Sources */, - A7F2C09F6E9C079443B75296 /* AxisBase.swift in Sources */, - 69E96F71CA26A2D1435ACB93 /* ChartLimitLine.swift in Sources */, - A9B542B57C6ADF07382FB3FB /* ComponentBase.swift in Sources */, - 6F90773A0B6D242A532898CA /* Description.swift in Sources */, - DE8B9684CD729E7097025856 /* IMarker.swift in Sources */, - F24723FC6A4BA9AF18D6EB82 /* Legend.swift in Sources */, - 2D1A4882F20E8DA1B05086DD /* LegendEntry.swift in Sources */, - 82C88896605FB53C2BBEFE6D /* MarkerImage.swift in Sources */, - 12A460F5BACF0370935876FA /* MarkerView.swift in Sources */, - DEDB8D7B8032580B8B01CFE5 /* XAxis.swift in Sources */, - 4DCE8DE16A155C396A61DD14 /* YAxis.swift in Sources */, - C19DD82E1483AF4C9A24E230 /* ChartBaseDataSet.swift in Sources */, - DD5DB6F369B070B787513365 /* BarChartData.swift in Sources */, - ADED6329E0EF4B175393FDD8 /* BarChartDataEntry.swift in Sources */, - DB91F074AEA21362DF80863B /* BarChartDataSet.swift in Sources */, - ED0899005F6784C86FD499FC /* BarLineScatterCandleBubbleChartData.swift in Sources */, - 2BD923143656FAC51F574F46 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */, - 5AA082FD22A0D20841C80162 /* BubbleChartData.swift in Sources */, - A0C490C7C6C3011A2D27A6C6 /* BubbleChartDataEntry.swift in Sources */, - 51FAFA98725F06E01652C980 /* BubbleChartDataSet.swift in Sources */, - 707BD8B3A9AC29A5744F35E5 /* CandleChartData.swift in Sources */, - 4E1BC25E708D7D689EB67B95 /* CandleChartDataEntry.swift in Sources */, - 0FE64EA8621892B4ACFD0233 /* CandleChartDataSet.swift in Sources */, - 268258CE356AE52A1D29BA46 /* ChartData.swift in Sources */, - C57F7BD809195465B9E70685 /* ChartDataEntry.swift in Sources */, - 06906C3D3899AF3C9ED9A72C /* ChartDataEntryBase.swift in Sources */, - 0EC2659FE4759919DEDB4289 /* ChartDataSet.swift in Sources */, - FA29A2213BABD5C18B776395 /* CombinedChartData.swift in Sources */, - 1486B2729EFA2D4ED659DE07 /* LineChartData.swift in Sources */, - AC60152B982EAFE8A90DAAC4 /* LineChartDataSet.swift in Sources */, - 1142DD089AD10AD7954FA888 /* LineRadarChartDataSet.swift in Sources */, - 1992D1214A1C379F7084B1BE /* LineScatterCandleRadarChartDataSet.swift in Sources */, - 68C35C82535E7020A718EE1C /* PieChartData.swift in Sources */, - 653022BC36654E7387295464 /* PieChartDataEntry.swift in Sources */, - 225F213C6F7215F8EB6292B5 /* PieChartDataSet.swift in Sources */, - 910B631C21F51E3251269A28 /* RadarChartData.swift in Sources */, - 766055D10C91B2AE4DDA1D0F /* RadarChartDataEntry.swift in Sources */, - 87A00389DC37682EB0587361 /* RadarChartDataSet.swift in Sources */, - C894F93A974CD1F921D0F446 /* ScatterChartData.swift in Sources */, - 09E3FB9BE8CA8B0299D577BB /* ScatterChartDataSet.swift in Sources */, - 35A9F009C73FCF279578B376 /* IBarChartDataSet.swift in Sources */, - 255FE5B497AE131B4BAF0FD2 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */, - 7423BD75D10028298C72000E /* IBubbleChartDataSet.swift in Sources */, - 90945C09073B26274532B16E /* ICandleChartDataSet.swift in Sources */, - ABF7BB919BB4E09E2F0F334F /* IChartDataSet.swift in Sources */, - 130F9478760D89A01878954F /* ILineChartDataSet.swift in Sources */, - 63BAACA8931D14A608769360 /* ILineRadarChartDataSet.swift in Sources */, - F00640DA4C6A74D51B9EFBC8 /* ILineScatterCandleRadarChartDataSet.swift in Sources */, - E740FB705944655AEDC2CF96 /* IPieChartDataSet.swift in Sources */, - 2230C8E2C83AAC9DE76495B4 /* IRadarChartDataSet.swift in Sources */, - 23B8C89AEAFCCF6AEA3247C8 /* IScatterChartDataSet.swift in Sources */, - D147B92A77E257FE015075C2 /* DataApproximator.swift in Sources */, - D868000D81CF4DA2FF804230 /* DefaultAxisValueFormatter.swift in Sources */, - 3468AC966A4A206BD8F43903 /* DefaultFillFormatter.swift in Sources */, - 46FCCAF956979208C770B6C0 /* DefaultValueFormatter.swift in Sources */, - 143E308EA31773820D35AB42 /* IAxisValueFormatter.swift in Sources */, - 44D2CFF515D87AD2E4B90870 /* IFillFormatter.swift in Sources */, - 1C9D51F1565BEADA1C60AD73 /* IndexAxisValueFormatter.swift in Sources */, - B7258870917D6C761191C2E9 /* IValueFormatter.swift in Sources */, - 65ECC1C648CB25D8FA44CB42 /* BarHighlighter.swift in Sources */, - E22369BCD81AD64619FAE3B6 /* ChartHighlighter.swift in Sources */, - 4CC1719914125CF01E93D969 /* CombinedHighlighter.swift in Sources */, - 74219D78A8A1DC65C4E3B669 /* Highlight.swift in Sources */, - 01D0E7A3BBE960F3D0521C47 /* HorizontalBarHighlighter.swift in Sources */, - 7DF82423B2D0B36DD6EF68C3 /* IHighlighter.swift in Sources */, - 1E2AB4085B35F6D495FC2795 /* PieHighlighter.swift in Sources */, - 720E258628568FBC465283A1 /* PieRadarHighlighter.swift in Sources */, - 2E36DC7E689F160DC88BBCC5 /* RadarHighlighter.swift in Sources */, - B1629D7C69F65A9301361673 /* Range.swift in Sources */, - 005C0F30B90039BB263CC09C /* BarChartDataProvider.swift in Sources */, - FEC6B26E4D2B1F3380A0FB1C /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */, - C71785FFAA2F2CF25FD21F30 /* BubbleChartDataProvider.swift in Sources */, - 54AC4F50C05F371B148E8A91 /* CandleChartDataProvider.swift in Sources */, - 50E8388181E2459070AC375D /* ChartDataProvider.swift in Sources */, - A5D1CE0DAE3014D1172DA25A /* CombinedChartDataProvider.swift in Sources */, - C2AFB4C82ED84EF1D944C3BD /* LineChartDataProvider.swift in Sources */, - DDBEAA65509435155E287373 /* ScatterChartDataProvider.swift in Sources */, - BD8D78D8B26A3B3A87B54B99 /* AnimatedMoveViewJob.swift in Sources */, - CEA939DFCD02953FFA285990 /* AnimatedViewPortJob.swift in Sources */, - ADFEFB1E41234B94FEA24566 /* AnimatedZoomViewJob.swift in Sources */, - DD0B94A153EDB846E93293E2 /* MoveViewJob.swift in Sources */, - B60B915377BF81E6F8FBE196 /* ViewPortJob.swift in Sources */, - D36E5A7AD311BB93A011D75E /* ZoomViewJob.swift in Sources */, - 6BA29A3B85C5B26613EF890B /* AxisRendererBase.swift in Sources */, - 4BECEE4BAEB476CCE0255839 /* BarChartRenderer.swift in Sources */, - 6E650F98D3642AD4A35A57B1 /* BarLineScatterCandleBubbleRenderer.swift in Sources */, - 94F1D922BFDCA0682A2106E1 /* BubbleChartRenderer.swift in Sources */, - F5AF34DB8AAEACBEE560C057 /* CandleStickChartRenderer.swift in Sources */, - 11B665756E905BEE10A01295 /* ChartDataRendererBase.swift in Sources */, - 9E7350B6286FA8CA9853E83B /* CombinedChartRenderer.swift in Sources */, - C7B8F8DED72C9394AA1227ED /* HorizontalBarChartRenderer.swift in Sources */, - 552FBE36C7BC655C38B09143 /* LegendRenderer.swift in Sources */, - 96C0CB726AED7262B833C5A5 /* LineChartRenderer.swift in Sources */, - 7CC75938F8C6DA0E10010AC7 /* LineRadarRenderer.swift in Sources */, - 6B6A73F822415C89E982A7F3 /* LineScatterCandleRadarRenderer.swift in Sources */, - 896C5052307EAE609B3C9371 /* PieChartRenderer.swift in Sources */, - 76BC27AFAD431BA80B5AD478 /* RadarChartRenderer.swift in Sources */, - F3947C20CD8B09841B750D54 /* Renderer.swift in Sources */, - BC3995CB7EBC502CE71A89D3 /* ChevronDownShapeRenderer.swift in Sources */, - C3647550473CEBC072F2EAF1 /* ChevronUpShapeRenderer.swift in Sources */, - D66C3D070239CF161A7CEDB2 /* CircleShapeRenderer.swift in Sources */, - EF889355A3A5F21D8478CCEB /* CrossShapeRenderer.swift in Sources */, - BA2F43A78AD1400F8BECA357 /* IShapeRenderer.swift in Sources */, - 39C2BE4577CFA1419B6638BC /* SquareShapeRenderer.swift in Sources */, - 8CE471B6C29C727AA56F4863 /* TriangleShapeRenderer.swift in Sources */, - A85225CB2CD56D3A8B6A2A90 /* XShapeRenderer.swift in Sources */, - 2972AB282AF22E4447DBDDEC /* ScatterChartRenderer.swift in Sources */, - 442CEC159FCD65EC6ABEFCD8 /* XAxisRenderer.swift in Sources */, - 0E78C9B270B82F430F2C4DFF /* XAxisRendererHorizontalBarChart.swift in Sources */, - 7F43F7E4F0E9D5070384C60B /* XAxisRendererRadarChart.swift in Sources */, - BB9E5479B3B4517978C1A13D /* YAxisRenderer.swift in Sources */, - 36C33400348CA56BB48D5B22 /* YAxisRendererHorizontalBarChart.swift in Sources */, - E4B8FDE7081EF22C4529D628 /* YAxisRendererRadarChart.swift in Sources */, - F45631E7C0DFE9321DB96891 /* ChartColorTemplates.swift in Sources */, - B75F7CC7313FA00407747290 /* ChartUtils.swift in Sources */, - 0EC4920E6D62D7A277EF34F5 /* Fill.swift in Sources */, - EE3B04B6C5F9209FE5642C02 /* Platform.swift in Sources */, - 072313063701CBB1C6D8FA89 /* Transformer.swift in Sources */, - 493A66BBB5F3E4371FB39361 /* TransformerHorizontalBarChart.swift in Sources */, - 79C7A52225B62A0460E113B4 /* ViewPortHandler.swift in Sources */, + D819331DA581C7E0AC5F8CEF /* Animator.swift in Sources */, + F5A209116FAC68F5903D0B46 /* ChartAnimationEasing.swift in Sources */, + D29BBEF55C9CC90114919CD2 /* BarChartView.swift in Sources */, + 9F760570BCECB0BF5727AF90 /* BarLineChartViewBase.swift in Sources */, + E4B2F363414E84C4D4B8A885 /* BubbleChartView.swift in Sources */, + 60EDF735AAB7195DCFA5FE4D /* CandleStickChartView.swift in Sources */, + 98E2EEF45E8933E4AD182D58 /* ChartViewBase.swift in Sources */, + 0CAF514A280FF6A14E2A1A23 /* CombinedChartView.swift in Sources */, + A692D8BDE42717F69DB790BE /* HorizontalBarChartView.swift in Sources */, + 7E7561DE19DC7CABBE0B2D3A /* LineChartView.swift in Sources */, + 2876E17AEB1D92D7BBC4C38A /* PieChartView.swift in Sources */, + 0A772AEC08246FEC480673E5 /* PieRadarChartViewBase.swift in Sources */, + 6303DBDEE4FAB8E40D023BCE /* RadarChartView.swift in Sources */, + 5C457D9A50DA20869AD1739D /* ScatterChartView.swift in Sources */, + 48E875BBD6540BDE1C1B7D3D /* AxisBase.swift in Sources */, + 4390D74986A92DEF4F4F2BF0 /* ChartLimitLine.swift in Sources */, + FDBDAFA7A5337C6E3992DACE /* ComponentBase.swift in Sources */, + DBC9DB402CC9BB84B76968C4 /* Description.swift in Sources */, + 03960E8148C6AEDACE4B77CC /* IMarker.swift in Sources */, + ECE7EAE7179A7F57CE9BBD8F /* Legend.swift in Sources */, + C20A62D8CB9120523D5FB650 /* LegendEntry.swift in Sources */, + 369DEB23452CB436A3A1A644 /* MarkerImage.swift in Sources */, + 9360348A04723E653FBC8B18 /* MarkerView.swift in Sources */, + 78084A4F1D850D5775BC139E /* XAxis.swift in Sources */, + 2FBA7E982EB57932B9F3E9B5 /* YAxis.swift in Sources */, + E50D291A6B6E69BF0B56A67C /* ChartBaseDataSet.swift in Sources */, + 3395682A1E27756651FF6F4D /* BarChartData.swift in Sources */, + 45C459FA25DFCBE62FA6A06C /* BarChartDataEntry.swift in Sources */, + 17E994DA88777AA1D8CCFC58 /* BarChartDataSet.swift in Sources */, + 7C9CE6718D18859A35146098 /* BarLineScatterCandleBubbleChartData.swift in Sources */, + 53A91F6F86740E26FE733639 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */, + E68CA3DC66EB638C956E09B8 /* BubbleChartData.swift in Sources */, + C09E91F67A4AC43C277E7D82 /* BubbleChartDataEntry.swift in Sources */, + 63C0A21D145BFEDED5406E4D /* BubbleChartDataSet.swift in Sources */, + DDE704689FDF2C0E0338488B /* CandleChartData.swift in Sources */, + D50B0EC2BB2245F32E757C50 /* CandleChartDataEntry.swift in Sources */, + 383D68A13E1C3D6A251E5147 /* CandleChartDataSet.swift in Sources */, + 81892994002C0640AD858748 /* ChartData.swift in Sources */, + EAEA60D22CA8C1B7E18D3F7D /* ChartDataEntry.swift in Sources */, + 7D546013F3A14FF5BB7F3294 /* ChartDataEntryBase.swift in Sources */, + 66A18A8EEBAAAC2EDA31ABEC /* ChartDataSet.swift in Sources */, + 331AA2C4BC34F56C23012F02 /* CombinedChartData.swift in Sources */, + C04D269AD4A373FD2B621C43 /* LineChartData.swift in Sources */, + 95B6D6F35684292A62DBEA74 /* LineChartDataSet.swift in Sources */, + 7CB7F74752619B0270CCB0A9 /* LineRadarChartDataSet.swift in Sources */, + FA07D034D9C3BC7795184ACA /* LineScatterCandleRadarChartDataSet.swift in Sources */, + 2C879FC24D7A15D70BE4063F /* PieChartData.swift in Sources */, + 23649EFC635A76022F07FFA6 /* PieChartDataEntry.swift in Sources */, + B539114951455C35BADAE3F3 /* PieChartDataSet.swift in Sources */, + 0C52C70C6E6EA09BD7426386 /* RadarChartData.swift in Sources */, + C2EFB4EC8C97FA9987F1B50D /* RadarChartDataEntry.swift in Sources */, + E3B28EA1E21279DF3889BCE8 /* RadarChartDataSet.swift in Sources */, + 2B791E64E7C4523B1A63F72A /* ScatterChartData.swift in Sources */, + EB56849433A76B08606B73EB /* ScatterChartDataSet.swift in Sources */, + C3F0DDB7F0A922F0BB7EDB8A /* IBarChartDataSet.swift in Sources */, + AF4AAF3709ED9DDF6362EAE8 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */, + 2C40CFFC8D88BEA70E0A50B0 /* IBubbleChartDataSet.swift in Sources */, + 0D8A89398F9BD5DCC8D7F976 /* ICandleChartDataSet.swift in Sources */, + E8F0F4F47CD7D72B4EE5A794 /* IChartDataSet.swift in Sources */, + F941C88BF814DF51C465CB95 /* ILineChartDataSet.swift in Sources */, + 1311BEC21E9CC264E971EFAF /* ILineRadarChartDataSet.swift in Sources */, + 146EE16342C2BADC92E45BF2 /* ILineScatterCandleRadarChartDataSet.swift in Sources */, + FAAD9FF6565DED2652188584 /* IPieChartDataSet.swift in Sources */, + 83BBAF3EDC31FD452F8BF1DB /* IRadarChartDataSet.swift in Sources */, + 50476F8E6662CAFC1EFE0723 /* IScatterChartDataSet.swift in Sources */, + 97E033CC0ABEF0F448DAFA8E /* DataApproximator.swift in Sources */, + 779B46E9F13A087BFA47D539 /* DefaultAxisValueFormatter.swift in Sources */, + F744C510DA9B85C228BBB335 /* DefaultFillFormatter.swift in Sources */, + B0D28C68BB9A958DC56EB214 /* DefaultValueFormatter.swift in Sources */, + B13C74B4FF705D7B595D01EF /* IAxisValueFormatter.swift in Sources */, + B6C9F450D937B87224D29D5C /* IFillFormatter.swift in Sources */, + 967EE2EDDE3337C5C4337C59 /* IndexAxisValueFormatter.swift in Sources */, + A40ACF0CCE96EEE104B0463D /* IValueFormatter.swift in Sources */, + 3CBE95F1E9394FA08CDCF31E /* BarHighlighter.swift in Sources */, + D326491E8BCDE54A0921E137 /* ChartHighlighter.swift in Sources */, + 64FA1EDB4DC1F65727D52D10 /* CombinedHighlighter.swift in Sources */, + 758EB1C75063ED3373542F3B /* Highlight.swift in Sources */, + 4E98788ABEF6496C23F3E6C6 /* HorizontalBarHighlighter.swift in Sources */, + 203A39685CC96FC625F616E4 /* IHighlighter.swift in Sources */, + 73EDF662AD989E930D365B72 /* PieHighlighter.swift in Sources */, + 3097296AC7FFA994FE4AD312 /* PieRadarHighlighter.swift in Sources */, + C33E1AF5471A60BA42DAF52E /* RadarHighlighter.swift in Sources */, + 9C91C151608E2D6E19B1EAD1 /* Range.swift in Sources */, + 00BC23EF0E04E17188344403 /* BarChartDataProvider.swift in Sources */, + 28FEE609C5B22FD64C7E5D10 /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */, + 4272DA5D44AF7DA05A5A8287 /* BubbleChartDataProvider.swift in Sources */, + 30DCC4BAA5601B154ABADA13 /* CandleChartDataProvider.swift in Sources */, + FD37AAC0270F390FFC470A65 /* ChartDataProvider.swift in Sources */, + 65EA404AE098EBCE8D5DE04B /* CombinedChartDataProvider.swift in Sources */, + 2BA03CEC36BADCF682F1328B /* LineChartDataProvider.swift in Sources */, + 0511E43EF3FD2CDE7F7F15DB /* ScatterChartDataProvider.swift in Sources */, + 7EE6EFE70CF4D8B09CAFCD01 /* AnimatedMoveViewJob.swift in Sources */, + CC7F8198A13249B5DEBBF25E /* AnimatedViewPortJob.swift in Sources */, + 0577C2B38BCE4C871F262714 /* AnimatedZoomViewJob.swift in Sources */, + 02A6E6E1A82A27A66B8D08C4 /* MoveViewJob.swift in Sources */, + 9400725714D0DA707DDECD2E /* ViewPortJob.swift in Sources */, + AEE9C4E4AC02B8FB3CD21975 /* ZoomViewJob.swift in Sources */, + ECECC58CEF03B1718F8267E8 /* AxisRendererBase.swift in Sources */, + 23FA50B2730D8C7ACA091C4F /* BarChartRenderer.swift in Sources */, + 219192CA6B4895319AB49DCA /* BarLineScatterCandleBubbleRenderer.swift in Sources */, + 56E0F5EA9255B9B92876E040 /* BubbleChartRenderer.swift in Sources */, + 8BCCD709AACC565613D9DA68 /* CandleStickChartRenderer.swift in Sources */, + F37B07008B8AE7F3909FFB9C /* ChartDataRendererBase.swift in Sources */, + 05253AFC448C107DEF54C2FE /* CombinedChartRenderer.swift in Sources */, + F100D68395F169B93590FA96 /* HorizontalBarChartRenderer.swift in Sources */, + 2B821AAC3EBD60A73EACBCE6 /* LegendRenderer.swift in Sources */, + 5F96E95C7073D21EFE02BCF7 /* LineChartRenderer.swift in Sources */, + 24151B0729D77251A8494D70 /* LineRadarRenderer.swift in Sources */, + B6DCC229615EFE706F64A37D /* LineScatterCandleRadarRenderer.swift in Sources */, + 795E100895C24049509F1EDE /* PieChartRenderer.swift in Sources */, + 69EA073EDF75D49ABE1715D6 /* RadarChartRenderer.swift in Sources */, + CEF68F42A5390A73113F3663 /* Renderer.swift in Sources */, + 796D3E63A37A95FD9D1AB9A1 /* ChevronDownShapeRenderer.swift in Sources */, + F103D90FC5DEEA0D7BB4407E /* ChevronUpShapeRenderer.swift in Sources */, + B85DEB06B4C1AFFC8A0E3295 /* CircleShapeRenderer.swift in Sources */, + 0529DD51622C8769C1121F90 /* CrossShapeRenderer.swift in Sources */, + 8A9FF54E2075A9047CC8E953 /* IShapeRenderer.swift in Sources */, + 8EF7B3FBE37F72CC030CD865 /* SquareShapeRenderer.swift in Sources */, + 8F4B1A9060472764073DFA0B /* TriangleShapeRenderer.swift in Sources */, + 93A94E1FF55041A6032891FE /* XShapeRenderer.swift in Sources */, + 5DC9BC1B6C128B2C9995AB84 /* ScatterChartRenderer.swift in Sources */, + 41BEBF8BDB9DC403B5697D67 /* XAxisRenderer.swift in Sources */, + 2A94F1724FEA9E16A81A8E1F /* XAxisRendererHorizontalBarChart.swift in Sources */, + 4FACC6FD308AFB231EB4A93D /* XAxisRendererRadarChart.swift in Sources */, + 41B13F3179ACB5A3837C6E55 /* YAxisRenderer.swift in Sources */, + 846AC09831FA93F66732591B /* YAxisRendererHorizontalBarChart.swift in Sources */, + 11F68AA2EBF822D7208EE002 /* YAxisRendererRadarChart.swift in Sources */, + 40C82F2209E1BA9E41E8F3DA /* ChartColorTemplates.swift in Sources */, + CB785FE9B6B312408D17BC3B /* ChartUtils.swift in Sources */, + 8102A555DD6C93AC1290EA7C /* Fill.swift in Sources */, + E9FF0ECB5E0CA92DBF4C1BC4 /* Platform.swift in Sources */, + DE0F434FE8C24C52B023370F /* Transformer.swift in Sources */, + 8A463E2947F211C594CA5E95 /* TransformerHorizontalBarChart.swift in Sources */, + 515E286E6C47594D3FFA3DD1 /* ViewPortHandler.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4EB6CD6073AB2C7910F7D648 /* Sources */ = { + E356A2384A2368AB3D2C7912 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6CAA18D1987552B252713159 /* BarChartTests.swift in Sources */, - DC7897BF3E4CEF01A14BC47A /* ChartUtilsTests.swift in Sources */, - 969438983603FBAB8F178CEC /* LineChartTests.swift in Sources */, + 3B11556EB7DC034E2FC958E4 /* BarChartTests.swift in Sources */, + 8E1192F7A7152E9DA92C56A9 /* ChartUtilsTests.swift in Sources */, + 2BF85BEA981B359A65E9BF67 /* LineChartTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 411EFA5DEF09D4E155A61BFB /* PBXTargetDependency */ = { + 8676F8A013D87F9961E92465 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Charts; - target = 5FE6E04B0BD1A05295AA30D4 /* Charts */; - targetProxy = 35F78304E8930C633456BF6E /* PBXContainerItemProxy */; + target = A58A4ED274A941CA248EA921 /* Charts */; + targetProxy = C2005F425A98942473657ED2 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 23152C9A81520D22A90EDF62 /* Debug */ = { + 0EF2164C35AB4D391B503317 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; @@ -972,18 +972,17 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator"; + SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 3.0; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; - WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Debug; }; - 277311CAE322EC53D7BE818A /* Debug */ = { + 4DD0BFDA94D4BC68192A1895 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; @@ -1014,7 +1013,55 @@ }; name = Debug; }; - 2DAFFA40B7E88315BFBA987B /* Debug */ = { + A17F60813C38081A2F1803D4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + 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_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = ""; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + SDKROOT = macosx; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2,3,4"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + C5C79E736CA16C93F421E934 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -1069,37 +1116,7 @@ }; name = Debug; }; - 50F7207F806F56F07EDF0E2F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - "FRAMEWORK_SEARCH_PATHS[sdk=appletv*]" = ( - "$(SRCROOT)/Carthage/Build/tvOS/", - "$(inherited)", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=iphone*]" = ( - "$(SRCROOT)/Carthage/Build/iOS/", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Tests/Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.dcg.ChartsTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator appletvos appletvsimulator"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Release; - }; - 89D760868DF2B3FE21E75581 /* Release */ = { + D9365FBCFFEE9FCFC79EC4C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; @@ -1123,95 +1140,76 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator"; + SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 3.0; TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; - WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Release; }; - B76233F84F6BF92380A7BEF5 /* Release */ = { + FA978B0A385680C0086D4D49 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - 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_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = ""; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; + APPLICATION_EXTENSION_API_ONLY = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + "FRAMEWORK_SEARCH_PATHS[sdk=appletv*]" = ( + "$(SRCROOT)/Carthage/Build/tvOS/", + "$(inherited)", + ); + "FRAMEWORK_SEARCH_PATHS[sdk=iphone*]" = ( + "$(SRCROOT)/Carthage/Build/iOS/", + "$(inherited)", + ); GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = "Tests/Supporting Files/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.dcg.ChartsTests; + PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator appletvos appletvsimulator"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2,3,4"; - VALIDATE_PRODUCT = YES; + SWIFT_VERSION = 3.0; + TVOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 8B972693E2E6FF7550683288 /* Build configuration list for PBXNativeTarget "ChartsTests" */ = { + 493FF4FB1D40FC7C51DDDA6B /* Build configuration list for PBXProject "Charts" */ = { isa = XCConfigurationList; buildConfigurations = ( - 50F7207F806F56F07EDF0E2F /* Release */, - 277311CAE322EC53D7BE818A /* Debug */, + C5C79E736CA16C93F421E934 /* Debug */, + A17F60813C38081A2F1803D4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CAAFFB0CDB22406DAC0F0CEC /* Build configuration list for PBXNativeTarget "Charts" */ = { + E61E9728E2BF9CC4048B13D5 /* Build configuration list for PBXNativeTarget "ChartsTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 89D760868DF2B3FE21E75581 /* Release */, - 23152C9A81520D22A90EDF62 /* Debug */, + FA978B0A385680C0086D4D49 /* Release */, + 4DD0BFDA94D4BC68192A1895 /* Debug */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CFDA49DB66628CEFB8CFE40F /* Build configuration list for PBXProject "Charts" */ = { + F1D4AA9E26EA32041FC0E3B6 /* Build configuration list for PBXNativeTarget "Charts" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2DAFFA40B7E88315BFBA987B /* Debug */, - B76233F84F6BF92380A7BEF5 /* Release */, + D9365FBCFFEE9FCFC79EC4C7 /* Release */, + 0EF2164C35AB4D391B503317 /* Debug */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 9FCA2B965470A4CDBE439A35 /* Project object */; + rootObject = 193FC8DF32D250560C5F5D77 /* Project object */; } diff --git a/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme b/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme index d8c483c25f..cd08cbcab8 100644 --- a/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme +++ b/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme @@ -1,84 +1,74 @@ + buildForArchiving = "YES"> + BuildableIdentifier = 'primary' + BlueprintIdentifier = 'A58A4ED274A941CA248EA921' + BlueprintName = 'Charts' + ReferencedContainer = 'container:Charts.xcodeproj' + BuildableName = 'Charts.framework'> + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug" + codeCoverageEnabled = "NO"> + + + BuildableIdentifier = 'primary' + BlueprintIdentifier = 'F2749BD5443C1CB5FE2080C2' + BlueprintName = 'ChartsTests' + ReferencedContainer = 'container:Charts.xcodeproj' + BuildableName = 'ChartsTests.xctest'> - - - - - - + + + key = 'FB_REFERENCE_IMAGE_DIR' + value = '$(SOURCE_ROOT)/Tests/ReferenceImages' + isEnabled = 'YES'> - - + debugDocumentVersioning = "YES" + buildConfiguration = "Release" + shouldUseLaunchSchemeArgsEnv = "YES"> diff --git a/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTests.xcscheme b/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTests.xcscheme index dad76361aa..5deffc636e 100644 --- a/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTests.xcscheme +++ b/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTests.xcscheme @@ -1,85 +1,74 @@ + buildForArchiving = "YES"> + BuildableIdentifier = 'primary' + BlueprintIdentifier = 'F2749BD5443C1CB5FE2080C2' + BlueprintName = 'ChartsTests' + ReferencedContainer = 'container:Charts.xcodeproj' + BuildableName = 'ChartsTests.xctest'> + + + BuildableIdentifier = 'primary' + BlueprintIdentifier = 'F2749BD5443C1CB5FE2080C2' + BlueprintName = 'ChartsTests' + ReferencedContainer = 'container:Charts.xcodeproj' + BuildableName = 'ChartsTests.xctest'> - - - - - - + + + key = 'FB_REFERENCE_IMAGE_DIR' + value = '$(SOURCE_ROOT)/Tests/ReferenceImages' + isEnabled = 'YES'> - - + debugDocumentVersioning = "YES" + buildConfiguration = "Release" + shouldUseLaunchSchemeArgsEnv = "YES"> diff --git a/FrameworkSpec b/FrameworkSpec new file mode 100644 index 0000000000..035426f4af --- /dev/null +++ b/FrameworkSpec @@ -0,0 +1,62 @@ +language = swift("3.0") +platforms = [ + macos("10.11"), + ios("8.0"), + tvos("9.0") +] + +test_platforms = [ + ios("8.0"), + tvos("9.0") +] + +environment_variables = { + "FB_REFERENCE_IMAGE_DIR": "$(SOURCE_ROOT)/Tests/ReferenceImages" +} + +build_dependencies = new_script do |script| + script.name = "Build Dependencies" + script.script = "exec \"${SRCROOT}/scripts/build-dependencies.sh\"" +end + +charts_tests = new_target do |target| + target.name = "ChartsTests" + target.platforms = test_platforms + target.language = language + target.info_plist = "Tests/Supporting Files/Info.plist" + target.bundle_id = "com.dcg.ChartsTests" + target.include_files = ["Tests/**/*.swift"] + target.exclude_files = [] + target.resource_files = ["Tests/**/*.xcassets"] + target.dependencies = [ + "Charts", + "FBSnapshotTestCase" + ] + target.type = :unit_test_bundle + target.enable_code_coverage = true + target.pre_build_scripts = [ + build_dependencies + ] + target.environment_variables = environment_variables +end + +charts = new_target do |target| + target.name = "Charts" + target.platforms = platforms + target.language = language + target.info_plist = "Source/Supporting Files/Info.plist" + target.bundle_id = "com.dcg.Charts" + target.header = "Source/Supporting Files/Charts.h" + target.include_files = ["Source/Charts/**/*.swift"] + target.exclude_files = [] + target.is_safe_for_extensions = true + target.test_target = charts_tests + target.environment_variables = environment_variables +end + +project.name = "Charts" +project.scripts_directory = "scripts" +project.targets = [ + charts, + charts_tests +] \ No newline at end of file From 705d9ad92ae61af6935e8c9a035d554d773bb176 Mon Sep 17 00:00:00 2001 From: Pierre-Marc Airoldi Date: Sun, 3 Sep 2017 15:19:53 -0400 Subject: [PATCH 17/64] update travis config to add xcode9 --- .travis.yml | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 24a3c6ec6e..8c6eda7b44 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,23 @@ -osx_image: xcode8.3 language: objective-c +osx_image: xcode8.3 +matrix: + include: + - osx_image: xcode8.3 + env: PLATFORM="iOS" + - osx_image: xcode8.3 + env: PLATFORM="tvOS" + - osx_image: xcode8.3 + env: PLATFORM="macOS" + - osx_image: xcode9 + env: PLATFORM="iOS" + - osx_image: xcode9 + env: PLATFORM="tvOS" + - osx_image: xcode9 + env: PLATFORM="macOS" env: global: - LANG=en_US.UTF-8 - secure: HRl5Cg3/LmTJYCSDGtV8Fiqf6OgWXR6C5YkNviOElU9YmcCTvnmE7MCm+gK8hJNIQ2mWCBTlxTC7jJxeYlx0D+JQ6IhRc75B4zXgbtth6HCzlvhWDcBbNU/K+JPDjy2EAoVgvf8Xseq6GqM4WcVg2Pwr9PS3aaH/SKDE6yVoPXRM2wXRAxIdxayqm/RQgG88jAKgg+Ub5DKW/c9NLLbUf/WdY9SgQDJtqeZCMv7G3/IzW34KZgVPsqSrPByzZXbf7KgYkYLQlscH4mcUctk1qxhdCae//zcgUZo/utpXWbPXQqtvDpuqrg9IRvoGxa/D1I7dLSJsVnk4aP7RW18vn4HJ82C2AiEp+lU2TQE9y5lXcGssZVIa5aZNTWL90HVer3Kg6AnHffvdCSZ/UHsMZJFURUXL9fRIlWVGuEDeQOqlV6lUmEtp/BiEdV4D5PuCyT6snsmEwkc51goyqh6uS6XhJyqYEQdxdoybznwp91tVmASsRybppIGHTkcWN5csF4zQt40tEwd8LoqM+bBUo0wxKiKsNsecL4JA+YDYs2saZY9U3s8jAaIon+qDu071fPRaPEvBhYHYDhy4cTvBXibyGUYGHkrgLu0w19wDfHcJKt2In58yOmaCCLNoTGp/ZLNVRyZ8VDlj/NdJ2dWpMsL2Aj7OxU065kCL2FlvuRU= - matrix: - - PLATFORM="iOS" - - PLATFORM="tvOS" - - PLATFORM="macOS" cache: - bundler before_install: From d300d6d332afa2e790fd616e5a8326e815b0e1f0 Mon Sep 17 00:00:00 2001 From: Pierre-Marc Airoldi Date: Sun, 3 Sep 2017 16:29:31 -0400 Subject: [PATCH 18/64] fix tests by adding tolerance and device ids --- Cartfile.resolved | 2 +- Charts.xcodeproj/project.pbxproj | 4 +++ Rakefile | 2 -- Tests/Charts/BarChartTests.swift | 14 +++++------ Tests/Charts/ChartUtilsTests.swift | 8 ------ Tests/Charts/LineChartTests.swift | 12 ++++----- Tests/Charts/Snapshot.swift | 23 ++++++++++++++++++ .../testDefaultValues.png | Bin 21469 -> 0 bytes .../testDefaultValues@2x.png | Bin 63165 -> 0 bytes .../testDrawIcons.png | Bin 54151 -> 0 bytes .../testDrawIcons@2x.png | Bin 107038 -> 0 bytes .../testHideHorizontalGridlines.png | Bin 19207 -> 0 bytes .../testHideHorizontalGridlines@2x.png | Bin 60471 -> 0 bytes .../testHideLeftAxis.png | Bin 21307 -> 0 bytes .../testHideLeftAxis@2x.png | Bin 57356 -> 0 bytes .../testHideRightAxis.png | Bin 21515 -> 0 bytes .../testHideRightAxis@2x.png | Bin 58238 -> 0 bytes .../testHideVerticalGridlines.png | Bin 19933 -> 0 bytes .../testHideVerticalGridlines@2x.png | Bin 56331 -> 0 bytes .../testHidesValues.png | Bin 18388 -> 0 bytes .../testHidesValues@2x.png | Bin 53905 -> 0 bytes .../testDefaultValues.png | Bin 42597 -> 0 bytes .../testDefaultValues@2x.png | Bin 111060 -> 0 bytes .../testDoesntDrawCircleHole.png | Bin 39664 -> 0 bytes .../testDoesntDrawCircleHole@2x.png | Bin 103822 -> 0 bytes .../testDoesntDrawCircles.png | Bin 36150 -> 0 bytes .../testDoesntDrawCircles@2x.png | Bin 97664 -> 0 bytes .../testDrawIcons.png | Bin 73544 -> 0 bytes .../testDrawIcons@2x.png | Bin 152203 -> 0 bytes .../testHidesValues.png | Bin 42597 -> 0 bytes .../testHidesValues@2x.png | Bin 111060 -> 0 bytes .../testIsCubic.png | Bin 43616 -> 0 bytes .../testIsCubic@2x.png | Bin 112822 -> 0 bytes .../testDefaultValues.png | Bin 25055 -> 0 bytes .../testDefaultValues@2x.png | Bin 63165 -> 0 bytes ...testDefaultValues_iOS_1024.0_1366.0@2x.png | Bin 0 -> 63181 bytes .../testDefaultValues_iOS_320.0_568.0@2x.png | Bin 0 -> 63181 bytes .../testDefaultValues_iOS_375.0_667.0@2x.png | Bin 0 -> 63181 bytes ... testDefaultValues_iOS_414.0_736.0@3x.png} | Bin 114199 -> 114048 bytes .../testDefaultValues_iOS_768.0_1024.0@2x.png | Bin 0 -> 63181 bytes .../testDefaultValues_iOS_834.0_1112.0@2x.png | Bin 0 -> 63181 bytes .../testDefaultValues_tvOS_1920.0_1080.0.png | Bin 0 -> 24980 bytes ...=> testDrawIcons_iOS_1024.0_1366.0@2x.png} | Bin 106978 -> 107059 bytes .../testDrawIcons_iOS_320.0_568.0@2x.png | Bin 0 -> 107059 bytes .../testDrawIcons_iOS_375.0_667.0@2x.png | Bin 0 -> 107059 bytes ...g => testDrawIcons_iOS_414.0_736.0@3x.png} | Bin 159085 -> 158947 bytes .../testDrawIcons_iOS_768.0_1024.0@2x.png | Bin 0 -> 107059 bytes .../testDrawIcons_iOS_834.0_1112.0@2x.png | Bin 0 -> 107059 bytes ...g => testDrawIcons_tvOS_1920.0_1080.0.png} | Bin 56786 -> 56661 bytes .../testHideHorizontalGridlines.png | Bin 22872 -> 0 bytes .../testHideHorizontalGridlines@2x.png | Bin 60471 -> 0 bytes ...rizontalGridlines_iOS_1024.0_1366.0@2x.png | Bin 0 -> 60464 bytes ...HorizontalGridlines_iOS_320.0_568.0@2x.png | Bin 0 -> 60464 bytes ...HorizontalGridlines_iOS_375.0_667.0@2x.png | Bin 0 -> 60464 bytes ...orizontalGridlines_iOS_414.0_736.0@3x.png} | Bin 110772 -> 110616 bytes ...orizontalGridlines_iOS_768.0_1024.0@2x.png | Bin 0 -> 60464 bytes ...orizontalGridlines_iOS_834.0_1112.0@2x.png | Bin 0 -> 60464 bytes ...HorizontalGridlines_tvOS_1920.0_1080.0.png | Bin 0 -> 22742 bytes .../testHideLeftAxis.png | Bin 23400 -> 0 bytes .../testHideLeftAxis@2x.png | Bin 57367 -> 0 bytes .../testHideLeftAxis_iOS_1024.0_1366.0@2x.png | Bin 0 -> 57543 bytes .../testHideLeftAxis_iOS_320.0_568.0@2x.png | Bin 0 -> 57543 bytes .../testHideLeftAxis_iOS_375.0_667.0@2x.png | Bin 0 -> 57543 bytes ...> testHideLeftAxis_iOS_414.0_736.0@3x.png} | Bin 111118 -> 110923 bytes .../testHideLeftAxis_iOS_768.0_1024.0@2x.png | Bin 0 -> 57543 bytes .../testHideLeftAxis_iOS_834.0_1112.0@2x.png | Bin 0 -> 57543 bytes .../testHideLeftAxis_tvOS_1920.0_1080.0.png | Bin 0 -> 23303 bytes .../testHideRightAxis.png | Bin 24426 -> 0 bytes ...estHideRightAxis_iOS_1024.0_1366.0@2x.png} | Bin .../testHideRightAxis_iOS_320.0_568.0@2x.png | Bin 0 -> 58044 bytes .../testHideRightAxis_iOS_375.0_667.0@2x.png | Bin 0 -> 58044 bytes ... testHideRightAxis_iOS_414.0_736.0@3x.png} | Bin .../testHideRightAxis_iOS_768.0_1024.0@2x.png | Bin 0 -> 58044 bytes .../testHideRightAxis_iOS_834.0_1112.0@2x.png | Bin 0 -> 58044 bytes .../testHideRightAxis_tvOS_1920.0_1080.0.png | Bin 0 -> 24348 bytes .../testHideVerticalGridlines.png | Bin 23375 -> 0 bytes .../testHideVerticalGridlines@2x.png | Bin 56331 -> 0 bytes ...VerticalGridlines_iOS_1024.0_1366.0@2x.png | Bin 0 -> 56346 bytes ...deVerticalGridlines_iOS_320.0_568.0@2x.png | Bin 0 -> 56346 bytes ...deVerticalGridlines_iOS_375.0_667.0@2x.png | Bin 0 -> 56346 bytes ...eVerticalGridlines_iOS_414.0_736.0@3x.png} | Bin 107269 -> 107116 bytes ...eVerticalGridlines_iOS_768.0_1024.0@2x.png | Bin 0 -> 56346 bytes ...eVerticalGridlines_iOS_834.0_1112.0@2x.png | Bin 0 -> 56346 bytes ...deVerticalGridlines_tvOS_1920.0_1080.0.png | Bin 0 -> 23214 bytes .../testHidesValues.png | Bin 21855 -> 0 bytes .../testHidesValues@2x.png | Bin 53905 -> 0 bytes .../testHidesValues_iOS_1024.0_1366.0@2x.png | Bin 0 -> 53915 bytes .../testHidesValues_iOS_320.0_568.0@2x.png | Bin 0 -> 53915 bytes .../testHidesValues_iOS_375.0_667.0@2x.png | Bin 0 -> 53915 bytes ...=> testHidesValues_iOS_414.0_736.0@3x.png} | Bin 100751 -> 100614 bytes .../testHidesValues_iOS_768.0_1024.0@2x.png | Bin 0 -> 53915 bytes .../testHidesValues_iOS_834.0_1112.0@2x.png | Bin 0 -> 53915 bytes .../testHidesValues_tvOS_1920.0_1080.0.png | Bin 0 -> 21737 bytes .../testDefaultValues.png | Bin 47032 -> 0 bytes ...estDefaultValues_iOS_1024.0_1366.0@2x.png} | Bin 117988 -> 118090 bytes .../testDefaultValues_iOS_320.0_568.0@2x.png | Bin 0 -> 118090 bytes .../testDefaultValues_iOS_375.0_667.0@2x.png | Bin 0 -> 118090 bytes ... testDefaultValues_iOS_414.0_736.0@3x.png} | Bin 191055 -> 190899 bytes .../testDefaultValues_iOS_768.0_1024.0@2x.png | Bin 0 -> 118090 bytes .../testDefaultValues_iOS_834.0_1112.0@2x.png | Bin 0 -> 118090 bytes .../testDefaultValues_tvOS_1920.0_1080.0.png | Bin 0 -> 46852 bytes .../testDoesntDrawCircleHole.png | Bin 44035 -> 0 bytes ...ntDrawCircleHole_iOS_1024.0_1366.0@2x.png} | Bin 110868 -> 110967 bytes ...oesntDrawCircleHole_iOS_320.0_568.0@2x.png | Bin 0 -> 110967 bytes ...oesntDrawCircleHole_iOS_375.0_667.0@2x.png | Bin 0 -> 110967 bytes ...esntDrawCircleHole_iOS_414.0_736.0@3x.png} | Bin 179179 -> 179027 bytes ...esntDrawCircleHole_iOS_768.0_1024.0@2x.png | Bin 0 -> 110967 bytes ...esntDrawCircleHole_iOS_834.0_1112.0@2x.png | Bin 0 -> 110967 bytes ...oesntDrawCircleHole_tvOS_1920.0_1080.0.png | Bin 0 -> 43851 bytes .../testDoesntDrawCircles.png | Bin 40071 -> 0 bytes ...oesntDrawCircles_iOS_1024.0_1366.0@2x.png} | Bin 104707 -> 104805 bytes ...stDoesntDrawCircles_iOS_320.0_568.0@2x.png | Bin 0 -> 104805 bytes ...stDoesntDrawCircles_iOS_375.0_667.0@2x.png | Bin 0 -> 104805 bytes ...tDoesntDrawCircles_iOS_414.0_736.0@3x.png} | Bin 169418 -> 169238 bytes ...tDoesntDrawCircles_iOS_768.0_1024.0@2x.png | Bin 0 -> 104805 bytes ...tDoesntDrawCircles_iOS_834.0_1112.0@2x.png | Bin 0 -> 104805 bytes ...stDoesntDrawCircles_tvOS_1920.0_1080.0.png | Bin 0 -> 39862 bytes ...=> testDrawIcons_iOS_1024.0_1366.0@2x.png} | Bin 152209 -> 152316 bytes .../testDrawIcons_iOS_320.0_568.0@2x.png | Bin 0 -> 152316 bytes .../testDrawIcons_iOS_375.0_667.0@2x.png | Bin 0 -> 152316 bytes ...g => testDrawIcons_iOS_414.0_736.0@3x.png} | Bin 233207 -> 233062 bytes .../testDrawIcons_iOS_768.0_1024.0@2x.png | Bin 0 -> 152316 bytes .../testDrawIcons_iOS_834.0_1112.0@2x.png | Bin 0 -> 152316 bytes ...g => testDrawIcons_tvOS_1920.0_1080.0.png} | Bin 74996 -> 74882 bytes .../testHidesValues.png | Bin 44279 -> 0 bytes ... testHidesValues_iOS_1024.0_1366.0@2x.png} | Bin 111058 -> 111155 bytes .../testHidesValues_iOS_320.0_568.0@2x.png | Bin 0 -> 111155 bytes .../testHidesValues_iOS_375.0_667.0@2x.png | Bin 0 -> 111155 bytes ...=> testHidesValues_iOS_414.0_736.0@3x.png} | Bin 178009 -> 177850 bytes .../testHidesValues_iOS_768.0_1024.0@2x.png | Bin 0 -> 111155 bytes .../testHidesValues_iOS_834.0_1112.0@2x.png | Bin 0 -> 111155 bytes .../testHidesValues_tvOS_1920.0_1080.0.png | Bin 0 -> 44100 bytes .../testIsCubic.png | Bin 47829 -> 0 bytes ...g => testIsCubic_iOS_1024.0_1366.0@2x.png} | Bin 119923 -> 120024 bytes .../testIsCubic_iOS_320.0_568.0@2x.png | Bin 0 -> 120024 bytes .../testIsCubic_iOS_375.0_667.0@2x.png | Bin 0 -> 120024 bytes ...png => testIsCubic_iOS_414.0_736.0@3x.png} | Bin 194918 -> 194771 bytes .../testIsCubic_iOS_768.0_1024.0@2x.png | Bin 0 -> 120024 bytes .../testIsCubic_iOS_834.0_1112.0@2x.png | Bin 0 -> 120024 bytes .../testIsCubic_tvOS_1920.0_1080.0.png | Bin 0 -> 47647 bytes 140 files changed, 41 insertions(+), 24 deletions(-) create mode 100644 Tests/Charts/Snapshot.swift delete mode 100644 Tests/ReferenceImages_32/ChartsTests.BarChartTests/testDefaultValues.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.BarChartTests/testDefaultValues@2x.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.BarChartTests/testDrawIcons.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.BarChartTests/testDrawIcons@2x.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.BarChartTests/testHideHorizontalGridlines.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.BarChartTests/testHideHorizontalGridlines@2x.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.BarChartTests/testHideLeftAxis.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.BarChartTests/testHideLeftAxis@2x.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.BarChartTests/testHideRightAxis.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.BarChartTests/testHideRightAxis@2x.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.BarChartTests/testHideVerticalGridlines.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.BarChartTests/testHideVerticalGridlines@2x.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.BarChartTests/testHidesValues.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.BarChartTests/testHidesValues@2x.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.LineChartTests/testDefaultValues.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.LineChartTests/testDefaultValues@2x.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.LineChartTests/testDoesntDrawCircleHole.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.LineChartTests/testDoesntDrawCircleHole@2x.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.LineChartTests/testDoesntDrawCircles.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.LineChartTests/testDoesntDrawCircles@2x.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.LineChartTests/testDrawIcons.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.LineChartTests/testDrawIcons@2x.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.LineChartTests/testHidesValues.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.LineChartTests/testHidesValues@2x.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.LineChartTests/testIsCubic.png delete mode 100644 Tests/ReferenceImages_32/ChartsTests.LineChartTests/testIsCubic@2x.png delete mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues.png delete mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_1024.0_1366.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_320.0_568.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_375.0_667.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.BarChartTests/{testDefaultValues@3x.png => testDefaultValues_iOS_414.0_736.0@3x.png} (75%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_768.0_1024.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_834.0_1112.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_tvOS_1920.0_1080.0.png rename Tests/ReferenceImages_64/ChartsTests.BarChartTests/{testDrawIcons@2x.png => testDrawIcons_iOS_1024.0_1366.0@2x.png} (78%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_320.0_568.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_375.0_667.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.BarChartTests/{testDrawIcons@3x.png => testDrawIcons_iOS_414.0_736.0@3x.png} (86%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_768.0_1024.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_834.0_1112.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.BarChartTests/{testDrawIcons.png => testDrawIcons_tvOS_1920.0_1080.0.png} (51%) delete mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines.png delete mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_1024.0_1366.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_320.0_568.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_375.0_667.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.BarChartTests/{testHideHorizontalGridlines@3x.png => testHideHorizontalGridlines_iOS_414.0_736.0@3x.png} (77%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_768.0_1024.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_834.0_1112.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_tvOS_1920.0_1080.0.png delete mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis.png delete mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_1024.0_1366.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_320.0_568.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_375.0_667.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.BarChartTests/{testHideLeftAxis@3x.png => testHideLeftAxis_iOS_414.0_736.0@3x.png} (76%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_768.0_1024.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_834.0_1112.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_tvOS_1920.0_1080.0.png delete mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis.png rename Tests/ReferenceImages_64/ChartsTests.BarChartTests/{testHideRightAxis@2x.png => testHideRightAxis_iOS_1024.0_1366.0@2x.png} (100%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_320.0_568.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_375.0_667.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.BarChartTests/{testHideRightAxis@3x.png => testHideRightAxis_iOS_414.0_736.0@3x.png} (100%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_768.0_1024.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_834.0_1112.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_tvOS_1920.0_1080.0.png delete mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines.png delete mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_1024.0_1366.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_320.0_568.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_375.0_667.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.BarChartTests/{testHideVerticalGridlines@3x.png => testHideVerticalGridlines_iOS_414.0_736.0@3x.png} (75%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_768.0_1024.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_834.0_1112.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_tvOS_1920.0_1080.0.png delete mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues.png delete mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_1024.0_1366.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_320.0_568.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_375.0_667.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.BarChartTests/{testHidesValues@3x.png => testHidesValues_iOS_414.0_736.0@3x.png} (79%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_768.0_1024.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_834.0_1112.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_tvOS_1920.0_1080.0.png delete mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues.png rename Tests/ReferenceImages_64/ChartsTests.LineChartTests/{testDefaultValues@2x.png => testDefaultValues_iOS_1024.0_1366.0@2x.png} (78%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_320.0_568.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_375.0_667.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.LineChartTests/{testDefaultValues@3x.png => testDefaultValues_iOS_414.0_736.0@3x.png} (84%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_768.0_1024.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_834.0_1112.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_tvOS_1920.0_1080.0.png delete mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole.png rename Tests/ReferenceImages_64/ChartsTests.LineChartTests/{testDoesntDrawCircleHole@2x.png => testDoesntDrawCircleHole_iOS_1024.0_1366.0@2x.png} (80%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_320.0_568.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_375.0_667.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.LineChartTests/{testDoesntDrawCircleHole@3x.png => testDoesntDrawCircleHole_iOS_414.0_736.0@3x.png} (86%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_768.0_1024.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_834.0_1112.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_tvOS_1920.0_1080.0.png delete mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles.png rename Tests/ReferenceImages_64/ChartsTests.LineChartTests/{testDoesntDrawCircles@2x.png => testDoesntDrawCircles_iOS_1024.0_1366.0@2x.png} (81%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_320.0_568.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_375.0_667.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.LineChartTests/{testDoesntDrawCircles@3x.png => testDoesntDrawCircles_iOS_414.0_736.0@3x.png} (88%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_768.0_1024.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_834.0_1112.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_tvOS_1920.0_1080.0.png rename Tests/ReferenceImages_64/ChartsTests.LineChartTests/{testDrawIcons@2x.png => testDrawIcons_iOS_1024.0_1366.0@2x.png} (86%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_320.0_568.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_375.0_667.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.LineChartTests/{testDrawIcons@3x.png => testDrawIcons_iOS_414.0_736.0@3x.png} (86%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_768.0_1024.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_834.0_1112.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.LineChartTests/{testDrawIcons.png => testDrawIcons_tvOS_1920.0_1080.0.png} (81%) delete mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues.png rename Tests/ReferenceImages_64/ChartsTests.LineChartTests/{testHidesValues@2x.png => testHidesValues_iOS_1024.0_1366.0@2x.png} (80%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_320.0_568.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_375.0_667.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.LineChartTests/{testHidesValues@3x.png => testHidesValues_iOS_414.0_736.0@3x.png} (86%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_768.0_1024.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_834.0_1112.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_tvOS_1920.0_1080.0.png delete mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic.png rename Tests/ReferenceImages_64/ChartsTests.LineChartTests/{testIsCubic@2x.png => testIsCubic_iOS_1024.0_1366.0@2x.png} (77%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_320.0_568.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_375.0_667.0@2x.png rename Tests/ReferenceImages_64/ChartsTests.LineChartTests/{testIsCubic@3x.png => testIsCubic_iOS_414.0_736.0@3x.png} (84%) create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_768.0_1024.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_834.0_1112.0@2x.png create mode 100644 Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_tvOS_1920.0_1080.0.png diff --git a/Cartfile.resolved b/Cartfile.resolved index e6cc748142..1672a76f44 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1 +1 @@ -github "facebook/ios-snapshot-test-case" "c1808fb4435ffc3db2203e7623935f39fc31aa8f" +github "facebook/ios-snapshot-test-case" "ed4e6a6e81bfb69a5223156e6c3d389a416cf6e3" diff --git a/Charts.xcodeproj/project.pbxproj b/Charts.xcodeproj/project.pbxproj index 4249380778..545b6adaa2 100644 --- a/Charts.xcodeproj/project.pbxproj +++ b/Charts.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 05253AFC448C107DEF54C2FE /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52265C1B343CCC41AF2300E3 /* CombinedChartRenderer.swift */; }; 0529DD51622C8769C1121F90 /* CrossShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 823F7DB281C6C6F069A69605 /* CrossShapeRenderer.swift */; }; 0577C2B38BCE4C871F262714 /* AnimatedZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2EA58CB336967198D30D20 /* AnimatedZoomViewJob.swift */; }; + 064989461F5C99C7006E8BB3 /* Snapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 064989451F5C99C7006E8BB3 /* Snapshot.swift */; }; 0A772AEC08246FEC480673E5 /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A6C9631C69B2D772BBD9232 /* PieRadarChartViewBase.swift */; }; 0C52C70C6E6EA09BD7426386 /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBB57D6FA41029B08F26D7B /* RadarChartData.swift */; }; 0CAF514A280FF6A14E2A1A23 /* CombinedChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11EF1FE22549E885C8F40738 /* CombinedChartView.swift */; }; @@ -164,6 +165,7 @@ 0216EDC6A1FE272F4EB19FCF /* ChartDataRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataRendererBase.swift; path = Source/Charts/Renderers/ChartDataRendererBase.swift; sourceTree = ""; }; 04F7B9DF1F2D66E7279771D4 /* PieRadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarHighlighter.swift; path = Source/Charts/Highlight/PieRadarHighlighter.swift; sourceTree = ""; }; 0619A877C69A95ECCC440A44 /* LineChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartView.swift; path = Source/Charts/Charts/LineChartView.swift; sourceTree = ""; }; + 064989451F5C99C7006E8BB3 /* Snapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Snapshot.swift; path = Tests/Charts/Snapshot.swift; sourceTree = ""; }; 0BD9DF16AF59680A3BB49452 /* IAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IAxisValueFormatter.swift; path = Source/Charts/Formatters/IAxisValueFormatter.swift; sourceTree = ""; }; 0DABDBBCCE6B3620C967F04A /* LineChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartRenderer.swift; path = Source/Charts/Renderers/LineChartRenderer.swift; sourceTree = ""; }; 0DDE409E9ECF54D2C146A6F0 /* CombinedChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartData.swift; path = Source/Charts/Data/Implementations/Standard/CombinedChartData.swift; sourceTree = ""; }; @@ -510,6 +512,7 @@ 5C3F5E1A69EC06E86505F7B1 /* BarChartTests.swift */, 7AB9062A28AAB9469752A954 /* ChartUtilsTests.swift */, D2E1819D72CD7B6C4A4E8048 /* LineChartTests.swift */, + 064989451F5C99C7006E8BB3 /* Snapshot.swift */, ); name = Charts; sourceTree = ""; @@ -933,6 +936,7 @@ 3B11556EB7DC034E2FC958E4 /* BarChartTests.swift in Sources */, 8E1192F7A7152E9DA92C56A9 /* ChartUtilsTests.swift in Sources */, 2BF85BEA981B359A65E9BF67 /* LineChartTests.swift in Sources */, + 064989461F5C99C7006E8BB3 /* Snapshot.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Rakefile b/Rakefile index eddda52865..a08708f2c2 100644 --- a/Rakefile +++ b/Rakefile @@ -84,8 +84,6 @@ def run_xcodebuild(schemes_to_execute, tasks, destination, is_test, xcprety_args schemes_to_execute.each do |scheme| xcodebuild type, project_name, scheme, configuration, sdk, device, tasks, xcprety_args end - - sh 'killall Simulator' if is_test end def execute(tasks, platform, xcprety_args: '') diff --git a/Tests/Charts/BarChartTests.swift b/Tests/Charts/BarChartTests.swift index 60f6d8d512..67cfab73cb 100644 --- a/Tests/Charts/BarChartTests.swift +++ b/Tests/Charts/BarChartTests.swift @@ -49,43 +49,43 @@ class BarChartTests: FBSnapshotTestCase func testDefaultValues() { - FBSnapshotVerifyView(chart) + FBSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), tolerance: Snapshot.tolerance) } func testHidesValues() { dataSet.drawValuesEnabled = false - FBSnapshotVerifyView(chart) + FBSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), tolerance: Snapshot.tolerance) } func testHideLeftAxis() { chart.leftAxis.enabled = false - FBSnapshotVerifyView(chart) + FBSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), tolerance: Snapshot.tolerance) } func testHideRightAxis() { chart.rightAxis.enabled = false - FBSnapshotVerifyView(chart) + FBSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), tolerance: Snapshot.tolerance) } func testHideHorizontalGridlines() { chart.leftAxis.drawGridLinesEnabled = false chart.rightAxis.drawGridLinesEnabled = false - FBSnapshotVerifyView(chart) + FBSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), tolerance: Snapshot.tolerance) } func testHideVerticalGridlines() { chart.xAxis.drawGridLinesEnabled = false - FBSnapshotVerifyView(chart) + FBSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), tolerance: Snapshot.tolerance) } func testDrawIcons() { dataSet.drawIconsEnabled = true - FBSnapshotVerifyView(chart) + FBSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), tolerance: Snapshot.tolerance) } } diff --git a/Tests/Charts/ChartUtilsTests.swift b/Tests/Charts/ChartUtilsTests.swift index 3887ac483e..d464a25220 100644 --- a/Tests/Charts/ChartUtilsTests.swift +++ b/Tests/Charts/ChartUtilsTests.swift @@ -1,11 +1,3 @@ -// -// ChartUtilsTests.swift -// Charts -// -// Created by Pierre-Marc Airoldi on 2016-09-25. -// -// - import XCTest @testable import Charts diff --git a/Tests/Charts/LineChartTests.swift b/Tests/Charts/LineChartTests.swift index 905a3922e1..26f69c4b7e 100755 --- a/Tests/Charts/LineChartTests.swift +++ b/Tests/Charts/LineChartTests.swift @@ -46,36 +46,36 @@ class LineChartTests: FBSnapshotTestCase func testDefaultValues() { - FBSnapshotVerifyView(chart) + FBSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), tolerance: Snapshot.tolerance) } func testHidesValues() { dataSet.drawValuesEnabled = false - FBSnapshotVerifyView(chart) + FBSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), tolerance: Snapshot.tolerance) } func testDoesntDrawCircles() { dataSet.drawCirclesEnabled = false - FBSnapshotVerifyView(chart) + FBSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), tolerance: Snapshot.tolerance) } func testIsCubic() { dataSet.mode = LineChartDataSet.Mode.cubicBezier - FBSnapshotVerifyView(chart) + FBSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), tolerance: Snapshot.tolerance) } func testDoesntDrawCircleHole() { dataSet.drawCircleHoleEnabled = false - FBSnapshotVerifyView(chart) + FBSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), tolerance: Snapshot.tolerance) } func testDrawIcons() { dataSet.drawIconsEnabled = true - FBSnapshotVerifyView(chart) + FBSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), tolerance: Snapshot.tolerance) } } diff --git a/Tests/Charts/Snapshot.swift b/Tests/Charts/Snapshot.swift new file mode 100644 index 0000000000..d7d2afe92c --- /dev/null +++ b/Tests/Charts/Snapshot.swift @@ -0,0 +1,23 @@ +import CoreGraphics + +public struct Snapshot +{ + public static let tolerance: CGFloat = 0.03 + + public static func identifier(_ size: CGSize) -> String { + + let identifier: String + + #if os(tvOS) + identifier = "tvOS" + #elseif os(iOS) + identifier = "iOS" + #elseif os(OSX) + identifier = "macOS" + #else + identifier = "" + #endif + + return "\(identifier)_\(size.width)_\(size.height)" + } +} diff --git a/Tests/ReferenceImages_32/ChartsTests.BarChartTests/testDefaultValues.png b/Tests/ReferenceImages_32/ChartsTests.BarChartTests/testDefaultValues.png deleted file mode 100644 index 4ac538c976aeba80b2de89187961cd6b4ca34163..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21469 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 Fms;t0Be}Eo> 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 z

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�K7t$*sdvWE+zCvq`Eq#vdtgb~&tzL|9r$kI4dY*It z6gqVMjVHR^YIwMoDzg_K#Sv&FJYv9QWm=$$O%ArY=ot?}i(ll;o^Al3ILL!QQC5Nj z408W&4jK=1^#VV#DX|BrebuKn>W{Dk-;Nu9Hw5$&uZILDqQpA`Rt~MG+F*wIBFYwr ztGqY}a`$v(CZ8A`#=e<+L4v1Lzk5GWVH7{|VwCB&v$k6A7^^XT|6T&1qUwHnK@DZ( z`=ffMC1wOm{OvSAiTqAgkzyaZ_)54L49ITzzaJF-Fdt+K2p^z4*e8Ebl)3O@vkl_$ z{sHzm#|!}6IJVLke`pXu=a@phy7zbG!ADlt?y}SH#-lg@BRmJN#1HYzNl2ej-q%Ft zKO=$?=={hHT0om-45)!LX`SQ`VG8S6dr)4sXG!j^kdrSwu_8qH!ozHSRPmAvm7qsPL9W!#U#mv zxIS#kXnP%_ISz!($#srf-1B4d%9y+St`|sUKfjpuA5CLgjA4+)99R#GDoB*=My$#o zcSqvsQ7WMBd*1u_`+AjNj-xnB67>i!T?C5#9xVhs(S$?<{-#C&+8~&*MHXlZ^c_TM z_+&uoK71%|BncUUsy7d7GUQCV$>_{CvuvBaT73(kX<{iLRP1iOtWN%)L&{p{+>LZ@ z-Q#4rn7_mb8dskN@@1x3)?>?Ko9#+-Oylvff%*p^r(FW)9)hTCTf=1W#qlew%ccTc zHUfH;L@l4V+PDEI1!Z4ah^`yQQq5s9YhSO90DGb#X3pcI&fVX5S?~I_H z9)1D_H(36l7vC%Mfeun=cVSkti2iQw-=B zbZX-shu`Rd_-=3SYUww%8~#$C-C9()=q!xnJ`!8hxKl4ajL-+|7qB2^v5t}I6nPW) zSWN8mUC;unC3<8x*e*;-AHQnU&_y(|X+mE4D*b&)9)W4k(}gXsM)A$@Vr1ZY4TLZq z<+UHgcMu}g8L~Ube-k&c3tSdiPT4K*?r3S|Y`H1okZ^=u6Oz|zZpFdTAvMq%`-rDD zlM2_DrU?_J0&oQVP*s~=WH|>-tJkE_%`=S`ivW*xT@|d#lzhQi=VyiqFR39Jim(BN zuAO!1A&XILGoc))#ahI@mN-c@P#A%d5%l8GV-X$~14J=#|CY(hI#APdSDsT4AUyRN z1s=0P2w>ynu;9|y|7pg)j7T=?Ypf7gd}#UM5+#Y_IGm3*pk25?3hYp=ohZmBrQRxM z0HwWK4>!?g2H)z|(ii==Y$^~pnotj@6r7dR4K54G!U|R#Cx!ydPU35S&|LP(fVJ!l zvDlKkJxp7BWr1W+o=Y6u5R6n|rmma&fQUsO_5uB_e$>|isTfn53l(7fVqqf0`|W*2;7cE`-irVJN4hSeL7+sictRO$U_nL>1C=2Pxr+gmV28V{8R1s&naK9 zTRD*K;-c6)KFW<&#|kq6dG-%P#aaG;OQMs=C}j>Lwar~Hcm;6yfm)Y8#eessG$dY; zau~nFB)flr_01Vi9JUD181{N6`V9;c9k4SJR7*gB-By#mZlebWh2|uk;!l-mw$j|g z{R4{{ntf1&0Qeaug_VJ;||kpU2T45Cp&QjfDBCI#|FV3lWf0BezF>(YxPi$^j4PkY}P z)?~Iu`_Wa}a4euS9UT$rA|N$5sHilRE*+#Oy@U<{QBe_4k=|4kL@9yLTX2xxYXYGO zLTE|oEkN!Lj5B)Xoco;L_qjgdF+fPZy}!NR{qD8aySDW#T|q4qezrjp_@9B(5B^E7 z4c+%P;(45PFcuZ^hT=&&7<0E+a8kJ42?dgQoVa8xXtLK;I4f9X!Oj|M*sTd=t$W5y z;PV^p!?OQaPj};@(X7Y;i;fu`#AYuz{YLwri`VEEHai^b3hx7=OF@od3oE=i zTw(>5;zGl&S4OXsw{?^nK|>Q#?BEDXOUvjy9Ui7QemB6=7bx>m>Y4vco}#FVQGi1v zGdl%SeR6hl#K^w@5Sq~wwu4M#z5BPlS0PaVB0wlmYvZV8!N82}Uz5+psH&nL zcl+J4OrusgLOT~%CQg<*YjB@ehg(1{SV68r zDo4LdjLrRjhavy=&Sw}F?^5#XX0 zP(>iX+5%i^RuV|yGtP#uv5#kt4Smid<}7tHKs*PO?ok06V2B6GZ;*S`Hxm(BbvO?^ zRIo>ddwjkgu>(BUF4*tsl%xyHj5h0u5gJb-z1m*Rxi?0@b9DH3 zp7a0|sw{hN`XjUz%|%|Tj|&z#Kzu2pmZsM=kZZewB5T4HCGX1`hcGYYDfvje_D;T|~o z(ShHb(oo^ElrwA|!b;Q`;4xo2i_bm)JO*TTn13e_N?(3cHgr>;L1u#i9=W^o2G&S2 zRgg=>qvsr>FH3F;UU6aeV1rrHgRJc+&A)fSiC>=GE~ABTA7?cIGeqe|PA z&LfP#edg9kS+oh0>HUcukmK?H1vt@GTj1e6U5BA{z2xz#0jC{cNXl@Xn`+FK?(q5= zEAU|JGn{rl3Js=e26*`c5ckpVluK9v7BV4{WK^ zI-s9;|G;+7Km(O5gs_xjd$?dtwK(;jZT*rwepZprzgLBS^9DETPUYOS{9pkF^(#RK z-259t;_%pWt?`Sg>8iT19?}F2V<)&*IdjJKiy}K$@XoI+@hO zR5$N)iD5egb^t%1qCoq-n(`Qlde6~)uxwkU`eZ5)_}iZWm48w_@Y|!V*=59#V&&rH zrLvjxSLGE=#A$it7CyWOx(-Kp;95h9eCZJlgcC#WzK26SG-r?~BCgG^}IfC#0y+NS-{ zeGteH* z5Z@tFnQ((7XwQ z7t-1hYz5DLUo8jI0>QeAQvW%8etJHN#9#NF`iW`EAYMmuVhYtaGyd?|-U)f#f{S+*!-@hV^#3w_6Lgptm z9F-HG84czy?MUVf`-3ewd}fV#Ho7lSbe#=Q1Or2oU!@8PYO&Wb8SPfU_RAmV4N;pgo_SvJgLk_AE`%YfdZxLIQvpj>e6Qlajux$VB|EdJc+Ckt!{w(rJK zYF_pO1|x8+M`PC;>sM&`#P0W6mPg@~aUb^F3Ye18HGLswzFY6r$f$oahp z)BJCKu&R%_@L6(FS&{ek506G|C|Skk>YN#&6a54(!)EOoZ~;t5!CILmn0m3v)gH_i zK$9TdD~o4qL^_CYU}E|=Qv$i{GfazNqcJ%A?MqhB1rr{g89ET|8yMcCZw}uR0ck}| z!8ze}Q=S(n1(0&gjR~y5x1dpS!TkNAX+Xww<>&DOuKH`nGe~Buc^dQ~$Qew&SKiT9 zQ`bwd$I3ngP@Y}*AoJ0D(FILI0Z}~c+;U`mz#r$}_=XbzO_k*X<*6gTwi@$6bM%K= zXX!yz*AO=(U!ar}D%4?p#Z}$IiL6OInAAy|z zf2H=oP`wecH&nkPAk=-{PsrQP7xd3@wCAS%U+42LXH-R~BIW-(*Jul@WUCgl#zf4F zdJD4o(X*%?#7IeJC`KZyU`JIn@wQRVG3)-^Cc_RbLwVxLTT6_7rPKU)f~Y27h^jtD zuaWR(Hyu`y8@1d@+h!poRHzbDl1>(9OlDl5?>LVJMFp{0{_PxPL6VZuV`9Kq2;Uf{OV8zG#{W^4qWtfB}Bb z-tO+Szfs$)o#Q2gbU=zUqol=!+XotwK-G8KzGjqCke3hpz~u3b0FTn(si=sJ$BD+dkw+?2}RGVOOU4Rha+~ORd_<9-9(!zH4OL--{4RSUqp6Mk_-(op)xu5@&s&`L`p(1{Krp z6qAbe=a*~cwPaPRT(#UOo-AJ<6O=-Qm5lM850X>oZr+Qsmwt|ZIwwd7e z%ZkmprD=vttO_y%%NJ|uiU-QDf$f#Hpya2eJ5^VBW7{lYmM3r_!7@x$q0D>Usz@Zo zx0*XF6c!k38O7wRE4SiK=h&2gYksh2s61~J5AAVtEV{45sP(7{HXQfBL zHl;aWaF~3E8)mm;nP^Mwr$^V5w%H}gY?z_No4Bc>DTG+jfM>lWo|9yxF#m=vS%M5-CR>di?6hYDwDnBVVT%F&7p?|H0#R~BfQea zr1&?C!F}>7w}s_m3B9?gviN!h$4JYijmU(4j8MeRREuvWDCSbHGQ&Qo8P z=y(%b`p9Jj>I>KjaLxOCI?*)OJ+(i4+tdQCa zM+yM?MnPblxqFdu7mX2h?)m2K$ZC?S0FIh#^|fyj>8Lz^%tN+Vxg2cEj8B-Z&f|cI zBIhTg5uTNTo5mqcwiP?A55tFVlU*8o&?0>!cH?8Up?tl|nVeg*9FntAud&DPMKVyF zZB7+-rYjKmIS+yOKzbUYC5s=Tk=v@Llg5oD)IH7zmYI~K;;IaTvdPuS9Y_9T2-_FX zRmF6O)lPn9G111{I}~3vU*%XnNISGYh;>+oQm%R=3Vj`quKUKAooDO9rEtZOLkF5J{39xuXQr#p(u3e zLLpp3rjxY6KDcRtuzSX}=EurSwzum)Q$8*R8OQovLj2uROuIehB%Q*`UC5V=iU7Iy zF37lU*$*Jaa%#>%h}!bn2VqSg$+!!lYRLnf`UjRLTa}%;D5=Yf+lffq4NqKtxWT|x zE4qq5RtOrk(l5)%iNkuA+979;QCm&99w+&t71kh(i8C;EcANv4I(p?@_icZi=__kI za{Vc#Tn4QLIq{@bI()jBzRl-GbhcTwEe?`dWDVlq?ios4ig7N!Y*f1HmaPLhy*jw# zR9^3HyKMhWDyY}#u>SB4&C^OuM9r|9~622fo7tK1ie*NEkp6btnLp*1hp@tUNumbv;C&{C$4}VL~J1rZ8xPEt``kre z)7g_sHA-B!z|np7u(f*{2)+O?2`;ItWD09_3OadwfT4M<7wB|S` zvqhklrP>CNSBacvQKdAW7DL&Mu^6p~ru24i)*e~nSX zQqizq72<2l>gtm;9pEloOW3dyvPFf$-eO&%G;CLSWBQ@KlZb6q`G{YFyz-XpDu&8N z?6FvWNO*-v0>)l^{@l@(O(5s`lwksn4gfG%$@|Yax7u+)+v;vtCg+5p8U3N*HT$bm z4G`nuB)ey0M9Ld2&eq#7&3MVQJJ^cV9cXX9k^xi= zevNu3(ZF(wT)=Eo1Y53Xj)JgFe)DPk@=IF__DYKzN0CMDdH5W8VEfcwf{hTOAC1Rh zxhX+YYXIw6eCZnh*T@atGs|<59u0q_u)zs<`RSPwUdEtdVM4=B8Dn$c^o ze$PlWCF1i3N6D#uNM0kld~Rz}(MYhQ7~!6RzA@A2$wFdu{-jqB2;2mMwVr(C==)Zy zA_c#tg6O66c0^iy>cJpZyX=Z$e@9(Z#Yr)8H_HPr+EK)XIXfdU`cd}T%Rs2T)Zw|c zZK?ucE3DM1W=21a)l}^V;C^S-Z8f= zYK$?e)WEL`_M7CRB22eqogd;$w%t=;lE3;?=cUH`aJ&lcy23u_Fe!OCd}UQ}rlyuo zdL-W)C({@OHSfW1qF3ruT5!>|rhMg=UJ{gu_YHizYSx)pe7=E^Pa2 z$f2DX=1`v;7E3^;J5iL8op-uDGB~RoCbO{;P4ac1E^Th>j*Rotvh6m~HER{u4!EKBgC*(^Qk$t{cyu=^bnHciL{@L?h0{Q2 z!jq5_fwO>*=?R!*_$CpHBHv>Utu7``zKht&8|qtW&{sv=M2Y_vlP$8kjCIBY022`+ zb!S+t^)U^_Q2o(OGVPfpdTBDdmlS_4WE*H_qAe8jWq#p))~}Z15J3LY3F9exSDWfk z&}+(P-QF}Hw`%wnU$s4Ab6j#THXy@mn^k5Lm3^`tq*GqWZbbC?zN3eN2tF1eI^?aF zgzizy@bMv@?ZOf-l1K;ly$#GAnVjOC&5YYVV0BpplZ(vqlF$xyUwOc3>gL$Ikxq*w z$V-#wv{jh69RruOQ!?R`huN`XpKCwG?9{h7PDnsF6qZD3%$-YRM`Lz~FSa#SOE1T6 zXJ%#+P^rMeQLXfc`F0T$KL8bslQc5?k@SC_Zy&=W$4S5l)p+vTM6HcQ#S@y6ys7|h ztW&LHix-(tsJVS)3aEV*g!IXV9gb$!8xq2}jIi6)#cxQJ(BOsI6;sL+l7nH(A*Xlt?0Glh;NgI7Yh+pR)3c)L8AmqV->H$4UFKJ)eoZdN`@E^=%HAo1y? zDd0QqH}B{=e`S7Z3G4}byK}(a98lYXsHJl*EZ_(Qu)$pGCoU6m|61Do1LJ5)NM(I# z#4GJkIgJZu+@4`{QWB)fB-gEN2RuXd_A6a80e{94A&4D`Ui7AcB1N|bs4|*Aljp;` zA7MQFLHF+ZUTUZ7pXb26r_;f&UfW@Y)^ex0VScw3u(nDW#b$KiP@uD6$;qI)+?}zS z`_mmiqoLsZm{@fdw@Z)c zrUeIMY{kZ=?aMX8jbQ+kk7#3n1|vzV`E0uZ5Q*Ss08r9x1Y=3R@NF|G`@|0=U-r3Z z6Z5}V70ed`9d=?&c0<13Vef~5SqF{iZJdAgf9$X;K-#UHI`SH%|KN^$lITCVFVtU{ zKTGOL;$`u(xMh$o7aj)erNkZptv%*zR`{OG&=3>urA0_&M9QrR< zCF9udSAxjF4=;iW!Xc^x_}1D6OV{z0vPb|2{|z17J{*KO{4V*VOz6>)h*rxD~{KSI!l;_oL5IrNirOm%PDxWS_)1JE6^_iN0MATnU)I5h<>aP`;G^J zRkudi`S@eL`8a@0B8HH7QqAlKdvE_Xdpi;**lMn^-x1LwX@O?|uuQTRrSh50hs0BW zBiG&a2&94{Tb^0lBH(3w&!j5IRy+a@UOudjBfzu!?C{H-lu3toYn>vcYi+{4k*>pP z^1|G+S!+EH`-{U4c*07blvz+UqyV;gO#^VGg5yn8IuPh9B3?*A-pbgy{ten7_dV5k z(>|m-`Q0p#sPB?F1vC4QL$zd-^zm{TEB0+JNQ{{8?|_QTWJcL@GAJ3D?Zk;T>4pqp(j0>(fVFlLbu7NL)zwI zcbPChZZ5ayVIJidkAxV(?j4l5$`tT8{Q=?HEi9r+xf`_f>%-$F;18@bfGzK8F87`> z2N>tOPb8~dnWZJsl{?2W`gzNfPm^CpiWIBfj;Cda5pw)P;Wr>|Uv(2U8lL_<<5Fo; z##RlZp5S+X0-d5HV~-ybi1qJmx{G~DO7$}a7H~Q1Xf0SUFiOoDxQ5Lc znaBp8K%tzC*#Tt5QH|(Wl)8KdQe7SongQrMlzjq9VX2Y&tBG>i=7KWLn7eREptm*x z*Rcu?5VQpLd(YCJ=7HZy|0>))@H}b4keds*+JQp8tZ;S!%P6-kI*jzi?r$!r(gZT$ z+#^8bPzqjUb{^QY#>q@(Gi(L`VChRC(cT-#VMy2$%@t z{N=4cOySBAzS1ckp^Uq#d_JqkaqMNpFE_*59b#yeYD#4bfoEGw_i2_7S^2TsL|@oBwxSN?r4K^gvQI6fpV|YyK-B#LXEqF1LXR2Fdm};EWZe~2xy;=ZcmbN$$GNY zvvmd>%BW~3TYmym@briX-j-0?VPAG>``A+Qj-|3HO!pbVi+pyr@UEQsh-1gO`aDuh zIZOc;Q0zL#-flTUaId@N7}Tpcep+PHC$`q_>K5ktvMnpQyq1s|-iyJ(jzOt);W~@bAoGh!9+Lw6U<73ceWrR`cfi!2Uw0;d30s@PC|yP#=fX?h%YqwWFinV_E^ z;tB`21_#u@@dQ<8{4(dh``$^wZ<>oun2AX)w9J)`Xx~{45Ip_!CxZ(K{;FNgD5UlL z=)AN6@ydI%->ha-f_V$un1MfWp6I84YasZxrIJ?KWkaD~^qiAl3VHT3$3I{4|9|rT zWDl?u(+Z`BY3pZ+IAz_dH`Z4OC~1G5rt)v2nfk4uON)o=DmdNs?Z^GE*SM4$SPO_X za#%VhY`u8arUUO6!F)Vh&1aTI3E>V`V*$VE=RED=JastuFOvdB;1@0|KMis5)dMZ( zAehR1PLny`39UxyC{}U-nysU49PaM%I=$00U$yn-M)K3`59c(ZRMH-5b#1x7tuRHo z!vl3A3g?WKavr8P)->zQ%H^Z%1+)onnp(`|C?< zNw;(x(;>sl67@*jzrK*}$x~1(GWAgZbRJ><3S;k?)0W$m7n2+YkaT|S{)K!Nh8xh| z58}vy77i$P>h(-|Q~5<3^R)+T&7p$K5Rr0Ehvovbt`zWT%4?+W-H(3*o)fjrAA{r4 zXHQ0jG=;}#?c~5eJ|(vBJ`~#ub$Zc z#d=Jv7kL`LHOCf=X;2a-i^V%?7mW}K{GZI7>VI)gzR2ZW*-YL&8OiP|n`G&J{GCZU zrUnN}Ownu)aPcs$>L5w17>RjsssDVJCl9b3g}9XmPf5Psml1n+GWT4_laXep4;hrK z5l{f!7!#oF`Lv~v64qjl!W5M1trxWvm1?Y#eFr898+|VKp!xDw8{F~HKG`jOQe-dS zm7pv+65F4TvyN>fX0{`4qQBlD7p$<{W94zIG`hq1McPETT+?QD@D#bSC88X22eQK{ z_QfwAwWIFpQ3L_f`3P%u@#hWdPCzxHVjmrI{p)N3yZiPzkG_Ug0{ z$+F`)tIvidpV;vu+8htBzj-^xB&2>Qar)P%3_e2QVvnDyym>5_DG~ivdWWyy-oT+v zi8LJQGvYO>fLPDNn8s3Wll%P;>&b=qWSL+4s$cLps|u*Xladb(RAF^eQpPtQ&rTdW zlh%GY$}(qmTxsZ_1g5!joFl2k)+}tm_1;+nl6>dMPG%0PqibIu$9ZNyo2XLYdJ!e1 zaIlhl;bbeEW2KOWNETi;?0&xXYqR*N<23uPD%1Y!c@X_6@p1YijZp6XRRXt2>%#iu zp}z3Wjhno4?vw4%(W`2!!a@0Y=LRd@lb%Uz>b+BNu9^|C6rR6YIuYnmHR_R*Eu>b6(n zRsWU3?;X2tbHKPJ`u$s3O;lgvxfo;2r3pi;9P-H&x`Fh7Bj-G>VGQCA{dY8b!Govv?!ZX+yN@A0<6c)KVwcsdl~C;6Ek_sjMVUz5STYHR`(U ztPY!m<;J|o(jRvlx=w2rfVrI9?#Q367xf@lYi$j zCmw{cDAYd4z94|lnkMURI|(jXHHdvGyY;QAZ#JW<*&#-Pa1y48L~X@-sovMxY`<6wMdE@@`oGDgoy4$Z*85v@^efs7-_&`_Wv=8*czUv{ zy2N$KD?GjrLcrDk;Fn(FHz*W&Kw}e{JX`mT*xhwPw*J}h!QKUO(hY=(hryS&yZTvb zHFY_45-a`|;?t#qsb4XSC7O~Ll=4WGeZp+z2YjLM-^1y6aQ`XfRmOED-hzG(>w2Po z_G*Y*pz4FtT9<<8kF6I|$IP={ z-{*Y!c*qWxuJcS*^c@XfaYQrfbYDY&VBRl`C4(8#=uMtF_`FqPYbTCldxzJAKS1H0 zsu{|#E_%g7Q3j@_I+?{f|J*j%=XCb|oq!Q$x1+lw{m)K~bEGwjrN;h!*8~r$AxT@xkX0R>$c4@BQmJK1;6i!Qu_Nt+dk=I@v(^O^4+tQ|pg?RBt}n zkgg`jKKVG_u5H6xt`Cpu%QIl~wnnwtyD7X?apC3k%UG;<-2O(QX6u)QhaV!Y*`SE} zO>+@7glD%p<%Sd72khw-z8M}j!6d}IcWm&xD5|nI756R>rC}~~zFG?(VIEX$Pi*mW z`*O*=VPGLcr$ev)JR?{4B|fDnUQYj>4+xc>H8%1}dF!uSXC6el7hdbYW;mPC zol2gM(&N)CC23tL;G|PnHf-ovW1TONVhs>$u>Kw`sF!G7wBO+}V;t|uBIhGgF0rXr z(CXJJ-QJsD{O6fo*nI;1*D{C*AAW{4%o%S<60cAA==PZA^jh82!w=HcaVK`F50!#W zRAO8o^{^QfvAz*Gez!Hw-Y6if|I~;-*Qi@Kxo9%kV*nnob>@ENmx@KE4l6o?TI%HN#d7lA$DpMSd#3Tlv%Dk9(&@a zk$IXrGQZxazj0(+ZUS*Rj={5h29|SaBYUcMYG!I~ifE_u;I6egZ_kLn{<1KCav;|z zChgN(_q4>5eKm-*8i9h}s*-4za)b}}E<8wQ9XB2;Iy4n|QC?t7u1}RKUuPX4#dzj`Wja07Boa48&2-#zmRC*xSGOkdonz*T3$XN)j+A|r7@*;$iz zrOdUf8AF>MgZBeU5OL@?64RTW*UzOqsmjxr%NJ76S1;Equ{0om>9Bocufe=wx?Czs y{&ArHxk7#q#y`a6|Nr!_{Ncym2{t@2&(|%3*IB6;=Yqh$YnL@I<@|1b|Nj6k9{D=} diff --git a/Tests/ReferenceImages_32/ChartsTests.BarChartTests/testDrawIcons.png b/Tests/ReferenceImages_32/ChartsTests.BarChartTests/testDrawIcons.png deleted file mode 100644 index 27871dd26017f962547184c0d10686d82754d6cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54151 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

Dz4rnhr?iDF3yAIW`q5{n+?$B+B{ZvXLi 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�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≦G`WRyQEtlga_f}z87o>IQqvEby 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 diff --git a/Tests/ReferenceImages_32/ChartsTests.BarChartTests/testHideHorizontalGridlines.png b/Tests/ReferenceImages_32/ChartsTests.BarChartTests/testHideHorizontalGridlines.png deleted file mode 100644 index e055c121272789f99a5d2b835b9b028cf66af11a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19207 zcmeFYXH-;M(=NKY$siztMRF4)XYOp=@B6*q8E2ex?j7UaUw03oH}qO_)~tH!si$f+PjBm}Qj#;1Ll8u% zu69cwf?!ziWkE^|eq&D8nE+m3Uizvxq0(;F1@Hr_<1JkS@CpZC`2Whl7vDdx;Qu-6 zUd{8^fY-kLAJXA?bLM;&qqX#egT$}km%DnW%{&Ak=q4>nkAI*$qQFV z3y4O;Z_un=`+Rnt_^srPFXd_s;r;~P5AP106CiB7^XQlD-SG2YGpLV#OUi4V^mKG~ zbY>oP&NR-2^w@?5m7K^1t=2VGoE*H|kPUJx{BiLoM1}od{6l}1@pyJ``|ain?}g9R zrs#XmwX$k93bX=l7j{faD+rj=;-p>_^*akEHz=6l7pQ+zixh2vQjr(_w~7b2(M z_5~*~KHlT=MovzX#+||1fklIrzXQB#V|Jf!-Y%|j)=0lWGW%Y;N8>=VK{H-6N+Umu zDp)fq%}QnX;rHZ&*v$hs?e|q0d#f4^>Z%&_O4^#=2eD%X3Tl#Xm|KkZR`b7UcfKlB znWC2*$2ucEct=-OCplM@_HBNXn#zAV*A-=Z^Ottgp@W$z^_^%At*XGR^*L})k6Q|i zSCb=o+p(U>>4dXiFHuoS-PN{Rn><}!P*6K1BcbYQ+3a^BeP(p~+u-+`oE<9d8~JYv z1_luuANwyZywoZE5vVcn`+G_3Zu+kBmyNb=zLMwNiE#;Pw2Nr+s-;qcF(HFV73qA# z?Wv860`gtFhQhx9uw@GNNR-$`QA z_0wSZLVP_<^w;@sC){`4?n$h6(KDeG%WL;?ljWNYxV4`V_-cHWzmVu%C)xo^92A*Y zK!yk$L3ZA(Y6Sio;=Yj=)D`Zwm9C15%)l~tur=>6VwNMw^1bzt1-YVXw>zQnwTJh# zm+yJd-uaqQN$r03=PPfby$(;rRdL&lNc3oD!8|EQcS}m2?Rx68A(@}1w%}bxzWPL9$RS;RsQ

)1BU20Wfk~5T7rjpo`<++~w$|Ml4-Ml+O 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