Я прочитал вопрос о том, как открыть файл mobileconfig, хранящийся в приложении (Невозможно открыть файл mobileconfig на устройствах Safari ios[решено]) Мне нужно сделать то же самое в моем приложении, но я не знаю, как заставить сервер работать в фоновом режиме. Я пробовал с CocoaHTTPServer и GCDWebServer но в обоих мне нужно подключение к Wi-Fi, чтобы сделать сервер. Мне нужно сделать локальный сервер для имитации URL-адреса без сети, чтобы запустить .mobileconfig. Если кто-нибудь может мне помочь, я буду очень благодарен. Спасибо!
Как заставить сервер работать в фоновом режиме
Ответы (3)
Вы можете запустить сервер, пока ваше приложение находится в фоновом режиме, но только на несколько минут (и iOS все равно может заморозить ваше приложение в любой момент).
В случае GCDWebServer установите для параметра GCDWebServerOption_AutomaticallySuspendInBackground
значение NO
и убедитесь, что фоновая задача запущена, когда ваше приложение отправляется в фоновый режим. Это сохранит ваше приложение в рабочем состоянии, и GCDWebServer также не будет автоматически приостанавливать себя.
Если ваше приложение зависает в фоновом режиме, обязательно остановите GCDWebServer и перезапустите его, когда ваше приложение вернется на передний план.
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
)
Предположительно, вы хотите сделать это, чтобы веб-сайты в браузерах Safari или WebKit, таких как Chrome/Firefox, имели доступ к информации, размещенной на вашем сервере, работающем на iOS.
Хотя Apple Review не позволит вам просто запустить такой процесс в фоновом режиме более чем на несколько минут, начиная с iOS 15 вы сможете добиться того, чего хотите!
Наконец, выходят веб-расширения Safari. В истинном стиле Apple они будут содержать лишь часть общего стандарта веб-расширений, но вы сможете перенести на них довольно много. Они также содержат способ отправлять сообщения в ваше приложение из JavaScript и наоборот. Также известен как Запросы ;-)
Таким образом, вы можете попросить пользователя установить ваше приложение и веб-расширение Safari, а затем ваше расширение сможет взаимодействовать с расширением вашего приложения :)
Еще один способ сделать что-то подобное — использовать App Clips в Safari. Они будут отображать баннер для вашего приложения, которое может загрузить и открыть какой-либо интерфейс без установки из магазина приложений. Это более неуклюжий опыт, но он доступен, когда ваше приложение даже не установлено!