#import <Foundation/Foundation.h>
#import "UIAlertView+Blocks.h"
@interface CheckUpgradeUtil : NSObject
/**
检查app更新
*/
+(void)checkUpgrade;
/**
获取app版本
*/
+(NSString *)getCurrentAppVersion;
@end
#import "CheckUpgradeUtil.h"
#import "AFNetworking.h"
#define APP_ID @"1118368178"
@implementation CheckUpgradeUtil
//检查更新
+(void)checkUpgrade{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.securityPolicy = [AFSecurityPolicy defaultPolicy];
NSString *url = [NSString stringWithFormat:@"https://itunes.apple.com/lookup?id=%@",APP_ID];
[manager POST:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSInteger resultCount = [[responseObject objectForKey:@"resultCount"] integerValue];
if(resultCount != 0){
NSString *appstoreVersion = [[responseObject objectForKey:@"results"][0] objectForKey:@"version"];
if(appstoreVersion != nil){
NSString *localVersion = [self getCurrentAppVersion];
//NSLog(@"latest app version %@ ; localVersion:%@",appstoreVersion,localVersion);
CGFloat local = [localVersion floatValue];
CGFloat appstore = [appstoreVersion integerValue];
if(local < appstore){
[UIAlertView displayAlertWithTitle:@"版本更新提示" message:@"发现新版本,是否确定要更新?" leftButtonTitle:@"取消" leftButtonAction:nil rightButtonTitle:@"更新" rightButtonAction:^(){
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"itms-apps://itunes.apple.com/cn/app/jie-zou-da-shi/id%@?mt=8", APP_ID]]];
}];
}
}
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//NSLog(@"error ----%@",error.userInfo);
}];
}
+ (NSString *)getCurrentAppVersion
{
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSString *version = [infoDict objectForKey:@"CFBundleShortVersionString"];
return version;
}
@end
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface UIAlertView (Blocks)<UIAlertViewDelegate>
+ (void) displayAlertWithTitle:(NSString *)title
message:(NSString *)message
leftButtonTitle:(NSString *)leftButtonTitle
leftButtonAction:(void (^)(void))leftButtonAction
rightButtonTitle:(NSString*)rightButtonTitle
rightButtonAction:(void (^)(void))rightButtonAction;
@end
#import "UIAlertView+Blocks.h"
#import <objc/runtime.h>
static NSString *LEFT_ACTION_ASS_KEY = @"com.cancelbuttonaction";
static NSString *RIGHT_ACTION_ASS_KEY = @"com.otherbuttonaction";
@implementation UIAlertView (Blocks)
-(id)initWithTitle:(NSString *) title
message:(NSString *) message
leftButtonTitle:(NSString *) leftButtonTitle
leftButtonAction:(void (^)(void)) leftButtonAction
rightButtonTitle:(NSString*) rightButtonTitle
rightButtonAction:(void (^)(void)) rightButtonAction
{
if((self = [self initWithTitle:title
message:message
delegate:self
cancelButtonTitle:leftButtonTitle
otherButtonTitles:rightButtonTitle, nil]))
{
// We might get nil for one or both block inputs. To
// Since this is a catogory, we cant add properties in the usual way.
// Instead we bind the delegate block to the pointer to self.
// We use copy to invoke block_copy() to ensure the block is copied off the stack to the heap
// so that it is still in scope when the delegate callback is invoked.
if (leftButtonAction)
{
objc_setAssociatedObject(self, (__bridge const void *)(LEFT_ACTION_ASS_KEY), leftButtonAction, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
if (rightButtonAction)
{
objc_setAssociatedObject(self, (__bridge const void *)(RIGHT_ACTION_ASS_KEY), rightButtonAction, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
if (!leftButtonAction && !rightButtonAction)
{
self.delegate = nil;
}
}
return self;
}
// This is a convenience wrapper for the constructor above
+ (void) displayAlertWithTitle:(NSString *)title
message:(NSString *)message
leftButtonTitle:(NSString *)leftButtonTitle
leftButtonAction:(void (^)(void))leftButtonAction
rightButtonTitle:(NSString*)rightButtonTitle
rightButtonAction:(void (^)(void))rightButtonAction
{
UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:title
message:message
leftButtonTitle:leftButtonTitle
leftButtonAction:leftButtonAction
rightButtonTitle:rightButtonTitle
rightButtonAction:rightButtonAction];
[alertView show];
}
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
// Decalare the block variable
void (^action)(void) = nil;
// Get the block using the correct key
// depending on the index of the buttom that was tapped
if (buttonIndex == 0)
{
action = objc_getAssociatedObject(self, (__bridge const void *)(LEFT_ACTION_ASS_KEY));
}
else if (buttonIndex == 1)
{
action = objc_getAssociatedObject(self, (__bridge const void *)(RIGHT_ACTION_ASS_KEY));
}
// Invoke the block if we have it.
if (action) action();
// Unbind both blocks from ourself so they are released
// We assign nil to the objects wich will release them automatically
objc_setAssociatedObject(self, (__bridge const void *)(LEFT_ACTION_ASS_KEY), nil, OBJC_ASSOCIATION_COPY);
objc_setAssociatedObject(self, (__bridge const void *)(RIGHT_ACTION_ASS_KEY), nil, OBJC_ASSOCIATION_COPY);
}
@end