2016-02-29 3 views
3

Мне нужно разработать корпоративное приложение, которое должно быть в состоянии закрыть все другие приложения, которые в настоящее время работают через многопоточность на без jailbreaked iOS-устройств.Objective C - Завершить все остальные приложения, работающие в фоновом режиме

Несколько лет назад у меня было приложение под названием PKiller or Process Killer, в котором перечислены все запущенные в данный момент приложения, в том числе их идентификатор программы, и они смогли закрыть их. Это приложение было опубликовано в официальном AppStore, но, разумеется, Apple отказалась от него из-за нарушения их рекомендаций.

Кто-нибудь знает, как получить текущие запущенные процессы и закрыть их?

(опять это приложение не будет идти в Apple/в AppStore, в связи с тем, что это предприятие Application)

EDIT:

я сделал глубокие исследования и выяснили, что вы не может даже получить какие-либо запущенные или установленные приложения и связанную информацию, такую ​​как PID, больше в iOS 9. Apple made the sysctl no longer accessible to sandboxed iOS 9 apps. Также other methods, чтобы получить какой-либо третий PID не удалось в iOS 9.

+0

Посмотрите на API Posix для получения информации о процессе. Я не знаком с ними, но вы должны найти API для извлечения PID и отправки сигналов на них. – Avi

+0

Это было бы явно опасно. Вы в основном сбой приложения в случайной точке, например, в середине сохранения файлов. – gnasher729

+1

Отправка сигнала об убийстве, вероятно, не была бы настолько опасной, так как в любом случае приложения могут быть прекращены системой в любое время. Но какие процессы убивать? Я, конечно, не хотел бы иметь это приложение на своем собственном устройстве. – Eiko

ответ

2

Был способ сделать это в прошлом, но с iOS 9 он больше не будет работать. Библиотека, которая была использована для этого, sysctl больше не доступна для изолированных приложений iOS 9.

В прошивке 9, песочница Теперь предотвращает процесс от доступа к kern.proc, kern.procargs и значения kern.procargs2 для других процессов

и

Приложениям iOS не разрешено видеть, какие другие приложения работают

https://developer.apple.com/videos/play/wwdc2015-703/

Возможно, существует другой способ, но это, конечно, будет не так просто, как это было пару лет назад, и не без особых усилий, которые Apple будет пытаться закрыть, даже для корпоративных приложений.

+0

Да, к счастью, я недавно тоже это выяснил ... Так что, если кто-то найдет другой способ, это очень ценится, но до тех пор этот ответ является лучшим ответом. Я не мог найти никакого способа, если вы не джейлбрейк. Спасибо за ответ! – user3191334

+0

Да, obviosly jailbreaking позволит это. Не идя в магазин, вы можете использовать такие вещи, как частные API, но я думаю, что основной способ сделать это был через API ядра. Без них я думаю, что вам не повезло. Удачи вам в том, что вы пытаетесь сделать. Являются ли другие приложения, которые вы также пытаетесь убить и в других приложениях. Если это так, вы можете передать им команду kill через настраиваемую схему URL-адресов. Вам просто нужно будет изменить другие приложения, чтобы иметь возможность обрабатывать схему и обрабатывать запрос, чтобы убить себя, используя 'exit (0); ' – wottle

2

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

+1

Вы имеете в виду, что Apple удалил в прошлом открытый API, а также, возможно, существующий частный API тоже? – user3191334