iOS действительно делает это очень легким для вас.
Не знаю, что еще вам может понадобиться ваш демон, но если вы хотите, чтобы он постоянно оставался в живых, чтобы следить за новыми файлами изображений, у вас есть другая альтернатива.
Вы можете настроить запуск запуска для запуска только в случае обнаружения новых событий файловой системы. See the Apple docs on (OS X) Launch Daemons here
Ваш исполняемый демон демон запуска может быть просто простой программой main()
. Он будет запущен системой при записи нового файла изображения, и затем вы можете использовать NSFileManager
или ALAssetLibrary
, чтобы проверить каталог для новейших файлов. Возможно, вы захотите сохранить предпочтение, указывающее, когда последний раз был запущен демон, чтобы вы отслеживали все новые файлы.
int main(int argc, char *argv[]) {
// if we're here, we know there's a new picture, so use
// NSFileManager to check for photos
// or, see something like http://stackoverflow.com/q/9730973/119114 ...
// and then we exit the process and let launchd start us
// again when there's more pictures
return 0;
}
Ключевым моментом здесь является использование /System/Library/LaunchDaemons/com.example.MyApp.plist
файла, как это:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.MyApp</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/MyApp.app/MyDaemonExecutable</string>
<string>optional_argument_one</string> <!-- passed to main() as argv[] -->
<string>optional_argument_two</string> <!-- passed to main() as argv[] -->
</array>
<key>WatchPaths</key>
<array>
<string>/private/var/mobile/Media/DCIM/100APPLE</string>
<string>/private/var/mobile/Media/DCIM/101APPLE</string>
</array>
</dict>
</plist>
это кажется довольно круто! Единственным недостатком является то, что мне приходится вручную добавлять все пути, которые я хочу наблюдать, но поскольку я хочу смотреть только на видео, изображения и, возможно, на звук, это не должно быть пробкой. Вернусь к вам, как только я испытаю это! –
@gosho_ot_pochivka, боюсь, нет разумного способа обойти эту проблему. Вы не хотите, чтобы ваш демон прослушивал изменения в * каждом * файле в файловой системе. iOS постоянно пишет файлы, так как работает в фоновом режиме. Ваш демона будет вызван слишком часто, если он будет слушать все, поэтому указать нужную вам папку будет хорошей идеей, независимо от того, как вы решите эту проблему. – Nate
спасибо, что это работает хорошо! У меня есть один следующий вопрос, прежде чем закрыть эту тему. Мой демон запускается после перезагрузки устройства и запускает повторяющуюся задачу, поэтому мне нужно, чтобы он продолжал работать. Затем, когда снимок сделан, демон запускается снова. Что происходит с предыдущим процессом после загрузки устройства? Is is kill или два отдельных процесса работают вместе? –