mirror of
https://github.com/UrbanApps/Armchair.git
synced 2026-01-11 22:30:50 +01:00
Add documentation on new API
This commit is contained in:
@@ -1 +1 @@
|
|||||||
3.0
|
4.0
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Pod::Spec.new do |s|
|
Pod::Spec.new do |s|
|
||||||
|
|
||||||
s.name = "Armchair"
|
s.name = "Armchair"
|
||||||
s.version = "0.3.0"
|
s.version = "0.3.5"
|
||||||
s.summary = "A simple yet powerful App Review Manager for iOS and OSX in Swift"
|
s.summary = "A simple yet powerful App Review Manager for iOS and OSX in Swift"
|
||||||
s.description = <<-DESC
|
s.description = <<-DESC
|
||||||
A simple yet powerful App Review Manager for iOS and OSX in Swift.
|
A simple yet powerful App Review Manager for iOS and OSX in Swift.
|
||||||
|
|||||||
@@ -318,13 +318,16 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 0700;
|
LastSwiftUpdateCheck = 0700;
|
||||||
LastUpgradeCheck = 0800;
|
LastUpgradeCheck = 0900;
|
||||||
ORGANIZATIONNAME = Armchair;
|
ORGANIZATIONNAME = Armchair;
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
E6A0AF6419C9CFF400C3A7DC = {
|
E6A0AF6419C9CFF400C3A7DC = {
|
||||||
CreatedOnToolsVersion = 6.0;
|
CreatedOnToolsVersion = 6.0;
|
||||||
ProvisioningStyle = Manual;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
|
E6D8B8EF19C756A4001AD043 = {
|
||||||
|
LastSwiftMigration = 0900;
|
||||||
|
};
|
||||||
F8111E3219A95C8B0040E7D1 = {
|
F8111E3219A95C8B0040E7D1 = {
|
||||||
CreatedOnToolsVersion = 6.0;
|
CreatedOnToolsVersion = 6.0;
|
||||||
LastSwiftMigration = 0800;
|
LastSwiftMigration = 0800;
|
||||||
@@ -541,7 +544,8 @@
|
|||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "";
|
SWIFT_OBJC_BRIDGING_HEADER = "";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -566,7 +570,8 @@
|
|||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "";
|
SWIFT_OBJC_BRIDGING_HEADER = "";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@@ -617,14 +622,20 @@
|
|||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
@@ -655,6 +666,7 @@
|
|||||||
OTHER_SWIFT_FLAGS = "-DDebug";
|
OTHER_SWIFT_FLAGS = "-DDebug";
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
VERSION_INFO_PREFIX = "";
|
VERSION_INFO_PREFIX = "";
|
||||||
@@ -669,14 +681,20 @@
|
|||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
@@ -698,6 +716,7 @@
|
|||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
@@ -724,7 +743,7 @@
|
|||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "";
|
SWIFT_OBJC_BRIDGING_HEADER = "";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -746,7 +765,7 @@
|
|||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "";
|
SWIFT_OBJC_BRIDGING_HEADER = "";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0800"
|
LastUpgradeVersion = "0900"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -26,6 +26,7 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
language = ""
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
<Testables>
|
<Testables>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
@@ -55,6 +56,7 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
language = ""
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0800"
|
LastUpgradeVersion = "0900"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -26,6 +26,7 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
language = ""
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
<Testables>
|
<Testables>
|
||||||
</Testables>
|
</Testables>
|
||||||
@@ -36,6 +37,7 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
language = ""
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
|||||||
@@ -28,12 +28,13 @@
|
|||||||
class AppDelegate: UIResponder, UIApplicationDelegate {
|
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
var window: UIWindow?
|
var window: UIWindow?
|
||||||
|
|
||||||
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
|
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
|
||||||
|
AppDelegate.setupArmchair()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let Pages = "361309726" // Pages iOS
|
let appID = "361309726" // Pages iOS
|
||||||
|
|
||||||
#elseif os(OSX)
|
#elseif os(OSX)
|
||||||
|
|
||||||
@@ -43,9 +44,12 @@
|
|||||||
class AppDelegate: NSObject, NSApplicationDelegate {
|
class AppDelegate: NSObject, NSApplicationDelegate {
|
||||||
@IBOutlet weak var window: NSWindow!
|
@IBOutlet weak var window: NSWindow!
|
||||||
|
|
||||||
|
override init() {
|
||||||
|
AppDelegate.setupArmchair()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let Pages = "409201541" // Pages Mac
|
let appID = "409201541" // Pages Mac
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
@@ -54,10 +58,6 @@ import Armchair
|
|||||||
|
|
||||||
extension AppDelegate {
|
extension AppDelegate {
|
||||||
|
|
||||||
override class func initialize() {
|
|
||||||
AppDelegate.setupArmchair()
|
|
||||||
}
|
|
||||||
|
|
||||||
class func setupArmchair() {
|
class func setupArmchair() {
|
||||||
// Normally, all the setup would be here.
|
// Normally, all the setup would be here.
|
||||||
// But, because we are presenting a few different setups in the example,
|
// But, because we are presenting a few different setups in the example,
|
||||||
@@ -68,7 +68,7 @@ extension AppDelegate {
|
|||||||
// because it needs to receive application life-cycle notifications
|
// because it needs to receive application life-cycle notifications
|
||||||
//
|
//
|
||||||
// NOTE: The appID call always has to go before any other Armchair calls
|
// NOTE: The appID call always has to go before any other Armchair calls
|
||||||
Armchair.appID(Pages)
|
Armchair.appID(appID)
|
||||||
Armchair.debugEnabled(true)
|
Armchair.debugEnabled(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,12 +55,12 @@ extension ViewController {
|
|||||||
|
|
||||||
// Only set it if we are using Armchair localizations
|
// Only set it if we are using Armchair localizations
|
||||||
if !Armchair.useMainAppBundleForLocalizations() {
|
if !Armchair.useMainAppBundleForLocalizations() {
|
||||||
let currentLocalization: NSString = NSBundle.mainBundle().preferredLocalizations[0] as NSString
|
let currentLocalization: NSString = Bundle.main.preferredLocalizations[0] as NSString
|
||||||
// Only set it if we are using a different language than this apps development language
|
// Only set it if we are using a different language than this apps development language
|
||||||
if let developmentLocalization = NSBundle.mainBundle().developmentLocalization {
|
if let developmentLocalization = Bundle.main.developmentLocalization {
|
||||||
if currentLocalization != developmentLocalization {
|
if currentLocalization as String != developmentLocalization {
|
||||||
languageLabelText = currentLocalization as String
|
languageLabelText = currentLocalization as String
|
||||||
if let displayName = NSLocale(localeIdentifier: currentLocalization as String).displayNameForKey(NSLocaleIdentifier, value:currentLocalization) {
|
if let displayName = (Locale(identifier: currentLocalization as String) as NSLocale).displayName(forKey: NSLocale.Key.identifier, value:currentLocalization) {
|
||||||
languageLabelText = "\(displayName): \(currentLocalization)"
|
languageLabelText = "\(displayName): \(currentLocalization)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -78,7 +78,7 @@ extension ViewController {
|
|||||||
resetAppReviewManager()
|
resetAppReviewManager()
|
||||||
|
|
||||||
// The AppID is the only required setup
|
// The AppID is the only required setup
|
||||||
Armchair.appID(Pages)
|
Armchair.appID(appID)
|
||||||
|
|
||||||
// Debug means that it will popup on the next available change
|
// Debug means that it will popup on the next available change
|
||||||
Armchair.debugEnabled(true)
|
Armchair.debugEnabled(true)
|
||||||
@@ -96,7 +96,7 @@ extension ViewController {
|
|||||||
resetAppReviewManager()
|
resetAppReviewManager()
|
||||||
|
|
||||||
// The AppID is the only required setup
|
// The AppID is the only required setup
|
||||||
Armchair.appID(Pages)
|
Armchair.appID(appID)
|
||||||
|
|
||||||
// Debug means that it will popup on the next available change
|
// Debug means that it will popup on the next available change
|
||||||
Armchair.debugEnabled(true)
|
Armchair.debugEnabled(true)
|
||||||
@@ -143,7 +143,7 @@ extension ViewController {
|
|||||||
Armchair.opensInStoreKit(false)
|
Armchair.opensInStoreKit(false)
|
||||||
|
|
||||||
// This sets a custom tint color (applies only to UIAlertController).
|
// This sets a custom tint color (applies only to UIAlertController).
|
||||||
Armchair.tintColor(UIColor.brownColor())
|
Armchair.tintColor(tintColor: UIColor.brown)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// This sets the Affiliate code you want to use, but is not required.
|
// This sets the Affiliate code you want to use, but is not required.
|
||||||
@@ -193,7 +193,7 @@ extension ViewController {
|
|||||||
resetAppReviewManager()
|
resetAppReviewManager()
|
||||||
|
|
||||||
// The AppID is the only required setup
|
// The AppID is the only required setup
|
||||||
Armchair.appID(Pages)
|
Armchair.appID(appID)
|
||||||
|
|
||||||
// Debug means that it will popup on the next available change
|
// Debug means that it will popup on the next available change
|
||||||
Armchair.debugEnabled(true)
|
Armchair.debugEnabled(true)
|
||||||
@@ -216,11 +216,11 @@ extension ViewController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func openUrbanApps(_: AnyObject) {
|
@IBAction func openUrbanApps(_: AnyObject) {
|
||||||
if let url = NSURL(string: "http://urbanapps.com") {
|
if let url = URL(string: "http://urbanapps.com") {
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
UIApplication.sharedApplication().openURL(url)
|
UIApplication.shared.openURL(url)
|
||||||
#elseif os(OSX)
|
#elseif os(OSX)
|
||||||
NSWorkspace.sharedWorkspace().openURL(url)
|
NSWorkspace.shared.open(url)
|
||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,13 +33,6 @@
|
|||||||
remoteGlobalIDString = E6D8B8F919C756A4001AD043;
|
remoteGlobalIDString = E6D8B8F919C756A4001AD043;
|
||||||
remoteInfo = ArmchairMac;
|
remoteInfo = ArmchairMac;
|
||||||
};
|
};
|
||||||
E60FA80119C90D3500179D70 /* PBXContainerItemProxy */ = {
|
|
||||||
isa = PBXContainerItemProxy;
|
|
||||||
containerPortal = E60FA7F719C90D3500179D70 /* Armchair.xcodeproj */;
|
|
||||||
proxyType = 2;
|
|
||||||
remoteGlobalIDString = E6D8B92819C880A9001AD043;
|
|
||||||
remoteInfo = ArmchairTests;
|
|
||||||
};
|
|
||||||
E60FA80319C90D7100179D70 /* PBXContainerItemProxy */ = {
|
E60FA80319C90D7100179D70 /* PBXContainerItemProxy */ = {
|
||||||
isa = PBXContainerItemProxy;
|
isa = PBXContainerItemProxy;
|
||||||
containerPortal = E60FA7F719C90D3500179D70 /* Armchair.xcodeproj */;
|
containerPortal = E60FA7F719C90D3500179D70 /* Armchair.xcodeproj */;
|
||||||
@@ -135,7 +128,6 @@
|
|||||||
E60FA80019C90D3500179D70 /* Armchair.framework */,
|
E60FA80019C90D3500179D70 /* Armchair.framework */,
|
||||||
E6F6156919C9FE8900C0B51C /* Armchair.bundle */,
|
E6F6156919C9FE8900C0B51C /* Armchair.bundle */,
|
||||||
E6F6159819CA003600C0B51C /* Armchair.bundle */,
|
E6F6159819CA003600C0B51C /* Armchair.bundle */,
|
||||||
E60FA80219C90D3500179D70 /* ArmchairTests.xctest */,
|
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -169,7 +161,7 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 0700;
|
LastSwiftUpdateCheck = 0700;
|
||||||
LastUpgradeCheck = 0700;
|
LastUpgradeCheck = 0900;
|
||||||
ORGANIZATIONNAME = Armchair;
|
ORGANIZATIONNAME = Armchair;
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
E60FA7B919C908FE00179D70 = {
|
E60FA7B919C908FE00179D70 = {
|
||||||
@@ -216,13 +208,6 @@
|
|||||||
remoteRef = E60FA7FF19C90D3500179D70 /* PBXContainerItemProxy */;
|
remoteRef = E60FA7FF19C90D3500179D70 /* PBXContainerItemProxy */;
|
||||||
sourceTree = BUILT_PRODUCTS_DIR;
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
};
|
};
|
||||||
E60FA80219C90D3500179D70 /* ArmchairTests.xctest */ = {
|
|
||||||
isa = PBXReferenceProxy;
|
|
||||||
fileType = wrapper.cfbundle;
|
|
||||||
path = ArmchairTests.xctest;
|
|
||||||
remoteRef = E60FA80119C90D3500179D70 /* PBXContainerItemProxy */;
|
|
||||||
sourceTree = BUILT_PRODUCTS_DIR;
|
|
||||||
};
|
|
||||||
E6F6156919C9FE8900C0B51C /* Armchair.bundle */ = {
|
E6F6156919C9FE8900C0B51C /* Armchair.bundle */ = {
|
||||||
isa = PBXReferenceProxy;
|
isa = PBXReferenceProxy;
|
||||||
fileType = wrapper.cfbundle;
|
fileType = wrapper.cfbundle;
|
||||||
@@ -300,13 +285,21 @@
|
|||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = 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_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_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_IDENTITY = "-";
|
CODE_SIGN_IDENTITY = "-";
|
||||||
@@ -315,6 +308,7 @@
|
|||||||
ENABLE_TESTABILITY = YES;
|
ENABLE_TESTABILITY = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
"DEBUG=1",
|
"DEBUG=1",
|
||||||
@@ -332,6 +326,7 @@
|
|||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -343,13 +338,21 @@
|
|||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = 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_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_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_IDENTITY = "-";
|
CODE_SIGN_IDENTITY = "-";
|
||||||
@@ -358,6 +361,7 @@
|
|||||||
ENABLE_NS_ASSERTIONS = NO;
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
@@ -367,6 +371,8 @@
|
|||||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -284,6 +284,14 @@ Armchair.shouldPromptIfRated() -> Bool
|
|||||||
Armchair.shouldPromptIfRated(shouldPromptIfRated: Bool)
|
Armchair.shouldPromptIfRated(shouldPromptIfRated: Bool)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The `useStoreKitReviewPrompt` configuration determines wether or not to try showing the SKStoreReviewController's requestReview() prompt instead of the default prompt. This setting has some effects only on iOS version >= 10.3. It's default value is `false`.
|
||||||
|
```swift
|
||||||
|
// GETTER
|
||||||
|
Armchair.useStoreKitReviewPrompt() -> Bool
|
||||||
|
// SETTER
|
||||||
|
Armchair.useStoreKitReviewPrompt(useStoreKitReviewPrompt: Bool)
|
||||||
|
```
|
||||||
|
|
||||||
The `useMainAppBundleForLocalizations` configuration is a way to tell Armchair that you are providing your own translations for the review prompt popup strings. This may be because you are just customizing them, or that you have set your own text for the popup. If set to `true`, the main bundle will always be used to load localized strings. You have to include the translations either in a file called `ArmchairLocalizable.strings` or the standard `Localizable.strings`. If set to `false` Armchair will look in its own translation bundle for the translating strings. It's default value is `false`.
|
The `useMainAppBundleForLocalizations` configuration is a way to tell Armchair that you are providing your own translations for the review prompt popup strings. This may be because you are just customizing them, or that you have set your own text for the popup. If set to `true`, the main bundle will always be used to load localized strings. You have to include the translations either in a file called `ArmchairLocalizable.strings` or the standard `Localizable.strings`. If set to `false` Armchair will look in its own translation bundle for the translating strings. It's default value is `false`.
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
|
|||||||
@@ -69,18 +69,6 @@ public func reviewTitle(_ reviewTitle: String) {
|
|||||||
Manager.defaultManager.reviewTitle = reviewTitle
|
Manager.defaultManager.reviewTitle = reviewTitle
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* If set to true, use SKStoreReviewController's requestReview() prompt instead of the default prompt.
|
|
||||||
* If not on iOS 10.3+, reort to the default prompt.
|
|
||||||
* Default => false.
|
|
||||||
*/
|
|
||||||
public func useStoreKitReviewPrompt() -> Bool {
|
|
||||||
return Manager.defaultManager.useStoreKitReviewPrompt
|
|
||||||
}
|
|
||||||
public func useStoreKitReviewPrompt(_ useStoreKitReviewPrompt: Bool) {
|
|
||||||
Manager.defaultManager.useStoreKitReviewPrompt = useStoreKitReviewPrompt
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get/Set the message to use on the review prompt.
|
* Get/Set the message to use on the review prompt.
|
||||||
* Default value is a localized
|
* Default value is a localized
|
||||||
@@ -255,7 +243,6 @@ public func shouldPromptIfRated(_ shouldPromptIfRated: Bool) {
|
|||||||
Manager.defaultManager.shouldPromptIfRated = shouldPromptIfRated
|
Manager.defaultManager.shouldPromptIfRated = shouldPromptIfRated
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return whether Armchair will try and present the Storekit review prompt (useful for custom dialog modification)
|
* Return whether Armchair will try and present the Storekit review prompt (useful for custom dialog modification)
|
||||||
*/
|
*/
|
||||||
@@ -300,6 +287,20 @@ public func affiliateCampaignCode(_ affiliateCampaignCode: String) {
|
|||||||
Manager.defaultManager.affiliateCampaignCode = affiliateCampaignCode
|
Manager.defaultManager.affiliateCampaignCode = affiliateCampaignCode
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if os(iOS)
|
||||||
|
/*
|
||||||
|
* If set to true, use SKStoreReviewController's requestReview() prompt instead of the default prompt.
|
||||||
|
* If not on iOS 10.3+, reort to the default prompt.
|
||||||
|
* Default => false.
|
||||||
|
*/
|
||||||
|
public func useStoreKitReviewPrompt() -> Bool {
|
||||||
|
return Manager.defaultManager.useStoreKitReviewPrompt
|
||||||
|
}
|
||||||
|
public func useStoreKitReviewPrompt(_ useStoreKitReviewPrompt: Bool) {
|
||||||
|
Manager.defaultManager.useStoreKitReviewPrompt = useStoreKitReviewPrompt
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 'true' will show the Armchair alert everytime. Useful for testing
|
* 'true' will show the Armchair alert everytime. Useful for testing
|
||||||
* how your message looks and making sure the link to your app's review page works.
|
* how your message looks and making sure the link to your app's review page works.
|
||||||
@@ -768,7 +769,9 @@ open class Manager : ArmchairManager {
|
|||||||
// MARK: Review Alert & Properties
|
// MARK: Review Alert & Properties
|
||||||
|
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
fileprivate let reviewURLTemplate = "itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&id=APP_ID&at=AFFILIATE_CODE&ct=AFFILIATE_CAMPAIGN_CODE&action=write-review"
|
fileprivate var ratingAlert: UIAlertView? = nil
|
||||||
|
fileprivate let reviewURLTemplate = "itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&id=APP_ID&at=AFFILIATE_CODE&ct=AFFILIATE_CAMPAIGN_CODE&action=write-review"
|
||||||
|
fileprivate let reviewURLTemplateiOS11 = "https://itunes.apple.com/us/app/idAPP_ID?ls=1&mt=8&at=AFFILIATE_CODE&ct=AFFILIATE_CAMPAIGN_CODE&action=write-review"
|
||||||
#elseif os(OSX)
|
#elseif os(OSX)
|
||||||
private var ratingAlert: NSAlert? = nil
|
private var ratingAlert: NSAlert? = nil
|
||||||
private let reviewURLTemplate = "macappstore://itunes.apple.com/us/app/idAPP_ID?ls=1&mt=12&at=AFFILIATE_CODE&ct=AFFILIATE_CAMPAIGN_CODE"
|
private let reviewURLTemplate = "macappstore://itunes.apple.com/us/app/idAPP_ID?ls=1&mt=12&at=AFFILIATE_CODE&ct=AFFILIATE_CAMPAIGN_CODE"
|
||||||
@@ -1252,7 +1255,7 @@ open class Manager : ArmchairManager {
|
|||||||
} else {
|
} else {
|
||||||
/// Didn't show storekit prompt, present app store manually
|
/// Didn't show storekit prompt, present app store manually
|
||||||
let 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: {
|
alertView.addAction(UIAlertAction(title: cancelButtonTitle, style:UIAlertActionStyle.default, handler: {
|
||||||
(alert: UIAlertAction!) in
|
(alert: UIAlertAction!) in
|
||||||
self.dontRate()
|
self.dontRate()
|
||||||
}))
|
}))
|
||||||
@@ -1262,15 +1265,15 @@ open class Manager : ArmchairManager {
|
|||||||
self.remindMeLater()
|
self.remindMeLater()
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
alertView.addAction(UIAlertAction(title: rateButtonTitle, style:UIAlertActionStyle.default, handler: {
|
alertView.addAction(UIAlertAction(title: rateButtonTitle, style:UIAlertActionStyle.cancel, handler: {
|
||||||
(alert: UIAlertAction!) in
|
(alert: UIAlertAction!) in
|
||||||
self._rateApp()
|
self._rateApp()
|
||||||
}))
|
}))
|
||||||
|
|
||||||
// get the top most controller (= the StoreKit Controller) and dismiss it
|
// get the top most controller (= the StoreKit Controller) and dismiss it
|
||||||
if let presentingController = UIApplication.shared.keyWindow?.rootViewController {
|
if let presentingController = UIApplication.shared.keyWindow?.rootViewController {
|
||||||
if let topController = topMostViewController(presentingController) {
|
if let topController = Manager.topMostViewController(presentingController) {
|
||||||
topController.present(alertView, animated: usesAnimation) { [weak self] _ in
|
topController.present(alertView, animated: usesAnimation) { [weak self] in
|
||||||
if let closure = self?.didDisplayAlertClosure {
|
if let closure = self?.didDisplayAlertClosure {
|
||||||
closure()
|
closure()
|
||||||
}
|
}
|
||||||
@@ -1282,9 +1285,6 @@ open class Manager : ArmchairManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#elseif os(OSX)
|
#elseif os(OSX)
|
||||||
|
|
||||||
let alert: NSAlert = NSAlert()
|
let alert: NSAlert = NSAlert()
|
||||||
@@ -1297,14 +1297,14 @@ open class Manager : ArmchairManager {
|
|||||||
alert.addButton(withTitle: cancelButtonTitle)
|
alert.addButton(withTitle: cancelButtonTitle)
|
||||||
ratingAlert = alert
|
ratingAlert = alert
|
||||||
|
|
||||||
if let window = NSApplication.shared().keyWindow {
|
if let window = NSApplication.shared.keyWindow {
|
||||||
alert.beginSheetModal(for: window) {
|
alert.beginSheetModal(for: window) {
|
||||||
(response: NSModalResponse) in
|
(response: NSApplication.ModalResponse) in
|
||||||
self.handleNSAlert(returnCode: response)
|
self.handleNSAlertResponse(response)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let returnCode = alert.runModal()
|
let response = alert.runModal()
|
||||||
handleNSAlert(returnCode:returnCode)
|
handleNSAlertResponse(response)
|
||||||
}
|
}
|
||||||
|
|
||||||
if let closure = self.didDisplayAlertClosure {
|
if let closure = self.didDisplayAlertClosure {
|
||||||
@@ -1336,7 +1336,7 @@ open class Manager : ArmchairManager {
|
|||||||
|
|
||||||
// get the top most controller (= the StoreKit Controller) and dismiss it
|
// get the top most controller (= the StoreKit Controller) and dismiss it
|
||||||
if let presentingController = UIApplication.shared.keyWindow?.rootViewController {
|
if let presentingController = UIApplication.shared.keyWindow?.rootViewController {
|
||||||
if let topController = topMostViewController(presentingController) {
|
if let topController = Manager.topMostViewController(presentingController) {
|
||||||
topController.dismiss(animated: usesAnimation) {}
|
topController.dismiss(animated: usesAnimation) {}
|
||||||
currentStatusBarStyle = UIStatusBarStyle.default
|
currentStatusBarStyle = UIStatusBarStyle.default
|
||||||
}
|
}
|
||||||
@@ -1349,24 +1349,24 @@ open class Manager : ArmchairManager {
|
|||||||
|
|
||||||
#elseif os(OSX)
|
#elseif os(OSX)
|
||||||
|
|
||||||
private func handleNSAlert(returnCode: NSInteger) {
|
private func handleNSAlertResponse(_ response: NSApplication.ModalResponse) {
|
||||||
switch (returnCode) {
|
switch (response) {
|
||||||
case NSAlertFirstButtonReturn:
|
case .alertFirstButtonReturn:
|
||||||
// they want to rate it
|
// they want to rate it
|
||||||
_rateApp()
|
_rateApp()
|
||||||
case NSAlertSecondButtonReturn:
|
case .alertSecondButtonReturn:
|
||||||
// remind them later or cancel
|
// remind them later or cancel
|
||||||
if showsRemindButton() {
|
if showsRemindButton() {
|
||||||
remindMeLater()
|
remindMeLater()
|
||||||
} else {
|
} else {
|
||||||
dontRate()
|
dontRate()
|
||||||
}
|
}
|
||||||
case NSAlertThirdButtonReturn:
|
case .alertThirdButtonReturn:
|
||||||
// they don't want to rate it
|
// they don't want to rate it
|
||||||
dontRate()
|
dontRate()
|
||||||
default:
|
default:
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
@@ -1422,7 +1422,7 @@ open class Manager : ArmchairManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if let rootController = getRootViewController() {
|
if let rootController = Manager.getRootViewController() {
|
||||||
rootController.present(storeViewController, animated: usesAnimation) {
|
rootController.present(storeViewController, animated: usesAnimation) {
|
||||||
self.modalPanelOpen = true
|
self.modalPanelOpen = true
|
||||||
|
|
||||||
@@ -1449,7 +1449,7 @@ open class Manager : ArmchairManager {
|
|||||||
|
|
||||||
#elseif os(OSX)
|
#elseif os(OSX)
|
||||||
if let url = URL(string: reviewURLString()) {
|
if let url = URL(string: reviewURLString()) {
|
||||||
let opened = NSWorkspace.shared().open(url)
|
let opened = NSWorkspace.shared.open(url)
|
||||||
if !opened {
|
if !opened {
|
||||||
debugLog("Failed to open \(url)")
|
debugLog("Failed to open \(url)")
|
||||||
}
|
}
|
||||||
@@ -1460,7 +1460,12 @@ open class Manager : ArmchairManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fileprivate func reviewURLString() -> String {
|
fileprivate func reviewURLString() -> String {
|
||||||
let template = reviewURLTemplate
|
#if os(iOS)
|
||||||
|
let template = operatingSystemVersion >= 11 ? reviewURLTemplateiOS11 : reviewURLTemplate
|
||||||
|
#elseif os(OSX)
|
||||||
|
let template = reviewURLTemplate
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
var reviewURL = template.replacingOccurrences(of: "APP_ID", with: "\(appID)")
|
var reviewURL = template.replacingOccurrences(of: "APP_ID", with: "\(appID)")
|
||||||
reviewURL = reviewURL.replacingOccurrences(of: "AFFILIATE_CODE", with: "\(affiliateCode)")
|
reviewURL = reviewURL.replacingOccurrences(of: "AFFILIATE_CODE", with: "\(affiliateCode)")
|
||||||
reviewURL = reviewURL.replacingOccurrences(of: "AFFILIATE_CAMPAIGN_CODE", with: "\(affiliateCampaignCode)")
|
reviewURL = reviewURL.replacingOccurrences(of: "AFFILIATE_CAMPAIGN_CODE", with: "\(affiliateCampaignCode)")
|
||||||
@@ -1689,7 +1694,7 @@ open class Manager : ArmchairManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
private func topMostViewController(_ controller: UIViewController?) -> UIViewController? {
|
private static func topMostViewController(_ controller: UIViewController?) -> UIViewController? {
|
||||||
var isPresenting: Bool = false
|
var isPresenting: Bool = false
|
||||||
var topController: UIViewController? = controller
|
var topController: UIViewController? = controller
|
||||||
repeat {
|
repeat {
|
||||||
@@ -1707,7 +1712,7 @@ open class Manager : ArmchairManager {
|
|||||||
return topController
|
return topController
|
||||||
}
|
}
|
||||||
|
|
||||||
private func getRootViewController() -> UIViewController? {
|
private static func getRootViewController() -> UIViewController? {
|
||||||
if var window = UIApplication.shared.keyWindow {
|
if var window = UIApplication.shared.keyWindow {
|
||||||
|
|
||||||
if window.windowLevel != UIWindowLevelNormal {
|
if window.windowLevel != UIWindowLevelNormal {
|
||||||
@@ -1722,32 +1727,40 @@ open class Manager : ArmchairManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for subView in window.subviews {
|
return iterateSubViewsForViewController(window)
|
||||||
if let responder = subView.next {
|
|
||||||
if responder.isKind(of: UIViewController.self) {
|
|
||||||
return topMostViewController(responder as? UIViewController)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static func iterateSubViewsForViewController(_ parentView: UIView) -> UIViewController? {
|
||||||
|
for subView in parentView.subviews {
|
||||||
|
if let responder = subView.next {
|
||||||
|
if responder.isKind(of: UIViewController.self) {
|
||||||
|
return topMostViewController(responder as? UIViewController)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if let found = iterateSubViewsForViewController(subView) {
|
||||||
|
return found
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private func hideRatingAlert() {
|
private func hideRatingAlert() {
|
||||||
#if os(OSX)
|
#if os(OSX)
|
||||||
if let alert = ratingAlert {
|
if let alert = ratingAlert {
|
||||||
debugLog("Hiding Alert")
|
debugLog("Hiding Alert")
|
||||||
if let window = NSApplication.shared().keyWindow {
|
if let window = NSApplication.shared().keyWindow {
|
||||||
if let parent = window.sheetParent {
|
if let parent = window.sheetParent {
|
||||||
parent.endSheet(window)
|
parent.endSheet(window)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
ratingAlert = nil
|
ratingAlert = nil
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -1763,12 +1776,12 @@ open class Manager : ArmchairManager {
|
|||||||
// MARK: -
|
// MARK: -
|
||||||
// MARK: Notification Handlers
|
// MARK: Notification Handlers
|
||||||
|
|
||||||
public func appWillResignActive(_ notification: Notification) {
|
@objc public func appWillResignActive(_ notification: Notification) {
|
||||||
debugLog("appWillResignActive:")
|
debugLog("appWillResignActive:")
|
||||||
hideRatingAlert()
|
hideRatingAlert()
|
||||||
}
|
}
|
||||||
|
|
||||||
public func applicationDidFinishLaunching(_ notification: Notification) {
|
@objc public func applicationDidFinishLaunching(_ notification: Notification) {
|
||||||
DispatchQueue.global(qos: .background).async {
|
DispatchQueue.global(qos: .background).async {
|
||||||
self.debugLog("applicationDidFinishLaunching:")
|
self.debugLog("applicationDidFinishLaunching:")
|
||||||
self.migrateKeysIfNecessary()
|
self.migrateKeysIfNecessary()
|
||||||
@@ -1776,7 +1789,7 @@ open class Manager : ArmchairManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public func applicationWillEnterForeground(_ notification: Notification) {
|
@objc public func applicationWillEnterForeground(_ notification: Notification) {
|
||||||
DispatchQueue.global(qos: .background).async {
|
DispatchQueue.global(qos: .background).async {
|
||||||
self.debugLog("applicationWillEnterForeground:")
|
self.debugLog("applicationWillEnterForeground:")
|
||||||
self.migrateKeysIfNecessary()
|
self.migrateKeysIfNecessary()
|
||||||
@@ -1804,12 +1817,12 @@ open class Manager : ArmchairManager {
|
|||||||
fileprivate func setupNotifications() {
|
fileprivate func setupNotifications() {
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(Manager.appWillResignActive(_:)), name: NSNotification.Name.UIApplicationWillResignActive, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(Manager.appWillResignActive(_:)), name: NSNotification.Name.UIApplicationWillResignActive, object: nil)
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(UIApplicationDelegate.applicationDidFinishLaunching(_:)), name: NSNotification.Name.UIApplicationDidFinishLaunching, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(Manager.applicationDidFinishLaunching(_:)), name: NSNotification.Name.UIApplicationDidFinishLaunching, object: nil)
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(UIApplicationDelegate.applicationWillEnterForeground(_:)), name: NSNotification.Name.UIApplicationWillEnterForeground, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(Manager.applicationWillEnterForeground(_:)), name: NSNotification.Name.UIApplicationWillEnterForeground, object: nil)
|
||||||
#elseif os(OSX)
|
#elseif os(OSX)
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(Manager.appWillResignActive(_:)), name: NSNotification.Name.NSApplicationWillResignActive, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(Manager.appWillResignActive(_:)), name: NSApplication.willResignActiveNotification, object: nil)
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(NSApplicationDelegate.applicationDidFinishLaunching(_:)), name: NSNotification.Name.NSApplicationDidFinishLaunching, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(Manager.applicationDidFinishLaunching(_:)), name: NSApplication.didFinishLaunchingNotification, object: nil)
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(Manager.applicationWillEnterForeground(_:)), name: NSNotification.Name.NSApplicationWillBecomeActive, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(Manager.applicationWillEnterForeground(_:)), name: NSApplication.willBecomeActiveNotification, object: nil)
|
||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -188,13 +188,13 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 0700;
|
LastSwiftUpdateCheck = 0700;
|
||||||
LastUpgradeCheck = 0800;
|
LastUpgradeCheck = 0900;
|
||||||
ORGANIZATIONNAME = Armchair;
|
ORGANIZATIONNAME = Armchair;
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
F8111E0419A951050040E7D1 = {
|
F8111E0419A951050040E7D1 = {
|
||||||
CreatedOnToolsVersion = 6.0;
|
CreatedOnToolsVersion = 6.0;
|
||||||
DevelopmentTeam = 9H3S97RP4K;
|
DevelopmentTeam = 9H3S97RP4K;
|
||||||
LastSwiftMigration = 0800;
|
LastSwiftMigration = 0830;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -327,14 +327,20 @@
|
|||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
@@ -362,6 +368,7 @@
|
|||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
@@ -374,14 +381,20 @@
|
|||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
@@ -401,6 +414,7 @@
|
|||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
};
|
};
|
||||||
@@ -422,7 +436,7 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
||||||
PRODUCT_NAME = "iOS Example";
|
PRODUCT_NAME = "iOS Example";
|
||||||
PROVISIONING_PROFILE = "";
|
PROVISIONING_PROFILE = "";
|
||||||
SWIFT_VERSION = 2.3;
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -440,7 +454,7 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
||||||
PRODUCT_NAME = "iOS Example";
|
PRODUCT_NAME = "iOS Example";
|
||||||
PROVISIONING_PROFILE = "";
|
PROVISIONING_PROFILE = "";
|
||||||
SWIFT_VERSION = 2.3;
|
SWIFT_VERSION = 4.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user