【问题标题】:How to make a server running in background如何让服务器在后台运行
【发布时间】:2015-07-13 18:13:16
【问题描述】:

我已阅读有关如何打开存储在应用程序中的 mobileconfig 文件的问题 (Unable to open mobileconfig file in Safari ios devices[resolved]) 我需要在我的应用程序中做同样的事情,但我不知道如何让服务器在后台运行我已经尝试过使用 CocoaHTTPServer 和 GCDWebServer 但在两者中我都需要 wifi 连接来创建服务器。我需要做一个本地服务器来模拟没有网络的 URL 来启动 .mobileconfig 如果有人可以帮助我,我将非常感激。 谢谢!

【问题讨论】:

标签: ios gcdwebserver


【解决方案1】:

您可以在应用处于后台时运行服务器,但只能运行几分钟(iOS 仍可以随时冻结您的应用)。

对于 GCDWebServer,将 GCDWebServerOption_AutomaticallySuspendInBackground 选项设置为 NO 并确保在您的应用发送到后台时启动后台任务。这将使您的应用程序保持活动状态,并且 GCDWebServer 也不会自动挂起。

如果您的应用在后台被冻结,请务必停止 GCDWebServer 并在您的应用返回前台时重新启动它。

【讨论】:

  • 这里很晚,而且是新手。您如何设置 GCDWebServerOption_AutomaticallySuspendInBackground 的值。我收到一个错误“:无法分配给值:'GCDWebServerOption_AutomaticallySuspendInBackground' 是一个 'let' 常量”。
  • 我也将其添加为问题here。如果你能检查一下就太好了。谢谢!
  • @Pol GCD 自述文件指出它已经有一个后台任务正在运行,并且在 GCDWebServerOption_AutomaticallySuspendInBackground: NO 设置的情况下,它将保持活动状态。也就是说,我的实例在后台运行几秒钟后就会冻结或关闭。对此有什么想法吗?
【解决方案2】:

Swift 4.0/Swift 5.3 答案

替换您当前的服务器初始化代码,如下所示

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 backgroundYES(如果您没有在info.plist 中分配任何类似的属性,它也可以工作)

【讨论】:

    【解决方案3】:

    您可能希望这样做,以便 Safari 或 WebKit 浏览器(如 Chrome/Firefox)中的网站访问您在 iOS 上运行的服务器托管的信息。

    虽然 Apple Review 不允许您在后台运行这样的进程超过几分钟,但从 iOS 15 开始,您将能够实现您想要的!

    终于,Safari Web Extensions 出来了。以真正的 Apple 方式,它们将仅包含整个 Web 扩展标准的一个子集,但您将能够向它们移植相当多的内容。它们还包含send messages to your app from Javascript, and vice versa 的方法。也称为请求;-)

    所以您基本上可以让用户安装您的应用和 Safari Web 扩展,然后您的扩展可以与您的应用扩展通信:)

    完成类似任务的另一种方法是App Clips in Safari。他们将为您的应用显示一个横幅,该横幅可以下载并打开某些界面,而无需从应用商店安装。这是一种更笨拙的体验,但在您的应用尚未安装时仍然可用!

    【讨论】:

      猜你喜欢
      • 2018-02-04
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多