2017-03-28 7 views
5

의 사용자 권한 (연락처, 사진, 알림 등)을 에 설정하는 엔드 투 엔드 테스트 제품군에 대한 솔루션을 만들려고합니다. 이를 수행하는 이유는 권한 경고가 SpringBoard에 표시되고 테스트 스위트를 방해하기 때문입니다.BBSettingsGateway를 사용하여 BBSettingsGateway를 설정하는 것이 명확하지 않은 이유로 실패합니다.

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 }> 

그래서 모두가 좋은 것 같다. 내가 XPC 연결과 충분한 경험이없는

(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 }> 

그래서 : 내가 연결 사이에서 찾을 수있는 유일한 차이점은 환경 설정 과정에서 상태가 checked in 동안 내 과정에서 국가가, init-done 때문이다 어쩌면 내가 뭔가를 놓친거야? BBSettingsGateway은 자체 연결을 관리하는 것처럼 보이며 연결 관리 방법을 노출하지 않습니다.

이 솔루션은 시뮬레이터에만 해당하므로 다른 창의적인 솔루션에는 신경 쓰지 않아도됩니다. 검색 가능성을 위해 jailbreak 태그를 추가했지만 시뮬레이터 전용 솔루션을 찾고 있습니다.

답변

1

보안과 관련되어 있습니다. BBServer은 허용되는 화이트리스트가있는 listener:shouldAcceptNewConnection: 메소드 (NSXPCListenerDelegate에 정의 됨)를 구현합니다. 그렇지 않으면 연결이 수락되지 않고 종료되지 않습니다. 이것은 시뮬레이터를위한 것이므로 내 앱에 com.apple.bulletinboard.settings 수여권을 추가했는데 문제가 실제로 해결되었으며 BBSettingsGateway을 사용하여 섹션 정보를 설정할 수있었습니다.

관련 문제