Как сохранить приложение iPhone работает на фоне полностью работоспособным

прежде всего, я знаю, что есть только поддержка voip, аудио и приложений местоположения для запуска в фоновом режиме и что они будут работать только во время воспроизведения звука или при использовании служб определения местоположения и т. д.

Что я хочу знать, если есть способ сохранить мое приложение работает на фоне полностью работоспособным, не имеет значения влияние на срок службы батареи.

таким образом, пользователь моего приложения может выбрать из настроек, чтобы сохранить приложение, когда он хочет, и только для сколько времени он пожелает. e.g если он ждет чего-то, что требует запуска приложения, после получения сообщений он может отключить функцию keep alive.

Я не знаю, возможно ли это, но я прочитал некоторые сообщения, которые так говорят, но, к сожалению, они не сказали, как =(

обновление:в этом уроке, я обнаружил, что у Acrobits есть два приложения в Apple Store, которые "могут заставить приложение оставаться в живых и бодрствовать в фоновом режиме". Так есть способ сделать это?

6 ответов


вы можете выполнять задачи в течение ограниченного времени после того, как ваше приложение направлено на переход в фоновый режим, но только в течение предоставленного времени. Выполнение дольше, чем это приведет к завершению вашего приложения. См." завершение длительной задачи в фоновом режиме " раздел руководства по программированию приложений iOS для того, как это сделать.

другие имеют piggybacked на воспроизведение аудио в фоновом режиме, как средство остаться в живых в качестве фона процесс, но Apple примет такое приложение только в том случае, если воспроизведение звука является законной функцией. Пункт 2.16 руководящих принципов опубликованного обзора Apple гласит:

многозадачности приложения могут использовать только справочные услуги по их назначению цели: VoIP, воспроизведение аудио, расположение, завершение задачи, local уведомления, и т. д.


начиная с ioS 7, есть новые способы запуска приложений в фоновом режиме. Apple теперь признает, что приложения должны постоянно загружать и обрабатывать данные.

вот новый список всех приложений, которые могут работать в фоновом режиме.

  1. приложения, которые воспроизводят звуковой контент для пользователя в фоновом режиме, такие как приложение музыкального проигрывателя
  2. приложения, записывать аудио контент в фоновом режиме.
  3. приложения, которые держат пользователей информированы о своем местоположении в любое время, например, навигационное приложение
  4. приложения, которые поддерживают голос по интернет-протоколу (VoIP)
  5. приложения, которые необходимо регулярно загружать и обрабатывать новый контент
  6. приложения, которые получают регулярные обновления от внешних аксессуаров

вы можете объявить поддерживаемые фоновые задачи приложения в Info.plist с использованием кода X 5+. Для EG. добавление ключа UIBackgroundModes к информации вашего приложения.plist файл и добавление значение "fetch" для массива позволяет вашему приложению регулярно загружать и обрабатывать небольшие объемы контента из сети. Вы можете сделать то же самое на вкладке "возможности" свойств приложения в XCode 5 (прикрепление моментального снимка)

Capabilities tab in XCode 5 Вы можете найти подробнее об этом в документации Apple


если какая-либо фоновая задача выполняется более 10 минут,то задача будет приостановлена и блок кода, указанный в beginBackgroundTaskWithExpirationhandler, будет вызван для очистки задачи. оставшееся время фона можно проверить с помощью [[UIApplication sharedApplication] backgroundTimeRemaining]. Первоначально, когда приложение находится на переднем плане backgroundTimeRemaining имеет большее значение. Когда приложение переходит в фоновый режим, вы можете видеть значение backgroundTimeRemaining уменьшается с 599.XXX (1o минут). как только backgroundTimeRemaining станет нулевым, фоновая задача будет приостановлена.

        //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");
        }

для работы на фондовых устройствах iOS сделайте свое приложение аудиоплеером / рекордером или VOIP-приложением, законным для отправки в App store или поддельным, если только для вашего собственного использования.

даже это не сделает приложение "полностью работоспособным", что бы это ни было, но ограничено ограниченными API.


зависит от того, что он делает. Если ваше приложение занимает слишком много памяти или вызывает функции/классы, которые оно не должно, SpringBoard может прекратить его. Тем не менее, он, скорее всего, будет отклонен Apple, так как он не следует за их 7 фоновое использование.


может быть, ссылка поможет bcz u, возможно ,придется реализовать код в Appdelegate в app run в фоновом режиме.. Также проконсультируйтесь с developer.apple.com сайт для класса приложений здесь это ссылка для запуска приложения в фоновом режиме