Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
f9134f7
Updating Code to support Xcode 8.3
someoneAnyone Apr 3, 2017
5c6ee39
Swift Update for Strings
someoneAnyone Apr 3, 2017
5823de6
Bumping up to iOS10 and watchOS 3 as mins
someoneAnyone Apr 3, 2017
56e4db5
updated requirements
someoneAnyone Apr 3, 2017
586d424
openURL is Deprecated
someoneAnyone Apr 3, 2017
36e88a9
Roughing in UNUserNotification Delegate Support
someoneAnyone Apr 3, 2017
7e7c9c6
more Swift conversion
someoneAnyone Apr 3, 2017
d7d8a7d
update check fix
someoneAnyone Jun 3, 2017
e7725be
Merge pull request #74 from someoneAnyone/xcode-8.3-(8E162)-support
someoneAnyone Jun 3, 2017
15302fc
trying to fix an auto refresh issue
someoneAnyone Jun 17, 2017
1f12c3b
updating before migration
someoneAnyone Sep 18, 2017
f077b90
Merge pull request #77 from someoneAnyone/bug-fix-background-url-crash
someoneAnyone Sep 18, 2017
f855a65
updated paint code
someoneAnyone Sep 18, 2017
77ac414
Conversion and Fixes
someoneAnyone Sep 18, 2017
7bcc14d
iCloud isn't available on watchOS anymore
someoneAnyone Sep 18, 2017
bb73deb
ios app icons
someoneAnyone Sep 18, 2017
927527b
updating images
someoneAnyone Sep 18, 2017
fed73bd
more updates
someoneAnyone Sep 18, 2017
368f1b4
Updates for Xcode 9 and iOS11
someoneAnyone Oct 22, 2017
065c2e4
some tweaks
someoneAnyone Oct 23, 2017
8c314cd
readme
someoneAnyone Oct 23, 2017
77ceed8
version check and hopeful conversion of old format to new
someoneAnyone Oct 25, 2017
76dce5e
Adding ITSAppUsesNonExemptEncryption Key
someoneAnyone Oct 26, 2017
b12e46e
trying to avoid a migration crash
someoneAnyone Oct 26, 2017
4a984ee
trying to pinpoint loading crash
someoneAnyone Oct 27, 2017
27dfad5
try with optional? not sure why serialization is crashing and not cat…
someoneAnyone Oct 30, 2017
4214df2
cleaning up operations
someoneAnyone Nov 4, 2017
a517f22
resolving some lingering fixmes
someoneAnyone Nov 4, 2017
4f45ed2
trying to clean up from the migration
someoneAnyone Nov 4, 2017
fb0459f
was setting defaults version too late
someoneAnyone Nov 5, 2017
1803782
maybe just maybe I found the bug?
someoneAnyone Nov 7, 2017
2ca3af9
updates
someoneAnyone Nov 15, 2017
df5128f
pushing all changes
someoneAnyone Jan 31, 2018
a8095a8
adding new additional icon
someoneAnyone Jan 31, 2018
6e59181
avoiding crashing new property...key
someoneAnyone Feb 3, 2018
d951384
Merge pull request #79 from someoneAnyone/feature/xcode-migration
someoneAnyone Feb 3, 2018
2dcda60
removing some fixmes
someoneAnyone Feb 4, 2018
5cdae2e
try to get watch working again (stop gap)
someoneAnyone Feb 6, 2018
74dedf3
some tweaks
someoneAnyone Feb 7, 2018
6594c45
clean up
someoneAnyone Feb 7, 2018
a026426
removing wait delay
someoneAnyone Feb 8, 2018
0b506bb
fixing timer on watch
someoneAnyone Mar 4, 2018
a72c27c
building with 9.3 and turning back on iCloud
someoneAnyone Apr 8, 2018
a8c78a2
house keeping
someoneAnyone Apr 8, 2018
1e611d5
Attempting a fix for device status. need to test more.
someoneAnyone Apr 14, 2018
fd1d819
Merge pull request #80 from someoneAnyone/fix-watch
someoneAnyone Apr 15, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 47 additions & 16 deletions Common/AppConfiguration.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,23 @@ import Foundation


public extension Notification.Name {
static public let NightscoutDataAddedContentNotification = Notification.Name("com.nothingonline.nightscouter.data.addedContent")
static public let NightscoutDataUpdatedNotification = Notification.Name("com.nothingonline.nightscouter.data.updatedContent")
static public let NightscoutDataStaleNotification = Notification.Name("com.nothingonline.nightscouter.data.staleContent")

static public let NightscoutAlarmNotification = Notification.Name("com.nothingonline.nightscouter.alarm.update")
static public let dataDidFlow = Notification.Name("DataDidFlow")
static public let activationDidComplete = Notification.Name("ActivationDidComplete")
static public let reachabilityDidChange = Notification.Name("ReachabilityDidChange")
static public let nightscoutAddedContentNotification = Notification.Name("com.nothingonline.nightscouter.data.addedContent")
static public let nightscoutDataUpdatedNotification = Notification.Name("com.nothingonline.nightscouter.data.updatedContent")
static public let nightscoutDataStaleNotification = Notification.Name("com.nothingonline.nightscouter.data.staleContent")
static public let nightscoutAlarmNotification = Notification.Name("com.nothingonline.nightscouter.alarm.update")
}

public typealias ArrayOfDictionaries = [[String: AnyObject]]
public typealias ArrayOfDictionaries = [[String: Any]]
public typealias ArrayOfData = [Data]

@available(*, deprecated: 1.0, message: "I'm not deprecated, please ***FIXME**")
@available(*, deprecated: 1.0, message: "I'm not really deprecated, please ***FIXME**")
public func FIXME() { }

// TODO: Locallize these strings and move them to centeral location so all view can have consistent placeholder text.
public struct PlaceHolderStrings {
public struct PlaceHolderStrings: Codable {
public static let displayName: String = "----"
public static let urlName: String = "- --- ---"
public static let sgv: String = "---"
Expand Down Expand Up @@ -69,14 +72,13 @@ public struct LinkBuilder {


/// These match what is in the info plist. Do not change without updating.
public enum CommonUseCasesForShortcuts: String {
public enum CommonUseCasesForShortcuts: String, Codable {
case ShowDetail, AddNew, AddNewWhenEmpty, ShowList

public init?(shortcutItemString: String){

let newString = shortcutItemString.components(separatedBy: ".")


self = CommonUseCasesForShortcuts(rawValue: newString.last!)!
}

Expand All @@ -94,7 +96,7 @@ public enum CommonUseCasesForShortcuts: String {
}
}

public enum StoryboardIdentifier: String, RawRepresentable {
public enum StoryboardIdentifier: String, Codable, RawRepresentable {
case formViewController, formViewNavigationController, sitesTableViewController, siteListPageViewController, siteDetailViewController, siteSettingsNavigationViewController
public static let allValues = [formViewController, formViewNavigationController, sitesTableViewController, siteListPageViewController, siteDetailViewController, siteSettingsNavigationViewController]
public static let deepLinkable = [formViewNavigationController, formViewController, siteListPageViewController, sitesTableViewController]
Expand All @@ -110,17 +112,46 @@ public class AppConfiguration {
// return Keychain(service: applicationName).synchronizable(true)
// }

private struct Defaults {
static let firstLaunchKey = "AppConfiguration.Defaults.firstLaunchKey"
static let storageOptionKey = "AppConfiguration.Defaults.storageOptionKey"
static let storedUbiquityIdentityToken = "AppConfiguration.Defaults.storedUbiquityIdentityToken"
}
// private struct Defaults {
// static let firstLaunchKey = "AppConfiguration.Defaults.firstLaunchKey"
// static let storageOptionKey = "AppConfiguration.Defaults.storageOptionKey"
// static let storedUbiquityIdentityToken = "AppConfiguration.Defaults.storedUbiquityIdentityToken"
// }

public static let appGroupContainerURL: URL? = {
// 1
let fileManager = FileManager.default
guard let groupURL = fileManager
.containerURL(forSecurityApplicationGroupIdentifier: AppConfiguration.sharedApplicationGroupSuiteName) else {
return nil
}

let storagePathUrl = groupURL.appendingPathComponent("Nightscout Storage")
let storagePath = storagePathUrl.path
// 2
if !fileManager.fileExists(atPath: storagePath) {
do {
try fileManager.createDirectory(atPath: storagePath,
withIntermediateDirectories: false,
attributes: nil)
} catch let error {
print("error creating filepath: \(error)")
return nil
}
}
// 3
return storagePathUrl
}()


public struct Constant {
public static let knownMilliseconds: Mills = 1268197200000
public static let knownMgdl: MgdlValue = 100
}


// DATE FORMATTERS

/**
Formatter used to display the date and time that data was last updated.
Example output:
Expand Down
4 changes: 2 additions & 2 deletions Common/AppTheme.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ public struct Theme {
UINavigationBar.appearance().barTintColor = navBarColor
UINavigationBar.appearance().tintColor = Theme.AppColor.windowTintColor

let navBarAttributesDictionary: [String: Any]? = [ NSForegroundColorAttributeName: Theme.AppColor.navBarTextColor,
NSFontAttributeName: navBarFont]
let navBarAttributesDictionary: [NSAttributedStringKey: Any]? = [ NSAttributedStringKey.foregroundColor: Theme.AppColor.navBarTextColor,
NSAttributedStringKey.font: navBarFont]

UINavigationBar.appearance().titleTextAttributes = navBarAttributesDictionary
}
Expand Down
9 changes: 5 additions & 4 deletions Common/Extensions/Color-Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import Foundation
#endif

public extension Color {
class var random: UIColor {
@objc class var random: UIColor {
let randomRed:CGFloat = CGFloat(drand48())

let randomGreen:CGFloat = CGFloat(drand48())
Expand All @@ -27,15 +27,16 @@ public extension Color {
return UIColor(red: randomRed, green: randomGreen, blue: randomBlue, alpha: 1.0)
}

class func generateRandom(arrayWith count: Int) -> [UIColor] {
@objc class func generateRandom(arrayWith count: Int) -> [UIColor] {
let colors = (0..<count).map { _ in return UIColor.random }
return colors
}

}

extension Color {
public convenience init(hexString:String) {

@objc public convenience init(hexString:String) {
let hexString: String = hexString.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
let scanner = Scanner(string: hexString)

Expand All @@ -58,7 +59,7 @@ extension Color {
self.init(red:red, green:green, blue:blue, alpha:1)
}

public func toHexString() -> String {
@objc public func toHexString() -> String {
var r:CGFloat = 0
var g:CGFloat = 0
var b:CGFloat = 0
Expand Down
2 changes: 1 addition & 1 deletion Common/Extensions/Double-Extension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ public extension MgdlValue {
formattedNumber = self.bgDeltaFormatter.string(from: NSNumber(value: self)) ?? "?"
}

var unitMarker: String = units.description
var unitMarker: String = units.rawValue
if let appendString = appendString {
unitMarker = appendString
}
Expand Down
15 changes: 7 additions & 8 deletions Common/Extensions/Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import Foundation

#if os(iOS)
public extension UINavigationItem {
public func update(with newItem: UINavigationItem) {
@objc public func update(with newItem: UINavigationItem) {
self.backBarButtonItem = newItem.backBarButtonItem
self.rightBarButtonItem = newItem.rightBarButtonItem
self.rightBarButtonItems = newItem.rightBarButtonItems
Expand Down Expand Up @@ -49,7 +49,7 @@ public extension UIEdgeInsets {

extension CALayer {

func setupDefaultShaddow(cornerRadius: CGFloat = 0) {
@objc func setupDefaultShaddow(cornerRadius: CGFloat = 0) {

let pathBounds = bounds
let cornerRadius = cornerRadius
Expand All @@ -64,7 +64,7 @@ extension CALayer {
shaddowLayer.rasterizationScale = UIScreen.main.scale
}

func setupGradient(with colors:[UIColor] = [#colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0), UIColor.lightGray]) {
@objc func setupGradient(with colors:[UIColor] = [#colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0), UIColor.lightGray]) {
let gradient: CAGradientLayer = CAGradientLayer()
gradient.frame = bounds
gradient.colors = colors.map{ $0.cgColor }
Expand All @@ -77,7 +77,7 @@ extension CALayer {
}

public extension UIView {
public class func fromNib(nibNameOrNil: String? = nil) -> Self {
@objc public class func fromNib(nibNameOrNil: String? = nil) -> Self {
return fromNib(nibNameOrNil: nibNameOrNil, type: self)
}

Expand Down Expand Up @@ -105,12 +105,12 @@ public extension UIView {
return view
}

public class var nibName: String {
@objc public class var nibName: String {
let name = "\(self)".components(separatedBy: ".").first ?? ""
return name
}

public class var nib: UINib? {
@objc public class var nib: UINib? {
if let _ = Bundle.main.path(forResource: nibName, ofType: "nib") {
return UINib(nibName: nibName, bundle: nil)
} else {
Expand All @@ -121,7 +121,7 @@ public extension UIView {
#endif

public extension CollectionView {
public var indexPathOfItemAtCenter: IndexPath? {
@objc public var indexPathOfItemAtCenter: IndexPath? {
let visiblePoint = CGPoint(x: self.center.x + self.contentOffset.x, y: self.center.y + self.contentOffset.y)
return self.indexPathForItem(at: visiblePoint)
}
Expand All @@ -132,4 +132,3 @@ public extension IndexPath {
return IndexPath(item: 0, section: 0)
}
}

2 changes: 1 addition & 1 deletion Common/Extensions/URL-Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ public extension URL {

public var deletedTrailingSlash: URL? {
var urlString = self.absoluteString
if let i = urlString.characters.index(of: "/") {
if let i = urlString.index(of: "/") {
urlString.remove(at: i)
return URL(string: urlString)
}
Expand Down
40 changes: 1 addition & 39 deletions Common/Models/AlarmObject.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

import Foundation

public struct AlarmObject {
public struct AlarmObject: Codable {
public let warning: Bool
public let urgent: Bool
public let isAlarmingForSgv: Bool
Expand All @@ -30,41 +30,3 @@ extension AlarmObject: Equatable {
return (lhs.warning == rhs.warning && lhs.urgent == rhs.urgent && lhs.isAlarmingForSgv == rhs.isAlarmingForSgv && rhs.snoozeTimeRemaining == lhs.snoozeTimeRemaining)
}
}


extension AlarmObject: Encodable, Decodable {
struct JSONKey {
static let warning = "warning"
static let urgent = "urgent"
static let isAlarmingForSgv = "isAlarmingForSgv"
static let isSnoozed = "isSnoozed"
static let snoozeText = "snoozeText"
static let snoozeTimeRemaining = "snoozeTimeRemaining"
}

public func encode() -> [String : Any] {
return [
JSONKey.warning: warning,
JSONKey.urgent: urgent,
JSONKey.isAlarmingForSgv: isAlarmingForSgv,
JSONKey.isSnoozed: isSnoozed,
JSONKey.snoozeText: snoozeText,
JSONKey.snoozeTimeRemaining: snoozeTimeRemaining,
]
}

public static func decode(_ dict: [String : Any]) -> AlarmObject? {
guard
let warning = dict[JSONKey.warning] as? Bool,
let urgent = dict[JSONKey.urgent] as? Bool,
let isAlarmingForSgv = dict[JSONKey.isAlarmingForSgv] as? Bool,
let isSnoozed = dict[JSONKey.isSnoozed] as? Bool,
let snoozeText = dict[JSONKey.snoozeText] as? String,
let snoozeTimeRemaining = dict[JSONKey.snoozeTimeRemaining] as? Int
else {
return nil
}

return AlarmObject(warning: warning, urgent: urgent, isAlarmingForSgv: isAlarmingForSgv, isSnoozed: isSnoozed, snoozeText: snoozeText, snoozeTimeRemaining: snoozeTimeRemaining)
}
}
11 changes: 8 additions & 3 deletions Common/Models/Calibration.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
import Foundation

/// A record type provided by the Nightscout API, contains information required to calculate raw blood glucose level.
public struct Calibration: CustomStringConvertible, Dateable {
public let slope: Double, intercept: Double, scale: Double, milliseconds: Double
public struct Calibration: CustomStringConvertible, Dateable, Codable {
public let slope: Double, intercept: Double, scale: Double, milliseconds: Mills?

public init() {
slope = 856.59
Expand All @@ -19,7 +19,12 @@ public struct Calibration: CustomStringConvertible, Dateable {
milliseconds = 1268197200000 // AppConfiguration.Constant.knownMilliseconds
}

public init(slope: Double, intercept: Double, scale: Double, milliseconds: Double) {
enum CodingKeys: String, CodingKey {
case slope, intercept, scale
case milliseconds = "date"
}

public init(slope: Double, intercept: Double, scale: Double, milliseconds: Mills) {
self.slope = slope
self.intercept = intercept
self.scale = scale
Expand Down
78 changes: 0 additions & 78 deletions Common/Models/ComplicationTimelineEntry.swift

This file was deleted.

Loading