我正在为聊天应用程序开发自定义键盘。这个应用程序还有贴纸和GIF。自定义键盘可以在系统范围内使用。但贴纸和GIF只在我的聊天应用程序中。
有没有办法检测正在运行的应用程序,以便我可以在keybaord中打开和关闭贴纸/ GIF?我做了一些挖掘,并在SO上发现了这个answer。但它对我不起作用。
override public func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if let parentViewController = self.parentViewController {
var hostBundleID = parentViewController.valueForKey("_hostBundleID")
println(hostBundleID)
}
}
viewWillAppear
功能甚至没有触发。然后,当您进行黑客攻击时,有可能会让Apple拒绝该应用程序。
有更好的方法吗?
答案 0 :(得分:0)
我不认为应用扩展程序可以获得有关当前正在运行的应用程序或调用它们的应用程序的任何信息。
您可以做的是将键盘扩展程序嵌入聊天应用程序并使用扩展程序和主机应用程序之间的数据共享机制来检测主机应用程序何时运行(您可以看到详细信息here, 与您的应用程序共享数据部分。)
基本上,当您打开聊天应用时,您可以在共享NSUserDefaults
中写入一个值,当应用处于后台或关闭时,您可以使用不同的值,并检查键盘扩展中的值。
现在,如果主机应用程序崩溃,那么您的NSUserDefaults
值不再准确(它显示主机应用程序正在运行,而事实上它不是),但您可以实现某种心跳 - 写一个每30秒左右来自主机的时间戳,如果时间戳足够新,假设主机仍在运行,请检查应用程序扩展。
它仍然是一个(大而且毛茸茸的)黑客,因为它很复杂且容易出错,但至少从App Store的角度看是合法的。