2012-06-19 17 views
23

के बाद कीचेन आइटम तक नहीं पहुंच सकता है हमें SMJobBless के साथ एक सहायक टूल अपडेट करने में समस्या है जो हमें आजकल परेशान कर रहा है।SMJobBless अद्यतन

हम एक ऐसे अनुप्रयोग को विकसित कर रहे हैं जिसके लिए हमें कुछ समय पर प्रशासनिक कार्यों (एक केक्स्ट लोडिंग/अनलोडिंग) करने की आवश्यकता है। हम अपने आवेदन के लिए खाता जानकारी स्टोर करने के लिए कीचेन का भी उपयोग कर रहे हैं।

प्रशासनिक कार्यों के लिए, हम SMJobBless का उपयोग करके स्थापित एक सहायक उपकरण का उपयोग करते हैं जिसके साथ हम डीओ ओवर मैक पोर्ट्स (एनएससी कनेक्शन के साथ) का उपयोग करके संवाद करते हैं।

सहायक उपकरण में:

// use our bundle id as our service name 
NSString* name = [[NSBundle mainBundle] bundleIdentifier]; 

launch_data_t checkinRequest = launch_data_new_string(LAUNCH_KEY_CHECKIN); 
launch_data_t checkinResponse = launch_msg(checkinRequest); 
launch_data_t machServicesDict = launch_data_dict_lookup(checkinResponse, LAUNCH_JOBKEY_MACHSERVICES); 
launch_data_t machPort = launch_data_dict_lookup(machServicesDict, [name UTF8String]); 

mach_port_t mp = launch_data_get_machport(machPort); 

launch_data_free(checkinResponse); 
launch_data_free(checkinRequest); 

NSMachPort *receivePort = [[NSMachPort alloc] initWithMachPort:mp]; 
NSConnection *server = [NSConnection connectionWithReceivePort:receivePort sendPort:nil];   

ऐप्लिकेशन में:

NSConnection *conn = [NSConnection connectionWithRegisteredName:HELPER_BUNDLE_IDENTIFIER host:nil]; 

id proxyServerObject = [conn rootProxy]; 

if(conn && proxyServerObject) { 
    return [proxyServerObject someMethod]; 
} 
return NO; 

हम दोनों आवेदन और Thawte से एक codesign प्रमाणपत्र का उपयोग सहायक उपकरण करें। अब तक, सबकुछ एक आकर्षण की तरह काम करता है। सहायक उपकरण स्थापित है और हम DO का उपयोग करके इसके साथ संवाद कर सकते हैं; हमारे kext लोड और सफलतापूर्वक उतार दिया गया है।

समस्या तब शुरू होती है जब हम हमारे सहायक टूल को अपडेट करते हैं। हम इंस्टॉल किए गए टूल की जानकारी शब्दकोश और हमारे ऐप बंडल में बंडल टूल का उपयोग यह जांचने के लिए करते हैं कि टूल का अपडेट आवश्यक है या फिर अपडेट करने के लिए SMJobBless को कॉल करें।

SMJobBless कॉल के बाद, निम्नलिखित लाइनों कंसोल में दिखाई देते हैं:

6/19/12 10:31:24.000 AM kernel: CODE SIGNING: cs_invalid_page(0x104e17000): p=74362[OURAPP] clearing CS_VALID 
6/19/12 10:31:24.000 AM kernel: CODE SIGNING: cs_invalid_page(0x10d0de000): p=74364[OURAPPHELPER] clearing CS_VALID 

इस के बाद, आवेदन हमारे कीचेन आइटम से आवेदन पासवर्ड, समारोह SecKeychainItemCopyContent रिटर्न errSecAuthFailed (-25293) पढ़ने में असमर्थ है। हालांकि, अगर हम codesign -vvvv PATH_TO_TOOL_OR_BUNDLE का उपयोग करके हमारे स्थापित सहायक उपकरण या एप्लिकेशन बंडल के कोड हस्ताक्षर मैन्युअल रूप से सत्यापित करते हैं तो कोई त्रुटि रिपोर्ट नहीं की जाती है। टूल और एप्लिकेशन को एक्सकोड पर्यावरण के बाहर हस्ताक्षरित किया गया है और हस्ताक्षर प्रक्रिया के बाद सामग्री को बदला नहीं जाता है।

हमें one other post मिला है जो एक समान स्थिति का वर्णन करता है, लेकिन उस प्रश्न को अभी भी अनुत्तरित नहीं किया गया है। एक संबंधित समस्या SMJobBless returning error 4098 हो सकती है।

हम ओएसएक्स 10.7.4 पर परीक्षण कर रहे हैं।

किसी को भी इसी तरह के मुद्दों का सामना करना पड़ा या क्या कुछ स्पष्ट है कि हम गलत कर रहे हैं?

उत्तर

3

यह SMJobBless डिस्क पर सहायक टूल को प्रतिस्थापित करने से संबंधित बग के कारण है। विशेष रूप से, यह एक अस्थायी फ़ाइल में लिखने के सामान्य दृष्टिकोण को लेने के बजाय बाइनरी को जगह में संशोधित करता है और फिर इसे गंतव्य के शीर्ष पर नामित करता है। इसका प्रभाव यह है कि यदि बाइनरी स्मृति में है, तो फ़ाइल में संशोधन फ़ाइल को बैक करने वाले मेमोरी पेज बदलते हैं, जो उनके कोड हस्ताक्षर को अमान्य करते हैं। मैंने इसके बारे में एक बग रिपोर्ट लिखा है जैसे rdar: // problem/13514523। यदि आप पहले से ऐसा नहीं कर चुके हैं तो मैं आपको स्वयं को फाइल करने के लिए प्रोत्साहित करता हूं।

आपके आवेदन को अपग्रेड करने के लिए SMJobBless का उपयोग करने से पहले अपने एप्लिकेशन को डिस्क से हटाने के लिए सहायक उपकरण से पूछने के लिए एक संभावित कामकाज हो सकता है। इसके परिणामस्वरूप SMJobBless समस्या को छोड़कर, डिस्क पर एक नई फ़ाइल की प्रतिलिपि बनाना चाहिए।

+0

मैं वर्तमान में योसैमेट (10.10) पर सहायक उपकरण को अपग्रेड करने का प्रयास करते समय इस बग में चल रहा हूं।एल कैपिटन (10.11) में ठीक काम करने लगता है। शायद ऐप्पल ने बग तय किया? –