2009-05-31 23 views
7

पर स्थापित ब्राउज़रों की गणना करना स्थानीय ऐप से ओएस एक्स सिस्टम पर इंस्टॉल किए गए ब्राउज़र का आकलन कैसे करेगा। मैं चुनौति की तरह कुछ बनाना चाहता हूं, लेकिन अलग (लंबी कहानी)। हालांकि, मैं सिस्टम पर सभी स्थापित ब्राउज़रों को गिनना चाहता हूं।ओएस एक्स

विंडोज़ पर, मैं डिफ़ॉल्ट प्रोग्राम रजिस्ट्री में स्थापित ब्राउज़र को गोता लगा सकता हूं, हालांकि, मुझे विश्वास नहीं है कि ओएस एक्स पर एक समान अवधारणा है। क्या मुझे मैन्युअल रूप से सभी बंडल & उनकी जानकारी के माध्यम से खोजना है। फ़ाइलें?

उत्तर

9

LSCopyAllHandlersForURLScheme(CFSTR("http")) या LSCopyAllRoleHandlersForContentType(CFSTR("public.html"), kLSRolesViewer), या setintersection दोनों का उपयोग करें।

उन दो कार्यों में बंडल पहचानकर्ता लौटते हैं; आप अपने बंडल पहचानकर्ता द्वारा किसी एप्लिकेशन की डिस्क पर पसंदीदा उदाहरण खोजने के लिए LSFindApplicationForInfo का उपयोग कर सकते हैं।

(the Core Foundation memory-management rules पालन करने के लिए मत भूलना मत।)

संपादित करें: इस जवाब पर एक टिप्पणी में, smorgan पता चलता है LSCopyAllHandlersForURLScheme(CFSTR("https")) पहली कॉल के लिए एक विकल्प के रूप में (जो http रों है)। यह एक अच्छा सुझाव है।

+0

मैंने देखा इन कार्बन API हैं। मैंने सोचा कि कार्बन को बहिष्कृत किया जा रहा था? –

+3

लॉन्च सेवाएं कोर सेवाओं का हिस्सा है, कार्बन नहीं। इस प्रकार, इसे बहिष्कृत नहीं किया गया है, और 64-बिट पर उपलब्ध है। (दस्तावेज़ीकरण देखें: http://developer.apple.com/documentation/Carbon/Reference/LaunchServicesReference/) –

+2

आप "http" के बजाय "https" का उपयोग करना चाहेंगे, जैसा कि मेरे अनुभव में बाद में अधिक झूठी-सकारात्मक है वास्तव में ब्राउज़र के लिए चीजें हैं। – smorgan

0

चेक इस सूची

NSArray* apps = (NSArray*)CFBridgingRelease(LSCopyAllHandlersForURLScheme(CFSTR("https"))) ; 
NSLog(@"%@", apps); 

यह डिफ़ॉल्ट के लिए:

NSString* defaultBundleId = (__bridge NSString*)LSCopyDefaultHandlerForURLScheme(CFSTR("https")); 
NSLog(@"default is %@", defaultBundleId);