फिल्टरटाइप एसोसिएशन को वापस लाएं


12

मैं कभी-कभार आईट्यून्स म्यूजिक स्टोर पैकेज के साथ काम करता हूं। इन पैकेजों का .itmspविस्तार है। जैसे .app, .itmspअनिवार्य रूप से एक कंटेनर निर्देशिका है। .itmspफ़ोल्डर्स में XML और मीडिया फाइलें होती हैं।

नवीनतम Xcode और / या Mac OS X अपडेट (Mac OS 10.8.3 पर Xcode 4.6.1) ने .itmspएक्सटेंशन के साथ निर्देशिकाओं के लिए फ़िलेोटाइप एसोसिएशन को हाईजैक कर लिया है । पहले उन्हें सामान्य फ़ोल्डरों की तरह माना जाता था - अंदर देखने के लिए डबल-क्लिक की आवश्यकता नहीं होती है। अब, मुझे उनके साथ बातचीत करने के लिए उन्हें डबल-क्लिक करना होगा। जब मैं करता हूं, तो एप्लिकेशन लोडर नामक एक प्रोग्राम उन्हें खोलने की कोशिश करता है। अंदर देखने के लिए मुझे राइट-क्लिक करना है और "शो पैकेज कंटेंट" चुनें। मैं किसी भी समय इन फ़ाइलों के हजारों के साथ काम कर रहा हूँ, ताकि काम नहीं करेगा।

मैंने गेट इन्फो और RCDefaultApp का उपयोग करके फिलाटाइप एसोसिएशन को बदलने या हटाने की कोशिश की है। न काम करता है। फिलाटाइप एसोसिएशन को हटाने से बस .itmspखाली फाइलों में निर्देशिका बदल जाती है । तो पूरी तरह से एप्लिकेशन लोडर को हटा देता है। किसी भी मामले में मैं अभी भी राइट-क्लिक किए बिना सामग्री को ब्राउज़ नहीं कर सकता।

पहले से स्वीकार किए गए उत्तर ने थोड़ी देर के लिए इलाज किया: lsregister -u /Applications/Contents/Applications/Application\ Loader.app/मैंने Xcode और / या Mac OS X को अपडेट करने के बाद से काम करना बंद कर दिया है। यदि आपके पास Xcode स्थापित है, तो आपको एक निर्देशिका का नाम देकर खुद को परखने में सक्षम होना चाहिए foo.itmsp

मैं इसे कैसे बना सकता हूं ताकि .itmspफ़ाइलों को एक बार फिर से फ़ोल्डर के रूप में माना जाए?


क्या आपने Xcode App Icon पर किसी फ़ाइल को खींचने और छोड़ने की कोशिश की है और देखें कि क्या वह आपको चाहता है?
18 दिसंबर को MrDaniel

सलाह के लिये धन्यवाद। यह मुद्दे पर प्रासंगिक नहीं है, इसलिए मैं अपने इरादे को स्पष्ट करने के लिए अपने प्रश्न को संपादित करने का प्रयास करूंगा।
२३:४६

1
OS X का कौन सा संस्करण चल रहा है? Xcode का क्या संस्करण?
ओल्ड प्रो

मैंने अपना उत्तर हटा दिया जिसने CFBundleDocumentTypes से प्रकार हटा दिए और लॉन्च सेवा डेटाबेस पर मार दिया। यह थोड़ी देर के लिए काम करता है, लेकिन बाद में किसी समय यह अपने आप को फिर से आश्वस्त करने के लिए प्रकट होता है।
18 नवंबर को मार्क 29'13

जवाबों:


11

समस्या: .itmsp फ़ोल्डर को फ़ाइलों के रूप में दिखाया गया है

खोजक .itmsp फ़ोल्डर को पैकेज के रूप में मानता है, जैसे कि वे एक ही फाइल थे। उदाहरण के लिए, स्तंभ दृश्य में, .itmsp फ़ोल्डर में मौजूद कुछ भी अदृश्य है, केवल दस्तावेज़ आइकन दिखाया गया है:

यहाँ छवि विवरण दर्ज करें

खोजक एक निर्देशिका को एक पैकेज मानता है यदि निम्न में से कोई भी स्थिति सत्य है ( बंडल प्रोग्रामिंग गाइड से ):

  1. निर्देशिका में एक ज्ञात फ़ाइल नाम एक्सटेंशन है: .app, .bundle, .framework, .plugin, .kext, और इतने पर (जैसा कि परिभाषित किया गया है /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist। यह एक द्विआधारी प्लिस्ट है, इसे Xcode के साथ खोलें :) open -a Xcode Info.plist

  2. निर्देशिका का एक विस्तार है कि कुछ अन्य एप्लिकेशन दावे पैकेज प्रकार ( पता लगाने com.apple.packageके mdls -name kMDItemContentTypeTree <foldername>लिए आउटपुट में देखें ) का प्रतिनिधित्व करते हैं।

  3. निर्देशिका में इसका पैकेज बिट सेट है (यदि GetFileInfo -ab <foldername>रिटर्न 1, यह सेट है।)

केस 2. .itmsp फ़ोल्डर पर लागू होता है: Application Loader.appनिर्यात प्रकार com.apple.itunes-producer.itmspऔर इसे इसके अनुरूप सेट करता है com.apple.package:

$ mkdir foo.itmsp
$ mdls -name kMDItemContentTypeTree foo.itmsp/
kMDItemContentTypeTree = (
    "com.apple.itunes-producer.itmsp",
    "com.apple.package",
    (...)
)
$ grep -B 5 -A 8 com.apple.package /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Info.plist 
    <key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeConformsTo</key>
            <array>
                <string>com.apple.package</string>
                <string>public.composite-content</string>
            </array>
            <key>UTTypeDescription</key>
            <string>iTunes Package</string>
            <key>UTTypeIconFile</key>
            <string>ITMSP.icns</string>
            <key>UTTypeIdentifier</key>
            <string>com.apple.itunes-producer.itmsp</string>

एक समाधान: फिर से घोषित प्रकार com.apple.itunes-producer.itmsp

एक समाधान एक फ़ोल्डर के रूप में प्रकार com.apple.itunes-producer.itmspऔर विस्तार को फिर से घोषित करने और संशोधित प्रकार की घोषणा का उपयोग करने के लिए लॉन्च सेवाओं को बाध्य करने के लिए होगा।itmsp

महत्वपूर्ण लेख:

हालाँकि यह ओपी की समस्या को हल करता है, प्रस्तावित समाधान, जब अन्य पैकेजों पर लागू होता है, तो उन्हें फ़ोल्डर्स के रूप में प्रदर्शित नहीं किया जाता है।

मुझे पता चला है कि प्रस्तावित समाधान केवल गैर-मानक एप्लिकेशन पथ में स्थित अनुप्रयोगों द्वारा घोषित फ़ाइल प्रकारों के साथ काम करता है।

यह मामला है Application Loader.app, जो में स्थित है /Applications/Xcode.app/Contents/Applications/

यदि आप एक आंशिक समाधान में रुचि रखते हैं, तो इस उत्तर के अंत की जांच करें।

खोजक द्वारा .itmsp फ़ोल्डरों को फ़ोल्डर्स के रूप में प्रदर्शित किया जाता है, अगले चरणों का पालन करें:

  1. एप्लिकेशन फ़ोल्डर में ऑटोमेटर खोलें और एप्लिकेशन चुनें :

    यहाँ छवि विवरण दर्ज करें

  2. लाइब्रेरी सूची में उपयोगिताओं का चयन करें, शैल स्क्रिप्ट का चयन करें और इसे दाईं ओर फलक पर खींचें:

    यहाँ छवि विवरण दर्ज करें

  3. डिफ़ॉल्ट स्क्रिप्ट सामग्री को इसके साथ बदलें exit 0:

    यहाँ छवि विवरण दर्ज करें

  4. एप्लिकेशन को itmspOpener के रूप में सहेजें:

    यहाँ छवि विवरण दर्ज करें

  5. स्वचालित बंद करें।

  6. itmspOpener.appइसकी सामग्री का चयन करें और दिखाएं:

    यहाँ छवि विवरण दर्ज करें

  7. सामग्री का पता लगाएँ> Info.plist और अपने पसंदीदा संपादक के साथ खोलें:

    यहाँ छवि विवरण दर्ज करें

  8. इन वर्गों को इन में बदलें Info.plist:

    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeExtensions</key>
            <array>
                <string>itmsp</string>
            </array>
            <key>CFBundleTypeName</key>
                <string>itmsp folder</string>
            <key>CFBundleTypeRole</key>
                <string>Viewer</string>
            <key>CFBundleTypeIconFile</key>
                <string>folder</string>
            <key>LSTypeIsPackage</key>
                <false/>
            <key>LSHandlerRank</key>
                <string>Owner</string>
        </dict>
    </array>
    (...)
    <key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeConformsTo</key>
            <array>
                <string>kUTTypeDirectory</string>
            </array>
            <key>UTTypeDescription</key>
            <string>itmsp folder</string>
            <key>UTTypeIconFile</key>
            <string>folder.icns</string>
            <key>UTTypeIdentifier</key>
            <string>com.apple.itunes-producer.itmsp</string>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.filename-extension</key>
                <string>itmsp</string>
            </dict>
        </dict>
    </array>
    

    नोट: क्यों kUTTypeDirectoryबजाय public.directoryमें UTExportedTypeDeclarations? से एप्पल के प्रलेखन : महत्वपूर्ण: अपने कोड में सिस्टम-निर्धारित यूटीआई उपयोग करते समय, आप स्थिरांक में परिभाषित का प्रयोग करना चाहिए UTCoreTypes.hलॉन्च सेवाएं ढांचे में उपलब्ध होने पर, के बजाय वास्तविक यूटीआई तार। उदाहरण के लिए, "com.apple.application" के बजाय kUTTypeApplication पास करें। “सिस्टम-डिक्लेयर यूनिफ़ॉर्म टाइप आइडेंटिफ़ायर” यूटीआई स्ट्रिंग्स के अलावा इन स्थिरांक को सूचीबद्ध करता है।

  9. एक .itmsp फ़ाइल को संबद्ध करें itmspOpenerऔर बटन दबाएं Change All...:

    यहाँ छवि विवरण दर्ज करें

  10. लॉन्च सेवा डेटाबेस रीसेट करें:

    $ lsregister -kill -r -domain local -domain system -domain user
    

    (OS X 10.8 lsregisterपर स्थित है /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/।)

  11. .Itmsp फ़ोल्डर बनाएं और उसके गुणों को सूचीबद्ध करें:

    $ mkdir foo3.itmsp
    $ mdls -name kMDItemContentTypeTree foo3.itmsp/
    kMDItemContentTypeTree = (
        "public.folder",
        "public.directory",
        "public.item"
    )
    

    क्योंकि लॉन्च सेवाएँ डेटाबेस रीसेट हो गया था, अब फाइंडर फ़ोल्डर के रूप में .itmsp फ़ोल्डर्स को दिखाता है।

  12. itmspOpener.appअपनी फ़ाइल को लोड करने के लिए खोलें और रजिस्टर करें com.apple.itunes-producer.itmsp:

    $ open ~/Desktop/itmspOpener.app
    
  13. प्रारंभ करें Application Loader.app:

    $ open '/Applications/Xcode.app/Contents/Applications/Application Loader.app'
    

    फ़ोल्डर foo3.itmspको अभी भी एक फ़ोल्डर के रूप में प्रदर्शित किया जाना चाहिए।

  14. फिर से फ़ोल्डर के गुणों की जाँच करें:

    $ mdls -name kMDItemContentTypeTree foo3.itmsp/
    kMDItemContentTypeTree = (
        "public.directory",
        "public.item",
        "public.content"
    )
    

    com.apple.package फ़ोल्डर के मेटाडेटा विशेषताओं में नहीं जोड़ा गया, इसीलिए फ़ाइंडर अभी भी .itmsp फ़ोल्डर को फ़ोल्डर्स के रूप में प्रदर्शित करता है!

स्वचालित समाधान: लॉगिन के बाद .itmsp फ़ोल्डरों को प्रदर्शित करना

लॉगिन के बाद फ़ोल्डर के रूप में .itmsp फ़ोल्डर प्रदर्शित करने के लिए:

  1. ऊपर बताए अनुसार itmspOpener.appइसे बनाएं और संशोधित करें Info.plist

  2. /usr/local/bin/itmspTypeLoaderइस सामग्री के साथ बनाएं ( itmspOpenerस्थान जहां itmspOpener.appपरिवर्तन रहता है, चर आवश्यक के रूप में बदलता है):

    #!/bin/bash
    
    itmspOpener="/Users/jaume/Applications/itmspOpener.app/"
    
    echo "$(date): Starting" > /tmp/itmspTypeLoader.log
    sleep 15
    echo "$(date): Deleting Launch Services database" >> /tmp/itmspTypeLoader.log
    /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user >> /tmp/itmspTypeLoader.log
    sleep 15
    echo "$(date): Starting $itmspOpener" >> /tmp/itmspTypeLoader.log
    open $itmspOpener >> /tmp/itmspTypeLoader.log
    sleep 1
    echo "$(date): Starting Application Loader.app" >> /tmp/itmspTypeLoader.log
    open "/Applications/Xcode.app/Contents/Applications/Application Loader.app/"
    
    # Wait until process "Application Loader.app" exists
    while [ $(ps -ef|grep -v grep|grep -c "Application Loader") -ne 1 ]; do
        sleep 1
        echo "$(date): Waiting" >> /tmp/itmspTypeLoader.log
    done
    # Send TERM signal
    kill -TERM $(ps -ef|grep "Application Loader"|grep -v grep|awk "{print \$2}")
    if [ $? -eq 0 ]; then
        echo "$(date): Application Loader killed" >> /tmp/itmspTypeLoader.log
    else
        echo "$(date): Application Loader could not be killed" >> /tmp/itmspTypeLoader.log
    fi
    echo "$(date): Exiting" >> /tmp/itmspTypeLoader.log
    

    sleep 15दौड़ने से पहले और बाद में दोनों lsregisterका अत्यधिक महत्व है। यदि आप वांछित परिणाम नहीं देखते हैं, तो विभिन्न देरी का प्रयास करें।

  3. /usr/local/bin/itmspTypeLoaderLauncherइस सामग्री के साथ बनाएँ :

    #!/bin/bash
    
    # $1 returns the short name of the user who is logging in
    su - $1 -c /usr/local/bin/itmspTypeLoader &
    
  4. निष्पादन योग्य दोनों लिपियों को सेट करें:

    $ sudo chmod a+x /usr/local/bin/itmspTypeLoader /usr/local/bin/itmspTypeLoaderLauncher 
    
  5. लॉगिन हुक के/usr/local/bin/itmspTypeLoaderLauncher रूप में सेट करें :

    $ sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/itmspTypeLoaderLauncher
    
  6. प्रभावी होने के लिए रिबूट। लॉग इन करने के बाद आपको यह देखना चाहिए:

    यहाँ छवि विवरण दर्ज करें

    और lsregister -dumpप्रकट करना चाहिए कि itmspOpener.app'एस UTExportedTypeDeclarationsपूर्वता अधिक लेता Application Loader.appहै:

    $ lsregister -dump | less
    bundle  id:            24748
            path:          /Users/jaume/Desktop/itmspOpener.app/
            name:          itmspOpener
            (...)
            flags:         apple-internal  relative-icon-path  ui-element  has-min-sys-version-by-arch  hi-res-capable  user-can-change-hi-res-mode  
            item flags:    container  package  application  extension-hidden  native-app  scriptable  services  x86_64  
            (...)
            --------------------------------------------------------
            type    id:            33796
                    uti:           com.apple.itunes-producer.itmsp
                    description:   itmsp folder
                    flags:         exported  active  apple-internal  trusted  
                    icon:          Contents/Resources/folder.icns
                    conforms to:   kuttypedirectory
                    tags:          .itmsp
            --------------------------------------------------------
            (...)
    bundle  id:            24600
            path:          /Applications/Xcode.app/Contents/Applications/Application Loader.app/
            name:          Application Loader
            (...)
            flags:         apple-internal  relative-icon-path  hi-res-capable  user-can-change-hi-res-mode  
            item flags:    container  package  application  extension-hidden  native-app  i386  x86_64  
            (...)
            --------------------------------------------------------
            type    id:            33832
                    uti:           com.apple.itunes-producer.itmsp
                    description:   iTunes Package
                    flags:         exported  inactive  apple-internal  trusted  
                    icon:          Contents/Resources/ITMSP.icns
                    conforms to:   com.apple.package, public.composite-content
                    tags:          .itmsp
            --------------------------------------------------------
    

    क्या आपको inactiveएप्लिकेशन लोडर .app के निर्यात में ध्वज सेट दिखाई देता है ? हमने एप्लिकेशन लोडर को हराया।

एसिड परीक्षण:। Itmsp फ़ोल्डर्स अभी भी iTunes अपडेट के बाद प्रदर्शित होते हैं

मैंने हाल ही में Xcode अपडेट किया है:

यहाँ छवि विवरण दर्ज करें

और पुष्टि कर सकते हैं कि .itmsp फ़ोल्डर्स को अपडेट के दौरान फ़ोल्डर्स के रूप में दिखाया गया था:

यहाँ छवि विवरण दर्ज करें

और उसके बाद:

यहाँ छवि विवरण दर्ज करें

एक आंशिक समाधान: पैकेज डबल क्लिक होने पर सामग्री दिखाएगा

जैसा कि पहले कहा गया था, ऊपर दी गई प्रक्रिया मनमाने ढंग से फ़ोल्डरों के साथ काम नहीं करेगी जो फाइंडर द्वारा पैकेज के रूप में प्रदर्शित की जाती हैं।

हालाँकि, यदि आप इसे खोलने के लिए किसी पैकेज को डबल-क्लिक करना चाहते हैं, तो इसे एक bashस्क्रिप्ट और ऑटोमेटर के साथ करने का एक तरीका है :

  • स्क्रिप्ट पैकेज के अंदर एक छिपा हुआ, अस्थायी फ़ोल्डर बनाता है, इसे फाइंडर में प्रकट करता है (इस प्रकार पैकेज को फ़ोल्डर के रूप में प्रकट करता है) और फिर अस्थायी फ़ोल्डर को हटा देता है।

    ध्यान दें:

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

  • ऑटोमेकर स्क्रिप्ट को एक एप्लिकेशन में बंडल करता है जो पैकेज फ़ाइलों के साथ जुड़ा होगा।

ये ऐसे एप्लिकेशन बनाने के चरण हैं। मैं नीचे दिए स्पष्टीकरण में पैकेज प्रकार के उदाहरण के रूप में .itmsp फ़ाइलों का उपयोग करूंगा:

  1. एप्लिकेशन फ़ोल्डर में ऑटोमेटर खोलें और एप्लिकेशन चुनें :

    यहाँ छवि विवरण दर्ज करें

  2. लाइब्रेरी सूची में उपयोगिताओं का चयन करें , शैल स्क्रिप्ट का चयन करें और इसे दाईं ओर फलक पर खींचें:

    यहाँ छवि विवरण दर्ज करें

  3. पास इनपुट को तर्क के रूप में सेट करें :

    यहाँ छवि विवरण दर्ज करें

  4. इसके साथ डिफ़ॉल्ट स्क्रिप्ट सामग्री बदलें:

    for f in "$@"; do
        # If not dealing with a directory, exit
        if [ ! -d "$f" ]; then exit; fi
        # Create a temporary directory inside the itmsp "file"
        tmpdir="$f/.itmspOpener$$"
        if mkdir $tmpdir; then
            # Reveal in Finder
            open -R $tmpdir
            # Delete temporary file
            rmdir $tmpdir
        fi
    done
    
  5. एप्लिकेशन को itmspOpener के रूप में सहेजें:

    यहाँ छवि विवरण दर्ज करें

  6. स्वचालित बंद करें।

अब आपके पास एक एप्लिकेशन है जो .itmsp फ़ाइलों को फ़ोल्डर के रूप में खोल सकता है यदि इसके साथ जुड़ा हुआ है।

एक कॉस्मेटिक समस्या है: जैसा कि यह खड़ा है, संबंधित फाइलों में मानक सफेद दस्तावेज़ आइकन होगा:

यहाँ छवि विवरण दर्ज करें

चलो इसे भी ठीक करें:

  1. सुनिश्चित करें कि ऑटोमेटर बंद है।

  2. ItmspOpener चुनें और इसकी सामग्री दिखाएँ:

    यहाँ छवि विवरण दर्ज करें

  3. सामग्री का पता लगाएँ> Info.plist और अपने पसंदीदा संपादक के साथ खोलें:

    यहाँ छवि विवरण दर्ज करें

  4. इस कुंजी के मान को CFBundleDocumentTypesसरणी में बदलें :

    <key>CFBundleTypeName</key>
    <string>itmsp folder</string>
    

    और इस कुंजी को जोड़ें:

    <key>CFBundleTypeIconFile</key>
    <string>folder</string>
    

    अब, अनुभाग इस तरह दिखता है:

    यहाँ छवि विवरण दर्ज करें

  5. खोजक पर स्विच करें, एक फ़ोल्डर चुनें, प्रेस करें I, बाएं शीर्ष कोने में फ़ोल्डर आइकन का चयन करें और इसे इसके साथ कॉपी करें C:

    यहाँ छवि विवरण दर्ज करें

  6. पूर्वावलोकन खोलें और क्लिपबोर्ड से फ़ाइल> नया चुनें। फ़ाइल को इस रूप में सहेजें folder.icns:

    यहाँ छवि विवरण दर्ज करें

  7. इसे कॉपी folder.icnsकरें itmspOpener/Contents/Resources:

    यहाँ छवि विवरण दर्ज करें

  8. एक .itmsp फ़ाइल को संबद्ध करें itmspOpenerऔर बटन दबाएं Change All...:

    यहाँ छवि विवरण दर्ज करें

.Itmsp फ़ाइलों के आइकन को एक फ़ोल्डर में बदलना चाहिए, या कम से कम मैंने ऐसा सोचा: दुर्भाग्य से, यह मामला नहीं था। इसलिए मैंने एप्लिकेशन को किसी अन्य स्थान पर itmspOpener स्थानांतरित कर दिया (मैंने अपने डेस्कटॉप पर एक अस्थायी फ़ोल्डर बनाया, इसे वहां और मेरे डेस्कटॉप पर वापस भेज दिया)। इस खोजक में आइकन जानकारी को ताज़ा किया:

यहाँ छवि विवरण दर्ज करें

अब एक .itmsp फ़ाइल पर डबल क्लिक करें और इसे एक फ़ोल्डर के रूप में खुला देखें:

यहाँ छवि विवरण दर्ज करें


यह बहुत प्रभावशाली है ... लेकिन ऐसा लगता है कि इसमें एक समस्या है: यदि खोजक स्तंभ दृश्य (मेरा पसंदीदा दृश्य प्रकार) में है, तो .itmspफ़ोल्डर के भीतर मौजूद कुछ भी अदृश्य है। मैं ऐसा क्यों कर सकता हूं, लेकिन यह नहीं है। इसके अतिरिक्त, अगर मेरे पास मेरे शराबी थे, तो आपको फ़ाइल को अंदर देखने के लिए डबल-क्लिक नहीं करना होगा, लेकिन ओह अच्छी तरह से।
२०:२५

1
तुम सही हो। मैंने अनुमान नहीं लगाया था कि आपने कॉलम दृश्य का उपयोग किया है, हालाँकि मुझे कहना होगा कि यह सही अर्थ बनाता है जब यह .itmsp फ़ोल्डरों के साथ काम करता है। लेकिन मुझे इस समस्या को हल करने का एक तरीका मिला, वह यह है कि फाइंडर को फोल्डर के रूप में .itmsp फोल्डर के लिए मजबूर करें। मेरे संपादन पर एक नज़र डालें (या समाधान को अंतिम पैराग्राफ़ पर सीधे कूदें, लेकिन itmspOpener की Info.plist को संशोधित करना न भूलें जैसा कि पहले पैराग्राफ में वर्णित है। ट्रिक।)
jaume

अविश्वसनीय! जवाब के लिए धन्यवाद। फाइंडर और OS X को टिक करने वाली कुछ चीजों पर यह एक बहुत ही दिलचस्प नज़र है।
michaelmichael

धन्यवाद, मुझे खुशी है कि आपने इसे उपयोगी पाया! (मैं जवाब को बाद में
पठनीयता में

मुझे आखिरकार उत्तर को संपादित करने के लिए कुछ समय मिला। मैंने पैराग्राफ को फिर से जोड़ दिया है और साक्ष्य जोड़ा है कि मेरे उत्तर में बताया गया समाधान आईट्यून्स अपडेट के लिए प्रतिरक्षा है।
Jaume

7

अनुप्रयोग लोडर को अपंजीकृत करने के लिए एक विकल्प होगा lsregister -u /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/, लेकिन इसे फिर से पंजीकृत किया जाता है यदि इसे खोला जाता है, यदि लॉन्च सेवा डेटाबेस को फिर से बनाया जाता है, या संभवतः यदि Xcode अपडेट किया गया है।

आप CFBundleDocumentTypes और UTExportedTypeDeclarations शब्दकोशों में प्रविष्टियां भी /Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Info.plistचला सकते हैं lsregister -f /Applications/Xcode.app/Contents/Applications/Utilities/Application\ Loader.app/। यह Xcode के कोड हस्ताक्षर को अमान्य नहीं करता है, लेकिन परिवर्तन अपडेट द्वारा अधिलेखित हो सकते हैं।

Lsregister के लिए पूर्ण पथ /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister10.5 और बाद में है।


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

@OldPro हाँ, lsregister -u $app && lsregister $appकम से कम इस मामले में Info.plist में परिवर्तन लागू करता है।
16

यह एक शानदार उत्तर है - ध्यान रखें कि अगली बार जब आप Xcode को अपग्रेड करते हैं - तो आप एक एप्लिकेशन लोडर के साथ समाप्त हो सकते हैं जो डिफ़ॉल्ट को पंजीकृत करता है CFBundleDocumentTypesताकि आप केवल उस "टूल" को हटा सकें जब यह आपकी आवश्यकता न हो और / या इसे संशोधित करने का टायर।
bmike

2

यहां बंडल के बारे में Apple के डॉक्यूमेंटेशन के एक प्रासंगिक अंश ( जोर दिया गया है )

सिस्टम बंडलों और पैकेजों की पहचान कैसे करता है

खोजक एक निर्देशिका को पैकेज मानता है यदि निम्न में से कोई भी स्थिति सत्य है:

  • निर्देशिका में एक ज्ञात फ़ाइल नाम एक्सटेंशन है: .app, .bundle, .framework, .plugin, .xt, और इसी तरह।
  • निर्देशिका का विस्तार है कि कुछ अन्य एप्लिकेशन दावे पैकेज प्रकार का प्रतिनिधित्व करते हैं; देखें " दस्तावेज़ संकुल ।"
  • निर्देशिका में इसका पैकेज बिट सेट है।

पैकेज को निर्दिष्ट करने का पसंदीदा तरीका पैकेज निर्देशिका को एक ज्ञात फ़ाइल नाम एक्सटेंशन देना है। अधिकांश भाग के लिए, Xcode सही एक्सटेंशन लागू करने वाले टेम्पलेट प्रदान करके आपके लिए इस बात का ध्यान रखता है । आपको बस उपयुक्त प्रकार का एक Xcode प्रोजेक्ट बनाना है।

लगभग निश्चित रूप से Xcode प्रतिनिधित्व कर रहा है कि यह दावा करता है कि यह .itmspएक पैकेज प्रकार का प्रतिनिधित्व करता है, जैसा कि दस्तावेज़ संकुल में वर्णित है । तो हो सकता है कि एक्सकोड की उस एक्सटेंशन को हटाने से Info.plistयह ट्रिक हो जाए, लेकिन मुझे संदेह है कि एक बार उस एसोसिएशन को फाइंडर द्वारा नोट कर लिया गया है, इसे एक्सकोड से हटाने से यह पूर्ववत नहीं होगा। "ओपन विद ..." पर राइट-क्लिक करने पर आपको "अनुशंसित एप्लिकेशन" क्या मिलते हैं? आपको उनके सभी Info.plists की जाँच करने की आवश्यकता है।

मेरा सुझाव है कि यदि आप lsregister -uकिसी भी ऐसे ऐप को अपंजीकृत करने का उपयोग कर सकते हैं, जो दावा करता है .itmsp। अन्यथा आपको .itmspसभी प्लास्ट से हटाना पड़ सकता है और फिर पूरे फाइंडर एसोसिएशन डेटाबेस का उपयोग करके मारना चाहिए lsregister -kill -seed। ऐसा कभी नहीं किया, यह नहीं बताया कि आपके सिस्टम के बाकी हिस्सों को कितना नुकसान होगा। संभवत: आप अपंजीकृत करना चाहते हैं, फिर पौधों को संपादित करें, फिर डेटाबेस को मारें और फिर से शुरू करें। अगर आप पहले से ही प्लास्ट से निकाल दिए गए हैं, तो अनरजिस्टर्ड एसोसिएशन को नहीं हटाता है, तो मुझे आश्चर्य नहीं होगा, और यदि आपने इसे अभी तक नहीं हटाया है, तो रेजीड इसे वापस जोड़ देगा। इसके अलावा इस तरह आप अपमानजनक क्षुधा के लिए अन्य सभी संगठनों को खोना नहीं होगा।

क्या बुरा है, Xcode के माध्यम से और सभी फ़ोल्डर्स पर बंडल बिट सेट किया जा सकता था। मुझे लगता है कि आपको एक स्क्रिप्ट का उपयोग करके लिखना होगा GetFileInfoऔर SetFileडिस्क को स्कैन करना होगा और उन्हें पूर्ववत करना होगा, जो एक तरह का दर्द है, लेकिन संभव है। उँगलियाँ बंडल के किनारों को पार कर रही हैं परेशान नहीं हैं। GetFileInfoकुछ परीक्षण करके जाँच करने के लिए उपयोग करें ।


0

मुझे विश्वास है कि आप इसका उपयोग करके इसे ठीक कर सकते हैं

/usr/bin/SetFile -a B /path/to/file.itmsp

इससे पहले कि आप इसे दूसरों के सभी पर आज़माएं, जाहिर तौर पर इसका परीक्षण करें।

यदि आपको किसी दिए गए फ़ोल्डर में उन सभी को चलाने की आवश्यकता है:

find . -name \*.itmsp -exec /usr/bin/SetFile -a B {} \;

आपके लिए करना चाहिए।


1
SetFile -a B बंडल बिट सेट करता है। वास्तव में, इसे अक्षम किया जाना चाहिए SetFile -a b:। लेकिन इसका असर नहीं होगा क्योंकि Has bundleबिट सेट नहीं है: GetFileInfo -ab foo.itmspरिटर्न 0
jaume
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.