From 988228bb01f6d5415e94bc1175ce798135e01909 Mon Sep 17 00:00:00 2001 From: Joshua Date: Wed, 9 Oct 2013 19:02:45 -0400 Subject: [PATCH 01/14] Replace references to HypFacebook with HypRate --- HypRate.sublime-workspace | 32 ++++++++++---------- project/android/fr/hyperfiction/HypRate.java | 4 +-- project/common/ExternalInterface.cpp | 18 +++++------ 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/HypRate.sublime-workspace b/HypRate.sublime-workspace index ab96305..ca5f594 100644 --- a/HypRate.sublime-workspace +++ b/HypRate.sublime-workspace @@ -732,7 +732,7 @@ "/C/Developement/workspaceHaxe/HypRate/project/iPhone/include/Appirater.m", "/C/Users/Johann/Downloads/Photon-Win32_v3-2-1-1_SDK/Photon-Win32_v3-2-1-1_SDK/Demos/demo_helloWorld/src/Photon_lib.cpp", "/C/Users/Johann/Downloads/Photon-Win32_v3-2-1-1_SDK/Photon-Win32_v3-2-1-1_SDK/Demos/demo_helloWorld/inc/Photon_lib.h", - "/C/Developement/workspaceHaxe/HypFacebook/project/common/ExternalInterface.cpp", + "/C/Developement/workspaceHaxe/HypRate/project/common/ExternalInterface.cpp", "/C/Developement/workspaceHaxe/HypRate/project/common/ExternalInterface.cpp", "/C/Users/Johann/Downloads/Photon-Win32_v3-2-1-1_SDK/Photon-Win32_v3-2-1-1_SDK/Demos/demo_realtime/src/CPhotonLib.cpp", "/C/Users/Johann/Downloads/Photon-Win32_v3-2-1-1_SDK/Photon-Win32_v3-2-1-1_SDK/Demos/demo_realtime/inc/CPhotonLib.h", @@ -744,17 +744,17 @@ "/C/Developement/workspaceHaxe/HypRate/README.md", "/C/Developement/workspaceHaxe/HypRate/project/android/com/kopfgeldjaeger/ratememaybe/RateMeMaybe.java", "/C/Developement/workspaceHaxe/HypRate/project/android/com/kopfgeldjaeger/ratememaybe/RateMeMaybeFragment.java", - "/C/Developement/workspaceHaxe/HypFacebook/project/include/HypFacebook.h", - "/C/Developement/workspaceHaxe/HypFacebook/project/iPhone/HypFacebook.mm", + "/C/Developement/workspaceHaxe/HypRate/project/include/HypRate.h", + "/C/Developement/workspaceHaxe/HypRate/project/iPhone/HypRate.mm", "/C/Developement/workspaceHaxe/HypRate/project/iPhone/HypRate.mm", "/C/Users/Johann/Downloads/Photon-Win32_v3-2-1-1_SDK/Photon-Win32_v3-2-1-1_SDK/Demos/demo_helloWorld/inc/HelloWorldApplication.h", "/C/Users/Johann/Downloads/Photon-Win32_v3-2-1-1_SDK/Photon-Win32_v3-2-1-1_SDK/Demos/demo_helloWorld/inc/UIListener.h", "/C/Users/Johann/Downloads/Photon-Win32_v3-2-1-1_SDK/Photon-Win32_v3-2-1-1_SDK/Demos/demo_helloWorld/inc/StdIO_UIListener.h", - "/C/Developement/workspaceHaxe/HypFacebook/include.nmml", + "/C/Developement/workspaceHaxe/HypRate/include.nmml", "/C/Developement/workspaceHaxe/HypRate/project/iPhone/include/Appirater.h", "/C/Developement/workspaceHaxe/HypRate/project/iphone.sh", "/C/Developement/workspaceHaxe/HypRate/project/Build.xml", - "/C/Developement/workspaceHaxe/HypRate/project/include/HypFacebook.h", + "/C/Developement/workspaceHaxe/HypRate/project/include/HypRate.h", "/C/Developement/workspaceHaxe/HypRate/project/android/com/kot/ratememaybe/RateMeMaybe.java", "/C/Developement/workspaceHaxe/Viral3/build.hxml", "/C/Developement/workspaceHaxe/HypGA/README.md", @@ -796,18 +796,18 @@ "/C/Developement/workspaceHaxe/inthebox/src/org/shoebox/utils/NativeMirror.hx", "/C/Developement/workspaceHaxe/Viral3/src/fr/hyperfiction/viral/controllers/CGame.hx", "/C/Users/Johann/AppData/Roaming/Sublime Text 2/Packages/User/Preferences.sublime-settings", - "/C/Developement/workspaceHaxe/HypFacebook/README.md", - "/C/Developement/workspaceHaxe/HypFacebook/haxelib.xml", + "/C/Developement/workspaceHaxe/HypRate/README.md", + "/C/Developement/workspaceHaxe/HypRate/haxelib.xml", "/X/Robin/Herocorp/Videos/HC3W_C02_Valur.mov", "/C/Developement/workspaceHaxe/Viral3/src/fr/hyperfiction/viral/core/ViralAssets.hx", - "/C/Developement/workspaceHaxe/HypFacebook/LICENSE", - "/C/Developement/workspaceHaxe/HypFacebook/NOTICE", - "/C/Developement/workspaceHaxe/HypFacebook/src/fr/hyperfiction/HypFacebook.hx", - "/C/Developement/workspaceHaxe/HypFacebook/src/org/shoebox/utils/NativeMirror.hx", - "/C/Developement/workspaceHaxe/HypFacebook/src/ShortCuts.hx", - "/C/Developement/workspaceHaxe/HyperExtensions/extensions/HypFacebook/readme.md", - "/C/Developement/workspaceHaxe/HyperExtensions/extensions/HypFacebook/NOTICE", - "/C/Developement/workspaceHaxe/HyperExtensions/extensions/HypFacebook/LICENSE", + "/C/Developement/workspaceHaxe/HypRate/LICENSE", + "/C/Developement/workspaceHaxe/HypRate/NOTICE", + "/C/Developement/workspaceHaxe/HypRate/src/fr/hyperfiction/HypRate.hx", + "/C/Developement/workspaceHaxe/HypRate/src/org/shoebox/utils/NativeMirror.hx", + "/C/Developement/workspaceHaxe/HypRate/src/ShortCuts.hx", + "/C/Developement/workspaceHaxe/HyperExtensions/extensions/HypRate/readme.md", + "/C/Developement/workspaceHaxe/HyperExtensions/extensions/HypRate/NOTICE", + "/C/Developement/workspaceHaxe/HyperExtensions/extensions/HypRate/LICENSE", "/C/Users/Johann/AppData/Roaming/Sublime Text 2/Packages/Dayle Rees Color Schemes/FreshCut.tmTheme", "/C/Users/Johann/AppData/Roaming/Sublime Text 2/Packages/Dayle Rees Color Schemes/Phix Dark.tmTheme", "/C/Users/Johann/AppData/Roaming/Sublime Text 2/Packages/Dayle Rees Color Schemes/Glowfish.tmTheme", @@ -931,7 +931,7 @@ "APPIRATER_LOCALIZED_APP_NAME", "APPIRATER_CANCEL_BUTTON", "APPIRATER_LOCALIZED_MESSAGE", - "HypFacebook", + "HypRate", "Neutral", "Positive", "Dialog", diff --git a/project/android/fr/hyperfiction/HypRate.java b/project/android/fr/hyperfiction/HypRate.java index e3a1956..cb10b33 100644 --- a/project/android/fr/hyperfiction/HypRate.java +++ b/project/android/fr/hyperfiction/HypRate.java @@ -126,6 +126,6 @@ static public void setNegative_text( String s ){ * @return void */ public static void trace( String s ){ - Log.w( TAG, "HypFacebookFrag ::: "+s ); + Log.w( TAG, "HypRateFrag ::: "+s ); } -} \ No newline at end of file +} diff --git a/project/common/ExternalInterface.cpp b/project/common/ExternalInterface.cpp index a766955..9c25c9e 100644 --- a/project/common/ExternalInterface.cpp +++ b/project/common/ExternalInterface.cpp @@ -21,7 +21,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND extern "C"{ int HypRate_register_prims(){ - printf("HypFacebook : register_prims()\n"); + printf("HypRate : register_prims()\n"); return 0; } } @@ -37,44 +37,44 @@ extern "C"{ #ifdef IPHONE value HypRate_setDialog_title( value s ) { - setDialog_title( val_string( s ) ); + Hyperfiction::setDialog_title( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setDialog_title , 1 ); value HypRate_setDialog_msg( value s ) { - setDialog_msg( val_string( s ) ); + Hyperfiction::setDialog_msg( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setDialog_msg , 1 ); value HypRate_setPositive_text( value s ) { - setPositive_text( val_string( s ) ); + Hyperfiction::setPositive_text( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setPositive_text , 1 ); value HypRate_setNeutral_text( value s ) { - setNeutral_text( val_string( s ) ); + Hyperfiction::setNeutral_text( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setNeutral_text , 1 ); value HypRate_setNegative_text( value s ) { - setCancel_text( val_string( s ) ); + Hyperfiction::setCancel_text( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setNegative_text , 1 ); value HypRate_start( value minL , value minD , value untilL , value untilD ){ - start( val_int( minL ) , val_int( minD ) , val_int( untilL ) , val_int( untilD )); + Hyperfiction::start( val_int( minL ) , val_int( minD ) , val_int( untilL ) , val_int( untilD )); return alloc_null( ); } DEFINE_PRIM( HypRate_start , 4 ); value HypRate_show( ){ - show( ); - return alloc_nul( ); + Hyperfiction::show( ); + return alloc_null( ); } DEFINE_PRIM( HypRate_show , 0 ); From c91180dd7705566a3563cb0b51fd2838fa2883ae Mon Sep 17 00:00:00 2001 From: Joshua Date: Wed, 9 Oct 2013 19:07:42 -0400 Subject: [PATCH 02/14] Remove changes to interface file to save for ios fix branch --- project/common/ExternalInterface.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/project/common/ExternalInterface.cpp b/project/common/ExternalInterface.cpp index 9c25c9e..10cb7a4 100644 --- a/project/common/ExternalInterface.cpp +++ b/project/common/ExternalInterface.cpp @@ -37,44 +37,44 @@ extern "C"{ #ifdef IPHONE value HypRate_setDialog_title( value s ) { - Hyperfiction::setDialog_title( val_string( s ) ); + setDialog_title( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setDialog_title , 1 ); value HypRate_setDialog_msg( value s ) { - Hyperfiction::setDialog_msg( val_string( s ) ); + setDialog_msg( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setDialog_msg , 1 ); value HypRate_setPositive_text( value s ) { - Hyperfiction::setPositive_text( val_string( s ) ); + setPositive_text( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setPositive_text , 1 ); value HypRate_setNeutral_text( value s ) { - Hyperfiction::setNeutral_text( val_string( s ) ); + setNeutral_text( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setNeutral_text , 1 ); value HypRate_setNegative_text( value s ) { - Hyperfiction::setCancel_text( val_string( s ) ); + setCancel_text( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setNegative_text , 1 ); value HypRate_start( value minL , value minD , value untilL , value untilD ){ - Hyperfiction::start( val_int( minL ) , val_int( minD ) , val_int( untilL ) , val_int( untilD )); + start( val_int( minL ) , val_int( minD ) , val_int( untilL ) , val_int( untilD )); return alloc_null( ); } DEFINE_PRIM( HypRate_start , 4 ); value HypRate_show( ){ - Hyperfiction::show( ); - return alloc_null( ); + show( ); + return alloc_nul( ); } DEFINE_PRIM( HypRate_show , 0 ); From 480a8c4cfeabf11383a00632d0abd4cb5078f653 Mon Sep 17 00:00:00 2001 From: Joshua Date: Wed, 9 Oct 2013 19:28:17 -0400 Subject: [PATCH 03/14] Add HypRate ndll and dependencies for Appirater in project file --- include.nmml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/include.nmml b/include.nmml index 09e1a8d..b5e4e38 100644 --- a/include.nmml +++ b/include.nmml @@ -4,9 +4,13 @@ - + + + + + - \ No newline at end of file + From 4610b1f80f830a5f41b1bd67a6d0e00acb339f7e Mon Sep 17 00:00:00 2001 From: Joshua Date: Wed, 9 Oct 2013 19:29:30 -0400 Subject: [PATCH 04/14] Add new appirater. --- project/iPhone/include/Appirater.h | 85 +++++++-- project/iPhone/include/Appirater.m | 197 ++++++++++++--------- project/iPhone/include/AppiraterDelegate.h | 22 +++ 3 files changed, 204 insertions(+), 100 deletions(-) mode change 100644 => 100755 project/iPhone/include/Appirater.h mode change 100644 => 100755 project/iPhone/include/Appirater.m create mode 100755 project/iPhone/include/AppiraterDelegate.h diff --git a/project/iPhone/include/Appirater.h b/project/iPhone/include/Appirater.h old mode 100644 new mode 100755 index 3cb8d3a..8b0bb2b --- a/project/iPhone/include/Appirater.h +++ b/project/iPhone/include/Appirater.h @@ -1,9 +1,9 @@ /* This file is part of Appirater. - + Copyright (c) 2012, Arash Payan All rights reserved. - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without @@ -12,10 +12,10 @@ copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND @@ -46,12 +46,52 @@ extern NSString *const kAppiraterRatedCurrentVersion; extern NSString *const kAppiraterDeclinedToRate; extern NSString *const kAppiraterReminderRequestDate; +/* + Your localized app's name. + */ +#define APPIRATER_LOCALIZED_APP_NAME [[[NSBundle mainBundle] localizedInfoDictionary] objectForKey:@"CFBundleDisplayName"] + +/* + Your app's name. + */ +#define APPIRATER_APP_NAME APPIRATER_LOCALIZED_APP_NAME ? APPIRATER_LOCALIZED_APP_NAME : [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"] + +/* + This is the message your users will see once they've passed the day+launches + threshold. + */ +#define APPIRATER_LOCALIZED_MESSAGE NSLocalizedStringFromTableInBundle(@"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!", @"AppiraterLocalizable", [Appirater bundle], nil) +#define APPIRATER_MESSAGE [NSString stringWithFormat:APPIRATER_LOCALIZED_MESSAGE, APPIRATER_APP_NAME] + +/* + This is the title of the message alert that users will see. + */ +#define APPIRATER_LOCALIZED_MESSAGE_TITLE NSLocalizedStringFromTableInBundle(@"Rate %@", @"AppiraterLocalizable", [Appirater bundle], nil) +#define APPIRATER_MESSAGE_TITLE [NSString stringWithFormat:APPIRATER_LOCALIZED_MESSAGE_TITLE, APPIRATER_APP_NAME] + +/* + The text of the button that rejects reviewing the app. + */ +#define APPIRATER_CANCEL_BUTTON NSLocalizedStringFromTableInBundle(@"No, Thanks", @"AppiraterLocalizable", [Appirater bundle], nil) + +/* + Text of button that will send user to app review page. + */ +#define APPIRATER_LOCALIZED_RATE_BUTTON NSLocalizedStringFromTableInBundle(@"Rate %@", @"AppiraterLocalizable", [Appirater bundle], nil) +#define APPIRATER_RATE_BUTTON [NSString stringWithFormat:APPIRATER_LOCALIZED_RATE_BUTTON, APPIRATER_APP_NAME] + +/* + Text for button to remind the user to review later. + */ +#define APPIRATER_RATE_LATER NSLocalizedStringFromTableInBundle(@"Remind me later", @"AppiraterLocalizable", [Appirater bundle], nil) + @interface Appirater : NSObject { UIAlertView *ratingAlert; } @property(nonatomic, strong) UIAlertView *ratingAlert; +@property(nonatomic) BOOL openInAppStore; #if __has_feature(objc_arc_weak) @property(nonatomic, weak) NSObject *delegate; #else @@ -63,7 +103,7 @@ extern NSString *const kAppiraterReminderRequestDate; support multitasking, the 'uses' count will be incremented. You should call this method at the end of your application delegate's application:didFinishLaunchingWithOptions: method. - + If the app has been used enough to be rated (and enough significant events), you can suppress the rating alert by passing NO for canPromptForRating. The rating alert will simply be postponed @@ -77,7 +117,7 @@ extern NSString *const kAppiraterReminderRequestDate; Tells Appirater that the app was brought to the foreground on multitasking devices. You should call this method from the application delegate's applicationWillEnterForeground: method. - + If the app has been used enough to be rated (and enough significant events), you can suppress the rating alert by passing NO for canPromptForRating. The rating alert will simply be postponed @@ -93,7 +133,7 @@ extern NSString *const kAppiraterReminderRequestDate; calls, then you might want to call this method whenever the user places a call. If it's a game, you might want to call this whenever the user beats a level boss. - + If the user has performed enough significant events and used the app enough, you can suppress the rating alert by passing NO for canPromptForRating. The rating alert will simply be postponed until it is called again with YES for @@ -107,7 +147,7 @@ extern NSString *const kAppiraterReminderRequestDate; Tells Appirater to show the prompt (a rating alert). The prompt will be showed if there is connection available, the user hasn't declined to rate or hasn't rated current version. - + You could call to show the prompt regardless Appirater settings, e.g., in case of some special event in your app. */ @@ -152,7 +192,7 @@ extern NSString *const kAppiraterReminderRequestDate; a 'use'. You tell Appirater about these events using the two methods: [Appirater appLaunched:] [Appirater appEnteredForeground:] - + Users need to 'use' the same version of the app this many times before before they will be prompted to rate it. */ @@ -200,23 +240,36 @@ extern NSString *const kAppiraterReminderRequestDate; */ + (void)setOpenInAppStore:(BOOL)openInAppStore; -+(void) setCancel_text:(NSString)value; -+(void) setRate_text:(NSString)value; -+(void) setMsg_text:(NSString)value; -+(void) setRate_text:(NSString)value; -+(void) setTitle_text:(NSString)value; +/* + If set to YES, the main bundle will always be used to load localized strings. + Set this to YES if you have provided your own custom localizations in AppiraterLocalizable.strings + in your main bundle. Default is NO. + */ ++ (void)setAlwaysUseMainBundle:(BOOL)useMainBundle; @end +/* + Methods in this interface are public out of necessity, but may change without notice + */ +@interface Appirater(Unsafe) + +/* + The bundle localized strings will be loaded from. +*/ ++(NSBundle *)bundle; + +@end + @interface Appirater(Deprecated) /* DEPRECATED: While still functional, it's better to use appLaunched:(BOOL)canPromptForRating instead. - + Calls [Appirater appLaunched:YES]. See appLaunched: for details of functionality. */ -+ (void)appLaunched __attribute__((deprecated)); ++ (void)appLaunched __attribute__((deprecated)); @end diff --git a/project/iPhone/include/Appirater.m b/project/iPhone/include/Appirater.m old mode 100644 new mode 100755 index adb760d..d80c589 --- a/project/iPhone/include/Appirater.m +++ b/project/iPhone/include/Appirater.m @@ -1,9 +1,9 @@ /* This file is part of Appirater. - + Copyright (c) 2012, Arash Payan All rights reserved. - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without @@ -12,10 +12,10 @@ copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND @@ -51,6 +51,7 @@ NSString *const kAppiraterReminderRequestDate = @"kAppiraterReminderRequestDate"; NSString *templateReviewURL = @"itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=APP_ID"; +NSString *templateReviewURLiOS7 = @"itms-apps://itunes.apple.com/app/idAPP_ID"; static NSString *_appId; static double _daysUntilPrompt = 30; @@ -58,17 +59,15 @@ static NSInteger _significantEventsUntilPrompt = -1; static double _timeBeforeReminding = 1; static BOOL _debug = NO; -static id _delegate; +#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0 + static id _delegate; +#else + __weak static id _delegate; +#endif static BOOL _usesAnimation = TRUE; -static BOOL _openInAppStore = NO; static UIStatusBarStyle _statusBarStyle; static BOOL _modalOpen = false; - -static NSString *APPIRATER_CANCEL_BUTTON = ""; -static NSString *APPIRATER_RATE_BUTTON = ""; -static NSString *APPIRATER_MESSAGE = ""; -static NSString *APPIRATER_RATE_LATER = ""; -static NSString *APPIRATER_MESSAGE_TITLE = ""; +static BOOL _alwaysUseMainBundle = NO; @interface Appirater () - (BOOL)connectedToNetwork; @@ -79,7 +78,7 @@ - (void)incrementUseCount; - (void)hideRatingAlert; @end -@implementation Appirater +@implementation Appirater @synthesize ratingAlert; @@ -113,7 +112,7 @@ + (void)setUsesAnimation:(BOOL)animation { _usesAnimation = animation; } + (void)setOpenInAppStore:(BOOL)openInAppStore { - _openInAppStore = openInAppStore; + [Appirater sharedInstance].openInAppStore = openInAppStore; } + (void)setStatusBarStyle:(UIStatusBarStyle)style { _statusBarStyle = style; @@ -121,25 +120,41 @@ + (void)setStatusBarStyle:(UIStatusBarStyle)style { + (void)setModalOpen:(BOOL)open { _modalOpen = open; } - -+(void) setCancel_text:(NSString)value{ - APPIRATER_CANCEL_BUTTON = value; -} -+(void) setRate_text:(NSString)value{ - APPIRATER_RATE_BUTTON = value; ++ (void)setAlwaysUseMainBundle:(BOOL)alwaysUseMainBundle { + _alwaysUseMainBundle = alwaysUseMainBundle; } -+(void) setMsg_text:(NSString)value{ - APPIRATER_MESSAGE = value; -} -+(void) setRate_text:(NSString)value{ - APPIRATER_MESSAGE = value; -} -+(void) setTitle_text:(NSString)value{ - APPIRATER_MESSAGE_TITLE = value; + ++ (NSBundle *)bundle +{ + NSBundle *bundle; + + if (_alwaysUseMainBundle) { + bundle = [NSBundle mainBundle]; + } else { + NSURL *appiraterBundleURL = [[NSBundle mainBundle] URLForResource:@"Appirater" withExtension:@"bundle"]; + + if (appiraterBundleURL) { + // Appirater.bundle will likely only exist when used via CocoaPods + bundle = [NSBundle bundleWithURL:appiraterBundleURL]; + } else { + bundle = [NSBundle mainBundle]; + } + } + + return bundle; } -+(void) setNeutral_text:(NSString)value{ - APPIRATER_RATE_LATER = value, +- (id)init { + self = [super init]; + if (self) { + if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) { + self.openInAppStore = YES; + } else { + self.openInAppStore = NO; + } + } + + return self; } - (BOOL)connectedToNetwork { @@ -148,28 +163,28 @@ - (BOOL)connectedToNetwork { bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; - + // Recover reachability flags SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); SCNetworkReachabilityFlags flags; - + BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); CFRelease(defaultRouteReachability); - + if (!didRetrieveFlags) { NSLog(@"Error. Could not recover network reachability flags"); return NO; } - + BOOL isReachable = flags & kSCNetworkFlagsReachable; BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired; BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection; - + NSURL *testURL = [NSURL URLWithString:@"http://www.apple.com/"]; NSURLRequest *testRequest = [NSURLRequest requestWithURL:testURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20.0]; NSURLConnection *testConnection = [[NSURLConnection alloc] initWithRequest:testRequest delegate:self]; - + return ((isReachable && !needsConnection) || nonWiFi) ? (testConnection ? YES : NO) : NO; } @@ -185,7 +200,7 @@ + (Appirater*)sharedInstance { UIApplicationWillResignActiveNotification object:nil]; }); } - + return appirater; } @@ -196,57 +211,58 @@ - (void)showRatingAlert { cancelButtonTitle:APPIRATER_CANCEL_BUTTON otherButtonTitles:APPIRATER_RATE_BUTTON, APPIRATER_RATE_LATER, nil]; self.ratingAlert = alertView; - [alertView show]; + [alertView show]; - if(self.delegate && [self.delegate respondsToSelector:@selector(appiraterDidDisplayAlert:)]){ - [self.delegate appiraterDidDisplayAlert:self]; - } + id delegate = _delegate; + if (delegate && [delegate respondsToSelector:@selector(appiraterDidDisplayAlert:)]) { + [delegate appiraterDidDisplayAlert:self]; + } } - (BOOL)ratingConditionsHaveBeenMet { if (_debug) return YES; - + NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; - + NSDate *dateOfFirstLaunch = [NSDate dateWithTimeIntervalSince1970:[userDefaults doubleForKey:kAppiraterFirstUseDate]]; NSTimeInterval timeSinceFirstLaunch = [[NSDate date] timeIntervalSinceDate:dateOfFirstLaunch]; NSTimeInterval timeUntilRate = 60 * 60 * 24 * _daysUntilPrompt; if (timeSinceFirstLaunch < timeUntilRate) return NO; - + // check if the app has been used enough int useCount = [userDefaults integerForKey:kAppiraterUseCount]; if (useCount <= _usesUntilPrompt) return NO; - + // check if the user has done enough significant events int sigEventCount = [userDefaults integerForKey:kAppiraterSignificantEventCount]; if (sigEventCount <= _significantEventsUntilPrompt) return NO; - + // has the user previously declined to rate this version of the app? if ([userDefaults boolForKey:kAppiraterDeclinedToRate]) return NO; - + // has the user already rated the app? if ([self userHasRatedCurrentVersion]) return NO; - + // if the user wanted to be reminded later, has enough time passed? NSDate *reminderRequestDate = [NSDate dateWithTimeIntervalSince1970:[userDefaults doubleForKey:kAppiraterReminderRequestDate]]; NSTimeInterval timeSinceReminderRequest = [[NSDate date] timeIntervalSinceDate:reminderRequestDate]; NSTimeInterval timeUntilReminder = 60 * 60 * 24 * _timeBeforeReminding; if (timeSinceReminderRequest < timeUntilReminder) return NO; - + return YES; } - (void)incrementUseCount { // get the app's version NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey]; - + // get the version number that we've been tracking NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSString *trackingVersion = [userDefaults stringForKey:kAppiraterCurrentVersion]; @@ -255,10 +271,10 @@ - (void)incrementUseCount { trackingVersion = version; [userDefaults setObject:version forKey:kAppiraterCurrentVersion]; } - + if (_debug) NSLog(@"APPIRATER Tracking version: %@", trackingVersion); - + if ([trackingVersion isEqualToString:version]) { // check if the first use date has been set. if not, set it. @@ -268,7 +284,7 @@ - (void)incrementUseCount { timeInterval = [[NSDate date] timeIntervalSince1970]; [userDefaults setDouble:timeInterval forKey:kAppiraterFirstUseDate]; } - + // increment the use count int useCount = [userDefaults integerForKey:kAppiraterUseCount]; useCount++; @@ -287,14 +303,14 @@ - (void)incrementUseCount { [userDefaults setBool:NO forKey:kAppiraterDeclinedToRate]; [userDefaults setDouble:0 forKey:kAppiraterReminderRequestDate]; } - + [userDefaults synchronize]; } - (void)incrementSignificantEventCount { // get the app's version NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey]; - + // get the version number that we've been tracking NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSString *trackingVersion = [userDefaults stringForKey:kAppiraterCurrentVersion]; @@ -303,10 +319,10 @@ - (void)incrementSignificantEventCount { trackingVersion = version; [userDefaults setObject:version forKey:kAppiraterCurrentVersion]; } - + if (_debug) NSLog(@"APPIRATER Tracking version: %@", trackingVersion); - + if ([trackingVersion isEqualToString:version]) { // check if the first use date has been set. if not, set it. @@ -316,7 +332,7 @@ - (void)incrementSignificantEventCount { timeInterval = [[NSDate date] timeIntervalSince1970]; [userDefaults setDouble:timeInterval forKey:kAppiraterFirstUseDate]; } - + // increment the significant event count int sigEventCount = [userDefaults integerForKey:kAppiraterSignificantEventCount]; sigEventCount++; @@ -335,13 +351,13 @@ - (void)incrementSignificantEventCount { [userDefaults setBool:NO forKey:kAppiraterDeclinedToRate]; [userDefaults setDouble:0 forKey:kAppiraterReminderRequestDate]; } - + [userDefaults synchronize]; } - (void)incrementAndRate:(BOOL)canPromptForRating { [self incrementUseCount]; - + if (canPromptForRating && [self ratingConditionsHaveBeenMet] && [self connectedToNetwork]) @@ -355,7 +371,7 @@ - (void)incrementAndRate:(BOOL)canPromptForRating { - (void)incrementSignificantEventAndRate:(BOOL)canPromptForRating { [self incrementSignificantEventCount]; - + if (canPromptForRating && [self ratingConditionsHaveBeenMet] && [self connectedToNetwork]) @@ -391,7 +407,7 @@ - (void)hideRatingAlert { if (_debug) NSLog(@"APPIRATER Hiding Alert"); [self.ratingAlert dismissWithClickedButtonIndex:-1 animated:NO]; - } + } } + (void)appWillResignActive { @@ -432,7 +448,7 @@ + (id)getRootViewController { } } } - + for (UIView *subView in [window subviews]) { UIResponder *responder = [subView nextResponder]; @@ -440,7 +456,7 @@ + (id)getRootViewController { return [self topMostViewController: (UIViewController *) responder]; } } - + return nil; } @@ -453,42 +469,52 @@ + (UIViewController *) topMostViewController: (UIViewController *) controller { if(presented != nil) { controller = presented; } - + } while (isPresenting); - + return controller; } + (void)rateApp { - + NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setBool:YES forKey:kAppiraterRatedCurrentVersion]; [userDefaults synchronize]; //Use the in-app StoreKit view if available (iOS 6) and imported. This works in the simulator. - if (!_openInAppStore && NSStringFromClass([SKStoreProductViewController class]) != nil) { - + if (![Appirater sharedInstance].openInAppStore && NSStringFromClass([SKStoreProductViewController class]) != nil) { + SKStoreProductViewController *storeViewController = [[SKStoreProductViewController alloc] init]; NSNumber *appId = [NSNumber numberWithInteger:_appId.integerValue]; [storeViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier:appId} completionBlock:nil]; storeViewController.delegate = self.sharedInstance; - if ([self.sharedInstance.delegate respondsToSelector:@selector(appiraterWillPresentModalView:animated:)]) { - [self.sharedInstance.delegate appiraterWillPresentModalView:self.sharedInstance animated:_usesAnimation]; + + id delegate = self.sharedInstance.delegate; + if ([delegate respondsToSelector:@selector(appiraterWillPresentModalView:animated:)]) { + [delegate appiraterWillPresentModalView:self.sharedInstance animated:_usesAnimation]; } [[self getRootViewController] presentViewController:storeViewController animated:_usesAnimation completion:^{ [self setModalOpen:YES]; //Temporarily use a black status bar to match the StoreKit view. [self setStatusBarStyle:[UIApplication sharedApplication].statusBarStyle]; - [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:_usesAnimation]; +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 + [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent animated:_usesAnimation]; +#endif }]; - + //Use the standard openUrl method if StoreKit is unavailable. } else { - + #if TARGET_IPHONE_SIMULATOR NSLog(@"APPIRATER NOTE: iTunes App Store is not supported on the iOS simulator. Unable to open App Store page."); #else NSString *reviewURL = [templateReviewURL stringByReplacingOccurrencesOfString:@"APP_ID" withString:[NSString stringWithFormat:@"%@", _appId]]; + + // iOS 7 needs a different templateReviewURL @see https://github.com/arashpayan/appirater/issues/131 + if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) { + reviewURL = [templateReviewURLiOS7 stringByReplacingOccurrencesOfString:@"APP_ID" withString:[NSString stringWithFormat:@"%@", _appId]]; + } + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:reviewURL]]; #endif } @@ -496,15 +522,17 @@ + (void)rateApp { - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; - + + id delegate = _delegate; + switch (buttonIndex) { case 0: { // they don't want to rate it [userDefaults setBool:YES forKey:kAppiraterDeclinedToRate]; [userDefaults synchronize]; - if(self.delegate && [self.delegate respondsToSelector:@selector(appiraterDidDeclineToRate:)]){ - [self.delegate appiraterDidDeclineToRate:self]; + if(delegate && [delegate respondsToSelector:@selector(appiraterDidDeclineToRate:)]){ + [delegate appiraterDidDeclineToRate:self]; } break; } @@ -512,8 +540,8 @@ - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger) { // they want to rate it [Appirater rateApp]; - if(self.delegate && [self.delegate respondsToSelector:@selector(appiraterDidOptToRate:)]){ - [self.delegate appiraterDidOptToRate:self]; + if(delegate&& [delegate respondsToSelector:@selector(appiraterDidOptToRate:)]){ + [delegate appiraterDidOptToRate:self]; } break; } @@ -521,8 +549,8 @@ - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger) // remind them later [userDefaults setDouble:[[NSDate date] timeIntervalSince1970] forKey:kAppiraterReminderRequestDate]; [userDefaults synchronize]; - if(self.delegate && [self.delegate respondsToSelector:@selector(appiraterDidOptToRemindLater:)]){ - [self.delegate appiraterDidOptToRemindLater:self]; + if(delegate && [delegate respondsToSelector:@selector(appiraterDidOptToRemindLater:)]){ + [delegate appiraterDidOptToRemindLater:self]; } break; default: @@ -541,13 +569,14 @@ + (void)closeModal { [[UIApplication sharedApplication]setStatusBarStyle:_statusBarStyle animated:_usesAnimation]; BOOL usedAnimation = _usesAnimation; [self setModalOpen:NO]; - + // get the top most controller (= the StoreKit Controller) and dismiss it UIViewController *presentingController = [UIApplication sharedApplication].keyWindow.rootViewController; presentingController = [self topMostViewController: presentingController]; [presentingController dismissViewControllerAnimated:_usesAnimation completion:^{ - if ([self.sharedInstance.delegate respondsToSelector:@selector(appiraterDidDismissModalView:animated:)]) { - [self.sharedInstance.delegate appiraterDidDismissModalView:(Appirater *)self animated:usedAnimation]; + id delegate = self.sharedInstance.delegate; + if ([delegate respondsToSelector:@selector(appiraterDidDismissModalView:animated:)]) { + [delegate appiraterDidDismissModalView:(Appirater *)self animated:usedAnimation]; } }]; [self.class setStatusBarStyle:(UIStatusBarStyle)nil]; diff --git a/project/iPhone/include/AppiraterDelegate.h b/project/iPhone/include/AppiraterDelegate.h new file mode 100755 index 0000000..d7722d3 --- /dev/null +++ b/project/iPhone/include/AppiraterDelegate.h @@ -0,0 +1,22 @@ +// +// AppiraterDelegate.h +// Banana Stand +// +// Created by Robert Haining on 9/25/12. +// Copyright (c) 2012 News.me. All rights reserved. +// + +#import + +@class Appirater; + +@protocol AppiraterDelegate + +@optional +-(void)appiraterDidDisplayAlert:(Appirater *)appirater; +-(void)appiraterDidDeclineToRate:(Appirater *)appirater; +-(void)appiraterDidOptToRate:(Appirater *)appirater; +-(void)appiraterDidOptToRemindLater:(Appirater *)appirater; +-(void)appiraterWillPresentModalView:(Appirater *)appirater animated:(BOOL)animated; +-(void)appiraterDidDismissModalView:(Appirater *)appirater animated:(BOOL)animated; +@end From 187192be0f4f397b10c18c60843ef8913e761af5 Mon Sep 17 00:00:00 2001 From: Joshua Date: Wed, 9 Oct 2013 19:30:42 -0400 Subject: [PATCH 05/14] Change permissions on iphone.sh to 755 so it can be executed --- project/iphone.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 project/iphone.sh diff --git a/project/iphone.sh b/project/iphone.sh old mode 100644 new mode 100755 From 6200d619ca9f12a3788607850e940fc9af5fb6b6 Mon Sep 17 00:00:00 2001 From: Joshua Date: Wed, 9 Oct 2013 19:32:22 -0400 Subject: [PATCH 06/14] Add Appirater source to iphone build --- project/Build.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/project/Build.xml b/project/Build.xml index a6ab2b9..7819a43 100644 --- a/project/Build.xml +++ b/project/Build.xml @@ -46,6 +46,7 @@ + From 7a40257787e12968afeb0adc0bc073c1005c7742 Mon Sep 17 00:00:00 2001 From: Joshua Date: Wed, 9 Oct 2013 19:34:15 -0400 Subject: [PATCH 07/14] Add namespace to method calls. Fix typo (nul -> null) --- project/common/ExternalInterface.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/project/common/ExternalInterface.cpp b/project/common/ExternalInterface.cpp index 10cb7a4..9c25c9e 100644 --- a/project/common/ExternalInterface.cpp +++ b/project/common/ExternalInterface.cpp @@ -37,44 +37,44 @@ extern "C"{ #ifdef IPHONE value HypRate_setDialog_title( value s ) { - setDialog_title( val_string( s ) ); + Hyperfiction::setDialog_title( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setDialog_title , 1 ); value HypRate_setDialog_msg( value s ) { - setDialog_msg( val_string( s ) ); + Hyperfiction::setDialog_msg( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setDialog_msg , 1 ); value HypRate_setPositive_text( value s ) { - setPositive_text( val_string( s ) ); + Hyperfiction::setPositive_text( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setPositive_text , 1 ); value HypRate_setNeutral_text( value s ) { - setNeutral_text( val_string( s ) ); + Hyperfiction::setNeutral_text( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setNeutral_text , 1 ); value HypRate_setNegative_text( value s ) { - setCancel_text( val_string( s ) ); + Hyperfiction::setCancel_text( val_string( s ) ); return alloc_null( ); } DEFINE_PRIM( HypRate_setNegative_text , 1 ); value HypRate_start( value minL , value minD , value untilL , value untilD ){ - start( val_int( minL ) , val_int( minD ) , val_int( untilL ) , val_int( untilD )); + Hyperfiction::start( val_int( minL ) , val_int( minD ) , val_int( untilL ) , val_int( untilD )); return alloc_null( ); } DEFINE_PRIM( HypRate_start , 4 ); value HypRate_show( ){ - show( ); - return alloc_nul( ); + Hyperfiction::show( ); + return alloc_null( ); } DEFINE_PRIM( HypRate_show , 0 ); From 2098167cfd028df00854cb367868451e6edbd051 Mon Sep 17 00:00:00 2001 From: Joshua Date: Wed, 9 Oct 2013 19:35:02 -0400 Subject: [PATCH 08/14] Call appirater showPrompt from show method --- project/iPhone/HypRate.mm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/project/iPhone/HypRate.mm b/project/iPhone/HypRate.mm index 9d14af2..8a67c6a 100644 --- a/project/iPhone/HypRate.mm +++ b/project/iPhone/HypRate.mm @@ -11,6 +11,7 @@ */ #import #include +#include "include/Appirater.h" namespace Hyperfiction{ /** @@ -85,8 +86,8 @@ void start( int minL , int minD , int untilL , int unitD ){ * @return void */ void show( ){ - //showPrompt( ) + [Appirater showPrompt]; } -} \ No newline at end of file +} From ca1ffc918bc8c2aed810665f56548209680100c3 Mon Sep 17 00:00:00 2001 From: Joshua Date: Wed, 9 Oct 2013 19:36:29 -0400 Subject: [PATCH 09/14] Add @CPP so that mirrors will pick up methods for ios --- src/fr/hyperfiction/HypRate.hx | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/fr/hyperfiction/HypRate.hx b/src/fr/hyperfiction/HypRate.hx index 24317d1..b5899c7 100644 --- a/src/fr/hyperfiction/HypRate.hx +++ b/src/fr/hyperfiction/HypRate.hx @@ -30,6 +30,9 @@ class HypRate{ #if android @JNI #end + #if ios + @CPP + #end static public function start( iMin_launches : Int, iMin_days : Int, @@ -47,6 +50,9 @@ class HypRate{ #if android @JNI #end + #if ios + @CPP + #end static public function setDialog_title( s : String ) : Void { } @@ -60,6 +66,9 @@ class HypRate{ #if android @JNI #end + #if ios + @CPP + #end static public function setDialog_message( s : String ) : Void { } @@ -73,6 +82,9 @@ class HypRate{ #if android @JNI #end + #if ios + @CPP + #end static public function setPositive_text( s : String ) : Void { } @@ -86,6 +98,9 @@ class HypRate{ #if android @JNI #end + #if ios + @CPP + #end static public function setNeutral_text( s : String ) : Void { } @@ -99,6 +114,9 @@ class HypRate{ #if android @JNI #end + #if ios + @CPP + #end static public function setNegative_text( s : String ) : Void { } @@ -113,6 +131,9 @@ class HypRate{ #if android @JNI #end + #if ios + @CPP + #end static public function show( ) : Void { } @@ -123,4 +144,4 @@ class HypRate{ // -------o misc -} \ No newline at end of file +} From 33c61188113211fa0b5827d136a64f929b9f3e36 Mon Sep 17 00:00:00 2001 From: Joshua Date: Wed, 9 Oct 2013 19:38:43 -0400 Subject: [PATCH 10/14] Add new ndll's with changes to make HypRate work on ios --- ndll/iPhone/libHypRate.iphoneos-v7.a | Bin 7264 -> 50632 bytes ndll/iPhone/libHypRate.iphoneos.a | Bin 4560 -> 47784 bytes ndll/iPhone/libHypRate.iphonesim.a | Bin 4808 -> 50168 bytes project/obj/iphoneos-v7/iPhone/HypRate.o | Bin 3572 -> 4144 bytes project/obj/iphoneos/iPhone/HypRate.o | Bin 1076 -> 3680 bytes project/obj/iphonesim/iPhone/HypRate.o | Bin 856 -> 4296 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/ndll/iPhone/libHypRate.iphoneos-v7.a b/ndll/iPhone/libHypRate.iphoneos-v7.a index 83f902142fa7cb14c5e64dc3cfeb6b80815a4dd3..5974938f4726a92514ee85a03defecd73283f9df 100644 GIT binary patch literal 50632 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 Om)8C{gS?2}k^ci;`viah diff --git a/ndll/iPhone/libHypRate.iphoneos.a b/ndll/iPhone/libHypRate.iphoneos.a index b9ae4e034d746eac105b66256435de51f6b225b6..cee5818587d19ce85ceab34d8f5f775ad0a5a1be 100644 GIT binary patch literal 47784 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 nCPII<8(<4pt+B1EQzzo_-c(A{`jUNY zJkcTLp3(Q-9vD2VjUGKVHaH*vv-AK|+l1(1e2}qZe46oj#y>Fre3KAE+l08zc#ZL{ z%{BQr<3HK{S?Fn;1mkxY7a7lb82#kXsp2u+HDt+{HXYX}$zsXOJ3`9w#6C~wxO&M= z_sWyHRW?TBvi2jJWTI|kxC5qc+0!!bOnbJe72%5F)wq-#{_qbg4+ z-(W|KY27tX8m+C;wqrK4qUqMB?$qN#=olzMse*2z4n)#a-!_W27<>PwMcMoJFEDM@0jF08x_919q6<~O zcZm)6ZhssXG?}8?M=;SbSi$)%=+71+Is`hHbFCy&X6=IG;;CCC2**)XR!x1dhWZrEtaBRx)dj`0Q!?OY-?43xX5l|m$Nbh1hT4O2&feWtJa%R+e?sm2M)iMP~deW^zPBM>Q3Gw$s{BnrD6XKVA{36C*j5T7|6g#tY1Nu40 z<}|eU*}I#>nR{)BZ!>g1K{o^440JOg-8JYc&{d$Tgmm9PmxC?`T`r`%0$m2W40M^0 z?lN>k&`}Ju26wQmr`OllXR!Dc;M?Ho{b+$+0-XUp!E`_9G0?w4-VJ()=`N!A_1Sob zsMmy)i6$z%UP6jM77Xe98Fhoo_wozq=zSq&iUvQ73^-}qA8M~^!IyjY%QzF5O9c&Q z?nI7phVc;NKE~aQcL=f2Nrzg9dCH}9=h0651^EcecVkUf!M8EL1N;j3BK1N)4g7uZ zL#(GYTn2v+nDlfRur~`6iWT$i;FrJ;us!9Eo8YMy0?gAs-TEBM00;DVe(Au77Iqmz`pz%|% z6HkwR&PPWVn#HnlRM@X3B>@l0ePb(uproke5*5=ymlM^}z+H6`;Ch*;!dATNa$WIdb%kLnBfS*DL5? zexZX9`Tc}Xr_lG4s^b#)kn-v{&Z)lY?a}ME-H3(iFTyy+|GR$c|wI%@y>#0UyDdnDXRSwAIj>`dRj2=JjdAEKJ$q zI9@`3HFu2f?+0-`4wBPYG1wqJF#@~{?62RzDj+?zM}gdO`%_mSIYxEx TXMTSojIa-7wc6*f=m7i&FP%ft diff --git a/ndll/iPhone/libHypRate.iphonesim.a b/ndll/iPhone/libHypRate.iphonesim.a index b530613ed68e6c4f59c87b2a3af093fb6ad99662..7ea297898e99cda2a3af3626e1e73b951735704b 100644 GIT binary patch literal 50168 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 Dc#xjj diff --git a/project/obj/iphoneos-v7/iPhone/HypRate.o b/project/obj/iphoneos-v7/iPhone/HypRate.o index 72c4f36775384cdba37c0fa6ff74212af1f315a4..819323a208e074ebf2ab9f3c063a46aec2fa596c 100644 GIT binary patch literal 4144 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 literal 3572 zcmb7HL5LJb6s^^b8Bs(;BsnP}p3Gr&g@_1_GrR6YcO9l@f{0Mm%+}6y($h6mSG$>9 z6uf%zmQx@HZ+h^cCqWN_HzVExA-Tmfb%D z|NZmBe#Y2dm~$|9!+fy|evWP3Uq{(9PJ!-MSi|e5*{ozZ&W-%eWH)f(yuEb2?e0-J z1QYEi=;zrTT*I-&(NiMgF;Y!)pgoSiCI}eY$0$cn#fjm_g4qATfp9xGABDYSJnX6{ zF==;kR*pOu2Z4q2zz7re8gXc|GAjp|-myVg4%Pjp#}gT8xsf1ez1ptktBf56aUSO1 zSxzfZNUY~4jA00NaBew<(hOoTl!bhJ1}HoW|4ikS-ew%(Q1oROZ>Z@wPJq4LJNTz| zp#Coo)T6J1fH?=(XAtCeO_+4R67GR5Qss>D=rVggHLYKf8l`0sc1!U7Bp2D z8>yGmxMxCWeHmbNsa@R>q}!JYbuS+veH9gVDny%QkY}vbQ*Q9Em?5rt75EDQ^VJb7LatWWeLc!G=&y@Ek=XD zj7!q(g*b-Q)L^B&sL8r*hs^mpjVc_RTcPn)qOe%BY8W|eYIQ4I_twENcz}+r9`^8c zsp959V~Z}HLMW9N<2c&z0TMuqx6eTfE?$;0l;g?s@pULSq1r~PDB59fUZ`WNA%hJI zf!?sZ5FbNJrU{mR1||>G$7q9>Q8YtbH3utY+CF2G`z)lljCJd=sv4uiZfc~j%XJ!) z+$APu9y+6SVI&^X8S+p7m$7aIF$3cSu#9avQkxS%`nXT;zW{cuExDm(GRU&;jm`^k z47Tax!C8?49{gpcpbeKE$(_(S?^+NH#Jci5AyZ4l0**x7uWPXh7u*s44Joz{u=fJ_ zjkSf-E8~&W8_-^$0i8YrcP%&y@ZD|dp@>wUo6tmZsd=RbpU(ySLJ>bq`eo=vf^MoL hgw`wVU#Bty8qS(b;nfpuhhK1bBeYoxVZdh*`v~RwQPuze diff --git a/project/obj/iphoneos/iPhone/HypRate.o b/project/obj/iphoneos/iPhone/HypRate.o index a43b304a442ecf35d7e676f739a79efc1f94dcfa..339ab4e18a98cb804396677d0d8f46259bfe6683 100644 GIT binary patch literal 3680 zcmb7{UuYCp6vl5fwyAF0JoF(*p!<+Qq-lw|(M1B?n8e05romll5bb2MnIzM0c9)$= zs>MPIQhaDJ1xrJbCN36ykTwrOg<25mgHS0JEcL;M*c!BLEJ`g%k*2>hdo~$22I3`W zzx$ng?)mQAxql`<{(JkskTK>7tOBdVj<4n?T;z39e?&P#;91%PpQK%EoyJ*~XCLqu zJ6Tquy(h8ArPe@S=`ZPHRmQv{&Pp>TAf=cil})CtjHD{hA^oM?kbwsZV;Cz@%SvT4 zuE%dOExyOdQA$CdoRe}74)xOvUrlWC<|;FJ^PliTr-yIZ&B z=l`f;!b0-w;5}>(o55D1d9_UQN{Gd$p{eb3s%V>IN zM$u|UN3ag8#pIa{?|htfG{u^jU>zKnH55BKQz>hRHNo4MT@^k$lOp%}b(6Qph^c-t zK38hnk3WZRZFuUplCK9}FFq5VS@6a2h3MZ|)_)iNW_%Ta{^P8{R~fU6&X_x|6w$v)C!@7^x3k}G zX-gh-_hdXL-JQ=4=ZevLTziQx?hIy}0VkErcy%&BBlW|;7Jgq2uQ2d7# z(~2?rw`u=ce9iDiPPS;B){@Hc(>$JUIXuxcGa(fcfd>f5152DiP!c@+GTHwe!XI?Vo33ZF@>n+KTrP| zcu9X6ehpsIKMB7o?VA4>{0h9Je*}J6;N6aAQCM6pg$QnSxOfSh5WD9HA!lsG}r6l_qe zSCszZ4=ak6@ES!Ki|}ei5fF}skD@CaSnx9rpYu%?;yL)fsgU{fk@xB&>&r*hxsNko zBXOJujK9LXMf)=(lJjFLeV>PW;8$9|4Cl}H1Li}m@58xY>$kwawO&o$pS9kB*3;S_ zmw6#jZw}Nq&;~6Q%i7zuaZ|^^oSo;e^_*;GV-sh6o0CjuIqu~KXzzYKW%Qfb9gN$V zem)tO^xC}GYuFtu_E{RWg{bbV>v+y+@%mUUPzDjaRhEm35Er;?mI-Tey=2~NcPNh- zdqnPv_EBTKvHi7HtF^Nw9=GZ&t}G|dEtfCzcg2g>C5f!o9j)@O6?at8*DC*)?6wE& Qyv_Y*($>p-oXbT24?ig@^#A|> literal 1076 zcmbVLu}T9$5M4EDKnn{CE48o`rJ_xw{Q_6ER&r!B6rF`~n+0 z8^OZLLY;THm`h?HIxx30vv1zc&fGqJyne1LrB*~2M3+P#7Ui=$@Efpyk$s6h$sX3# zOp6(gh|L{mjx0p=N~1pVVQq>ce~iAM`q+aEIDDrAia<5Vfqcl@7=co2D$n7&C}9E% zuz%nHJQbpj^^;!MbV0)1W@%oIVJ|j>h3JwsTmLk&xXRph2(%A8gvd2-d`e6Zn^pq9 zd|W>s?BR=k6hzSvw4^A5#5|XkLJ6s49HHUsNQY*sjx9mqUwEJBY2M8^Y^dADMlCm4 z$DZV;cbD_?c@qAq196)?4(ajx#Ni%np3Vp7^+ zVe%gr9wf3OjYG`KZ1feqL>zK23LCwm%uer2bXD~ZPkJ2_x2(_BMTbY?U1&BkIWAir zxHhrnz*K5yz6@Xr?@i;wq&*8=%Asp6v21Tm`uJugBnsEa0oFo zTfkYdBp^auB1@J?)DR6O%!C*SOCW|A68Is%#2=WEU@{{=6x8`Vr{{L3U28bWx#zsk z`@A3L?YZaN?Z7l zxi~Xo>Oq%H`G}f!Uo03k;WIan3HbOO%qjTLo4#b_BWXsM1@p?y<2V+u4#txx0PQX# zk8+GCi*Fx<*~z=_{D0(rG@s+@k@n+fkg6 ziX$3zTq2(kX;Hj-?=+naPkDA4J1&O9;o9=55t&MU{Bjw;LdIW27b<=`=Bac!pSkht zq@qHj)=1=OB3gVpdw}?96cp>{Go3;fPW&q}BUzo?_-CYo1#_t568VgX7N5=@Abz=w zUm@c!(ww$Sr?NV^@$0051#{xpNaPtJT6{WtfcR-_60D!kbP8EGPOr#}WOZ`mpOFd{ z%%P4;>i zU;OP%2(FuV*B9vDqyK<@1N~R@yXd8Om7hSbLg(w>hTexhg#H0~L&KU?bqy~xu2u!S zjC+T7kaK@m1Ha3Lk!LGg$vd5*WWT$_v$)jtK7NBrVC*;V&Cc2+_?Eaw7OXFGwH|OC zL=M#PUTnHwT>l32C;vykAA0e3ar-f--z=i%-Ea>5JoL9PX7g(~u#mc+(2xEzJNulj z!~8IE$7@nLvQSK1MNQDg_W^qsGQT+-`E|u>1J1Lb_=ni!K8;8DMa8QEep%x^mB-@& z#kjKz#Ke@w`wOxYm;U}hC+}zA=QZAqJl-|MI}7}r#``9Z_od=}3Y^~%&N@DZJgLbz z*>du*lwCLQZxyc$m|x*-z)xzpPvN!nqv0zQUJ0DvQjAYO%V@9aP1!>`O}>pi$U598 z5ffi4yFh=2v(d z?KRw|@LKxO@D&QL1n$Hy1GbFz&Uzu^;LpaV{x%9F*N>y%l(T+d*A#vUxD)>nunP)5 z4cv)O{FK7+E@k5rKSq0Jy^s&nPLnNV*A0BaSr0J3!rN%C;XZ}e(vOC(Pc0cpo_MIbOX2-Ud;?-I?seeUBbj`FJ*)6Z z;IqJCF58osICJdX>^ua1i6a@tYg<;Y*|@jgOyGjEt$1v81Mb%rD;SC6ish}_+VM&V zAO7=rb#uIEvbPxPd9XU-Nz1nOWG?AqM26Mx?qa-p@U$zv2(2M$2NQOyg;pT;D1na&CA4 literal 856 zcmbVK%}T>S5FWLnpr8j2y|o9A9!%{6SZJW2lp+<1AnO`7VI^%!G8Mgf_2#4a2!dDf zEd(#VfCurLByFR%9y;XP@0-75vb(RJA75)kv;r*U{3xQD`7O~i>;kbDrQ=9E+GBmo-|vcyOgmg6~2KS`&gh&OO zeF%1PEqU30iHkh|qW8fn*HthM@~rLDTDL9c(72r= tZ&tnYx4xeQ^Q!BG>Q0ncw$~=Tpz|7v Date: Wed, 9 Oct 2013 20:12:48 -0400 Subject: [PATCH 11/14] Remove facebook changes for ios fix branch --- HypRate.sublime-workspace | 32 ++++++++++---------- project/android/fr/hyperfiction/HypRate.java | 2 +- project/common/ExternalInterface.cpp | 2 +- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/HypRate.sublime-workspace b/HypRate.sublime-workspace index ca5f594..ab96305 100644 --- a/HypRate.sublime-workspace +++ b/HypRate.sublime-workspace @@ -732,7 +732,7 @@ "/C/Developement/workspaceHaxe/HypRate/project/iPhone/include/Appirater.m", "/C/Users/Johann/Downloads/Photon-Win32_v3-2-1-1_SDK/Photon-Win32_v3-2-1-1_SDK/Demos/demo_helloWorld/src/Photon_lib.cpp", "/C/Users/Johann/Downloads/Photon-Win32_v3-2-1-1_SDK/Photon-Win32_v3-2-1-1_SDK/Demos/demo_helloWorld/inc/Photon_lib.h", - "/C/Developement/workspaceHaxe/HypRate/project/common/ExternalInterface.cpp", + "/C/Developement/workspaceHaxe/HypFacebook/project/common/ExternalInterface.cpp", "/C/Developement/workspaceHaxe/HypRate/project/common/ExternalInterface.cpp", "/C/Users/Johann/Downloads/Photon-Win32_v3-2-1-1_SDK/Photon-Win32_v3-2-1-1_SDK/Demos/demo_realtime/src/CPhotonLib.cpp", "/C/Users/Johann/Downloads/Photon-Win32_v3-2-1-1_SDK/Photon-Win32_v3-2-1-1_SDK/Demos/demo_realtime/inc/CPhotonLib.h", @@ -744,17 +744,17 @@ "/C/Developement/workspaceHaxe/HypRate/README.md", "/C/Developement/workspaceHaxe/HypRate/project/android/com/kopfgeldjaeger/ratememaybe/RateMeMaybe.java", "/C/Developement/workspaceHaxe/HypRate/project/android/com/kopfgeldjaeger/ratememaybe/RateMeMaybeFragment.java", - "/C/Developement/workspaceHaxe/HypRate/project/include/HypRate.h", - "/C/Developement/workspaceHaxe/HypRate/project/iPhone/HypRate.mm", + "/C/Developement/workspaceHaxe/HypFacebook/project/include/HypFacebook.h", + "/C/Developement/workspaceHaxe/HypFacebook/project/iPhone/HypFacebook.mm", "/C/Developement/workspaceHaxe/HypRate/project/iPhone/HypRate.mm", "/C/Users/Johann/Downloads/Photon-Win32_v3-2-1-1_SDK/Photon-Win32_v3-2-1-1_SDK/Demos/demo_helloWorld/inc/HelloWorldApplication.h", "/C/Users/Johann/Downloads/Photon-Win32_v3-2-1-1_SDK/Photon-Win32_v3-2-1-1_SDK/Demos/demo_helloWorld/inc/UIListener.h", "/C/Users/Johann/Downloads/Photon-Win32_v3-2-1-1_SDK/Photon-Win32_v3-2-1-1_SDK/Demos/demo_helloWorld/inc/StdIO_UIListener.h", - "/C/Developement/workspaceHaxe/HypRate/include.nmml", + "/C/Developement/workspaceHaxe/HypFacebook/include.nmml", "/C/Developement/workspaceHaxe/HypRate/project/iPhone/include/Appirater.h", "/C/Developement/workspaceHaxe/HypRate/project/iphone.sh", "/C/Developement/workspaceHaxe/HypRate/project/Build.xml", - "/C/Developement/workspaceHaxe/HypRate/project/include/HypRate.h", + "/C/Developement/workspaceHaxe/HypRate/project/include/HypFacebook.h", "/C/Developement/workspaceHaxe/HypRate/project/android/com/kot/ratememaybe/RateMeMaybe.java", "/C/Developement/workspaceHaxe/Viral3/build.hxml", "/C/Developement/workspaceHaxe/HypGA/README.md", @@ -796,18 +796,18 @@ "/C/Developement/workspaceHaxe/inthebox/src/org/shoebox/utils/NativeMirror.hx", "/C/Developement/workspaceHaxe/Viral3/src/fr/hyperfiction/viral/controllers/CGame.hx", "/C/Users/Johann/AppData/Roaming/Sublime Text 2/Packages/User/Preferences.sublime-settings", - "/C/Developement/workspaceHaxe/HypRate/README.md", - "/C/Developement/workspaceHaxe/HypRate/haxelib.xml", + "/C/Developement/workspaceHaxe/HypFacebook/README.md", + "/C/Developement/workspaceHaxe/HypFacebook/haxelib.xml", "/X/Robin/Herocorp/Videos/HC3W_C02_Valur.mov", "/C/Developement/workspaceHaxe/Viral3/src/fr/hyperfiction/viral/core/ViralAssets.hx", - "/C/Developement/workspaceHaxe/HypRate/LICENSE", - "/C/Developement/workspaceHaxe/HypRate/NOTICE", - "/C/Developement/workspaceHaxe/HypRate/src/fr/hyperfiction/HypRate.hx", - "/C/Developement/workspaceHaxe/HypRate/src/org/shoebox/utils/NativeMirror.hx", - "/C/Developement/workspaceHaxe/HypRate/src/ShortCuts.hx", - "/C/Developement/workspaceHaxe/HyperExtensions/extensions/HypRate/readme.md", - "/C/Developement/workspaceHaxe/HyperExtensions/extensions/HypRate/NOTICE", - "/C/Developement/workspaceHaxe/HyperExtensions/extensions/HypRate/LICENSE", + "/C/Developement/workspaceHaxe/HypFacebook/LICENSE", + "/C/Developement/workspaceHaxe/HypFacebook/NOTICE", + "/C/Developement/workspaceHaxe/HypFacebook/src/fr/hyperfiction/HypFacebook.hx", + "/C/Developement/workspaceHaxe/HypFacebook/src/org/shoebox/utils/NativeMirror.hx", + "/C/Developement/workspaceHaxe/HypFacebook/src/ShortCuts.hx", + "/C/Developement/workspaceHaxe/HyperExtensions/extensions/HypFacebook/readme.md", + "/C/Developement/workspaceHaxe/HyperExtensions/extensions/HypFacebook/NOTICE", + "/C/Developement/workspaceHaxe/HyperExtensions/extensions/HypFacebook/LICENSE", "/C/Users/Johann/AppData/Roaming/Sublime Text 2/Packages/Dayle Rees Color Schemes/FreshCut.tmTheme", "/C/Users/Johann/AppData/Roaming/Sublime Text 2/Packages/Dayle Rees Color Schemes/Phix Dark.tmTheme", "/C/Users/Johann/AppData/Roaming/Sublime Text 2/Packages/Dayle Rees Color Schemes/Glowfish.tmTheme", @@ -931,7 +931,7 @@ "APPIRATER_LOCALIZED_APP_NAME", "APPIRATER_CANCEL_BUTTON", "APPIRATER_LOCALIZED_MESSAGE", - "HypRate", + "HypFacebook", "Neutral", "Positive", "Dialog", diff --git a/project/android/fr/hyperfiction/HypRate.java b/project/android/fr/hyperfiction/HypRate.java index cb10b33..6f4e155 100644 --- a/project/android/fr/hyperfiction/HypRate.java +++ b/project/android/fr/hyperfiction/HypRate.java @@ -126,6 +126,6 @@ static public void setNegative_text( String s ){ * @return void */ public static void trace( String s ){ - Log.w( TAG, "HypRateFrag ::: "+s ); + Log.w( TAG, "HypFacebookFrag ::: "+s ); } } diff --git a/project/common/ExternalInterface.cpp b/project/common/ExternalInterface.cpp index 9c25c9e..ddd56c0 100644 --- a/project/common/ExternalInterface.cpp +++ b/project/common/ExternalInterface.cpp @@ -21,7 +21,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND extern "C"{ int HypRate_register_prims(){ - printf("HypRate : register_prims()\n"); + printf("HypFacebook : register_prims()\n"); return 0; } } From eee86b5e98aeb3fc1a3eb138cb68033043cd73a0 Mon Sep 17 00:00:00 2001 From: Joshua Date: Wed, 9 Oct 2013 22:22:52 -0400 Subject: [PATCH 12/14] Add setAppId method to HypRate to set the appid on ios. The method does nothing on android so is safe to call --- project/android/fr/hyperfiction/HypRate.java | 10 ++++++++++ project/common/ExternalInterface.cpp | 5 +++++ project/iPhone/HypRate.mm | 20 +++++++++++++++----- project/include/HypRate.h | 3 ++- src/fr/hyperfiction/HypRate.hx | 16 ++++++++++++++++ 5 files changed, 48 insertions(+), 6 deletions(-) diff --git a/project/android/fr/hyperfiction/HypRate.java b/project/android/fr/hyperfiction/HypRate.java index 6f4e155..52c5eeb 100644 --- a/project/android/fr/hyperfiction/HypRate.java +++ b/project/android/fr/hyperfiction/HypRate.java @@ -58,6 +58,16 @@ static public void show( ) { rmm.forceShow( ); } + /** + * + * + * @public + * @return void + */ + static public void setAppId( String appId ){ + trace("setAppId does nothing on Android"); + } + /** * * diff --git a/project/common/ExternalInterface.cpp b/project/common/ExternalInterface.cpp index ddd56c0..43bb9ec 100644 --- a/project/common/ExternalInterface.cpp +++ b/project/common/ExternalInterface.cpp @@ -35,6 +35,11 @@ extern "C"{ // iPhone --------------------------------------------------------------------------------------------------------- #ifdef IPHONE + value HypRate_setAppId( value s ) { + Hyperfiction::setAppId( val_string( s ) ); + return alloc_null( ); + } + DEFINE_PRIM( HypRate_setAppId , 1 ); value HypRate_setDialog_title( value s ) { Hyperfiction::setDialog_title( val_string( s ) ); diff --git a/project/iPhone/HypRate.mm b/project/iPhone/HypRate.mm index 8a67c6a..14f4148 100644 --- a/project/iPhone/HypRate.mm +++ b/project/iPhone/HypRate.mm @@ -14,6 +14,16 @@ #include "include/Appirater.h" namespace Hyperfiction{ + /** + * + * + * @public + * @return void + */ + void setAppId( const char *s ){ + [Appirater setAppId:[[[NSString alloc] initWithUTF8String:s] autorelease]]; + } + /** * * @@ -63,7 +73,7 @@ void setNeutral_text( const char *s ){ void setCancel_text( const char *s ){ [Appirater setCancel_text:[[[NSString alloc] initWithUTF8String:s] autorelease]]; } - + /** * * @@ -71,11 +81,11 @@ void setCancel_text( const char *s ){ * @return void */ void start( int minL , int minD , int untilL , int unitD ){ - [Appirater setAppId:@"552035781"]; - [Appirater setDaysUntilPrompt:1]; - [Appirater setUsesUntilPrompt:10]; + [Appirater setUsesUntilPrompt:minL]; + [Appirater setDaysUntilPrompt:minD]; + // Disable significant event criterion [Appirater setSignificantEventsUntilPrompt:-1]; - [Appirater setTimeBeforeReminding:2]; + [Appirater setTimeBeforeReminding:unitD]; [Appirater setDebug:YES]; } diff --git a/project/include/HypRate.h b/project/include/HypRate.h index 477bf55..6eb20e1 100644 --- a/project/include/HypRate.h +++ b/project/include/HypRate.h @@ -13,6 +13,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND #define Device namespace Hyperfiction{ + void setAppId( const char *s ); void setDialog_title( const char *s ); void setDialog_msg( const char *s ); void setPositive_text( const char *s ); @@ -22,4 +23,4 @@ namespace Hyperfiction{ void show( ); } -#endif \ No newline at end of file +#endif diff --git a/src/fr/hyperfiction/HypRate.hx b/src/fr/hyperfiction/HypRate.hx index b5899c7..4dcf08f 100644 --- a/src/fr/hyperfiction/HypRate.hx +++ b/src/fr/hyperfiction/HypRate.hx @@ -40,6 +40,22 @@ class HypRate{ iMin_days_until_next : Int ) : Void { } + + /** + * + * + * @public + * @return void + */ + #if android + @JNI + #end + #if ios + @CPP + #end + static public function setAppId( appId : String ){ + + } /** * From 1bcc7e0469dff75116eeb4dd02357998a2763037 Mon Sep 17 00:00:00 2001 From: Joshua Date: Wed, 9 Oct 2013 22:31:00 -0400 Subject: [PATCH 13/14] Add return type to setAppId --- src/fr/hyperfiction/HypRate.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fr/hyperfiction/HypRate.hx b/src/fr/hyperfiction/HypRate.hx index 4dcf08f..9a2500a 100644 --- a/src/fr/hyperfiction/HypRate.hx +++ b/src/fr/hyperfiction/HypRate.hx @@ -53,7 +53,7 @@ class HypRate{ #if ios @CPP #end - static public function setAppId( appId : String ){ + static public function setAppId( appId : String ) : Void { } From fe187bcc070a691c4c8782b1493edeeecaf4ddae Mon Sep 17 00:00:00 2001 From: Joshua Date: Thu, 10 Oct 2013 20:36:16 -0400 Subject: [PATCH 14/14] Use @CPP class name and primitive name arguments --- src/fr/hyperfiction/HypRate.hx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/fr/hyperfiction/HypRate.hx b/src/fr/hyperfiction/HypRate.hx index 9a2500a..a4699ca 100644 --- a/src/fr/hyperfiction/HypRate.hx +++ b/src/fr/hyperfiction/HypRate.hx @@ -31,7 +31,7 @@ class HypRate{ @JNI #end #if ios - @CPP + @CPP("HypRate", "HypRate_start") #end static public function start( iMin_launches : Int, @@ -51,7 +51,7 @@ class HypRate{ @JNI #end #if ios - @CPP + @CPP("HypRate", "HypRate_setAppId") #end static public function setAppId( appId : String ) : Void { @@ -67,7 +67,7 @@ class HypRate{ @JNI #end #if ios - @CPP + @CPP("HypRate", "HypRate_setDialog_title") #end static public function setDialog_title( s : String ) : Void { @@ -83,7 +83,7 @@ class HypRate{ @JNI #end #if ios - @CPP + @CPP("HypRate", "HypRate_setDialog_message") #end static public function setDialog_message( s : String ) : Void { @@ -99,7 +99,7 @@ class HypRate{ @JNI #end #if ios - @CPP + @CPP("HypRate", "HypRate_setPositive_text") #end static public function setPositive_text( s : String ) : Void { @@ -115,7 +115,7 @@ class HypRate{ @JNI #end #if ios - @CPP + @CPP("HypRate", "HypRate_setNeutral_text") #end static public function setNeutral_text( s : String ) : Void { @@ -131,7 +131,7 @@ class HypRate{ @JNI #end #if ios - @CPP + @CPP("HypRate", "HypRate_setNegative_text") #end static public function setNegative_text( s : String ) : Void { @@ -148,7 +148,7 @@ class HypRate{ @JNI #end #if ios - @CPP + @CPP("HypRate", "HypRate_show") #end static public function show( ) : Void {