mirror of
https://github.com/UrbanApps/Armchair.git
synced 2026-01-11 22:30:50 +01:00
Merge pull request #20 from gershwin88/master
Fixing errors and warning when using Swift 2
This commit is contained in:
@@ -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)")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user