iOS убивает приложение CallKit VoIP, работающее в фоновом режиме, за одну минуту

У меня есть приложение VoIP, оно использует CallKit и PushKit. Когда приложение закрывается и iOS получает push-уведомление, приложение было разбужено в фоновом режиме, оно отвечает на вызов через CallKit, и все работает нормально, примерно в течение 50 секунд. После этого iOS убивает приложение сигналом 9. Я выбрал следующие фоновые режимы: audio и voip, но iOS хочет что-то еще, чтобы продолжать бесконечную фоновую задачу.

Что я забыл сделать, чтобы система не убила мое приложение?

P.S. Когда я звоню в свое приложение, когда оно на переднем плане, звонок длится несколько часов. Значит, причина убийства приложения - не в нехватке памяти.


person adnako    schedule 17.11.2016    source источник


Ответы (5)


После создания сертификата VoIP в учетной записи разработчика в фоновом режиме включите поля ниже

1] Audio and Airplay
2] Voice over IP
3] Background fetch
4] Remote notifications
person Irfan Khatik    schedule 14.02.2017

Когда вы проснетесь, вам нужно вызвать [UIApplication beginBackgroundTaskWithExpirationHandler]

person zmarties    schedule 17.11.2016
comment
Спасибо, но мне не нужно запускать какие-либо задачи конечной длины, я нашел причину своей проблемы. - person adnako; 17.11.2016
comment
Не могли бы вы поделиться со мной причиной? - person Neelesh; 10.01.2017

Я надеюсь, что вы дали разрешение, как показано на экранах ниже.

введите здесь описание изображения

введите здесь описание изображения

iOS убивает приложение сигналом 9, что происходит из-за утечки памяти или ее нехватки.

Вы можете проверить с помощью приборов.

person Hasya    schedule 23.11.2016

Читая консоль отладки, я обнаружил, что мое приложение использует более 90% ЦП, отвечая на вызовы в фоновом режиме. Это причина, по которой iOS убивает мое приложение.

person adnako    schedule 17.11.2016
comment
Итак, каково ваше решение? - person Alaa Eldin; 14.02.2017
comment
Привет @adnako, я использую CallKit, когда пользователь не всегда отвечает на звонок в фоновом режиме, но иногда яблоко убивает мое приложение сигналом 9, вы нашли какое-нибудь решение? Я использую только 5% ЦП в фоновом режиме .. - person Steven; 15.11.2019
comment
Привет, @Steven, к сожалению, я больше не работаю над этим проектом. Вы использовали инструменты, чтобы проверить, что ваше приложение также не использует много памяти? А может зависает в основной ветке? - person adnako; 15.11.2019
comment
@adnako, Да, я проверил, он использует очень мало памяти, единственное, что использует очень высокую энергию, но это нормально для приложения Voip, поскольку оно использует сеть. - person Steven; 15.11.2019
comment
@ Стивен, извини, я понятия не имею. Вы создали приложение для TestFlight, чтобы получать журналы сбоев в настройках iPhone? - person adnako; 21.11.2019
comment
@adnako, спасибо, я видел, что иногда мое приложение использует более 100% ЦП при ответе на вызов в фоновом режиме .. там много вызовов потоков из pjsip ... есть идеи, как успокоить ЦП? - person Steven; 22.11.2019

Вы используете предварительную сборку Pristine? В этой сборке есть ошибка WebRTC, которая была исправлена ​​позже. Это вызывает слишком высокую загрузку ЦП для голосовых вызовов (issue5506). Чтобы исправить это, переключитесь на модуль WebRTC (https://cocoapods.org/pods/WebRTC).

Переход на модуль WebRTC займет немного больше времени, чем изменение зависимости, поскольку API был немного изменен. Однако это не сильно изменилось, так что это можно сделать за день или два. В любом случае можно перейти на официальный модуль, поскольку сборка из нетронутой версии больше не поддерживается.

person Jeyhey    schedule 04.02.2017