2009-01-23 14 views
23

मैं यानी, मैक पर एक आवेदन के लिए एक कस्टम प्रोटोकॉल रजिस्टर करने के लिए कोशिश कर रहा हूँ:मैक पर किसी एप्लिकेशन पर कस्टम प्रोटोकॉल को कैसे मैप करें?

  1. उपयोगकर्ता के साथ लिंक पर क्लिक करता "abcdef: // कुछ/यूआरएल/यहाँ"
  2. इंस्टॉल किए गए आवेदन शुरू की है

    how do I create my own URL protocol? (e.g. so://...)

    : उपरोक्त स्ट्रिंग पहले परम

मैं इस सवाल से जानकारी का उपयोग कर Windows पर सफलतापूर्वक इस किया है के रूप में पारित के साथ 10

मैं ओएस स्तर पर दूसरे शब्दों में ब्राउज़र-स्वतंत्र कुछ ढूंढना पसंद करूंगा। मैं इस पंजीकरण को शेल स्क्रिप्ट के माध्यम से स्वचालित करना भी चाहूंगा, इसलिए उम्मीद है कि ऐसा करने का एक तरीका है जिसमें जीयूआई शामिल नहीं है।

धन्यवाद!

उत्तर

11

मुझे इसका उपयोग करने का मौका नहीं मिला है, लेकिन कुछ समय पहले मैंने OS X URL handler to open links to local files को बुकमार्क किया था जो आप खोज रहे हैं।

लिंक की गई प्रक्रिया का महत्वपूर्ण हिस्सा योजना के वर्णन के लिए आपके आवेदन की Info.plist पर उपयुक्त CFBundleURLTypes जोड़ रहा है। उदाहरण दी इस तरह दिखता है:

<key>CFBundleURLTypes</key> 
<array> 
    <dict> 
     <key>CFBundleURLName</key> 
     <string>Local File</string> 
     <key>CFBundleURLSchemes</key> 
     <array> 
      <string>local</string> 
     </array> 
    </dict> 
</array> 
+0

मैंने यह समाधान हर जगह देखा है: हालांकि यह प्रोटोकॉल हैंडलर वास्तव में पंजीकृत क्यों होता है? क्या उपयोगकर्ता को पहली बार ऐप चलाने की ज़रूरत है? – fatuhoku

+0

हां, आपको हैंडलर को पंजीकृत करने के लिए ऐप चलाने की ज़रूरत है, और फिर इसे पारदर्शी रूप से उपयोग किया जा सकता है (माना जाता है कि ऐप अपने डॉक आइकन को छुपाता है)। – iconoclast

+1

@iconoclast चूंकि ओएस एक्स में अधिकांश अनुप्रयोगों की प्रतिलिपि बनाकर स्थापित किया जाता है, 'Info.plist' फ़ाइल प्रतिलिपि के समय पंजीकृत होती है (आमतौर पर'/अनुप्रयोग/Foo' फ़ोल्डर में)। कुछ मामलों में यदि mimetypes या URL स्कीम स्वचालित रूप से पंजीकृत नहीं होते हैं, तो [रीबूट की आवश्यकता हो सकती है] (http://apple.stackexchange.com/a/51416/147537)। – tresf

3

विवरण खोदना मुश्किल है, लेकिन RCDefaultApp नामक वरीयता फलक है जो इसे आपके लिए संभाल लेगा। मुझे अभी भी यह जानना अच्छा लगेगा कि यह कैसे काम करता है, खुदाई जारी रखेगा।

+0

बहुत-बहुत धन्यवाद - यह नहीं है 10.9.2 पर मेरे लिए विचार-आवश्यक समाधान। Sourcetree में github-mac: // खोलने के लिए एक इलाज किया (जो मेरे लिए काम करता था!) ​​ – ptim

5

जे के जवाब में जुड़े हुए पेज के महत्वपूर्ण हिस्सा Info.plist में प्रविष्टि है।

मुझे लगता है कि लॉन्च सर्विसेज के साथ यह स्वचालित रूप से इस ऐप को खोल देगा यदि यह एकमात्र ऐसा है जो किसी विशेष यूआरएल योजना को संभाल सकता है, अन्यथा आपको चार्ली मार्टिन का वर्णन करने वाली चाल का उपयोग करना होगा।

मुझे यकीन नहीं है कि डिफ़ॉल्ट आदेश जो निष्पादित करने की आवश्यकता है, या यदि यह एक launchctl कमांड है।

15

मैक पर ऐप्पलस्क्रिप्ट के साथ यह करना आसान है। इस आलेख में सबसे विस्तृत विवरण है, Launch Scripts from Webpage Links on Mac। मैं उस पृष्ठ को पढ़ूंगा क्योंकि इसमें पूर्ण वॉक-थ्रू और डाउनलोड करने के लिए एक पूर्ण कार्य उदाहरण शामिल है।

मूल रूप से, आप एक स्क्रिप्ट में एक ईवेंट हैंडलर बनाने:

on open location this_URL 
    display dialog "I'm doing something with this URL: " & return & this_URL 
end open location 

फिर उस बचाने के एक आवेदन के रूप में। फिर फ़ाइंडर में Info.plist को संपादित करने के लिए पैकेज सामग्री का उपयोग करें। आप अपने प्रोटोकॉल के लिए हैंडलर के रूप में पंजीकृत करने के लिए ऐप में कुछ गुण जोड़ते हैं।

<key>CFBundleURLTypes</key> 
<array> 
    <dict> 
     <key>CFBundleURLName</key> 
     <string>Cliff's handler</string> 
     <key>CFBundleURLSchemes</key> 
     <array> 
      <string>abcdef</string> 
     </array> 
    </dict> 
</array> 
+2

यह 10.8.2 पर मेरे लिए काम नहीं कर रहा है। मैं [MissingLink] (http://www.occupantunknown.com/missinglink/missinglink.html) को ऐप के साथ इस योजना को जोड़ने के बाद [मैक के लिए अधिक इंटरनेट] (http: // डाउनलोड) का उपयोग कर उपयोग करने में सक्षम हूं। cnet.com/More-Internet/3000-2094_4-10559064.html)। लेकिन मैं उपर्युक्त सरल ऐप्पलस्क्रिप्ट के साथ काम नहीं कर सकता। यदि मैं '' खुला स्थानीय 'परीक्षण चलाता हूं, तो यह '' '/ उपयोगकर्ता/उपयोगकर्ता नाम/स्थानीय:/परीक्षण मौजूद नहीं है' ''। – studgeek

+0

ठीक है, यह बहुत अच्छी सलाह थी। मुझे लगता है कि यह काम कर रहा है। मैं "अस्तित्व में नहीं है" के साथ एक ही मुद्दे में भाग गया लेकिन पूरे .app फ़ाइल को दूसरी निर्देशिका में ले जाने के बाद, ऐसा लगता है कि ओएस ने इसे उठाया। – counterbeing

+3

ओएस वास्तव में यह कब पंजीकृत करता है? – fatuhoku

3

आज के रूप में, सबसे अच्छा तरीका है मैं पर कम से कम भूमि के ऊपर के साथ एक मैक इस समस्या को हल करने के लिए कमांड लाइन duti जो मुझे एक बहुत ही साधारण पाठ फ़ाइल में अपने सभी संघों को परिभाषित करने की अनुमति देता है उपयोग कर रहा है पाया:

काढ़ा स्थापित Duti

आप दो चीजों की आवश्यकता होगी।सबसे पहले ऐप्स के बंडल आईडी आप संबद्ध करना चाहते हैं:

mdls -नाम kMDItemCFBundleIdentifier /Applications/MacVim.app

दूसरा फ़ाइल प्रकार के यूटीआई, Apple provides a list, लेकिन आप भी समर्थित तलाश कर सकते हैं इस तरह आपके ऐप के द्वारा यूटीआई:

mdls -नाम kMDItemContentTypeTree /Applications/MacVim.app

अब आपके सिस्टम जहां यूटीआई के साथ बंडल आईडी सहयोगी में कहीं एक पाठ फ़ाइल बनाने:

# ~/.default-apps.duti 
# 
# bundle id  UTI     role 
com.apple.Safari public.html   all 
org.vim.MacVim txmt 
org.vim.MacVim public.ruby-script 

सूचना है कि मैं txmt की तरह एक URL हैंडलर संबद्ध कर सकते हैं और यह भी रूबी लिपियों की तरह प्रकार की जानकारी दें।

है कि फाइल में आप मैं अपने सभी ऐप्स प्राथमिकताएं का ट्रैक रखने और उसे एक पूर्ण ताजा के तुरंत बाद पुन: पेश स्थापित करने या जब पर अन्य मैक एक खाता हो रही बस चल:

duti ~/.default-apps.duti 

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

  • कोई संबंधित समस्या नहीं^_^