如何使服务器在后台运行

时间:2015-05-04 11:16:54

标签: ios gcdwebserver

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

2 个答案:

答案 0 :(得分:0)

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(如果您没有在{{1 }})

答案 1 :(得分:0)

大概您希望这样做是为了让 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 Extension,然后你的扩展程序可以与你的应用程序扩展程序通信:)

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