사내 엔터프라이즈 앱의 업데이트 방법을 만들고 있습니다. 내가 만들고자하는 것은 빠르게 앱에 넣을 수있는 클래스이며, 업데이트가 필요한 경우 서버에서 확인합니다. 이것은 내가 지금까지 가지고있는 것인데 정확하게 검사하지만 그 방법을 끝내기 전에 NO
을 반환한다. 나는이이앱 업데이트 확인
NSLog(@"Needs Update %@",[checkForUpdate checkForUpdateWithResponse] ? @"Yes":@"No");
과 같이 호출
#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
내 checkUpdate.m에서 내 checkUpdate.h
@interface checkForUpdate : NSObject
+ (BOOL)updateCheck;
@end
에서
내 로그입니다
Needs Update No
Server Version 2.000000
App Version 1.000000
확인하기 전에 NO가 반환되는 이유가 확실하지 않습니다. 응용 프로그램이 확인할 서버가 방화벽 뒤에 있으므로 비동기가 필요합니다. 따라서 방화벽 외부에있는 사람은 서버에 연결할 수 없을 때 계속해야합니다. 나는 올바른 방향으로 나아가고 있습니까? 아니면 더 좋은 방법이 있습니까?
이것은 완전히 새로운 것입니다. 저는이 문제를 해결하기 위해 노력하고 있습니다. 이걸 구현하는 방법을 좀 더 보여줄 수 있습니까? – Jonathan
궤적을 잡기 위해 수정 된 답변이 약간 있습니다. 동일한 논리를 사용하는 것과 관련하여 내가 추가 한 주석을 주목하십시오. 그 자리에 모든 논리를 놓으십시오. 작은 코드 조각을 포함시켜보다 나은 결과를 얻을 수 있습니다. – Jeremy
두번째 예제에서, 여러분이 제공 한 코드 블록 (중괄호 사이의 내용)은 업데이트 확인이 완료되었을 때 호출됩니다. 이것은 콜백 (callback)이라고 불리우며, 내 업데이트 확인을 마쳤을 때 알려주므로 알 수있다. 나는 그것에 대해 뭔가 할 수있다. – Jeremy