我試圖創建一個端到端測試套件的解決方案,以在模擬器上設置用戶權限(聯繫人,照片,通知等)。這樣做的原因是因爲許可警報由SpringBoard顯示,並且干擾了測試套件。使用BBSettingsGateway設置BBSectionInfo失敗原因不明
我已經嘗試過使用XCUITest套件,但它不像預期的那樣對SpringBoard警報有效,而且一般使用起來不方便。
所以我的想法是修改系統文件,以設置按需權限。我找到了TCC數據庫,它看起來很簡單。然後我注意到通知權限被保存在不同的文件下,/Library/BulletinBoard/SectionInfo.plist
。該文件由SpringBoard進程中的BBServer
對象緩存。我設法改變這個文件,如果SpringBoard被終止,文件的改變被接受。但我希望在測試的應用程序的流程運行時發生這種變化。
經過一番挖掘,我注意到當Settings app(Preferences)對通知設置進行更改時,它使用XPC連接來通知它進行了更改。
我正試圖在測試過程中完成同樣的事情。我創建了一個BBSectionInfo
對象,其中包含通知的所有設置,並嘗試使用內部使用XPC連接的BBSettingsGateway
向BulletinBoard服務器通知此更改。這不起作用,我不確定爲什麼不,因爲我沒有得到任何錯誤。
也許這是一個權利問題?讓我感到困擾的是系統沒有給出錯誤,只是沒有發生發生。
在調試器,使XPC方面,我得到這樣的:
(lldb) po [inv.target valueForKey:@「connection」]
<NSXPCConnection: 0x60000011bcf0> connection to service named com.apple.bulletinboard.settingsconnection
內部連接也沒有透露任何問題:
(lldb) po [[inv.target valueForKey:@"connection"] valueForKey:@"xpcConnection"]
<OS_xpc_connection: connection[0x6000001a6200]: { refcnt = 2, xrefcnt = 1, name = com.apple.bulletinboard.settingsconnection, type = named, state = init-done, error = 0x0 mach = true, privileged = false, bssend = 0x6f07, recv = 0x6d0b, send = 0x7003, pid = 0, euid = 4294967295, egid = 4294967295, asid = 4294967295 } <connection: 0x6000001a6200> { name = com.apple.bulletinboard.settingsconnection, listener = false, pid = 0, euid = 4294967295, egid = 4294967295, asid = 4294967295 }>
所以一切似乎都不錯。我可以在連接之間找到的唯一的區別是,在我的過程中,國家是init-done
,而在首選過程中,國家是checked in
:
(lldb) po [[[QuietHoursStateController sharedController] bbGateway] valueForKey:@"connection"]
<NSXPCConnection: 0x6180001160b0> connection to service named com.apple.bulletinboard.settingsconnection
(lldb) po [[[[QuietHoursStateController sharedController] bbGateway] valueForKey:@"connection"] valueForKey:@"xpcConnection"]
<OS_xpc_connection: connection[0x6180001a3fe0]: { refcnt = 2, xrefcnt = 1, name = com.apple.bulletinboard.settingsconnection, type = named, state = checked in, error = 0x0 mach = true, privileged = false, bssend = 0x9d03, recv = 0x9817, send = 0x9e03, pid = 17877, euid = 26053515, egid = 20, asid = 100046 } <connection: 0x6180001a3fe0> { name = com.apple.bulletinboard.settingsconnection, listener = false, pid = 17877, euid = 26053515, egid = 20, asid = 100046 }>
我沒有與XPC連接足夠的經驗,所以也許我錯過了什麼? BBSettingsGateway
似乎管理自己的連接,並沒有公開任何管理連接的方法。
我不介意其他創意解決方案,因爲此解決方案僅適用於模擬器。我已經添加了jailbreak
標籤以便發現,但我正在尋找僅適用於模擬器的解決方案。