Как заставить сервер работать в фоновом режиме

Я прочитал вопрос о том, как открыть файл mobileconfig, хранящийся в приложении (Невозможно открыть файл mobileconfig на устройствах Safari ios[решено]) Мне нужно сделать то же самое в моем приложении, но я не знаю, как заставить сервер работать в фоновом режиме. Я пробовал с CocoaHTTPServer и GCDWebServer но в обоих мне нужно подключение к Wi-Fi, чтобы сделать сервер. Мне нужно сделать локальный сервер для имитации URL-адреса без сети, чтобы запустить .mobileconfig. Если кто-нибудь может мне помочь, я буду очень благодарен. Спасибо!


person Fernando García Corrochano    schedule 04.05.2015    source источник
comment
Обсуждение в этом вопросе программной установки файла конфигурации имеет комментарии уже Март 2014 года, в котором четко указано, что то, чего вы пытаетесь достичь, невозможно... Однако мне интересно, как новое приложение Testflight от Apple выполняет проверку профиля...   -  person Swapnil Luktuke    schedule 04.05.2015


Ответы (3)


Вы можете запустить сервер, пока ваше приложение находится в фоновом режиме, но только на несколько минут (и iOS все равно может заморозить ваше приложение в любой момент).

В случае GCDWebServer установите для параметра GCDWebServerOption_AutomaticallySuspendInBackground значение NO и убедитесь, что фоновая задача запущена, когда ваше приложение отправляется в фоновый режим. Это сохранит ваше приложение в рабочем состоянии, и GCDWebServer также не будет автоматически приостанавливать себя.

Если ваше приложение зависает в фоновом режиме, обязательно остановите GCDWebServer и перезапустите его, когда ваше приложение вернется на передний план.

person Pol    schedule 09.09.2015
comment
очень поздно здесь и новичок в этом. Как вы устанавливаете значение GCDWebServerOption_AutomaticallySuspendInBackground. Я получаю сообщение об ошибке: Невозможно присвоить значение: «GCDWebServerOption_AutomaticallySuspendInBackground» — это константа «let». - person lakvin; 29.06.2016
comment
Я также добавил это как вопрос здесь. Было бы здорово, если бы вы могли это проверить. Благодарю вас! - person lakvin; 29.06.2016
comment
@Pol В readme GCD указано, что у него уже запущена фоновая задача, и с установленным параметром GCDWebServerOption_AutomaticallySuspendInBackground: NO она останется в живых. Тем не менее, мой экземпляр зависает или отключается всего через пару секунд в фоновом режиме. Есть мысли по этому поводу? - person DwarDoh; 23.08.2017

Swift 4.0/Swift 5.3 Ответ

Замените текущий код initialization_code вашего сервера, который должен быть таким, как показано ниже.

webServer.start(withPort: 8080, bonjourName: "GCD Web Server")

С кодом ниже

let options:[String : Any] = ["Port" : 8080, "AutomaticallySuspendInBackground" : false]
try! webServer.start(options: options)

Он просто инициализирует сервер другим методом.

Описание:

  • Он использует свойство webServer.start(options: [String : Any]) вместо свойства webServer.start(), которое используется для инициализации сервера.
  • Как сказал @Pol здесь и на GitHub, он делает то же самое (устанавливая параметр GCDWebServerOption_AutomaticallySuspendInBackground до NO)
  • Также убедитесь, что в вашем info.plist вы не установили Application does not run in background значение YES (это также будет работать, если вы не присвоили какое-либо свойство, подобное этому, в info.plist)
person Nayan Dave    schedule 08.10.2020

Предположительно, вы хотите сделать это, чтобы веб-сайты в браузерах Safari или WebKit, таких как Chrome/Firefox, имели доступ к информации, размещенной на вашем сервере, работающем на iOS.

Хотя Apple Review не позволит вам просто запустить такой процесс в фоновом режиме более чем на несколько минут, начиная с iOS 15 вы сможете добиться того, чего хотите!

Наконец, выходят веб-расширения Safari. В истинном стиле Apple они будут содержать лишь часть общего стандарта веб-расширений, но вы сможете перенести на них довольно много. Они также содержат способ отправлять сообщения в ваше приложение из JavaScript и наоборот. Также известен как Запросы ;-)

Таким образом, вы можете попросить пользователя установить ваше приложение и веб-расширение Safari, а затем ваше расширение сможет взаимодействовать с расширением вашего приложения :)

Еще один способ сделать что-то подобное — использовать App Clips в Safari. Они будут отображать баннер для вашего приложения, которое может загрузить и открыть какой-либо интерфейс без установки из магазина приложений. Это более неуклюжий опыт, но он доступен, когда ваше приложение даже не установлено!

person Gregory Magarshak    schedule 30.07.2021