2017-03-28 4 views
5

シミュレータのにユーザ権限(連絡先、写真、通知など)を設定するためのエンドツーエンドテストスイートのソリューションを作成しようとしています。これは、SpringBoardによって許可アラートが表示され、テストスイートに干渉するためです。BBSettingsGatewayを使用してBBSectionInfoを設定すると、不明な理由で失敗する

私はXCUITestスイートを使用しようとしましたが、SpringBoardアラートに関しては期待どおりに動作せず、一般的に使用するのには不便です。

私の考えは、オンデマンドでアクセス許可を設定するためにシステムファイルを変更することでした。私はTCCデータベースを見つけました。それはかなり簡単です。私は通知のアクセス許可が別のファイル、/Library/BulletinBoard/SectionInfo.plistの下に保存されていることに気付きました。このファイルは、SpringBoardプロセスのBBServerオブジェクトによってキャッシュされます。私はこのファイルを変更することができました。そして、SpringBoardが終了すると、ファイルへの変更が受け入れられます。しかし、私は、この変更がテスト済みのアプリケーションのプロセス実行時に発生するようにしたい。

掘り下げた後、私は、設定アプリケーション(環境設定)が通知設定を変更すると、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 }> 

だから、すべてが良いようです。私は接続間で見つけることができる唯一の違いは、環境設定の過程で、状態はchecked inている間、私のプロセスでは、状態は、init-doneであるということである。

(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タグを追加しましたが、私はシミュレータ専用のソリューションを探しています。

答えて

1

セキュリティに関連していることが分かります。 BBServerは、listener:shouldAcceptNewConnection:メソッド(NSXPCListenerDelegateで定義されています)を実装しています。これには、受け入れられる資格のホワイトリストがあります。それ以外の場合、接続は受け入れられませんが、接続は終了しません。これはシミュレータ用のものなので、私はcom.apple.bulletinboard.settingsの資格を私のアプリに追加しました。問題を解決したので、BBSettingsGatewayを使ってセクション情報を設定することができました。

関連する問題