Detectar quando um aplicativo iOS é lançado pela primeira vez? [fechadas]
-
08-07-2019 - |
Pergunta
Como faço para detectar quando um aplicativo iOS é lançado pela primeira vez?
Solução
Muito bonito o que Marc e Chris disse, embora eu prefira alterar o valor quando os quites de aplicativos em caso lá está várias áreas do aplicativo que precisa de saber sobre isso. No código:
// -applicationDidFinishLaunching:
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"firstLaunch",nil]];
// to check it:
[[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"];
// -applicationWillTerminate:
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"];
Outras dicas
Eu percebo esta pergunta é bastante antiga, mas eu usei-o para chegar a um método de detecção do primeiro arranque depois de uma "nova instalação" (vs. primeiro arranque após uma atualização / rebaixamento) e pensei em compartilhar o código aqui para os telespectadores futuras no caso, é útil.
// Get current version ("Bundle Version") from the default Info.plist file
NSString *currentVersion = (NSString*)[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
NSArray *prevStartupVersions = [[NSUserDefaults standardUserDefaults] arrayForKey:@"prevStartupVersions"];
if (prevStartupVersions == nil)
{
// Starting up for first time with NO pre-existing installs (e.g., fresh
// install of some version)
[self firstStartAfterFreshInstall];
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:currentVersion] forKey:@"prevStartupVersions"];
}
else
{
if (![prevStartupVersions containsObject:currentVersion])
{
// Starting up for first time with this version of the app. This
// means a different version of the app was alread installed once
// and started.
[self firstStartAfterUpgradeDowngrade];
NSMutableArray *updatedPrevStartVersions = [NSMutableArray arrayWithArray:prevStartupVersions];
[updatedPrevStartVersions addObject:currentVersion];
[[NSUserDefaults standardUserDefaults] setObject:updatedPrevStartVersions forKey:@"prevStartupVersions"];
}
}
// Save changes to disk
[[NSUserDefaults standardUserDefaults] synchronize];
Normalmente eu uso o número da versão aplicativo, em vez de um booleano para o valor firstLaunch em padrões do usuário. Dessa forma, você pode distinguir entre o primeiro lançamento de uma nova instalação e o primeiro lançamento de um upgrade. Pode ser útil em futuras versões ...
Este é um atalho muito simples, mas eu achei que NSUserDefault pares de valores-chave sempre são nulos a primeira vez que você executar um aplicativo para
// Check to see if its the first time
if ([[NSUserDefaults standardUserDefaults] valueForKey:@"firstTime"] == NULL) {
[[NSUserDefaults standardUserDefaults] setValue:@"Not" forKey:@"firstTime"];
}
e colocar esse código no awakeFromNib do controlador de vista que aparece quando seu aplicativo é iniciado. Eu não sei se alguma das outras respostas trabalhar para o seu problema, mas esta é a maneira que eu resolveu.
Você pode definir um valor booleano nos padrões do usuário para fazer isso. Defina a chave para false quando você chamar registerDefaults:
, e, em seguida, configurá-lo para a verdadeira mudança que a verdade depois de ter mostrado sua tela inicial ajuda ou o que você precisa fazer.
Se você tem um arquivo de dados persistente que sempre salvo após o fechamento do aplicativo, verificar para ver se ele existe seria uma outra maneira.
Save-lo como um preferência dos utilizadores , por exemplo had_first_launch, definido como verdadeiro no arranque, ele só irá ser falsa na primeira vez ...
Isso não vai funcionar corretamente se você deseja detectar durante a outros lugares do código se o seu primeiro lançamento. O "applicationWillTerminate" não vai trabalhar a partir de iOS 4.0, devido à multitarefa. este link fornece uma boa solução: http://mobiledevblog.metalcompass.com/?p=43