我目前在app商店有一个应用程序,我打算很快提交更新。
有了这个更新,我想添加代码,告诉应用程序首次运行application:didFinishLaunchingWithOptions
时是否:
应用程序商店中当前的应用程序中没有代码可以处理此问题 该应用程序使用SQLite数据库,但由于我不会进入这里的原因,我不想使用检查它的存在作为解决此问题的方法。
作为一个附带问题,如果不手动存储数据,是否有可用于查询应用程序安装到设备上的SDK? (最好与iOS 3.0兼容)
我见过similar question,但没有一个答案适用于使用现有的应用商店代码。
答案 0 :(得分:19)
以下代码可能有助于回答有关何时安装应用的问题。我不确定应用程序包创建日期是XCode构建日期还是下载日期,因为这是从应用程序商店中未经测试的。
NSString *bundleRoot = [[NSBundle mainBundle] bundlePath]; // e.g. /var/mobile/Applications/<GUID>/<AppName>.app
NSFileManager *manager = [NSFileManager defaultManager];
NSDictionary* attrs = [manager attributesOfItemAtPath:bundleRoot error:nil];
NSLog(@"Build or download Date/Time of first version to be installed: %@", [attrs fileCreationDate]);
NSLog(@"Date/Time of last install (unless bundle changed by code): %@", [attrs fileModificationDate]);
NSString *rootPath = [bundleRoot substringToIndex:[bundleRoot rangeOfString:@"/" options:NSBackwardsSearch].location]; // e.g /var/mobile/Applications/<GUID>
attrs = [manager attributesOfItemAtPath:rootPath error:nil];
NSLog(@"Date/Time first installed (or first reinstalled after deletion): %@", [attrs fileCreationDate]);
答案 1 :(得分:7)
您可以将版本号保存到NSUserDefaults
,并相应地进行更新。
如果这不起作用,您可以发布介绍版本控制方案的中间版本。
如果这不是一个选项,您可以检查您创建的文件的先前运行痕迹,或者您有条件或懒惰地设置的首选项。
答案 2 :(得分:3)
试试这段代码,我知道我对这个答案来说太晚了,但是为了知道分享,我去了。
-(void) checkIsAppUpdated
{
NSString *urlString = @"http://itunes.apple.com/lookup?id=995558215";
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"GET"];
NSError *error = nil;
NSURLResponse *response = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//NSString *stringReply = (NSString *)[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if (error)
{
// NSLog(@"Error: %@", stringReply);
//error reviced
}
else
{
//The response is in data
//NSLog(@"Success: %@", stringReply);
NSDictionary *dictResponse = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
float appStoreVersion=[[[[dictResponse objectForKey:@"results"] firstObject] objectForKey:@"version"] floatValue];
NSLog(@"app stroe version=%f",appStoreVersion);
NSString *strLocalVersion=[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
float localAppVersion=[strLocalVersion floatValue];
if (localAppVersion!=appStoreVersion)
{
//open app store url
// NSString *iTunesLink = @"itms://itunes.apple.com/us/app/apple-store/id375380948?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://itunes.apple.com/app/washthenfold/id995558215?mt=8"]];
}
}
}
请注意
id:-replace id,带有您自己的应用ID。你可以从itune获取app id连接所选应用程序 - >更多信息 - >元数据
由于模拟器没有应用程序商店应用程序,因此该代码无法在模拟器上运行。
答案 3 :(得分:0)
GBVersionTracking is good pod可跟踪所有版本历史记录。
[GBVersionTracking isFirstLaunchEver];
答案 4 :(得分:0)
这是一个简单的代码,可以知道当前版本是否不同(此代码也适用于模拟器。)
-(BOOL) needsUpdate
{
NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];
NSString* appID = infoDictionary[@"CFBundleIdentifier"];
NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/lookup?bundleId=%@", appID]];
NSData* data = [NSData dataWithContentsOfURL:url];
NSDictionary* lookup = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
if ([lookup[@"resultCount"] integerValue] == 1)
{
NSString* appStoreVersion = lookup[@"results"][0][@"version"];
NSString* currentVersion = infoDictionary[@"CFBundleShortVersionString"];
if (![appStoreVersion isEqualToString:currentVersion])
{
NSLog(@"Need to update [%@ != %@]", appStoreVersion, currentVersion);
return YES;
}
}
return NO;
}
注意:确保在iTunes中输入新版本时,这与您要发布的应用中的版本相匹配。如果没有,则无论用户是否更新,上述代码将始终返回YES。