2015-10-14 166 views
2

我正在使用Xcode 7,我想了解如何在iOS9中使用BLE附件和CoreBluetooth框架測試「狀態保存和恢復」(請不要指出我已經找到this question,但我覺得有必要更深入地理解這一點)。CoreBluetooth:測試狀態保存和恢復

我需要應用程序才能自動從附件中傳輸一些數據,只有當用戶的手機處於範圍內時,以及該應用程序以前沒有運行過。

我試圖打破這三種情況反映了這個用例,即方案A,方案B和方案的不同變化C.

會有人能夠解釋我測試所需的基本步驟以下情景?

也做這些情況是否有意義?

  • 情況A:

    1 - 應用程序發現附件並存儲該附件信息

    2 - 應用程序/用戶退出附件範圍

    3 - 應用由用戶

    殺死

    4 - 用戶在App未運行時重新輸入附件範圍。

    5 - 預期事件:我希望狀態恢復到被激活(被稱爲CentralManager以及didFinishLaunchingWithOptions在AppDelegate中willRestoreState方法

    在這裏,我應該能夠得到外設的列表。包括輔助設備,並決定我是否要連接到它

    6 - 。如果我決定進行連接,然後我希望應用程序保持後臺運行(如後臺模式被激活)

我該如何測試這種情況?


  • 場景B:

    1 - 應用程序發現附件並存儲該附件信息

    2 - 應用程序連接到附件,併發送請求至一個特性來開始傳送數據

    3 - 應用正在從配件接收數據

    4 - 應用程序/用戶退出附件範圍

    5 - 應用程序進入後臺模式

    6 - 用戶應用程序的同時在後臺模式下運行重新進入附件範圍。

    5 - 預期事件:我希望狀態恢復到被激活(被稱爲CentralManager以及didFinishLaunchingWithOptions在AppDelegate中willRestoreState方法

    在這裏,我應該能夠得到外設的列表。包括配件,並看到狀態是連接。我應該然後重新請求數據流(我認爲沒有辦法恢復前一個流,是否正確?)

    6 - 應用程序應繼續流背景和基礎d

我該如何測試這種情況?


  • 場景C:

    1 - 應用程序發現附件並存儲該附件信息

    2 - 應用程序連接到附件,併發送請求至一個特性來開始傳送數據

    3 - 應用正在從配件接收數據

    4 - 應用程序/用戶退出附件範圍

    5 - 應用程序進入後臺模式

    6 - 用戶殺死該應用

    7 - 用戶再次進入附件範圍,而應用程序未運行

    8 - 預期事件:我期望激活狀態恢復(willRestoreState在CentralManager中調用方法以及在AppDelegate中調用didFinishLaunchingWithOptions

    從這裏我應該能夠得到包括附件在內的外設列表,並重新連接並重新請求數據傳輸(如情景B所示)。

    9 - 我希望應用程序保持在後臺運行(如後臺模式被激活)和應用程序應該在後臺繼續流

如何測試這個場景?

希望不是太混亂。

+0

想知道你是否能找到你的問題的答案。我對同樣的事情很好奇。從[這裏](https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html#//apple_ref/doc/uid/TP40013257-CH7-SW5),我想它可能是可以實現的。 – Liangjun

回答

1

對於情景A,我懷疑你可以做任何事情。如果用戶通過雙擊主頁按鈕並向上滑動應用程序來殺死您的應用程序,該應用程序就會消失,並且不再參與所有這些奇特的藍牙消息。對於從未啓動的應用程序也是如此 - iOS不會告訴任何事情和/或嘗試將其喚醒。

在場景B中,您很有可能不需要處理willRestoreState,因爲現代智能手機(5s,6)似乎並不會殺死您的已暫停的應用程序,即使在其上啓動了大量的重要應用程序之後。當您離開附件範圍時,應用程序將悄然斷開連接。然後,如果您要指示它立即開始再次掃描配件(在didDisconnectPeripheral),它會這麼做很長時間。不經常,但仍然。所以,當你再次輸入附件範圍時,iPhone最終會連接到它並觸發所有需要的回調。 willRestoreState似乎只與iPhone 4s,也許iPhone 5有關,但我沒有玩這個功能很長時間才能確定。

如果你真的需要測試willRestoreState情況下,您可以A)添加本地通知didFinishLaunchingWithOptionswillRestoreState以確保他們觸發和B)運行Xcode中的應用程序,然後按CMD +停止。或者點擊Xcode中的方形按鈕。這會導致應用程序以與系統在內存問題上終止相同的方式終止,所以您應該看到您的通知。從現在起,您可以編寫代碼,添加日誌語句並觀察設備日誌中發生的情況。

測試狀態恢復的另一種方法是在點擊一個按鈕後調用kill(getpid(), SIGKILL);

情景C - 抱歉,同樣的故事。如果用戶故意殺死你的應用程序,那麼你就搞砸了。告訴他不要。