2017-03-28 3 views
5

के लिए विफल रहता है। ऐसा करने का कारण यह है क्योंकि स्प्रिंगबोर्ड द्वारा अनुमति अलर्ट प्रदर्शित होते हैं, और वे परीक्षण सूट में हस्तक्षेप करते हैं।एक BBSettingsGateway का उपयोग कर BBSectionInfo स्थापना मैं उपयोगकर्ता अनुमतियों (संपर्क, फ़ोटो, सूचनाएं आदि) <strong>सिम्युलेटर</strong> पर स्थापित करने के लिए एक अंत से अंत परीक्षण सूट के लिए एक समाधान बनाने के प्रयास कर रहा हूँ स्पष्ट नहीं कारण

मैंने XCUITest सूट का उपयोग करने का प्रयास किया है, लेकिन यह स्प्रिंगबोर्ड अलर्ट के संबंध में अपेक्षित काम नहीं करता है, और सामान्य रूप से उपयोग करने के लिए असुविधाजनक है।

तो मेरा विचार मांग पर अनुमति सेट करने के लिए सिस्टम फ़ाइलों को संशोधित करना था। मुझे टीसीसी डेटाबेस मिला, और यह बहुत सरल लगता है। मैंने तब देखा कि अधिसूचना अनुमतियां एक अलग फ़ाइल, /Library/BulletinBoard/SectionInfo.plist के तहत सहेजी जाती हैं। इस फ़ाइल को स्प्रिंगबोर्ड प्रक्रिया में BBServer ऑब्जेक्ट द्वारा कैश किया गया है। मैं इस फ़ाइल को बदलने में कामयाब रहा, और यदि स्प्रिंगबोर्ड समाप्त हो गया है, तो फ़ाइल में परिवर्तन स्वीकार किए जाते हैं। लेकिन मैं चाहता हूं कि यह परिवर्तन परीक्षण ऐप की प्रक्रिया रनटाइम के दौरान हो।

कुछ खोदने के बाद, मैंने देखा कि जब सेटिंग ऐप (प्राथमिकताएं) अधिसूचना सेटिंग्स में परिवर्तन करता है, तो यह एक XPC कनेक्शन का उपयोग करता है ताकि यह सूचित किया जा सके कि इसमें बदलाव आया है।

मैं परीक्षण प्रक्रिया में एक ही चीज़ को पूरा करने की कोशिश कर रहा हूं। मैं BBSectionInfo ऑब्जेक्ट बनाता हूं जिसमें अधिसूचनाओं के लिए सभी सेटिंग्स शामिल हैं, और BBSettingsGateway का उपयोग करके इस परिवर्तन के बुलेटिनबोर्ड सर्वर को सूचित करने का प्रयास करें, जो आंतरिक रूप से XPC कनेक्शन का उपयोग करता है। यह काम नहीं करता है, और मुझे यकीन नहीं है कि क्यों नहीं, क्योंकि मुझे कोई त्रुटि नहीं मिली है।

शायद यह एक एंटाइटेलमेंट मुद्दा है? मुझे परेशान करता है कि सिस्टम द्वारा कोई त्रुटि नहीं दी जाती है, बस कुछ भी नहीं होता है।

डिबगर में, 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 }> 

तो सब अच्छा लगता है।

(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 कनेक्शन के साथ पर्याप्त अनुभव नहीं है, तो: फर्क सिर्फ इतना है कि मैं कनेक्शन के बीच मिल सकता है कि मेरी इस प्रक्रिया में, राज्य init-done है, जबकि पसंद की प्रक्रिया में, राज्य checked in है हो सकता है कि मुझसे कुछ छूट रहा हो? BBSettingsGateway अपने स्वयं के कनेक्शन का प्रबंधन करने के लिए प्रतीत होता है, और यह कनेक्शन के प्रबंधन के लिए किसी भी तरीके का खुलासा नहीं करता है।

मुझे अन्य रचनात्मक समाधानों पर कोई ध्यान नहीं है, क्योंकि यह समाधान केवल सिम्युलेटर के लिए है। मैंने खोज के लिए jailbreak टैग जोड़ा है, लेकिन मैं सिम्युलेटर-केवल समाधान ढूंढ रहा हूं।

उत्तर

1

बाहर निकलता है यह सुरक्षा से संबंधित है। BBServerlistener:shouldAcceptNewConnection: विधि लागू करता है (जिसे NSXPCListenerDelegate में परिभाषित किया गया है), जिसमें स्वीकार्यता के श्वेतसूची हैं जिन्हें स्वीकार किया जाता है। अन्यथा, कनेक्शन स्वीकार नहीं किया जाता है, लेकिन इसे समाप्त नहीं किया जाता है। चूंकि यह सिम्युलेटर के लिए है, इसलिए मैंने com.apple.bulletinboard.settings मेरे ऐप के लिए एंटाइटेलमेंट जोड़ा, और वास्तव में इन मुद्दों को हल किया, और मैं BBSettingsGateway का उपयोग करके सेक्शन जानकारी सेट करने में सक्षम था।

संबंधित मुद्दे

 संबंधित मुद्दे