Como manter um aplicativo do iPhone rodando em segundo plano totalmente operacional

Primeiro de tudo, eu sei que há apenas suporte para voip, áudio e aplicativos de localização para executar em segundo plano e que eles serão executados apenas enquanto o áudio é reproduzido ou ao usar serviços de localização, etc.

O que eu quero saber é se existe uma maneira de manter meu aplicativo rodando em segundo plano totalmente operacional, não importa o impacto na vida útil da bateria.

Dessa forma, o usuário do meu aplicativo pode selecionar as configurações para manter o aplicativo ativo sempre que quiser e apenas pelo tempo que desejar. por exemplo, se ele está esperando por algo que requer que o aplicativo esteja em execução, depois de receber as mensagens, ele pode desativar a funcionalidade keep alive.

Eu não sei se isso é possível, mas eu li algum post que diz isso, mas infelizmente eles não disseram como = (

ATUALIZAÇÃO: Neste tutorial , descobri que o Acrobits tem dois aplicativos na Apple Store que “podem forçar o aplicativo a permanecer vivo e desperto em segundo plano”. Então há uma maneira de fazer isso?

Você pode executar tarefas por um tempo limitado após o direcionamento de seu aplicativo para o segundo plano, mas somente pela duração fornecida. Correr por mais tempo do que isso fará com que seu aplicativo seja encerrado. Consulte a seção ” Concluindo uma tarefa de longa duração no plano de fundo ” do Guia de programação de aplicativos do iOS para saber como fazer isso.

Outros pegaram carona na reprodução de áudio em segundo plano como um meio de permanecer vivo como um processo em segundo plano, mas a Apple só aceitará tal aplicativo se a reprodução de áudio for uma function legítima. O item 2.16 das diretrizes de revisão publicadas da Apple declara:

Os aplicativos de multitarefa só podem usar serviços de segundo plano para os fins pretendidos: VoIP, reprodução de áudio, localização, conclusão de tarefas, notifications locais, etc.

Do ioS 7 em diante, existem maneiras mais recentes de executar aplicativos em segundo plano. A Apple agora reconhece que os aplicativos precisam constantemente baixar e processar dados constantemente.

Aqui está a nova lista de todos os aplicativos que podem ser executados em segundo plano.

  1. Apps que reproduzem conteúdo audível para o usuário em segundo plano, como um aplicativo de player de música
  2. Apps que gravam conteúdo de áudio em segundo plano.
  3. Apps que mantêm os usuários informados sobre sua localização a qualquer momento, como um aplicativo de navegação
  4. Aplicativos que suportam Voz sobre Protocolo da Internet (VoIP)
  5. Aplicativos que precisam baixar e processar novos conteúdos regularmente
  6. Apps que recebem atualizações regulares de acessórios externos

Você pode declarar as tarefas em segundo plano suportadas pelo aplicativo no Info.plist usando o X Code 5+. Por exemplo Adicionar a chave UIBackgroundModes ao arquivo Info.plist do seu aplicativo e adicionar um valor de ‘busca’ ao array permite que o seu aplicativo baixe e processe regularmente pequenas quantidades de conteúdo da rede. Você pode fazer o mesmo na guia ‘resources’ das propriedades do Aplicativo no XCode 5 (anexando um instantâneo)

Guia Capacidades no XCode 5 Você pode encontrar mais informações sobre isso na documentação da Apple

Se qualquer tarefa em segundo plano for executada por mais de 10 minutos, a tarefa será suspensa e o bloco de códigos especificado em beginBackgroundTaskWithExpirationHandler será chamado para limpar a tarefa. o tempo restante do plano de fundo pode ser verificado com [[sharedApplicationUIAplication] backgroundTimeRemaining]. Inicialmente, quando o aplicativo está no primeiro plano, backgroundTimeRemaining é definido como maior valor. Quando o aplicativo for para segundo plano, você poderá ver o valor backgroundTimeRemaining de 599.XXX (1o minuto). uma vez que o backgroundTimeRemaining se torne ZERO, a tarefa em segundo plano será suspensa.

//1)Creating iOS Background Task __block UIBackgroundTaskIdentifier background_task; background_task = [application beginBackgroundTaskWithExpirationHandler:^ { //This code block is execute when the application's //remaining background time reaches ZERO. }]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //### background task starts //#### background task ends }); //2)Making background task Asynchronous if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { NSLog(@"Multitasking Supported"); __block UIBackgroundTaskIdentifier background_task; background_task = [application beginBackgroundTaskWithExpirationHandler:^ { //Clean up code. Tell the system that we are done. [application endBackgroundTask: background_task]; background_task = UIBackgroundTaskInvalid; }]; **//Putting All together** //To make the code block asynchronous dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //### background task starts NSLog(@"Running in the background\n"); while(TRUE) { NSLog(@"Background time Remaining: %f",[[UIApplication sharedApplication] backgroundTimeRemaining]); [NSThread sleepForTimeInterval:1]; //wait for 1 sec } //#### background task ends //Clean up code. Tell the system that we are done. [application endBackgroundTask: background_task]; background_task = UIBackgroundTaskInvalid; }); } else { NSLog(@"Multitasking Not Supported"); } 

Para rodar em dispositivos iOS de ações, faça do seu aplicativo um player de áudio / gravador ou um aplicativo VOIP, um legítimo para envio à App Store, ou um falso, se for apenas para uso próprio.

Mesmo isso não tornará um aplicativo “totalmente operacional”, seja o que for, mas restrito a APIs limitadas.

Depende do que faz. Se seu aplicativo ocupa muita memory, ou faz chamadas para funções / classs, o SpringBoard pode finalizá-lo. No entanto, ele provavelmente será rejeitado pela Apple, pois não segue seus 7 usos em segundo plano.

Pode ser o link vai ajudar bcz vc pode ter que implementar o código em Appdelegate em app rodado em background method .. Consulte também o site developer.apple.com para application class Aqui está link para runing app em background