簡體   English   中英

WatchOS WCSession sendMessage的調試和狀態恢復問題喚醒了被殺死的iPhone應用程序

[英]Debugging and state restoration concerns of WatchOS WCSession sendMessage waking killed iPhone app

我正在嘗試向我的應用程序添加簡單的WatchOS 2.0功能,以允許在手表上觸發簡單的操作並在iPhone上的主應用程序中產生效果。 所有這些取決於使用WCSession的sendMessage方法從手表發送消息

[[WCSession defaultSession] sendMessage:applicationData
                         replyHandler:^(NSDictionary *reply) {
                           //handle reply from iPhone app here
                           DbgLog(@"reply received=%@", reply);
                         }
                         errorHandler:^(NSError *error) {
                           //catch any errors here
                           DbgLog(@"error received=%@", error);
                         }
 ];

到目前為止,一切正常,發送消息,接收消息,我的應用正確響應。 我什至可以將我的應用程序設置為背景,並且一切似乎仍然可以正常運行(我可以在手表上看到iPhone是否對消息做出了反應,因為iPhone會更新手表連接上下文,然后將其反映在手表上)。 我只想立即開始調試邊緣情況。

我主要的兩個擔心是...

如果我的應用程序被殺死,我該如何准確地調試喚醒我的應用程序的系統。 我顯然不能從Xcode生成該過程,如果我嘗試附加到該過程中,顯然為時已晚,理想情況下,我希望能夠盡早設置斷點以查看其工作方式。 更糟糕的是,我可以依靠大量我猜測並查看的日志。 只是想知道是否有調試這種情況的好方法?

最后,關於狀態恢復,在被終止發送的sendMessage場景中運行的該終止應用程序中發生了什么。 即。

  • 我的應用在特定狀態下運行(A)
  • 我按下主頁按鈕以使應用程序后台運行,此時對我的應用程序狀態(A)執行了狀態編碼。
  • 然后,該應用程序位於后台。
  • 然后,我通過停止在Xcode中運行來強制終止該應用程序。
  • 最后,我接着從手表發送sendMessage,使系統重新運行被終止的應用程序。
  • 在這個階段,我希望狀態恢復加載發生,消息進入並經過處理,將應用程序狀態更改為狀態B,然后該應用程序返回到后台。

我的問題是,當應用程序最初處於后台時,它的狀態編碼仍保存在狀態A中。

在處理完手表連接sendMessage之后,有什么方法可以強制在后台運行時進行新的狀態編碼?

當我下次正確打開應用程序時會發生什么,狀態恢復是否會發生,當處理完手表sendMessage時它應該回到狀態A,它應該處於狀態B。我猜測它仍在后台運行,所以當應用程序在后台生成的應用程序應持久存在,並且不會發生新的狀態恢復。 但是,如果系統在處於狀態B的背景下又再次殺死了該應用程序,該怎么辦?它是否欣賞這種情況需要使用新的狀態編碼來保存新的狀態B,還是只是殺死了該應用程序而什么也不做。 如果是這樣,那么當我們最終重新啟動它時,我們可能會再次回到應用程序狀態A,而不是B。

順便說一句,盡管沒有能力似乎連接我的調試器來運行該系統,但是剛剛開始嘗試調試這種事情,所以我重新運行了iPhone應用程序的實例。 我注意到,當我執行sendMessage應該喚醒被終止的iPhone應用程序時,手表應用程序無法正確更新,即。 電話應用程序無法完全執行所請求的操作。 我目前對這種狀態下發生的事情一無所知,但想知道狀態恢復是否可能會受到阻礙。 是收到消息,喚醒應用程序,嘗試對尚不存在的數據執行操作,因為尚未發生狀態恢復,然后發生狀態恢復。.我第二次從手表發送消息時,應用程序行為正確,因此好像初始消息喚醒了應用程序,但由於某種原因無法正確處理該消息。 一旦正確喚醒,則正常處理下一個sendMessage。

抱歉,對於iPhone應用程序從sendMessage調用重新后台運行時發生的情況,我發現文檔含糊不清。 任何人有任何想法嗎? 一如既往地感謝您的時間! 干杯!

背景和狀態恢復:

在后台啟動(然后終止)的應用程序將永遠不會保存狀態,因為它永遠不會從前台過渡到后台(狀態保存發生時)。

保存和恢復狀態

UIKit在適當的時間(例如,當您的應用程序從前台移到后台時)會保留您的應用程序狀態。

它不保存狀態的原因是因為它直接在后台啟動。

應用程序生命周期開始

此外,直接啟動進入后台的應用程序將進入[后台狀態],而不是非活動狀態。

調試在后台啟動的應用程序:

至於從終止狀態在后台啟動應用程序時附加到您的應用程序,則存在一個問題,該問題已經為這種情況提供了正確的方法

如果您對此有特定疑問,請與該答案的作者發表評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM