2014-10-20 44 views
-2

由於未知原因,當我在最近的菜單中殺死我的應用程序並嘗試再次啓動它時,我出現的最後一個屏幕再次出現並且設備被凍結。我必須做的是硬重啓,之後,啓動應用程序再次工作...如何檢測用戶是否在越獄設備上退出ios應用程序

或者,如果我想重新啓動後殺死最近沒有重新啓動我的應用程序,我必須輸入此命令移動終端

killall myapp 

,並在此之後,如果我嘗試推出從主屏幕我的應用程序,我的應用程序工作正常...

我想知道的是我怎麼能檢測用戶何時退出應用程序與主頁按鈕,從而啓動發送killall命令的NSTask?我知道Apple不允許NSTask,但這是一款不打算在Apple Store上發佈的越獄應用程序。

此外,這個bug真的無聊了......在viewDidLoad我有幾個NSTask和方法,檢查目錄是否存在。你認爲這些東西可能會阻止應用程序在最近殺死後重新啓動並凍結設備嗎?或者這是因爲該應用程序以root身份運行,並且有些事情要做,特別是允許設備在這種情況下重新啓動應用程序?

在此先感謝您的幫助!

+1

是的,它絕對是錯誤的代碼。但誰知道,沒有看到任何? – Droppy 2014-10-20 08:42:38

+0

是的,我知道,但這只是一些基本的NSTask和Obj-C方法來檢查現有的目錄,這就是爲什麼我沒有發佈任何代碼示例。我會嘗試刪除這部分代碼,看看這是否是問題的根源。 對於第一個問題,你知道如何檢測應用程序的退出嗎? – Synny 2014-10-20 09:03:31

+0

那麼使用'NSTask'來檢查目錄的存在是你的第一個錯誤。爲這些事情提供了API方法。 – Droppy 2014-10-20 09:40:15

回答

0

好了第一個問題我已經找到了如何:我已經放在一個NSTask方法爲didEnterBackground(AppDelegate類)殺死的應用程序,當用戶退出應用程序

對於第二個問題,我真不不知道...我已經刪除了放入viewDidLoad的方法,看看是否是問題的原因,但沒有,只要我最近殺了應用程序,並嘗試重新啓動它,設備凍結。因爲沒有什麼在viewDidLoad方法中,我認爲這個問題是由根權限引起的... ...在DidEnterBackroung中的NStask解決了這個問題

1

首先,我想指出,使用NSTask並不總是answ呃。您可以使用NSFileManager。管理文件和目錄,並且您可以使用exit(0)來終止您的過程。

至於你的實際問題,你的應用程序是以root身份運行嗎?當iOS應用程序被告知關閉時,SpringBoard會發送一個SIGSTOP信號。由於SpringBoard以移動方式運行,因此這些信號由移動用戶發送,這意味着根應用程序不會收到它們。這意味着每當一個根應用程序被告知退出時,它就會忽略該請求並繼續執行。爲了解決這個問題,Info.plist中有一個可以更改的密鑰。

繼續並在您的Info.plist中將UIApplicationExitsOnSuspend設置爲布爾值true並查看是否解決了您的問題。

相關問題