J'ai une application actuellement sur l'App Store que j'ai l'intention de soumettre une mise à jour pour bientôt. p>
Avec cette mise à jour, je souhaite ajouter du code qui indiquera à l'application lorsqu'il exécutera d'abord Il n'y a aucun code dans l'application actuellement dans l'App Store pour gérer cela. En tant que question secondaire, sans stocker les données manuellement, existe-t-il un SDK que je peux utiliser pour interroger lorsqu'une application a été installée sur un périphérique? (De préférence iOS 3.0 compatible) p>
J'ai vu un question similaire , mais aucune des réponses ne s'applique à travailler avec le code de l'App Store existant. P> Application: DidfinishlaunchingwithOptions code> si c'est le cas: P>
LI>
L'application utilise une base de données SQLITE, mais pour des raisons pour des raisons pour lesquelles je n'entrerai pas ici, je ne veux pas utiliser de chèque pour son existence comme solution à ce problème. P>
5 Réponses :
Vous pouvez enregistrer un numéro de version à Si cela ne fonctionnera pas, vous pourrez peut-être libérer une version intermédiaire qui introduit le schéma de version. P>
Si ce n'est pas une option, vous pourrez peut-être vérifier les traces des exécutions précédentes à partir de fichiers que vous créez ou des préférences que vous avez définies conditionnellement ou paresseusement. P> nsuserdefault code> et le mettre à jour en conséquence. P>
Donc quel est le problème? Aucune version numérotée == Version ancienne.
Dans certains cas, vous pouvez introduire le schéma de version dans une version intermédiaire dans ce scénario. Pouvez-vous penser à des données persistantes ou des clés de préférence qui n'existent pas au premier lancement?
Le code suivant peut aider à répondre à votre question secondaire lorsqu'une application a été installée. Je ne sais pas si la date de création de l'apps d'applications est la date de construction Xcode ou la date de téléchargement, car cela n'est pas testé à partir de l'App Store.
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]);
Merci pour cette nouvelle façon de trouver s'il y a une nouvelle installation ou même si nous n'avons pas de paramètres NsuserDefaults dans la version précédente.
Je teste avec une application d'App Store existante, et il semble que le premier journal donne la date / l'heure de téléchargement et non la date / heure de construction.
C'est une très bonne réponse! Devrait légitimement être marqué la bonne réponse.
Pour le bénéfice de la communauté, je déplace une réponse postée par Boris qui aurait dû être un commentaire. En raison de représentants, ils ne peuvent que cela visait cette réponse; Depuis que je ne peux pas commenter comme je n'aurais pas encore assez de représentant, Andy Bradbrook's Réponse fonctionne bien jusqu'à la version iOS 10.2 où il se casse - la date modifiée de la bundle de l'application renvoie 0 (01/01/1970) i >
Essayez ce code, je sais que je suis trop tard pour cette réponse, mais pour le partage de Knwoldge ici, je vais.
-(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"]]; } } }
GbversionStracking est bon pod pour suivre toute l'historique de la version.
Voici un code simple pour savoir si la version actuelle est différente (ce code fonctionne également sur simulateur.) Remarque: Assurez-vous que lorsque vous entrez dans la nouvelle version dans iTunes, Ceci correspond à la version de l'application que vous publiez. Si ce n'est pas le cas, le code ci-dessus reviendra toujours sur Oui, si l'utilisateur mette à jour. P> p>