社内のエンタープライズアプリの更新メソッドを作成しています。私が作成しようとしているのは、アプリにすばやく配置できるクラスであり、更新が必要かどうかをサーバーに確認します。これは私がこれまでに持っているものであり、正しくチェックしますがNO
、メソッドを終了する前に戻ります。
私のcheckUpdate.hで
@interface checkForUpdate : NSObject
+ (BOOL)updateCheck;
@end
私のcheckUpdate.mで
#import "checkForUpdate.h"
@implementation checkForUpdate
BOOL needsUpdate
NSDictionary *versionDict;
#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
+ (BOOL)updateCheck {
NSString *urlStringVersion = [[NSString alloc] initWithFormat:@"http://URL/app_info?app=app"];
NSURL *urlVersion = [NSURL URLWithString:urlStringVersion];
dispatch_async(kBgQueue, ^{
NSData* data =[NSData dataWithContentsOfURL:urlVersion];
if (data){
NSError* error;
NSArray* json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
if (json != nil && [json count] != 0) {
versionDict = [json objectAtIndex:0];
CGFloat serverVersion = [[versionDict valueForKey:@"version"]floatValue];
CGFloat appVersion = [[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey] floatValue];
NSLog(@"Server Version %f",serverVersion);
NSLog(@"App Version %f",appVersion);
if ([versionDict count] != 0){
if (serverVersion > appVersion){
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
needsUpdate = YES;
}else{
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
needsUpdate = NO;
}
}
}
}
});
return needsUpdate;
}
@end
私はそれをこのように呼びます
NSLog(@"Needs Update %@",[checkForUpdate checkForUpdateWithResponse] ? @"Yes":@"No");
これは私のログです
Needs Update No
Server Version 2.000000
App Version 1.000000
チェックする前にNOを返す理由がわかりません。アプリがチェックするサーバーがファイアウォールの背後にあるため、非同期にする必要があります。そのため、ユーザーがファイアウォールの外側にいる場合、サーバーに到達できないときにアプリを続行する必要があります。私は正しい方向に向かっていますか、それとももっと良い方法がありますか?