सेब BetterAuthorizationSample और आगे संजात (http://www.stevestreeting.com/2011/11/25/escalating-privileges-on-mac-os-x-securely-and-without-using-deprecated-methods/) मैं आवेदन करने के लिए एक छोटा सा परिवर्तन करना और पूरे सुरक्षा & ServiceManagement ढांचे की बेहतर समझ हासिल करने के लिए कोशिश कर रहा हूँ के माध्यम से देख रहे हैं .. इसलिए मैं के लिए रवाना हुए एक बटन जोड़ें जो SMJobBless - SMJobRemove() के विपरीत के माध्यम से स्थापित नौकरी को हटा देता है। सरल लेकिन हालांकि AuthorizationCreate() कॉल एक संवाद प्रदर्शित करता है जो एक सहायक स्थापित करने की अनुमति देता है और अनुरोध करता है और उसे हटा नहीं देता है।बदलें प्राधिकरण संवाद AuthorizationCreate() के द्वारा दिखाया
यह संवाद है जो मुझे मिलता है (kSMRightModifySystemDaemons
का उपयोग करके)। जैसा कि आप देख सकते हैं कि यह कहता है कि मेरा ऐप एक नया सहायक उपकरण जोड़ने का प्रयास करता है। जो मेरे उपयोगकर्ताओं को भ्रमित करेगा क्योंकि ऐप वास्तव में स्थापित सहायक उपकरण को हटाने का प्रयास करता है। अपने स्वयं के कस्टम दिखा -
मैं कैसे इस संवाद मेरे वास्तविक कार्रवाई (नौकरी हटाना) को प्रतिबिंबित करने के लिए बदल जाता है पर ज्ञान को खोजने के लिए मांग कर रहा हूँ, वहाँ भी जो पूरी तरह से संवाद अनुकूलित करने के लिए लग रहे हैं कई अन्य एप्लिकेशन हैं लेबल और बटन ..
BOOL doRemoveSystemTool(NSString* label, NSError** error)
{
BOOL result = NO;
AuthorizationItem authItem = { kSMRightModifySystemDaemons, 0, NULL, 0 };
AuthorizationRights authRights = { 1, &authItem };
AuthorizationFlags flags = kAuthorizationFlagDefaults |
kAuthorizationFlagInteractionAllowed |
kAuthorizationFlagPreAuthorize |
kAuthorizationFlagExtendRights;
AuthorizationRef authRef = NULL;
//Obtain authorization
OSStatus status = AuthorizationCreate(&authRights, kAuthorizationEmptyEnvironment, flags, &authRef);
if (status != errAuthorizationSuccess)
{
NSLog(@"Failed to create AuthorizationRef, return code %ld", (long)status);
} else
{
//We have authorization so proceed with removing the Job via SMJobRemove
result = SMJobRemove(kSMDomainSystemLaunchd, (CFStringRef)label, authRef, YES, (CFErrorRef *)error);
}
AuthorizationFree(authRef, kAuthorizationFlagDefaults);
return result;
}
मैं authItem kSMRightBlessPrivilegedHelper से kSMRightModifySystemDaemons के लिए बदल रहा है, लेकिन यह सब किया था साथ प्रयोग किया है प्रदर्शित करने के लिए 'जोड़ें' के बजाय 'स्थापित'
संवाद बदल थायहां कुछ सहायता की सराहना करेंगे ...
समाधान AuthorizationRightSet() का उपयोग करने के लिए एक नया सेट सही है, जिसमें पिछले पैरामीटर (localeTableName) निर्दिष्ट डिफ़ॉल्ट-शीघ्र, कैसे वास्तव में यह डिफ़ॉल्ट बटन पाठ लेने के लिए प्राप्त करने के लिए की अभी भी अनिश्चित है, लेकिन कम से कम बनाने के लिए है लेबल आसानी से – DavidMIRV
बदला जा सकता है, तो आप कैसे मैं 'AuthorizationRightSet()' का उपयोग संवाद मैं इनाम ;-) –
एप्पल अवार्ड ख़ुशी से होगा में और अधिक समझ में डाल करने के लिए यहाँ एक उदाहरण है समझा सकता है: https://developer.apple.com /library/mac/technotes/tn2095/_index.html#//apple_ref/doc/uid/DTS10003110-CH1-SECTION7। सही प्रोग्राम "जब आप एक गैर-खाली descriptionKey साथ AuthorizationRightSet फोन जोड़ा जा रहा है, इस पर हर स्थानीयकरण बंडल में तो iterates। प्रत्येक स्थानीयकरण के लिए, यह उचित स्थानीयकरण तालिका फ़ाइल के लिए लग रहा है और फिर उस तालिका में वर्णन कुंजी को ऊपर लग रहा है। यह परिणामी स्ट्रिंग को दाएं विनिर्देशन में डिफ़ॉल्ट-प्रॉम्प्ट डिक्शनरी में जोड़ता है। " – markhunte