【问题标题】:How to detect when user exits ios application on jailbroken device如何检测用户何时在越狱设备上退出 ios 应用程序
【发布时间】:2014-10-20 08:40:08
【问题描述】:

由于未知原因,当我在最近的菜单中终止我的应用并尝试再次启动它时,我的最后一个屏幕再次出现并且设备被冻结。我要做的是硬重启,然后再次启动应用程序......

或者,如果我想在最近杀死后重新启动我的应用程序而不重新启动,我必须在移动终端中键入此命令

killall myapp

在此之后,如果我尝试从主屏幕启动我的应用程序,我的应用程序工作正常...

我想知道的是如何检测用户何时使用主页按钮退出应用程序,从而启动发送 killall 命令的 NSTask ?我知道 Apple 不允许使用 NSTask,但这是一个不打算在 Apple Store 上发布的越狱应用。

这个错误也让我很无聊......在 viewDidLoad 我有几个 NSTask 和检查目录是否存在的方法。您是否认为这些事情会阻止应用程序在最近被杀后重新启动并冻结设备?或者这是因为应用程序以 root 身份运行,并且有一些事情要做,特别是允许设备在这种情况下重新启动应用程序?

提前感谢您的帮助!

【问题讨论】:

  • 是的,这肯定是有问题的代码。但是谁知道,没有看到呢?
  • 是的,我知道,但这只是检查现有目录的一些基本 NSTask 和 Obj-C 方法,这就是我没有发布任何代码示例的原因。我将尝试删除那部分代码,看看这是否是问题的根源。第一个问题,你知道如何检测应用的退出吗?
  • 使用NSTask 检查目录是否存在是您的第一个错误。为此类事情提供了 API 方法。
  • 我说错了 ^^ 我使用 Obj-c 方法检查现有目录并使用 NSTask 和 mkdir 创建目录(如果不存在)。现在,我已将目录的创建放入 preinst 脚本中,因此不再需要将 mkdir 放入 viewdidload,我将不得不删除这部分代码,所以...

标签: ios jailbreak exit detect


【解决方案1】:

首先,我想指出,使用NSTask 并不总是正确的答案。您可以使用NSFileManager。管理文件和目录,您可以使用exit(0) 来终止您的进程。

就您的实际问题而言,您的应用程序是否以 root 身份运行?当 iOS 通知应用程序关闭时,SpringBoard 会向它们发送SIGSTOP 信号。由于 SpringBoard 作为移动设备运行,这些信号是由移动用户发送的,这意味着根应用程序不会收到它们。这意味着每当根应用程序被告知退出时,它都会忽略该请求并继续执行。要解决此问题,您可以更改 Info.plist 中的一个键。

在 Info.plist 中将 UIApplicationExitsOnSuspend 设置为布尔值 true,看看是否能解决您的问题。

【讨论】:

    【解决方案2】:

    对于第一个问题,我已经找到了如何:我已将 NSTask 方法放入 didEnterBackground(AppDelegate 类)中,当用户退出应用程序时该方法会终止应用程序

    对于第二个问题,我真的不知道......我已经删除了放入 viewDidLoad 的方法,看看这是否是问题的原因,但没有,只要我最近杀死应用程序并尝试重新启动它,设备死机了..因为viewDidLoad方法中没有任何内容,我认为问题是由root权限引起的...... DidEnterBackroung中的NStask解决了这个问题

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 2012-03-22
      • 2012-10-05
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      相关资源
      最近更新 更多