Как узнать, обновил ли пользователь приложение или установил свежую копию? - PullRequest
12 голосов
/ 17 мая 2011

Я буду отправлять обновление моего приложения с новой структурой данных, поэтому, если пользователь обновляет мое приложение, мне нужно обновить свои текущие данные. Поэтому мне было интересно, как я могу программно сказать, обновил ли пользователь мое приложение или установил новую копию (если новая копия установлена, мне не нужно ничего обновлять)?

Ответы [ 4 ]

7 голосов
/ 17 мая 2011

Это зависит от типа структуры данных, которую вы используете.

В общем, я бы посоветовал вам не полагаться на проверку версии вашего приложения: пользователь, использующий 2.0, возможно, только что обновил или , это может быть новый пользователь.

Я бы предпочел проверить, существует ли уже структура данных, и действовать соответственно. Предполагая, что вы используете хранилище базовых данных с поддержкой Sqlite, вы можете либо проверить, существует ли файл .sqlite, либо проверить, есть ли объекты в вашем хранилище.

7 голосов
/ 17 мая 2011

Проверка структуры данных является надежным решением.В моих собственных приложениях я начал беспокоиться о людях, которые не обновляются до нескольких версий.Я чувствовал, что это приведет к множеству структурных проверок.Код, который я показываю ниже, определяет и сохраняет версию и предыдущую версию в NSUserDefaults.При необходимости вы можете написать код для этих различий в версиях.

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
BOOL versionUpgraded;
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSString *preVersion = [prefs stringForKey:@"appVersion"];

if ([prefs stringForKey:@"appVersion"] != nil) {
    //see if version is the same as prior
    //if not it is an Upgraded
    versionUpgraded = !([preVersion isEqualToString: version]);
} else {
    //nil means new install
            //This needs to be YES for the case that
            //"appVersion" is not set anywhere else.
    versionUpgraded = YES; 
}

if (versionUpgraded) {
    [prefs setObject:version forKey:@"appVersion"];
    [prefs setObject:preVersion forKey:@"prevAppVersion"];

    [prefs synchronize];
}
3 голосов
/ 17 мая 2011

Просто сохраните версию пакета и проверьте, отличается ли она от

[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]]

при каждом запуске приложения.

0 голосов
/ 21 сентября 2012

Я создал категорию для этого.Просто реализуйте два новых вызова делегата, найденных в заголовке.Он довольно сильно зависит от библиотек времени выполнения obj-c, поэтому убедитесь, что вы уверены в них, прежде чем использовать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...