Merge pull request #20 from gershwin88/master

Fixing errors and warning when using Swift 2
This commit is contained in:
Matt Coneybeare
2015-09-18 11:23:32 -04:00

View File

@@ -602,7 +602,7 @@ public class StandardUserDefaults: ArmchairDefaultsObject {
@objc public func synchronize() -> Bool { return defaults.synchronize() }
}
public enum ArmchairKey: String, Printable {
public enum ArmchairKey: String, CustomStringConvertible {
case FirstUseDate = "First Use Date"
case UseCount = "Use Count"
case SignificantEventCount = "Significant Event Count"
@@ -626,7 +626,7 @@ public enum ArmchairKey: String, Printable {
}
}
public class ArmchairTrackingInfo: Printable {
public class ArmchairTrackingInfo: CustomStringConvertible {
public let info: Dictionary<ArmchairKey, AnyObject>
init(info: Dictionary<ArmchairKey, AnyObject>) {
@@ -704,7 +704,7 @@ public class Manager : ArmchairManager {
template = bundle.localizedStringForKey(template, value:"", table: "ArmchairLocalizable")
}
return template.stringByReplacingOccurrencesOfString("%@", withString: "\(self.appName)", options: nil, range: nil)
return template.stringByReplacingOccurrencesOfString("%@", withString: "\(self.appName)", options: NSStringCompareOptions(rawValue: 0), range: nil)
}
private lazy var reviewMessage: String = self.defaultReviewMessage()
@@ -715,7 +715,7 @@ public class Manager : ArmchairManager {
template = bundle.localizedStringForKey(template, value:"", table: "ArmchairLocalizable")
}
return template.stringByReplacingOccurrencesOfString("%@", withString: "\(self.appName)", options: nil, range: nil)
return template.stringByReplacingOccurrencesOfString("%@", withString: "\(self.appName)", options: NSStringCompareOptions(rawValue: 0), range: nil)
}
private lazy var cancelButtonTitle: String = self.defaultCancelButtonTitle()
@@ -737,7 +737,7 @@ public class Manager : ArmchairManager {
template = bundle.localizedStringForKey(template, value:"", table: "ArmchairLocalizable")
}
return template.stringByReplacingOccurrencesOfString("%@", withString: "\(self.appName)", options: nil, range: nil)
return template.stringByReplacingOccurrencesOfString("%@", withString: "\(self.appName)", options: NSStringCompareOptions(rawValue: 0), range: nil)
}
private lazy var remindButtonTitle: String? = self.defaultRemindButtonTitle()
@@ -916,7 +916,7 @@ public class Manager : ArmchairManager {
}
private func _incrementCountForKeyType(incrementKeyType: ArmchairKey) {
var incrementKey = keyForArmchairKeyType(incrementKeyType)
let incrementKey = keyForArmchairKeyType(incrementKeyType)
let bundleVersionKey = kCFBundleVersionKey as String
// App's version. Not settable as the other ivars because that would be crazy.
@@ -927,11 +927,10 @@ public class Manager : ArmchairManager {
}
// Get the version number that we've been tracking thus far
var currentVersionKey = keyForArmchairKeyType(ArmchairKey.CurrentVersion)
let currentVersionKey = keyForArmchairKeyType(ArmchairKey.CurrentVersion)
var trackingVersion: String? = userDefaultsObject?.stringForKey(currentVersionKey)
// New install, or changed keys
if let version = trackingVersion {
} else {
if trackingVersion == nil {
trackingVersion = currentVersion
userDefaultsObject?.setObject(currentVersion, forKey: currentVersionKey)
}
@@ -940,7 +939,7 @@ public class Manager : ArmchairManager {
if trackingVersion == currentVersion {
// Check if the first use date has been set. if not, set it.
var firstUseDateKey = keyForArmchairKeyType(ArmchairKey.FirstUseDate)
let firstUseDateKey = keyForArmchairKeyType(ArmchairKey.FirstUseDate)
var timeInterval: Double? = userDefaultsObject?.doubleForKey(firstUseDateKey)
if 0 == timeInterval {
timeInterval = NSDate().timeIntervalSince1970
@@ -1030,11 +1029,11 @@ public class Manager : ArmchairManager {
}
// check if the app has been used long enough
var timeIntervalOfFirstLaunch = userDefaultsObject?.doubleForKey(keyForArmchairKeyType(ArmchairKey.FirstUseDate))
let timeIntervalOfFirstLaunch = userDefaultsObject?.doubleForKey(keyForArmchairKeyType(ArmchairKey.FirstUseDate))
if let timeInterval = timeIntervalOfFirstLaunch {
var dateOfFirstLaunch = NSDate(timeIntervalSince1970: timeInterval)
var timeSinceFirstLaunch = NSDate().timeIntervalSinceDate(dateOfFirstLaunch)
var timeUntilRate: NSTimeInterval = 60 * 60 * 24 * Double(daysUntilPrompt)
let dateOfFirstLaunch = NSDate(timeIntervalSince1970: timeInterval)
let timeSinceFirstLaunch = NSDate().timeIntervalSinceDate(dateOfFirstLaunch)
let timeUntilRate: NSTimeInterval = 60 * 60 * 24 * Double(daysUntilPrompt)
if timeSinceFirstLaunch < timeUntilRate {
return false
}
@@ -1043,7 +1042,7 @@ public class Manager : ArmchairManager {
}
// check if the app has been used enough times
var useCount = userDefaultsObject?.integerForKey(keyForArmchairKeyType(ArmchairKey.UseCount))
let useCount = userDefaultsObject?.integerForKey(keyForArmchairKeyType(ArmchairKey.UseCount))
if let count = useCount {
if UInt(count) <= usesUntilPrompt {
return false
@@ -1053,7 +1052,7 @@ public class Manager : ArmchairManager {
}
// check if the user has done enough significant events
var significantEventCount = userDefaultsObject?.integerForKey(keyForArmchairKeyType(ArmchairKey.SignificantEventCount))
let significantEventCount = userDefaultsObject?.integerForKey(keyForArmchairKeyType(ArmchairKey.SignificantEventCount))
if let count = significantEventCount {
if UInt(count) < significantEventsUntilPrompt {
return false
@@ -1073,11 +1072,11 @@ public class Manager : ArmchairManager {
}
// If the user wanted to be reminded later, has enough time passed?
var timeIntervalOfReminder = userDefaultsObject?.doubleForKey(keyForArmchairKeyType(ArmchairKey.ReminderRequestDate))
let timeIntervalOfReminder = userDefaultsObject?.doubleForKey(keyForArmchairKeyType(ArmchairKey.ReminderRequestDate))
if let timeInterval = timeIntervalOfReminder {
var reminderRequestDate = NSDate(timeIntervalSince1970: timeInterval)
var timeSinceReminderRequest = NSDate().timeIntervalSinceDate(reminderRequestDate)
var timeUntilReminder: NSTimeInterval = 60 * 60 * 24 * Double(daysBeforeReminding)
let reminderRequestDate = NSDate(timeIntervalSince1970: timeInterval)
let timeSinceReminderRequest = NSDate().timeIntervalSinceDate(reminderRequestDate)
let timeUntilReminder: NSTimeInterval = 60 * 60 * 24 * Double(daysBeforeReminding)
if timeSinceReminderRequest < timeUntilReminder {
return false
}
@@ -1086,7 +1085,7 @@ public class Manager : ArmchairManager {
}
// if we have a global set to not show if the end-user has already rated once, and the developer has not opted out of displaying on minor updates
var ratedAnyVersion = userDefaultsObject?.boolForKey(keyForArmchairKeyType(ArmchairKey.RatedAnyVersion))
let ratedAnyVersion = userDefaultsObject?.boolForKey(keyForArmchairKeyType(ArmchairKey.RatedAnyVersion))
if let ratedAlready = ratedAnyVersion {
if (!shouldPromptIfRated && ratedAlready) {
return false
@@ -1113,18 +1112,14 @@ public class Manager : ArmchairManager {
}
private func showsRemindButton() -> Bool {
if let title = remindButtonTitle {
return true
} else {
return false
}
return (remindButtonTitle != nil)
}
private func showRatingAlert() {
#if os(iOS)
if operatingSystemVersion >= 8 && usesAlertController {
/* iOS 8 uses new UIAlertController API*/
var alertView : UIAlertController = UIAlertController(title: reviewTitle, message: reviewMessage, preferredStyle: UIAlertControllerStyle.Alert)
let alertView : UIAlertController = UIAlertController(title: reviewTitle, message: reviewMessage, preferredStyle: UIAlertControllerStyle.Alert)
alertView.addAction(UIAlertAction(title: cancelButtonTitle, style:UIAlertActionStyle.Cancel, handler: {
(alert: UIAlertAction!) in
self.dontRate()
@@ -1144,7 +1139,7 @@ public class Manager : ArmchairManager {
if let presentingController = UIApplication.sharedApplication().keyWindow?.rootViewController {
if let topController = topMostViewController(presentingController) {
topController.presentViewController(alertView, animated: usesAnimation) {
println("presentViewController() completed")
print("presentViewController() completed")
}
}
}
@@ -1171,7 +1166,7 @@ public class Manager : ArmchairManager {
#elseif os(OSX)
var alert: NSAlert = NSAlert()
let alert: NSAlert = NSAlert()
alert.messageText = reviewTitle
alert.informativeText = reviewMessage
alert.addButtonWithTitle(rateButtonTitle)
@@ -1187,7 +1182,7 @@ public class Manager : ArmchairManager {
self.handleNSAlertReturnCode(response)
}
} else {
var returnCode = alert.runModal()
let returnCode = alert.runModal()
handleNSAlertReturnCode(returnCode)
}
@@ -1302,7 +1297,7 @@ public class Manager : ArmchairManager {
let storeViewController = SKStoreProductViewController()
var productParameters: [NSObject:AnyObject]! = [SKStoreProductParameterITunesItemIdentifier : appID]
var productParameters: [String:AnyObject]! = [SKStoreProductParameterITunesItemIdentifier : appID]
if (operatingSystemVersion >= 8) {
productParameters[SKStoreProductParameterAffiliateToken] = affiliateCode
@@ -1343,7 +1338,7 @@ public class Manager : ArmchairManager {
}
#elseif os(OSX)
if let url = NSURL(string: reviewURLString()) {
var opened = NSWorkspace.sharedWorkspace().openURL(url)
let opened = NSWorkspace.sharedWorkspace().openURL(url)
if !opened {
debugLog("Failed to open \(url)")
}
@@ -1353,7 +1348,7 @@ public class Manager : ArmchairManager {
}
private func reviewURLString() -> String {
var template = reviewURLTemplate
let template = reviewURLTemplate
var reviewURL = template.stringByReplacingOccurrencesOfString("APP_ID", withString: "\(appID)")
reviewURL = reviewURL.stringByReplacingOccurrencesOfString("AFFILIATE_CODE", withString: "\(affiliateCode)")
reviewURL = reviewURL.stringByReplacingOccurrencesOfString("AFFILIATE_CAMPAIGN_CODE", withString: "\(affiliateCampaignCode)")
@@ -1367,7 +1362,7 @@ public class Manager : ArmchairManager {
var trackingInfo: Dictionary<ArmchairKey, AnyObject> = [:]
for keyType in ArmchairKey.allValues {
var obj: AnyObject? = userDefaultsObject?.objectForKey(keyForArmchairKeyType(keyType))
let obj: AnyObject? = userDefaultsObject?.objectForKey(keyForArmchairKeyType(keyType))
if let val = obj as? NSObject {
trackingInfo[keyType] = val
} else {
@@ -1466,7 +1461,7 @@ public class Manager : ArmchairManager {
private func migrateAppiraterKeysIfNecessary() {
let appiraterAlreadyCompletedKey: NSString = keyForArmchairKeyType(.AppiraterMigrationCompleted)
var appiraterMigrationAlreadyCompleted = userDefaultsObject?.boolForKey(appiraterAlreadyCompletedKey as String)
let appiraterMigrationAlreadyCompleted = userDefaultsObject?.boolForKey(appiraterAlreadyCompletedKey as String)
if let completed = appiraterMigrationAlreadyCompleted {
if completed {
@@ -1474,7 +1469,7 @@ public class Manager : ArmchairManager {
}
}
var oldKeys: [String] = [AppiraterKey.FirstUseDate,
let oldKeys: [String] = [AppiraterKey.FirstUseDate,
AppiraterKey.UseCount,
AppiraterKey.SignificantEventCount,
AppiraterKey.CurrentVersion,
@@ -1483,7 +1478,7 @@ public class Manager : ArmchairManager {
AppiraterKey.DeclinedToRate,
AppiraterKey.ReminderRequestDate]
for oldKey in oldKeys {
var oldValue: NSObject? = userDefaultsObject?.objectForKey(oldKey) as? NSObject
let oldValue: NSObject? = userDefaultsObject?.objectForKey(oldKey) as? NSObject
if let val = oldValue {
let newKey = armchairKeyForAppiraterKey(oldKey)
userDefaultsObject?.setObject(val, forKey: newKey)
@@ -1498,7 +1493,7 @@ public class Manager : ArmchairManager {
// This only supports the default UAAppReviewManager keys. If you customized them, you will have to manually migrate your values over.
private func migrateUAAppReviewManagerKeysIfNecessary() {
let appReviewManagerAlreadyCompletedKey: NSString = keyForArmchairKeyType(.UAAppReviewManagerMigrationCompleted)
var appReviewManagerMigrationAlreadyCompleted = userDefaultsObject?.boolForKey(appReviewManagerAlreadyCompletedKey as String)
let appReviewManagerMigrationAlreadyCompleted = userDefaultsObject?.boolForKey(appReviewManagerAlreadyCompletedKey as String)
if let completed = appReviewManagerMigrationAlreadyCompleted {
if completed {
@@ -1507,7 +1502,7 @@ public class Manager : ArmchairManager {
}
// By default, UAAppReviewManager keys are in the format <appID>_UAAppReviewManagerKey<keyType>
var oldKeys: [String:ArmchairKey] = ["\(appID)_UAAppReviewManagerKeyFirstUseDate" : ArmchairKey.FirstUseDate,
let oldKeys: [String:ArmchairKey] = ["\(appID)_UAAppReviewManagerKeyFirstUseDate" : ArmchairKey.FirstUseDate,
"\(appID)_UAAppReviewManagerKeyUseCount" : ArmchairKey.UseCount,
"\(appID)_UAAppReviewManagerKeySignificantEventCount" : ArmchairKey.SignificantEventCount,
"\(appID)_UAAppReviewManagerKeyCurrentVersion" : ArmchairKey.CurrentVersion,
@@ -1519,7 +1514,7 @@ public class Manager : ArmchairManager {
"\(appID)_UAAppReviewManagerKeyPreviousVersionDeclinedToRate" : ArmchairKey.PreviousVersionDeclinedToRate,
"\(appID)_UAAppReviewManagerKeyRatedAnyVersion" : ArmchairKey.RatedAnyVersion]
for (oldKey, newKeyType) in oldKeys {
var oldValue: NSObject? = userDefaultsObject?.objectForKey(oldKey) as? NSObject
let oldValue: NSObject? = userDefaultsObject?.objectForKey(oldKey) as? NSObject
if let val = oldValue {
userDefaultsObject?.setObject(val, forKey: keyForArmchairKeyType(newKeyType))
userDefaultsObject?.removeObjectForKey(oldKey)
@@ -1543,17 +1538,19 @@ public class Manager : ArmchairManager {
zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue()
}
var flags : SCNetworkReachabilityFlags = 0
if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0 {
guard let defaultRouteReachability = withUnsafePointer(&zeroAddress, {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
}) else {
return false
}
let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0
let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
var flags : SCNetworkReachabilityFlags = []
if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) {
return false
}
let isReachable = flags.contains(.Reachable)
let needsConnection = flags.contains(.ConnectionRequired)
return (isReachable && !needsConnection)
}
@@ -1581,11 +1578,10 @@ public class Manager : ArmchairManager {
private func topMostViewController(controller: UIViewController?) -> UIViewController? {
var isPresenting: Bool = false
var topController: UIViewController? = controller
do {
repeat {
// this path is called only on iOS 6+, so -presentedViewController is fine here.
if let controller = topController {
var presented: UIViewController? = controller.presentedViewController
if let presentedController = presented {
if let presented = controller.presentedViewController {
isPresenting = true
topController = presented
} else {
@@ -1601,7 +1597,7 @@ public class Manager : ArmchairManager {
if var window = UIApplication.sharedApplication().keyWindow {
if window.windowLevel != UIWindowLevelNormal {
var windows: NSArray = UIApplication.sharedApplication().windows
let windows: NSArray = UIApplication.sharedApplication().windows
for candidateWindow in windows {
if let candidateWindow = candidateWindow as? UIWindow {
if candidateWindow.windowLevel == UIWindowLevelNormal {
@@ -1613,8 +1609,7 @@ public class Manager : ArmchairManager {
}
for subView in window.subviews {
var nextResponder: UIResponder? = subView.nextResponder()
if let responder = nextResponder {
if let responder = subView.nextResponder() {
if responder.isKindOfClass(UIViewController) {
return topMostViewController(responder as? UIViewController)
}
@@ -1723,7 +1718,7 @@ public class Manager : ArmchairManager {
private func debugLog(log: String) {
if debugEnabled {
dispatch_sync(lockQueue, {
println("[Armchair] \(log)")
print("[Armchair] \(log)")
})
}
}