diff --git a/LICENSE b/LICENSE.md similarity index 100% rename from LICENSE rename to LICENSE.md diff --git a/Classes/BEMAverageLine.h b/Objective-C Implementation/BEMAverageLine.h similarity index 100% rename from Classes/BEMAverageLine.h rename to Objective-C Implementation/BEMAverageLine.h diff --git a/Classes/BEMAverageLine.m b/Objective-C Implementation/BEMAverageLine.m similarity index 100% rename from Classes/BEMAverageLine.m rename to Objective-C Implementation/BEMAverageLine.m diff --git a/Classes/BEMCircle.h b/Objective-C Implementation/BEMCircle.h similarity index 100% rename from Classes/BEMCircle.h rename to Objective-C Implementation/BEMCircle.h diff --git a/Classes/BEMCircle.m b/Objective-C Implementation/BEMCircle.m similarity index 100% rename from Classes/BEMCircle.m rename to Objective-C Implementation/BEMCircle.m diff --git a/Classes/BEMGraphCalculator.h b/Objective-C Implementation/BEMGraphCalculator.h similarity index 100% rename from Classes/BEMGraphCalculator.h rename to Objective-C Implementation/BEMGraphCalculator.h diff --git a/Classes/BEMGraphCalculator.m b/Objective-C Implementation/BEMGraphCalculator.m similarity index 100% rename from Classes/BEMGraphCalculator.m rename to Objective-C Implementation/BEMGraphCalculator.m diff --git a/Classes/BEMLine.h b/Objective-C Implementation/BEMLine.h similarity index 100% rename from Classes/BEMLine.h rename to Objective-C Implementation/BEMLine.h diff --git a/Classes/BEMLine.m b/Objective-C Implementation/BEMLine.m similarity index 100% rename from Classes/BEMLine.m rename to Objective-C Implementation/BEMLine.m diff --git a/Classes/BEMSimpleLineGraphView.h b/Objective-C Implementation/BEMSimpleLineGraphView.h similarity index 90% rename from Classes/BEMSimpleLineGraphView.h rename to Objective-C Implementation/BEMSimpleLineGraphView.h index 9d38dcd..8389b0b 100644 --- a/Classes/BEMSimpleLineGraphView.h +++ b/Objective-C Implementation/BEMSimpleLineGraphView.h @@ -76,48 +76,6 @@ IB_DESIGNABLE @interface BEMSimpleLineGraphView : UIView *)graphValuesForXAxis; diff --git a/Classes/BEMSimpleLineGraphView.m b/Objective-C Implementation/BEMSimpleLineGraphView.m similarity index 95% rename from Classes/BEMSimpleLineGraphView.m rename to Objective-C Implementation/BEMSimpleLineGraphView.m index 2cb7bfa..15593d9 100644 --- a/Classes/BEMSimpleLineGraphView.m +++ b/Objective-C Implementation/BEMSimpleLineGraphView.m @@ -8,7 +8,6 @@ // #import "BEMSimpleLineGraphView.h" -#import "BEMGraphCalculator.h" //just for deprecation warnings; should be removed const CGFloat BEMNullGraphValue = CGFLOAT_MAX; @@ -509,21 +508,28 @@ - (void)drawEntireGraph { } - (CGFloat)labelWidthForValue:(CGFloat)value { - NSDictionary *attributes = @{NSFontAttributeName: self.labelFont}; + UIFont *fontToUse = [UIFont preferredFontForTextStyle:UIFontTextStyleCaption1]; + if (self.labelFont != nil) fontToUse = self.labelFont; + + NSDictionary *attributes = @{NSFontAttributeName: fontToUse}; NSString *valueString = [self yAxisTextForValue:value]; NSString *labelString = [valueString stringByReplacingOccurrencesOfString:@"[0-9-]" withString:@"N" options:NSRegularExpressionSearch range:NSMakeRange(0, [valueString length])]; return [labelString sizeWithAttributes:attributes].width; } - (CGFloat)calculateWidestLabel { - NSDictionary *attributes = @{NSFontAttributeName: self.labelFont}; + UIFont *fontToUse = [UIFont preferredFontForTextStyle:UIFontTextStyleCaption1]; + if (self.labelFont != nil) fontToUse = self.labelFont; + + NSDictionary *attributes = @{NSFontAttributeName: fontToUse}; CGFloat widestNumber; - if (self.autoScaleYAxis == YES){ + if (self.autoScaleYAxis == YES) { widestNumber = MAX([self labelWidthForValue:self.maxValue], [self labelWidthForValue:self.minValue]); } else { - widestNumber = [self labelWidthForValue:self.frame.size.height] ; + widestNumber = [self labelWidthForValue:self.frame.size.height] ; } + if (self.averageLine.enableAverageLine) { return MAX(widestNumber, [self.averageLine.title sizeWithAttributes:attributes].width); } else { @@ -1463,41 +1469,6 @@ - (CGFloat)yPositionForDotValue:(CGFloat)dotValue { // MARK: - Deprecated Methods - - (NSNumber *)calculatePointValueSum { - [self printDeprecationTransitionWarningForOldMethod:@"calculatePointValueSum" replacementMethod:@"calculatePointValueSumOnGraph:" newObject:@"BEMGraphCalculator" sharedInstance:YES]; - return [[BEMGraphCalculator sharedCalculator] calculatePointValueSumOnGraph:self]; -} - -- (NSNumber *)calculatePointValueMode { - [self printDeprecationTransitionWarningForOldMethod:@"calculatePointValueMode" replacementMethod:@"calculatePointValueModeOnGraph:" newObject:@"BEMGraphCalculator" sharedInstance:YES]; - return [[BEMGraphCalculator sharedCalculator] calculatePointValueModeOnGraph:self]; -} - -- (NSNumber *)calculatePointValueMedian { - [self printDeprecationTransitionWarningForOldMethod:@"calculatePointValueMedian" replacementMethod:@"calculatePointValueMedianOnGraph:" newObject:@"BEMGraphCalculator" sharedInstance:YES]; - return [[BEMGraphCalculator sharedCalculator] calculatePointValueMedianOnGraph:self]; -} - -- (NSNumber *)calculatePointValueAverage { - [self printDeprecationTransitionWarningForOldMethod:@"calculatePointValueAverage" replacementMethod:@"calculatePointValueAverageOnGraph:" newObject:@"BEMGraphCalculator" sharedInstance:YES]; - return [[BEMGraphCalculator sharedCalculator] calculatePointValueAverageOnGraph:self]; -} - -- (NSNumber *)calculateMinimumPointValue { - [self printDeprecationTransitionWarningForOldMethod:@"calculateMinimumPointValue" replacementMethod:@"calculatePointValueAverageOnGraph:" newObject:@"BEMGraphCalculator" sharedInstance:YES]; - return [[BEMGraphCalculator sharedCalculator] calculateMinimumPointValueOnGraph:self]; -} - -- (NSNumber *)calculateMaximumPointValue { - [self printDeprecationTransitionWarningForOldMethod:@"calculateMaximumPointValue" replacementMethod:@"calculateMaximumPointValueOnGraph:" newObject:@"BEMGraphCalculator" sharedInstance:YES]; - return [[BEMGraphCalculator sharedCalculator] calculateMaximumPointValueOnGraph:self]; -} - -- (NSNumber *)calculateLineGraphStandardDeviation { - [self printDeprecationTransitionWarningForOldMethod:@"calculateLineGraphStandardDeviation" replacementMethod:@"calculateStandardDeviationOnGraph:" newObject:@"BEMGraphCalculator" sharedInstance:YES]; - return [[BEMGraphCalculator sharedCalculator] calculateStandardDeviationOnGraph:self]; -} - - (void)printDeprecationAndUnavailableWarningForOldMethod:(NSString *)oldMethod { NSLog(@"[BEMSimpleLineGraph] UNAVAILABLE, DEPRECATION ERROR. The delegate method, %@, is both deprecated and unavailable. It is now a data source method. You must implement this method from BEMSimpleLineGraphDataSource. Update your delegate method as soon as possible. One of two things will now happen: A) an exception will be thrown, or B) the graph will not load.", oldMethod); } diff --git a/README.md b/README.md index cb357e5..0e9f025 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,18 @@ -# BEMSimpleLineGraph -[![Build Status](https://travis-ci.org/Boris-Em/BEMSimpleLineGraph.svg?branch=master)](https://travis-ci.org/Boris-Em/BEMSimpleLineGraph) -[![Version](https://img.shields.io/cocoapods/v/BEMSimpleLineGraph.svg?style=flat)](http://cocoadocs.org/docsets/BEMSimpleLineGraph) -[![License](https://img.shields.io/cocoapods/l/BEMSimpleLineGraph.svg?style=flat)](http://cocoadocs.org/docsets/BEMSimpleLineGraph) -[![Platform](https://img.shields.io/cocoapods/p/BEMSimpleLineGraph.svg?style=flat)](http://cocoadocs.org/docsets/BEMSimpleLineGraph) -

- -

-

+# BEMSimpleLineGraph - Swift Implementation +Hi there! You've found the Swift branch of BEMSimpleLineGraph. This implementation is **not** currently supported or ready for production use. However, we would appreciate any and all contributions towards this branch. -

-BEMSimpleLineGraph makes it easy to create and customize line graphs for iOS. -

+

-**BEMSimpleLineGraph** is a charting library that makes it easy to create beautiful line graphs for iOS. It is easy to set-up and to use in any iOS Project. It's focused on highly customizable and interactive line graphs. Plus, it is lightweight and can be integrated in minutes (maybe even seconds). +**BEMSimpleLineGraph** is a charting library that makes it easy to create beautiful line graphs for iOS. It is easy to set-up and to use in any iOS Project. It's focused on highly customizable and interactive line graphs. Plus, it is lightweight and can be integrated in minutes (maybe even seconds). -**BEMSimpleLineGraph's** implementation, data source, and delegate are all modeled off of UITableView and UICollectionView. If you're familiar with using a UITableView, UITableViewController, or UICollectionView, using BEMSimpleLineGraph should be a breeze! - -The full documentation of the project is available on its [wiki](https://github.com/Boris-Em/BEMSimpleLineGraph/wiki). +Full documentation of the Objective-C implementation of this project is available on the [wiki](https://github.com/Boris-Em/BEMSimpleLineGraph/wiki). ## Table of Contents * [**Project Details**](#project-details) * [Requirements](#requirements) - * [License](#license) - * [Support](#support) * [Sample App](#sample-app) - * [Apps Using This Project](#apps-using-this-project) +* [**Contributing**](#contributing) * [**Getting Started**](#getting-started) * [Installation](#installation) * [Setup](#setup) @@ -33,134 +20,147 @@ The full documentation of the project is available on its [wiki](https://github. * [Full documentation (wiki)](https://github.com/Boris-Em/BEMSimpleLineGraph/wiki) * [Required Delegate / Data Source Methods](#required-delegate--data-source-methods) * [Reloading the Data Source](#reloading-the-data-source) - * [Bezier Curves](#bezier-curves) - * [Interactive Graph](#interactive-graph) - * [Properties](#properties) ## Project Details Learn more about the **BEMSimpleLineGraph** project requirements, licensing, and contributions. ### Requirements -*See the full article on the wiki [here](https://github.com/Boris-Em/BEMSimpleLineGraph/wiki/Requirements).* +*The requirements for the Swift implementation are markedly different from the Objective-C implementation (see the master and feature branches for Objective-C). Please refer to the table below to understand exactly what is required.* -| Current Build Target | Earliest Supported Build Target | Earliest Compatible Build Target | -|:--------------------: |:-------------------------------: |:--------------------------------: | -| iOS 9.0 | iOS 9.0 | iOS 7.0 | -| Xcode 8.3 | Xcode 8.3 | Xcode 6.1 | -| LLVM 8.1 | LLVM 8.1 | LLVM 6.1 | +| Current Build Target | Earliest Supported Build Target | Earliest Compatible Build Target | +|:--------------------: |:-------------------------------: |:--------------------------------: | +| iOS 11.0b4 | iOS 10.0 | iOS 9.0 | +| Xcode 9.0b4 | Xcode 8.3 | Xcode 8.0 | +| LLVM 9.0 | LLVM 8.1 | LLVM 8.0 | +| Swift Compiler | Swift Compiler | Swift Compiler | +| Swift v4.0 | Swift v3.2 | Swift v3.2 | > REQUIREMENTS NOTE *Supported* means that the library has been tested with this version. *Compatible* means that the library should work on this OS version (i.e. it doesn't rely on any unavailable SDK features) but is no longer being tested for compatibility and may require tweaking or bug fixes to run correctly. -### License -See the [License](https://github.com/Boris-Em/BEMSimpleLineGraph/blob/master/LICENSE). You are free to make changes and use this in either personal or commercial projects. Attribution is not required, but it is appreciated. A little Thanks! (or something to that affect) would be much appreciated. If you use BEMSimpleLineGraph in your app, let us know. - -### Support -[![Gitter chat](https://badges.gitter.im/Boris-Em/BEMSimpleLineGraph.png)](https://gitter.im/Boris-Em/BEMSimpleLineGraph) -Join us on [Gitter](https://gitter.im/Boris-Em/BEMSimpleLineGraph) if you need any help or want to talk about the project. - -Ask questions and get answers from a massive community or programmers on StackOverflow when you use the [BEMSimpleLineGraph tag](http://stackoverflow.com/questions/tagged/bemsimplelinegraph). - ### Sample App -The iOS Sample App included with this project demonstrates how to correctly setup and use BEMSimpleLineGraph. You can refer to the sample app for an understanding of how to use and setup BEMSimpleLineGraph. - -### Apps Using This Project -Dozens of production apps available on the iOS App Store use **BEMSimpleLineGraph**. You can view a full list of the [known App Store apps using this project on the wiki](https://github.com/Boris-Em/BEMSimpleLineGraph/wiki/Apps-Using-This-Project), read their descriptions, get links, pricing, featured status, and screenshots of graph usage. - -Add your **BEMSimpleLineGraph** app to the wiki page for a chance to get showcased in the Readme and / or the wiki. We can't wait to see what you create with **BEMSimpleLineGraph**. +Because the implementation of the Swift version of this project is incomplete, a functional sample app is unavailable at this time. +## Contributing +We need help implementing this project in Swift and migrating it over from Objective-C. If you are interested in contributing towards this, please fork this branch of the repository, make changes, and submit pull requests (make sure you submit PRs to *this* branch, **not** the master or feature branch). + +Key differences between the current implementation and the Objective-C implementation: +- All Swift classes are suffixed with `_Swift` to avoid compatibility issues (until the Swift implementation is usable) +- Some objects, which were defined as `classes` in Objective-C are now defined, more appropriately, as Swift `structs` +- Most values have been transitioned over to Swift types (i.e. `Int`, `Float`, `String`, etc.). Remaining Objective-C types are for compatibility purposes. +- Some new classes and structs have been created (spun-off) in order to develop a better development structure / model + +Here's what's left to do: +- [x] Transition `BEMLine` and refactor key properties and components +- [ ] Refactor some internal `BEMLine` functions +- [x] Spin-off and rewrite `BEMAverageLine` as a `struct` +- [x] Transition `BEMCircle` +- [ ] Refactor `BEMCircle` as a `struct` +- [x] Transition `BEMPermanentPopupView` and `BEMPermanentPopupLabel` +- [x] Transition `BEMGraphCalculator` and refactor some internal calculation functions +- [ ] Transition `BEMSimpleLineGraphView` and refactor some components by spinning off into separate `classes` and `structs` + ## Getting Started *See the full article on the wiki [here](https://github.com/Boris-Em/BEMSimpleLineGraph/wiki/Getting-Started).* **BEMSimpleLineGraph** can be added to any project (big or small) in a matter of minutes (maybe even seconds if you're super speedy). CocoaPods is fully supported, and so are all the latest technologies (eg. ARC, Storyboards, Interface Builder Attributes, Modules, and more). ### Installation -The easiest way to install BEMSimpleLineGraph is to use CocoaPods. To do so, simply add the following line to your `Podfile`: -
pod 'BEMSimpleLineGraph'
+CocoaPods is not currently supported on this branch. Please do a manual install until CocoaPods becomes available. -The other way to install **BEMSimpleLineGraph**, is to drag and drop the *Classes* folder into your Xcode project. When you do so, check the "*Copy items into destination group's folder*" box. + 1. Drag and drop the *Swift Implementation* and *Objective-C Implementation* folder into your Xcode project. When you do so, check the "*Copy items into destination group's folder*" box. + 2. A Bridging header is included by default in the *Swift Implementation* folder because not all content has been implemented in Swift and thus Objective-C is still needed. You can either add the import statements from the bridging header to your own bridging header, or set the included one as your project's bridging header. #### Swift Projects To use **BEMSimpleLineGraph** in a Swift project add the following to your bridging header: #import "BEMSimpleLineGraphView.h" + +Although a good chunk of the project has been implemented in Swift, the core of it has not - thus Objective-C is still required. ### Setup -Setting up **BEMSimpleLineGraph** in your project is simple. If you're familiar with UITableView, then **BEMSimpleLineGraph **should be a breeze. Follow the steps below to get everything up and running. +Setting up **BEMSimpleLineGraph** in your project is simple. If you're familiar with UITableView, then **BEMSimpleLineGraph** should be a breeze. Follow the steps below to get everything up and running. 1. Import `"BEMSimpleLineGraphView.h"` to the header of your view controller: + // Objective-C #import "BEMSimpleLineGraphView.h" + + // Swift + // No import necessary - 2. Implement the `BEMSimpleLineGraphDelegate` and `BEMSimpleLineGraphDataSource` in the same view controller: + 2. Implement `BEMSimpleLineGraphDelegate` and `BEMSimpleLineGraphDataSource` in the same view controller: + // Objective-C @interface YourViewController : UIViewController + + // Swift + class YourViewController : UIViewController, BEMSimpleLineGraphDataSource, BEMSimpleLineGraphDelegate 3. BEMSimpleLineGraphView can be initialized in one of two ways. You can either add it directly to your interface (storyboard file) OR through code. Both ways provide the same initialization, just different ways to do the same thing. Use the method that makes sense for your app or project. **Interface Initialization** 1 - Add a UIView to your UIViewController 2 - Change the class type of the UIView to `BEMSimpleLineGraphView` - 3 - Link the view to your code using an `IBOutlet`. You can set the property to `weak` and `nonatomic`. + 3 - Link the view to your code using an `IBOutlet`. You can set the property to `weak` (and `nonatomic` in Objective-C). 4 - Select the `BEMSimpleLineGraphView` in your interface. Connect the **dataSource** property and then the **delegate** property to your ViewController. 5 - Select the `BEMSimpleLineGraphView` and open the Attributes Inspector. Most of the line graph's customizable properties can easily be set from the Attributes Inspector. The Sample App demonstrates this capability. Note that graph data will not be loaded in Interface Builder. **Code Initialization** Just add the following code to your implementation (usually the `viewDidLoad` method). - BEMSimpleLineGraphView *myGraph = [[BEMSimpleLineGraphView alloc] initWithFrame:CGRectMake(0, 0, 320, 200)]; - myGraph.dataSource = self; - myGraph.delegate = self; - [self.view addSubview:myGraph]; + // Objective-C + BEMSimpleLineGraphView *graph = [[BEMSimpleLineGraphView alloc] initWithFrame:CGRectMake(0, 0, 320, 200)]; + graph.dataSource = self; + graph.delegate = self; + [self.view addSubview:graph]; + + // Swift + let graph = BEMSimpleLineGraphView.init(frame: CGRect.init(x: 0, y: 0, width: 320, height: 200)) + graph.dataSource = self + graph.delegate = self + view.addSubview(graph) 4. Implement the two required data source methods: `numberOfPointsInLineGraph:` and `lineGraph:valueForPointAtIndex:`. See documentation below for more information ## Documentation -The essential parts of **BEMSimpleLineGraph** are documented below. For full documentation, see the [wiki](https://github.com/Boris-Em/BEMSimpleLineGraph/wiki). Documentation is available directly within Xcode (just Option-Click any method for Quick Help). +The essential parts of **BEMSimpleLineGraph** are documented below. For full Objective-C documentation, see the [wiki](https://github.com/Boris-Em/BEMSimpleLineGraph/wiki). Documentation is also available directly within Xcode (just Option-Click any method for Quick Help). ### Required Delegate / Data Source Methods **Number of Points in Graph** Returns the number of points in the line graph. The line graph gets the value returned by this method from its data source and caches it. + // Objective-C - (NSInteger)numberOfPointsInLineGraph:(BEMSimpleLineGraphView *)graph { return X; // Number of points in the graph. } + + // Swift + func numberOfPoints(inLineGraph graph: BEMSimpleLineGraphView) -> UInt { + return 5 + } **Value for Point at Index** Informs the position of each point on the Y-Axis at a given index. This method is called for every point specified in the `numberOfPointsInLineGraph:` method. The parameter `index` is the position from left to right of the point on the X-Axis: - - (CGFloat)lineGraph:(BEMSimpleLineGraphView *)graph valueForPointAtIndex:(NSInteger)index { - return …; // The value of the point on the Y-Axis for the index. - } + // Objective-C + - (CGFloat)lineGraph:(BEMSimpleLineGraphView *)graph valueForPointAtIndex:(NSInteger)index { + return ...; // The value of the point on the Y-Axis for the index. + } + + // Swift + let dataSource = [5, 16, 8, 3, 10] + func lineGraph(_ graph: BEMSimpleLineGraphView, valueForPointAt index: UInt) -> CGFloat { + return CGFloat(dataSource[Int(index)]) + } ### Reloading the Data Source Similar to a UITableView's `reloadData` method, BEMSimpleLineGraph has a `reloadGraph` method. Call this method to reload all the data that is used to construct the graph, including points, axis, index arrays, colors, alphas, and so on. Calling this method will cause the line graph to call `layoutSubviews` on itself. The line graph will also call all of its data source and delegate methods again (to get the updated data). - - (void)anyMethodInYourOwnController { - // Change graph properties - // Update data source / arrays - - // Reload the graph - [self.myGraph reloadGraph]; - } - -### Interactive Graph -**BEMSimpleLineGraph** can react to the user touching the graph by two different ways: **Popup Reporting** and **Touch Reporting**. - -

-

On this example, both Popup Reporting and Touch Reporting are activated.

+ // Objective-C + [self.graph reloadGraph]; + + // Swift + graph.reloadGraph() -### Bezier Curves - - -**BEMSimpleLineGraph** can be drawn with curved lines instead of directly connecting the dots with straight lines. -To do so, set the property `enableBezierCurve` to YES. - - self.myGraph.enableBezierCurve = YES; - -### Properties -**BEMSimpleLineGraphs** can be customized by using various properties. A multitude of properties let you control the animation, colors, and alpha of the graph. Many of these properties can be set from Interface Build and the Attributes Inspector, others must be set in code. - -## Contributing -To contribute to **BEMSimpleLineGraph** please see the `CONTRIBUTING.md` file, which lays out exactly how you can contribute to this project. diff --git a/Sample Project/SimpleLineChart-Swift/AppDelegate.swift b/Sample Project/SimpleLineChart-Swift/AppDelegate.swift new file mode 100644 index 0000000..5a775fe --- /dev/null +++ b/Sample Project/SimpleLineChart-Swift/AppDelegate.swift @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// SimpleLineChart-Swift +// +// Created by Sam Spencer on 8/4/17. +// Copyright © 2017 Boris Emorine. 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. + 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/Sample Project/SimpleLineChart-Swift/Assets.xcassets/AppIcon.appiconset/Contents.json b/Sample Project/SimpleLineChart-Swift/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..1d060ed --- /dev/null +++ b/Sample Project/SimpleLineChart-Swift/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,93 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Sample Project/SimpleLineChart-Swift/Base.lproj/LaunchScreen.storyboard b/Sample Project/SimpleLineChart-Swift/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..5654142 --- /dev/null +++ b/Sample Project/SimpleLineChart-Swift/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sample Project/SimpleLineChart-Swift/Base.lproj/Main.storyboard b/Sample Project/SimpleLineChart-Swift/Base.lproj/Main.storyboard new file mode 100644 index 0000000..7ef2ecf --- /dev/null +++ b/Sample Project/SimpleLineChart-Swift/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sample Project/SimpleLineChart-Swift/Info.plist b/Sample Project/SimpleLineChart-Swift/Info.plist new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ b/Sample Project/SimpleLineChart-Swift/Info.plist @@ -0,0 +1,45 @@ + + + + + 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 + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Sample Project/SimpleLineChart-Swift/ViewController.swift b/Sample Project/SimpleLineChart-Swift/ViewController.swift new file mode 100644 index 0000000..5b993eb --- /dev/null +++ b/Sample Project/SimpleLineChart-Swift/ViewController.swift @@ -0,0 +1,77 @@ +// +// ViewController.swift +// SimpleLineChart-Swift +// +// Created by Sam Spencer on 8/4/17. +// Copyright © 2017 Boris Emorine. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController, BEMSimpleLineGraphDataSource, BEMSimpleLineGraphDelegate { + + let dataSource = [5, 16, 8, 3, 10] + let labels = ["1", "2", "3", "4", "5"] + + func numberOfPoints(inLineGraph graph: BEMSimpleLineGraphView) -> UInt { + return 5 + } + + func lineGraph(_ graph: BEMSimpleLineGraphView, valueForPointAt index: UInt) -> CGFloat { + return CGFloat(dataSource[Int(index)]) + } + + func lineGraph(_ graph: BEMSimpleLineGraphView, labelOnXAxisFor index: UInt) -> String? { + return labels[Int(index)] + } + + func numberOfGapsBetweenLabels(onLineGraph graph: BEMSimpleLineGraphView) -> UInt { + return 0 + } + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + let graph = BEMSimpleLineGraphView.init(frame: CGRect.init(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height)) + graph.dataSource = self + graph.delegate = self + + graph.enableTouchReport = true + graph.enablePopUpReport = true + graph.enableBezierCurve = true + graph.widthLine = 3.0 + graph.enableReferenceAxisFrame = true + graph.enableReferenceXAxisLines = true + graph.enableReferenceYAxisLines = true + graph.enableYAxisLabel = true + + // Apply a gradient to the bottom portion of the graph + let colorspace = CGColorSpaceCreateDeviceRGB() + let num_locations: size_t = 2 + let locations: [CGFloat] = [0.0, 1.0] + let components: [CGFloat] = [0.976, 0.678, 0.298, 1.0, 0.98, 0.2196, 0.1961, 1.0] + let gradient: CGGradient = CGGradient(colorSpace: colorspace, colorComponents: components, locations: locations, count: num_locations)! + graph.gradientBottom = gradient + + graph.colorTop = .black + graph.colorLine = .white + graph.colorXaxisLabel = .white + graph.colorYaxisLabel = .white + graph.colorBackgroundXaxis = UIColor.init(red: 0.98, green: 0.2196, blue: 0.1961, alpha: 1.0) + graph.backgroundColor = UIColor.init(red: 0.98, green: 0.2196, blue: 0.1961, alpha: 1.0) + + view.addSubview(graph) + } + + override var prefersStatusBarHidden: Bool { + return true + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + +} + diff --git a/Sample Project/SimpleLineChart-SwiftTests/Info.plist b/Sample Project/SimpleLineChart-SwiftTests/Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/Sample Project/SimpleLineChart-SwiftTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Sample Project/SimpleLineChart-SwiftTests/SimpleLineChart_SwiftTests.swift b/Sample Project/SimpleLineChart-SwiftTests/SimpleLineChart_SwiftTests.swift new file mode 100644 index 0000000..18d49fd --- /dev/null +++ b/Sample Project/SimpleLineChart-SwiftTests/SimpleLineChart_SwiftTests.swift @@ -0,0 +1,36 @@ +// +// SimpleLineChart_SwiftTests.swift +// SimpleLineChart-SwiftTests +// +// Created by Sam Spencer on 8/4/17. +// Copyright © 2017 Boris Emorine. All rights reserved. +// + +import XCTest +@testable import SimpleLineChart_Swift + +class SimpleLineChart_SwiftTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/Sample Project/SimpleLineChart.xcodeproj/project.pbxproj b/Sample Project/SimpleLineChart.xcodeproj/project.pbxproj index 8097671..809dff9 100644 --- a/Sample Project/SimpleLineChart.xcodeproj/project.pbxproj +++ b/Sample Project/SimpleLineChart.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 48; objects = { /* Begin PBXBuildFile section */ @@ -34,10 +34,29 @@ 1E960B1A1E7F9C80000E2BB8 /* MSThumbView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E960B0F1E7F9C80000E2BB8 /* MSThumbView.m */; }; 1E960B1B1E7F9C80000E2BB8 /* UIControl+HitTestEdgeInsets.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E960B111E7F9C80000E2BB8 /* UIControl+HitTestEdgeInsets.m */; }; 99B15643187B412400B24591 /* StatsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 99B15642187B412400B24591 /* StatsViewController.m */; }; - 99B3FA3A1877898B00539A7B /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 99B3FA381877898B00539A7B /* LICENSE */; }; + 99B3FA3A1877898B00539A7B /* LICENSE.md in Resources */ = {isa = PBXBuildFile; fileRef = 99B3FA381877898B00539A7B /* LICENSE.md */; }; 99B3FA3B1877898B00539A7B /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 99B3FA391877898B00539A7B /* README.md */; }; A63990B51AD4923900B14D88 /* BEMAverageLine.m in Sources */ = {isa = PBXBuildFile; fileRef = A63990B41AD4923900B14D88 /* BEMAverageLine.m */; }; A64594521BAB257B00D6B8FD /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A64594501BAB257B00D6B8FD /* Launch Screen.storyboard */; }; + A66043101F35150A005CB5D4 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A660430F1F35150A005CB5D4 /* AppDelegate.swift */; }; + A66043121F35150A005CB5D4 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A66043111F35150A005CB5D4 /* ViewController.swift */; }; + A66043151F35150A005CB5D4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A66043131F35150A005CB5D4 /* Main.storyboard */; }; + A66043171F35150A005CB5D4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A66043161F35150A005CB5D4 /* Assets.xcassets */; }; + A660431A1F35150A005CB5D4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A66043181F35150A005CB5D4 /* LaunchScreen.storyboard */; }; + A66043251F35150B005CB5D4 /* SimpleLineChart_SwiftTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A66043241F35150B005CB5D4 /* SimpleLineChart_SwiftTests.swift */; }; + A660432D1F35155E005CB5D4 /* BEMLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = A66043021F3513FB005CB5D4 /* BEMLine.swift */; }; + A660432F1F351564005CB5D4 /* BEMAverageLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = A66042FF1F3513FB005CB5D4 /* BEMAverageLine.swift */; }; + A66043301F351564005CB5D4 /* BEMCircle.swift in Sources */ = {isa = PBXBuildFile; fileRef = A66043001F3513FB005CB5D4 /* BEMCircle.swift */; }; + A66043311F351564005CB5D4 /* BEMPermanentPopupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A66043031F3513FB005CB5D4 /* BEMPermanentPopupView.swift */; }; + A66043321F351564005CB5D4 /* BEMGraphCalculator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A66043011F3513FB005CB5D4 /* BEMGraphCalculator.swift */; }; + A66043331F351589005CB5D4 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3FD815A186DFD9A00FD8ED3 /* CoreGraphics.framework */; }; + A66043341F35158F005CB5D4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3FD8158186DFD9A00FD8ED3 /* Foundation.framework */; }; + A66043351F351593005CB5D4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3FD815C186DFD9A00FD8ED3 /* UIKit.framework */; }; + A66043371F3515C7005CB5D4 /* BEMSimpleLineGraphView.m in Sources */ = {isa = PBXBuildFile; fileRef = C3B90A5D187D15F7003E407D /* BEMSimpleLineGraphView.m */; }; + A66043381F35177B005CB5D4 /* BEMCircle.m in Sources */ = {isa = PBXBuildFile; fileRef = C3B90A59187D15F7003E407D /* BEMCircle.m */; }; + A66043391F35177B005CB5D4 /* BEMLine.m in Sources */ = {isa = PBXBuildFile; fileRef = C3B90A5B187D15F7003E407D /* BEMLine.m */; }; + A660433A1F35177B005CB5D4 /* BEMAverageLine.m in Sources */ = {isa = PBXBuildFile; fileRef = A63990B41AD4923900B14D88 /* BEMAverageLine.m */; }; + A660433C1F351932005CB5D4 /* BEMSimpleLineGraphView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A660433B1F351932005CB5D4 /* BEMSimpleLineGraphView.swift */; }; A6AC895B1C5882DD0052AB1C /* BEMGraphCalculator.m in Sources */ = {isa = PBXBuildFile; fileRef = A6AC895A1C5882DD0052AB1C /* BEMGraphCalculator.m */; }; C3B90A5F187D15F7003E407D /* BEMCircle.m in Sources */ = {isa = PBXBuildFile; fileRef = C3B90A59187D15F7003E407D /* BEMCircle.m */; }; C3B90A60187D15F7003E407D /* BEMLine.m in Sources */ = {isa = PBXBuildFile; fileRef = C3B90A5B187D15F7003E407D /* BEMLine.m */; }; @@ -60,6 +79,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + A66043211F35150A005CB5D4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C3FD814D186DFD9A00FD8ED3 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A660430C1F35150A005CB5D4; + remoteInfo = "SimpleLineChart-Swift"; + }; C3FD817B186DFD9A00FD8ED3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = C3FD814D186DFD9A00FD8ED3 /* Project object */; @@ -114,11 +140,28 @@ 1E960B111E7F9C80000E2BB8 /* UIControl+HitTestEdgeInsets.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIControl+HitTestEdgeInsets.m"; sourceTree = ""; }; 99B15641187B412400B24591 /* StatsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StatsViewController.h; sourceTree = ""; }; 99B15642187B412400B24591 /* StatsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StatsViewController.m; sourceTree = ""; }; - 99B3FA381877898B00539A7B /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; + 99B3FA381877898B00539A7B /* LICENSE.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; name = LICENSE.md; path = ../LICENSE.md; sourceTree = ""; }; 99B3FA391877898B00539A7B /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = README.md; path = ../README.md; sourceTree = ""; }; A63990B31AD4923900B14D88 /* BEMAverageLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BEMAverageLine.h; sourceTree = ""; }; A63990B41AD4923900B14D88 /* BEMAverageLine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = BEMAverageLine.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; A64594511BAB257B00D6B8FD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = "Base.lproj/Launch Screen.storyboard"; sourceTree = ""; }; + A66042FF1F3513FB005CB5D4 /* BEMAverageLine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BEMAverageLine.swift; sourceTree = ""; }; + A66043001F3513FB005CB5D4 /* BEMCircle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BEMCircle.swift; sourceTree = ""; }; + A66043011F3513FB005CB5D4 /* BEMGraphCalculator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BEMGraphCalculator.swift; sourceTree = ""; }; + A66043021F3513FB005CB5D4 /* BEMLine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BEMLine.swift; sourceTree = ""; }; + A66043031F3513FB005CB5D4 /* BEMPermanentPopupView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BEMPermanentPopupView.swift; sourceTree = ""; }; + A660430D1F35150A005CB5D4 /* SimpleLineChart-Swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SimpleLineChart-Swift.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + A660430F1F35150A005CB5D4 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + A66043111F35150A005CB5D4 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + A66043141F35150A005CB5D4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + A66043161F35150A005CB5D4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + A66043191F35150A005CB5D4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + A660431B1F35150A005CB5D4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A66043201F35150A005CB5D4 /* SimpleLineChart-SwiftTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SimpleLineChart-SwiftTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + A66043241F35150B005CB5D4 /* SimpleLineChart_SwiftTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleLineChart_SwiftTests.swift; sourceTree = ""; }; + A66043261F35150B005CB5D4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A66043361F3515BD005CB5D4 /* BridgingHeaderObjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BridgingHeaderObjc.h; sourceTree = ""; }; + A660433B1F351932005CB5D4 /* BEMSimpleLineGraphView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEMSimpleLineGraphView.swift; sourceTree = ""; }; A6AC89591C5882DD0052AB1C /* BEMGraphCalculator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BEMGraphCalculator.h; sourceTree = ""; }; A6AC895A1C5882DD0052AB1C /* BEMGraphCalculator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BEMGraphCalculator.m; sourceTree = ""; }; C3B90A58187D15F7003E407D /* BEMCircle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BEMCircle.h; sourceTree = ""; }; @@ -158,6 +201,23 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A660430A1F35150A005CB5D4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A66043351F351593005CB5D4 /* UIKit.framework in Frameworks */, + A66043341F35158F005CB5D4 /* Foundation.framework in Frameworks */, + A66043331F351589005CB5D4 /* CoreGraphics.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A660431D1F35150A005CB5D4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; C3FD8152186DFD9A00FD8ED3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -245,7 +305,44 @@ path = MSColorPicker; sourceTree = ""; }; - C3B90A55187D15F7003E407D /* Classes */ = { + A66042FE1F3513FB005CB5D4 /* Swift Implementation */ = { + isa = PBXGroup; + children = ( + A66043361F3515BD005CB5D4 /* BridgingHeaderObjc.h */, + A66043021F3513FB005CB5D4 /* BEMLine.swift */, + A66042FF1F3513FB005CB5D4 /* BEMAverageLine.swift */, + A66043001F3513FB005CB5D4 /* BEMCircle.swift */, + A66043031F3513FB005CB5D4 /* BEMPermanentPopupView.swift */, + A66043011F3513FB005CB5D4 /* BEMGraphCalculator.swift */, + A660433B1F351932005CB5D4 /* BEMSimpleLineGraphView.swift */, + ); + name = "Swift Implementation"; + path = "../Swift Implementation"; + sourceTree = ""; + }; + A660430E1F35150A005CB5D4 /* SimpleLineChart-Swift */ = { + isa = PBXGroup; + children = ( + A660430F1F35150A005CB5D4 /* AppDelegate.swift */, + A66043111F35150A005CB5D4 /* ViewController.swift */, + A66043131F35150A005CB5D4 /* Main.storyboard */, + A66043161F35150A005CB5D4 /* Assets.xcassets */, + A66043181F35150A005CB5D4 /* LaunchScreen.storyboard */, + A660431B1F35150A005CB5D4 /* Info.plist */, + ); + path = "SimpleLineChart-Swift"; + sourceTree = ""; + }; + A66043231F35150A005CB5D4 /* SimpleLineChart-SwiftTests */ = { + isa = PBXGroup; + children = ( + A66043241F35150B005CB5D4 /* SimpleLineChart_SwiftTests.swift */, + A66043261F35150B005CB5D4 /* Info.plist */, + ); + path = "SimpleLineChart-SwiftTests"; + sourceTree = ""; + }; + C3B90A55187D15F7003E407D /* Objective-C Implementation */ = { isa = PBXGroup; children = ( C3B90A5C187D15F7003E407D /* BEMSimpleLineGraphView.h */, @@ -259,16 +356,19 @@ A6AC89591C5882DD0052AB1C /* BEMGraphCalculator.h */, A6AC895A1C5882DD0052AB1C /* BEMGraphCalculator.m */, ); - name = Classes; - path = ../Classes; + name = "Objective-C Implementation"; + path = "../Objective-C Implementation"; sourceTree = ""; }; C3FD814C186DFD9A00FD8ED3 = { isa = PBXGroup; children = ( - 99B3FA381877898B00539A7B /* LICENSE */, + 99B3FA381877898B00539A7B /* LICENSE.md */, 99B3FA391877898B00539A7B /* README.md */, - C3B90A55187D15F7003E407D /* Classes */, + A66042FE1F3513FB005CB5D4 /* Swift Implementation */, + C3B90A55187D15F7003E407D /* Objective-C Implementation */, + A660430E1F35150A005CB5D4 /* SimpleLineChart-Swift */, + A66043231F35150A005CB5D4 /* SimpleLineChart-SwiftTests */, C3FD815E186DFD9A00FD8ED3 /* SimpleLineChart */, C3FD817D186DFD9A00FD8ED3 /* SimpleLineChartTests */, 1E960A821E7DF942000E2BB8 /* TestBed */, @@ -283,6 +383,8 @@ C3FD8155186DFD9A00FD8ED3 /* SimpleLineChart.app */, C3FD8176186DFD9A00FD8ED3 /* SimpleLineChartTests.xctest */, 1E960A811E7DF942000E2BB8 /* TestBed.app */, + A660430D1F35150A005CB5D4 /* SimpleLineChart-Swift.app */, + A66043201F35150A005CB5D4 /* SimpleLineChart-SwiftTests.xctest */, ); name = Products; sourceTree = ""; @@ -366,6 +468,41 @@ productReference = 1E960A811E7DF942000E2BB8 /* TestBed.app */; productType = "com.apple.product-type.application"; }; + A660430C1F35150A005CB5D4 /* SimpleLineChart-Swift */ = { + isa = PBXNativeTarget; + buildConfigurationList = A66043271F35150B005CB5D4 /* Build configuration list for PBXNativeTarget "SimpleLineChart-Swift" */; + buildPhases = ( + A66043091F35150A005CB5D4 /* Sources */, + A660430A1F35150A005CB5D4 /* Frameworks */, + A660430B1F35150A005CB5D4 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "SimpleLineChart-Swift"; + productName = "SimpleLineChart-Swift"; + productReference = A660430D1F35150A005CB5D4 /* SimpleLineChart-Swift.app */; + productType = "com.apple.product-type.application"; + }; + A660431F1F35150A005CB5D4 /* SimpleLineChart-SwiftTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = A660432A1F35150B005CB5D4 /* Build configuration list for PBXNativeTarget "SimpleLineChart-SwiftTests" */; + buildPhases = ( + A660431C1F35150A005CB5D4 /* Sources */, + A660431D1F35150A005CB5D4 /* Frameworks */, + A660431E1F35150A005CB5D4 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + A66043221F35150A005CB5D4 /* PBXTargetDependency */, + ); + name = "SimpleLineChart-SwiftTests"; + productName = "SimpleLineChart-SwiftTests"; + productReference = A66043201F35150A005CB5D4 /* SimpleLineChart-SwiftTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; C3FD8154186DFD9A00FD8ED3 /* SimpleLineChart */ = { isa = PBXNativeTarget; buildConfigurationList = C3FD8187186DFD9A00FD8ED3 /* Build configuration list for PBXNativeTarget "SimpleLineChart" */; @@ -407,7 +544,8 @@ C3FD814D186DFD9A00FD8ED3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0800; + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; ORGANIZATIONNAME = "Boris Emorine"; TargetAttributes = { 1E960A801E7DF942000E2BB8 = { @@ -415,6 +553,13 @@ DevelopmentTeam = E8XXXD4S77; ProvisioningStyle = Automatic; }; + A660430C1F35150A005CB5D4 = { + CreatedOnToolsVersion = 9.0; + }; + A660431F1F35150A005CB5D4 = { + CreatedOnToolsVersion = 9.0; + TestTargetID = A660430C1F35150A005CB5D4; + }; C3FD8154186DFD9A00FD8ED3 = { DevelopmentTeam = E8XXXD4S77; }; @@ -424,7 +569,7 @@ }; }; buildConfigurationList = C3FD8150186DFD9A00FD8ED3 /* Build configuration list for PBXProject "SimpleLineChart" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 8.0"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( @@ -439,6 +584,8 @@ C3FD8154186DFD9A00FD8ED3 /* SimpleLineChart */, C3FD8175186DFD9A00FD8ED3 /* SimpleLineChartTests */, 1E960A801E7DF942000E2BB8 /* TestBed */, + A660430C1F35150A005CB5D4 /* SimpleLineChart-Swift */, + A660431F1F35150A005CB5D4 /* SimpleLineChart-SwiftTests */, ); }; /* End PBXProject section */ @@ -454,12 +601,29 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A660430B1F35150A005CB5D4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A660431A1F35150A005CB5D4 /* LaunchScreen.storyboard in Resources */, + A66043171F35150A005CB5D4 /* Assets.xcassets in Resources */, + A66043151F35150A005CB5D4 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A660431E1F35150A005CB5D4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; C3FD8153186DFD9A00FD8ED3 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( A64594521BAB257B00D6B8FD /* Launch Screen.storyboard in Resources */, - 99B3FA3A1877898B00539A7B /* LICENSE in Resources */, + 99B3FA3A1877898B00539A7B /* LICENSE.md in Resources */, C3DC80671903845D0080FF06 /* Main.storyboard in Resources */, C3FD8171186DFD9A00FD8ED3 /* Images.xcassets in Resources */, 99B3FA3B1877898B00539A7B /* README.md in Resources */, @@ -508,6 +672,33 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A66043091F35150A005CB5D4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A66043391F35177B005CB5D4 /* BEMLine.m in Sources */, + A660433A1F35177B005CB5D4 /* BEMAverageLine.m in Sources */, + A66043121F35150A005CB5D4 /* ViewController.swift in Sources */, + A66043321F351564005CB5D4 /* BEMGraphCalculator.swift in Sources */, + A66043311F351564005CB5D4 /* BEMPermanentPopupView.swift in Sources */, + A660432D1F35155E005CB5D4 /* BEMLine.swift in Sources */, + A660433C1F351932005CB5D4 /* BEMSimpleLineGraphView.swift in Sources */, + A660432F1F351564005CB5D4 /* BEMAverageLine.swift in Sources */, + A66043301F351564005CB5D4 /* BEMCircle.swift in Sources */, + A66043371F3515C7005CB5D4 /* BEMSimpleLineGraphView.m in Sources */, + A66043101F35150A005CB5D4 /* AppDelegate.swift in Sources */, + A66043381F35177B005CB5D4 /* BEMCircle.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A660431C1F35150A005CB5D4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A66043251F35150B005CB5D4 /* SimpleLineChart_SwiftTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; C3FD8151186DFD9A00FD8ED3 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -536,6 +727,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + A66043221F35150A005CB5D4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A660430C1F35150A005CB5D4 /* SimpleLineChart-Swift */; + targetProxy = A66043211F35150A005CB5D4 /* PBXContainerItemProxy */; + }; C3FD817C186DFD9A00FD8ED3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = C3FD8154186DFD9A00FD8ED3 /* SimpleLineChart */; @@ -568,6 +764,22 @@ name = "Launch Screen.storyboard"; sourceTree = ""; }; + A66043131F35150A005CB5D4 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A66043141F35150A005CB5D4 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + A66043181F35150A005CB5D4 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A66043191F35150A005CB5D4 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; C3FD8161186DFD9A00FD8ED3 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( @@ -634,6 +846,144 @@ }; name = Release; }; + A66043281F35150B005CB5D4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "iPhone Developer"; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = KEQ3L79VAK; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = "$(SRCROOT)/SimpleLineChart-Swift/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.SamuelSpencer.SimpleLineChart-Swift"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/../Swift Implementation/BridgingHeaderObjc.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + A66043291F35150B005CB5D4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = KEQ3L79VAK; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = "$(SRCROOT)/SimpleLineChart-Swift/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = "com.SamuelSpencer.SimpleLineChart-Swift"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/../Swift Implementation/BridgingHeaderObjc.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + A660432B1F35150B005CB5D4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "iPhone Developer"; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = KEQ3L79VAK; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = "SimpleLineChart-SwiftTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.SamuelSpencer.SimpleLineChart-SwiftTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SimpleLineChart-Swift.app/SimpleLineChart-Swift"; + }; + name = Debug; + }; + A660432C1F35150B005CB5D4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = KEQ3L79VAK; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = "SimpleLineChart-SwiftTests/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = "com.SamuelSpencer.SimpleLineChart-SwiftTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SimpleLineChart-Swift.app/SimpleLineChart-Swift"; + }; + name = Release; + }; C3FD8185186DFD9A00FD8ED3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -642,14 +992,20 @@ 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_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_ERROR; + 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; @@ -699,14 +1055,20 @@ 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_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_ERROR; + 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; @@ -724,6 +1086,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALIDATE_PRODUCT = YES; }; name = Release; @@ -838,6 +1201,24 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + A66043271F35150B005CB5D4 /* Build configuration list for PBXNativeTarget "SimpleLineChart-Swift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A66043281F35150B005CB5D4 /* Debug */, + A66043291F35150B005CB5D4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A660432A1F35150B005CB5D4 /* Build configuration list for PBXNativeTarget "SimpleLineChart-SwiftTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A660432B1F35150B005CB5D4 /* Debug */, + A660432C1F35150B005CB5D4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; C3FD8150186DFD9A00FD8ED3 /* Build configuration list for PBXProject "SimpleLineChart" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Sample Project/SimpleLineChart.xcodeproj/xcshareddata/xcschemes/SimpleLineChart.xcscheme b/Sample Project/SimpleLineChart.xcodeproj/xcshareddata/xcschemes/SimpleLineChart.xcscheme index 72e6a5c..c8f6dea 100644 --- a/Sample Project/SimpleLineChart.xcodeproj/xcshareddata/xcschemes/SimpleLineChart.xcscheme +++ b/Sample Project/SimpleLineChart.xcodeproj/xcshareddata/xcschemes/SimpleLineChart.xcscheme @@ -1,6 +1,6 @@ diff --git a/Sample Project/SimpleLineChart.xcodeproj/xcshareddata/xcschemes/SimpleLineChartTests.xcscheme b/Sample Project/SimpleLineChart.xcodeproj/xcshareddata/xcschemes/SimpleLineChartTests.xcscheme index 5643a13..9bd2ab8 100644 --- a/Sample Project/SimpleLineChart.xcodeproj/xcshareddata/xcschemes/SimpleLineChartTests.xcscheme +++ b/Sample Project/SimpleLineChart.xcodeproj/xcshareddata/xcschemes/SimpleLineChartTests.xcscheme @@ -1,6 +1,6 @@ - - - - diff --git a/Sample Project/SimpleLineChart/Base.lproj/Main.storyboard b/Sample Project/SimpleLineChart/Base.lproj/Main.storyboard index 2cab69b..9a4a3ac 100644 --- a/Sample Project/SimpleLineChart/Base.lproj/Main.storyboard +++ b/Sample Project/SimpleLineChart/Base.lproj/Main.storyboard @@ -1,10 +1,11 @@ - + - + + @@ -140,7 +141,7 @@