Мое приложение было только что отклонено Apple, поскольку оно не реализует должным образом фоновый запуск и является приложением VOIP на iOS.
Мой странный код, который заставлял его работать, был
[self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES];
[application setKeepAliveTimeout:KEEP_ALIVE_INTERVAL handler: ^{
[self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES];
}];
Я знаю, что это неправильно
Затем я последовал
http://blog.dkaminsky.info/2013/01/27/keep-your-ios-app-running-in-background-forever/, который позволяет использовать VOIP для постоянной работы. Опять же, я считаю, что это неправильно.
Мне просто нужно вызвать один метод, чтобы поддерживать PJSIP.
Как мне это сделать правильно?
ОБНОВЛЕНИЕ
Я посмотрел руководство Apple, похоже, это правильно
[application setKeepAliveTimeout:KEEP_ALIVE_INTERVAL handler: ^{
[self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES];
NSLog(@"Fire");
}];
Однако я не уверен, как настроить порт TCP PJSIP для работы в фоновом режиме.
APPLE: настройте один из сокетов приложения для использования VoIP.
Работает нормально в фоновом режиме, это просто Apple отклоняет
2.16
Мы обнаружили, что ваше приложение использует фоновый режим, но не включает функциональные возможности, требующие постоянной работы этого режима. Такое поведение не соответствует рекомендациям по обзору в App Store.
Мы заметили, что ваше приложение объявляет о поддержке VoIP в ключе UIBackgroundModes в вашем Info.plist, но не поддерживает входящие вызовы от подключенной службы VoIP.
Если ваше приложение не поддерживает входящие вызовы от подключенной к нему службы VoIP, фоновый режим VoIP не подходит. Как указано в Руководстве по программированию iOS, этот ключ предназначен для приложений, которым необходимо отслеживать сокеты для входящих вызовов:
«Вместо того, чтобы постоянно держать приложения VoIP в активном состоянии, система позволяет им приостанавливать работу и предоставляет средства для мониторинга их сокетов. При обнаружении входящего трафика система пробуждает приложение VoIP и возвращает ему управление своими сокетами. "
Пожалуйста, обратите внимание на использование значения «audio» в ключе UIBackgroundModes вашего файла Info.plist. Использование фонового режима аудио будет держать текущие исходящие вызовы VoIP открытыми, пока ваше приложение работает в фоновом режиме.
Было бы уместно добавить функции VoIP или удалить параметр «VoIP» из ключа UIBackgroundModes. По дискретным вопросам на уровне кода вы можете обратиться в службу технической поддержки разработчиков Apple. Обязательно:
Обновление 2
PJSIP сказал мне, что сокеты помечены для VOIP, поэтому я понятия не имею, почему это отклоняется