// // iRate.h // // Version 1.11.4 // // Created by Nick Lockwood on 26/01/2011. // Copyright 2011 Charcoal Design // // Distributed under the permissive zlib license // Get the latest version from here: // // https://github.com/nicklockwood/iRate // // This software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would be // appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not be // misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source distribution. // #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wobjc-missing-property-synthesis" #import #undef weak_delegate #if __has_feature(objc_arc_weak) && (TARGET_OS_IPHONE || __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_8) #define weak_delegate weak #else #define weak_delegate unsafe_unretained #endif #import #if TARGET_OS_IPHONE #import #define IRATE_EXTERN UIKIT_EXTERN #else #import #define IRATE_EXTERN APPKIT_EXTERN #endif //! Project version number for iRate. FOUNDATION_EXPORT double iRateVersionNumber; //! Project version string for iRate. FOUNDATION_EXPORT const unsigned char iRateVersionString[]; IRATE_EXTERN NSUInteger const iRateAppStoreGameGenreID; IRATE_EXTERN NSString *const iRateErrorDomain; // localisation string keys IRATE_EXTERN NSString *const iRateMessageTitleKey; // iRateMessageTitle IRATE_EXTERN NSString *const iRateAppMessageKey; // iRateAppMessage IRATE_EXTERN NSString *const iRateGameMessageKey; // iRateGameMessage IRATE_EXTERN NSString *const iRateUpdateMessageKey; // iRateUpdateMessage IRATE_EXTERN NSString *const iRateCancelButtonKey; // iRateCancelButton IRATE_EXTERN NSString *const iRateRemindButtonKey; // iRateRemindButton IRATE_EXTERN NSString *const iRateRateButtonKey; // iRateRateButton // notification keys IRATE_EXTERN NSString *const iRateCouldNotConnectToAppStore; IRATE_EXTERN NSString *const iRateDidDetectAppUpdate; IRATE_EXTERN NSString *const iRateDidPromptForRating; IRATE_EXTERN NSString *const iRateUserDidAttemptToRateApp; IRATE_EXTERN NSString *const iRateUserDidDeclineToRateApp; IRATE_EXTERN NSString *const iRateUserDidRequestReminderToRateApp; IRATE_EXTERN NSString *const iRateDidOpenAppStore; typedef NS_ENUM(NSUInteger, iRateErrorCode) { iRateErrorBundleIdDoesNotMatchAppStore = 1, iRateErrorApplicationNotFoundOnAppStore, iRateErrorApplicationIsNotLatestVersion, iRateErrorCouldNotOpenRatingPageURL }; @protocol iRateDelegate @optional - (void)iRateCouldNotConnectToAppStore:(NSError *)error; - (void)iRateDidDetectAppUpdate; - (BOOL)iRateShouldPromptForRating; - (void)iRateDidPromptForRating; - (void)iRateUserDidAttemptToRateApp; - (void)iRateUserDidDeclineToRateApp; - (void)iRateUserDidRequestReminderToRateApp; - (BOOL)iRateShouldOpenAppStore; - (void)iRateDidOpenAppStore; @end @interface iRate : NSObject + (instancetype)sharedInstance; // app store ID - this is only needed if your // bundle ID is not unique between iOS and Mac app stores @property (nonatomic, assign) NSUInteger appStoreID; // application details - these are set automatically @property (nonatomic, assign) NSUInteger appStoreGenreID; @property (nonatomic, copy) NSString *appStoreCountry; @property (nonatomic, copy) NSString *applicationName; @property (nonatomic, copy) NSString *applicationVersion; @property (nonatomic, copy) NSString *applicationBundleID; // usage settings - these have sensible defaults @property (nonatomic, assign) NSUInteger usesUntilPrompt; @property (nonatomic, assign) NSUInteger eventsUntilPrompt; @property (nonatomic, assign) float daysUntilPrompt; @property (nonatomic, assign) float usesPerWeekForPrompt; @property (nonatomic, assign) float remindPeriod; // message text, you may wish to customise these @property (nonatomic, copy) NSString *messageTitle; @property (nonatomic, copy) NSString *message; @property (nonatomic, copy) NSString *updateMessage; @property (nonatomic, copy) NSString *cancelButtonLabel; @property (nonatomic, copy) NSString *remindButtonLabel; @property (nonatomic, copy) NSString *rateButtonLabel; // debugging and prompt overrides @property (nonatomic, assign) BOOL useUIAlertControllerIfAvailable; @property (nonatomic, assign) BOOL useAllAvailableLanguages; @property (nonatomic, assign) BOOL promptForNewVersionIfUserRated; @property (nonatomic, assign) BOOL onlyPromptIfLatestVersion; @property (nonatomic, assign) BOOL onlyPromptIfMainWindowIsAvailable; @property (nonatomic, assign) BOOL promptAtLaunch; @property (nonatomic, assign) BOOL verboseLogging; @property (nonatomic, assign) BOOL previewMode; // advanced properties for implementing custom behaviour @property (nonatomic, strong) NSURL *ratingsURL; @property (nonatomic, strong) NSDate *firstUsed; @property (nonatomic, strong) NSDate *lastReminded; @property (nonatomic, assign) NSUInteger usesCount; @property (nonatomic, assign) NSUInteger eventCount; @property (nonatomic, readonly) float usesPerWeek; @property (nonatomic, assign) BOOL declinedThisVersion; @property (nonatomic, readonly) BOOL declinedAnyVersion; @property (nonatomic, assign) BOOL ratedThisVersion; @property (nonatomic, readonly) BOOL ratedAnyVersion; @property (nonatomic, weak_delegate) id delegate; // manually control behaviour - (BOOL)shouldPromptForRating; - (void)promptForRating; - (void)promptIfNetworkAvailable; - (void)promptIfAllCriteriaMet; - (void)openRatingsPageInAppStore; - (void)logEvent:(BOOL)deferPrompt; - (void)preventPromptAtNextTest; @end #pragma clang diagnostic pop