Comments 28
Enterprise program? Я лишь слышал, что там нет проверок эпл, и если это так, то решением будет fork() и совершение слежки в дочернем процессе.
1. Регистрируем обработчики сигналов, внимательно смотрим, как система вас убивает и будет ли она трогать вас вообще. Я полагаю, что она будет убивать только процесс самого приложения, а сына оставит в покое.
2. Если все замечательно и вас даже не убивают, то можно подобрать какуюнибудь точку рандеву, с помощью shmem, pipe или чего бы то ни было еще, что бы проверить, а нужно ли делать форк или сынок уже в работе.
Это комментарий-предположение. Я полагаю, что никаких препятствий для такой реализации нет, но в этом не уверен.
1. Регистрируем обработчики сигналов, внимательно смотрим, как система вас убивает и будет ли она трогать вас вообще. Я полагаю, что она будет убивать только процесс самого приложения, а сына оставит в покое.
2. Если все замечательно и вас даже не убивают, то можно подобрать какуюнибудь точку рандеву, с помощью shmem, pipe или чего бы то ни было еще, что бы проверить, а нужно ли делать форк или сынок уже в работе.
Это комментарий-предположение. Я полагаю, что никаких препятствий для такой реализации нет, но в этом не уверен.
+1
Добравшись до гугла обнаружилось, что iOS блокирует вызов fork(). http://stackoverflow.com/questions/12088155/fork-failed-1-operation-not-permitted
А жаль. Интересно, чего бы еще такого придумать в обход Вашего способа…
А жаль. Интересно, чего бы еще такого придумать в обход Вашего способа…
+1
Вероятно обходом будет самостоятельная имплементация fork если низкоуровневые апи не режутся MAC(Mandatory Access Control). Как вариант думаю еще можно заюзать posix_spawn(https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/posix_spawn.2.html). оно вроде не лочится никак. решение тоже очень простое:
ps.: я бы мог еще кое что интересное описать, но как вижу малвар кодеров(даже тех кто пишет концепты) тут не жалуют, поэтому воздержусь.
pid_t pid;
char *argv[] = {
"/private/var/mobile/Containers/Data/Application/392A2665-9019-33AC-2E3748331/testapp",
"param1",
"param2",
NULL
};
posix_spawn(&pid, argv[0], NULL, NULL, argv, environ);
waitpid(pid, NULL, 0);
ps.: я бы мог еще кое что интересное описать, но как вижу малвар кодеров(даже тех кто пишет концепты) тут не жалуют, поэтому воздержусь.
0
раньше вроде был способ с постоянным проигрыванием «пустого» звука, но не знаю как оно ведет себя с другими плеерами вроде стандартного приложения Music
+1
Сейчас такой хак эппл при ревью приложения не пропускает.
Равно как и использование для целей геолокаций опции VoiceOverIP.
А вот Region Monitoring — то, что надо.
Равно как и использование для целей геолокаций опции VoiceOverIP.
А вот Region Monitoring — то, что надо.
0
Пропускает или нет не важно
а) Enterprise Program не имеет стадии ревью
б) Все, что не пропускает ревью, можно зарелизить с помощью Dark Release.
а) Enterprise Program не имеет стадии ревью
б) Все, что не пропускает ревью, можно зарелизить с помощью Dark Release.
0
Просто придирка:
б) Как вы зарелизите через Dark Release ключи в Info.plist?
б) Как вы зарелизите через Dark Release ключи в Info.plist?
0
Поясните ещё почему
Разве это не решило бы абсолютно все проблемы? Сервер когда хочет, тогда и опрашивает, можно менять эти интервалы. Приложение будет запущено если надо, всё отработает и сдохнет, если система так пожелает.
Поставленную задачу надо решить только средствами iOS без изменения серверной части (никаких Push Notifications).
Разве это не решило бы абсолютно все проблемы? Сервер когда хочет, тогда и опрашивает, можно менять эти интервалы. Приложение будет запущено если надо, всё отработает и сдохнет, если система так пожелает.
+2
мде… сколько будут существовать устройства, столько будет существовать шпионский софт.
кто заказчик-то? милиция? бандиты? ревнивый супруг? папаша-параноик?
— ни за что бы не взялся за такую работу — противно.
кто заказчик-то? милиция? бандиты? ревнивый супруг? папаша-параноик?
— ни за что бы не взялся за такую работу — противно.
0
Представьте, что устройства принадлежат компании, она их выдает сотрудникам для использования в служебных целях в служебное время, и потому имеет полное право знать где они находятся.
С другой стороны, по простому запросу из АНБ в apple/google, ваш собственный телефон будет сообщать где он находится без дополнительного софта. Более того, если вы не изменили настройки по умолчанию, он и так сообщает об этом, нужно только запросить историю ваших перемещений.
Кстати, для папаш-параноиков существует возможность официально узнавать геопозицию своих чад встроенными в iOS средствами, если они привязаны к одному логину iCloud.
С другой стороны, по простому запросу из АНБ в apple/google, ваш собственный телефон будет сообщать где он находится без дополнительного софта. Более того, если вы не изменили настройки по умолчанию, он и так сообщает об этом, нужно только запросить историю ваших перемещений.
Кстати, для папаш-параноиков существует возможность официально узнавать геопозицию своих чад встроенными в iOS средствами, если они привязаны к одному логину iCloud.
0
Я тоже сейчас пытаюсь портировать свое приложение KidsTrack с андроида на iOS, и решаю эту же задачу. Что интересно: на эмуляторе или на устройстве, подключенном через USB все работает прекрасно. При запуске на неподключенном ни к чему устройстве выясняется, что несмотря на то, что вызовы «didUpdateLocations» идут каждую секунду, через 10-15 минут работы в фоне что-то изменяется в системе, и код метода didUpdateLocations не может запустить NSURLConnection через dataTaskWithRequest. Ошибок никаких нет, просто перестает уходить трафик на сервер. Как только задача переходит в foreground, все NSURLConnection просыпаются, и все, что там было, отправляется. Не понятно пока, как это побороть. Я, правда, не использую ни Significant-change location, ни Region monitoring, ни Local Botifications
0
UFO just landed and posted this here
я бы ещё добавил, что когда мы добавляем permission на location update (в background mode), при публикации приложения в Apple Store нужно обязательно не забыть в конце дописать:
“Continued use of GPS running in the background can dramatically decrease battery life.”
ибо словить из-за этой ерунды rejection очень не приятно (особенно когда стартап)
2.16
We found that your app uses a background mode but does not include the following battery use disclaimer in your Application Description:
“Continued use of GPS running in the background can dramatically decrease battery life.”
It would be appropriate to revise your Application Description to include this disclaimer.
“Continued use of GPS running in the background can dramatically decrease battery life.”
ибо словить из-за этой ерунды rejection очень не приятно (особенно когда стартап)
2.16
We found that your app uses a background mode but does not include the following battery use disclaimer in your Application Description:
“Continued use of GPS running in the background can dramatically decrease battery life.”
It would be appropriate to revise your Application Description to include this disclaimer.
+1
Что-то я не понял, а как вы таймер проверяете через 7 минут? На выполнение кода в бэкграунд режиме дается же 30 секунд.
0
Таймер работает пока программа в фоне активна, а для того чтобы она в фоне была активна используется background location mode для получения координат и long-running tasks. Как только программа в фоне умирает, таймер перестает тикать и пользователь получает сообщение что надо запустить программу.
0
Т.е. если запустить таймер и свернуть приложение (перевести в бэкграунд), то таймер все равно будет работать?
0
Если свернуть программу, таймер не тикнет. Но чтобы программа была активна какое-то (неопределенное, но около 10 минут) время, после того как пользователь ее свернул, можно использовать механизм Finite-Length Tasks
0
background location mode вы имеет ввиду, что периодически у вас все же вызывается — (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {… }?
0
Два дня разбираюсь с работой геолокации в фоновом режиме.
На IOS7 геолокация работает все время пока программа загружена, даже если она свернута.
На IOS8 и IOS9 геолокация работает около 18 минут после сворачивания, потом режим background переходит в режим suspend и все глохнет.
Я что-то делаю неправильно, или получить данные от свернутой программы невозможно через XX минут?
Также вызывают вопросы некоторые другие особенности работы геолокации. Без установки фильтра на расстояние, запросы идут каждую секунду. После установки фильтра 2 запроса и далее молчание ( если я не двигаюсь). Как-то оба варианта не очень.
Пробовала allowDeferredLocationUpdatesUntilTraveled, выдает ошибку с кодом 12.
Буду очень благодарна, если кто-то поделится опытом по этому поводу.
На IOS7 геолокация работает все время пока программа загружена, даже если она свернута.
На IOS8 и IOS9 геолокация работает около 18 минут после сворачивания, потом режим background переходит в режим suspend и все глохнет.
Я что-то делаю неправильно, или получить данные от свернутой программы невозможно через XX минут?
Также вызывают вопросы некоторые другие особенности работы геолокации. Без установки фильтра на расстояние, запросы идут каждую секунду. После установки фильтра 2 запроса и далее молчание ( если я не двигаюсь). Как-то оба варианта не очень.
Пробовала allowDeferredLocationUpdatesUntilTraveled, выдает ошибку с кодом 12.
Буду очень благодарна, если кто-то поделится опытом по этому поводу.
0
Only those users with full accounts are able to leave comments. Log in, please.
Работа iOS App в фоновом режиме