Hiệp hội hoàn nguyên


12

Thỉnh thoảng tôi làm việc với các gói iTunes Music Store. Các gói này có một .itmspphần mở rộng. Giống như .app, .itmspvề cơ bản là một thư mục container. .itmspthư mục chứa tệp XML và phương tiện truyền thông.

Bản cập nhật Xcode và / hoặc Mac OS X mới nhất (Xcode 4.6.1 trên Mac OS 10.8.3) đã chiếm quyền điều khiển liên kết filetype cho các thư mục có .itmspphần mở rộng. Trước đây chúng được xử lý như các thư mục bình thường - không cần nhấp đúp để xem bên trong. Bây giờ, tôi phải bấm đúp vào chúng để tương tác với chúng. Khi tôi làm, một chương trình có tên Application Loader sẽ cố mở chúng. Để xem bên trong, tôi phải nhấp chuột phải và chọn "Hiển thị nội dung gói". Tôi đang xử lý hàng ngàn tệp này tại bất kỳ thời điểm nào, vì vậy sẽ không hoạt động.

Tôi đã thử thay đổi hoặc xóa liên kết filetype bằng Get Info và RCDefaultApp. Không hoạt động. Loại bỏ liên kết filetype chỉ đơn giản là biến các .itmspthư mục thành các tệp trống. Vì vậy, xóa ứng dụng Loader.app hoàn toàn. Trong cả hai trường hợp, tôi vẫn không thể duyệt nội dung mà không nhấp chuột phải.

Câu trả lời được chấp nhận trước đó đã có tác dụng trong một thời gian: lsregister -u /Applications/Contents/Applications/Application\ Loader.app/Nó đã ngừng hoạt động kể từ khi tôi cập nhật Xcode và / hoặc Mac OS X. Nếu bạn đã cài đặt Xcode, bạn có thể tự kiểm tra điều này bằng cách đặt tên cho một thư mục foo.itmsp.

Làm thế nào tôi có thể làm cho nó để .itmspcác tập tin được coi là thư mục một lần nữa?


Bạn đã thử kéo và thả tệp trên Biểu tượng ứng dụng Xcode và xem liệu nó có làm những gì bạn muốn không?
MrDaniel

Cám ơn vì sự gợi ý. Nó không liên quan đến vấn đề hiện tại, vì vậy tôi sẽ cố gắng chỉnh sửa câu hỏi của mình để làm rõ ý định của mình.
michaelmichael

1
Phiên bản OS X nào bạn đang chạy? Phiên bản nào của Xcode?
Old Pro

Tôi đã xóa Câu trả lời của mình, loại bỏ các loại khỏi CFBundleDocumentTypes và hủy trên Launch Service DataBase. Nó hoạt động được một lúc nhưng nó xuất hiện để khẳng định lại bản thân một lần nữa vào một lúc nào đó sau này. ??
markhunte

Câu trả lời:


11

Vấn đề: thư mục .itmsp được hiển thị dưới dạng tệp

Finder tìm các thư mục .itmsp dưới dạng các gói , nghĩa là, như thể chúng là một tệp duy nhất. Ví dụ: trong chế độ xem cột, mọi thứ có trong thư mục .itmsp là vô hình, chỉ biểu tượng tài liệu được hiển thị:

nhập mô tả hình ảnh ở đây

Finder tìm thấy một thư mục là một gói nếu bất kỳ điều kiện nào sau đây là đúng (từ Hướng dẫn lập trình gói ):

  1. Các thư mục có một phần mở rộng tên tập tin được biết: .app, .bundle, .framework, .plugin, .kext, và vân vân (theo quy định tại /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist. Đây là một plist nhị phân, mở nó với Xcode: open -a Xcode Info.plist).

  2. Thư mục có phần mở rộng mà một số yêu cầu ứng dụng khác đại diện cho loại gói (tìm com.apple.packagetrong đầu ra của mdls -name kMDItemContentTypeTree <foldername>để tìm hiểu.)

  3. Thư mục có tập bit gói của nó (nếu GetFileInfo -ab <foldername>trả về 1, nó được đặt.)

Trường hợp 2. áp dụng cho các thư mục .itmsp: Application Loader.apploại xuất com.apple.itunes-producer.itmspvà đặt nó phù hợp với 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>

Một giải pháp: khai báo lại loại com.apple.itunes-producer.itmsp

Một giải pháp sẽ là khai báo lại loại com.apple.itunes-producer.itmspvà phần mở rộng itmspdưới dạng thư mục và buộc Launch Services sử dụng khai báo loại đã sửa đổi.

Lưu ý quan trọng:

Mặc dù nó giải quyết được vấn đề của OP một cách đáng tin cậy, nhưng giải pháp được đề xuất, khi được áp dụng cho các gói khác, sẽ không hiển thị chúng dưới dạng các thư mục.

Tôi đã phát hiện ra rằng giải pháp được đề xuất dường như chỉ hoạt động với các loại tệp được khai báo bởi các ứng dụng nằm trong đường dẫn ứng dụng không chuẩn.

Đây là trường hợp với Application Loader.app, được đặt tại /Applications/Xcode.app/Contents/Applications/.

Nếu bạn quan tâm đến một giải pháp một phần, hãy kiểm tra phần cuối của câu trả lời này.

Để các thư mục .itmsp được hiển thị dưới dạng các thư mục của Finder, hãy làm theo các bước tiếp theo:

  1. Mở Automator trong thư mục Ứng dụng và chọn Ứng dụng :

    nhập mô tả hình ảnh ở đây

  2. Chọn Tiện ích trong danh sách Thư viện, chọn Chạy Shell Script và kéo nó vào khung bên phải:

    nhập mô tả hình ảnh ở đây

  3. Thay thế nội dung tập lệnh mặc định bằng exit 0:

    nhập mô tả hình ảnh ở đây

  4. Lưu ứng dụng dưới dạng itmspOpener:

    nhập mô tả hình ảnh ở đây

  5. Đóng máy tự động.

  6. Chọn itmspOpener.appvà hiển thị nội dung của nó:

    nhập mô tả hình ảnh ở đây

  7. Xác định vị trí Nội dung> Info.plist và mở nó bằng trình chỉnh sửa yêu thích của bạn:

    nhập mô tả hình ảnh ở đây

  8. Thay thế các phần này trong 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>
    

    Lưu ý: Tại sao kUTTypeDirectorythay vì public.directorytrong UTExportedTypeDeclarations? Từ tài liệu của Apple : Quan trọng: Khi sử dụng UTCoreTypes.hUTI do hệ thống xác định trong mã của bạn, bạn nên sử dụng các hằng số được xác định trong khung Dịch vụ khởi chạy khi khả dụng, thay vì các chuỗi UTI thực tế. Ví dụ: vượt qua kUTTypeApplication chứ không phải là com.apple.application. Các định danh loại thống nhất được khai báo theo hệ thống của hoàng tử liệt kê các hằng số này ngoài các chuỗi UTI.

  9. Liên kết tệp .itmsp với itmspOpenervà nhấn nút Change All...:

    nhập mô tả hình ảnh ở đây

  10. Đặt lại cơ sở dữ liệu Dịch vụ khởi chạy:

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

    (trên OS X 10.8 lsregisternằm ở /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/.)

  11. Tạo một thư mục .itmsp và liệt kê các thuộc tính của nó:

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

    Vì cơ sở dữ liệu Launch Services đã được đặt lại, giờ đây Finder sẽ hiển thị các thư mục .itmsp dưới dạng thư mục.

  12. Mở itmspOpener.appđể tải tập tin plist của nó và đăng ký com.apple.itunes-producer.itmsp:

    $ open ~/Desktop/itmspOpener.app
    
  13. Bắt đầu Application Loader.app:

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

    Thư mục foo3.itmspvẫn nên được hiển thị dưới dạng thư mục.

  14. Kiểm tra lại các thuộc tính thư mục:

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

    com.apple.package không được thêm vào thuộc tính siêu dữ liệu của thư mục, đó là lý do tại sao Finder vẫn hiển thị các thư mục .itmsp dưới dạng thư mục!

Giải pháp tự động: hiển thị các thư mục .itmsp dưới dạng thư mục sau khi đăng nhập

Để hiển thị các thư mục .itmsp dưới dạng các thư mục sau khi đăng nhập:

  1. Tạo itmspOpener.appvà sửa đổi nó Info.plistnhư mô tả ở trên.

  2. Tạo /usr/local/bin/itmspTypeLoadervới nội dung này (biến itmspOpenerchỉ đến vị trí itmspOpener.appcư trú, thay đổi khi cần thiết):

    #!/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
    

    Cả sleep 15trước và sau khi chạy lsregisterđều có tầm quan trọng cao nhất. Nếu bạn không thấy kết quả mong muốn, hãy thử các độ trễ khác nhau.

  3. Tạo /usr/local/bin/itmspTypeLoaderLaunchervới nội dung này:

    #!/bin/bash
    
    # $1 returns the short name of the user who is logging in
    su - $1 -c /usr/local/bin/itmspTypeLoader &
    
  4. Đặt cả hai tập lệnh thực thi:

    $ sudo chmod a+x /usr/local/bin/itmspTypeLoader /usr/local/bin/itmspTypeLoaderLauncher 
    
  5. Đặt /usr/local/bin/itmspTypeLoaderLauncherlàm móc đăng nhập :

    $ sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/itmspTypeLoaderLauncher
    
  6. Khởi động lại để thay đổi có hiệu lực. Sau khi đăng nhập, bạn sẽ thấy điều này:

    nhập mô tả hình ảnh ở đây

    lsregister -dumpsẽ tiết lộ rằng itmspOpener.appUTExportedTypeDeclarationsđược ưu tiên hơn so Application Loader.appvới:

    $ 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
            --------------------------------------------------------
    

    Bạn có thấy inactivecờ được đặt trong kiểu xuất của Application Loader.app không? Chúng tôi đã đánh bại Trình tải ứng dụng.

Kiểm tra axit: các thư mục .itmsp vẫn hiển thị như vậy sau khi cập nhật iTunes

Gần đây tôi đã cập nhật Xcode:

nhập mô tả hình ảnh ở đây

và có thể xác nhận rằng các thư mục .itmsp đã được hiển thị dưới dạng các thư mục trong quá trình cập nhật:

nhập mô tả hình ảnh ở đây

và sau đó:

nhập mô tả hình ảnh ở đây

Giải pháp một phần: Gói sẽ hiển thị nội dung khi nhấp đúp

Như đã nhận xét trước đây, quy trình chi tiết ở trên sẽ không hoạt động với các thư mục tùy ý được Finder hiển thị dưới dạng các gói.

Tuy nhiên, nếu bạn chỉ muốn nhấp đúp vào gói để mở gói, có một cách để thực hiện với một bashtập lệnh và Trình tự động:

  • Kịch bản tạo một thư mục tạm thời bị ẩn bên trong gói, hiển thị nó trong Finder (do đó tiết lộ gói dưới dạng thư mục) và sau đó xóa thư mục tạm thời.

    Ghi chú:

    Tập lệnh thay vào đó có thể tạo một tập tin tạm thời bị ẩn. Tuy nhiên, tôi thích tạo một thư mục vì rmdirchỉ xóa các thư mục trống , trong khi rmxóa bất kỳ tệp nào , vì vậy, nếu, vì một số lý do. kịch bản tàn phá, chỉ các thư mục trống sẽ bị xóa, điều này có thể không tệ như thể các tệp đã bị xóa.

  • Automator bó tập lệnh vào một ứng dụng sẽ được liên kết với các tệp gói.

Đây là các bước để tạo ra một ứng dụng như vậy. Tôi sẽ sử dụng các tệp .itmsp làm ví dụ về loại gói trong phần giải thích bên dưới:

  1. Mở Automator trong thư mục Ứng dụng và chọn Ứng dụng :

    nhập mô tả hình ảnh ở đây

  2. Chọn Tiện ích trong danh sách Thư viện, chọn Chạy Shell Script và kéo nó vào khung bên phải:

    nhập mô tả hình ảnh ở đây

  3. Set đèo đầu vào để như các đối số :

    nhập mô tả hình ảnh ở đây

  4. Thay thế nội dung tập lệnh mặc định bằng:

    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. Lưu ứng dụng dưới dạng itmspOpener:

    nhập mô tả hình ảnh ở đây

  6. Đóng máy tự động.

Bây giờ bạn có một ứng dụng có thể mở tệp .itmsp dưới dạng thư mục nếu được liên kết với nó.

Có một vấn đề thẩm mỹ: vì hiện tại, các tệp được liên kết sẽ có biểu tượng tài liệu trắng tiêu chuẩn:

nhập mô tả hình ảnh ở đây

Chúng ta cũng hãy sửa nó:

  1. Hãy chắc chắn rằng Automator đã đóng.

  2. Chọn itmspOpener và hiển thị nội dung của nó:

    nhập mô tả hình ảnh ở đây

  3. Xác định vị trí Nội dung> Info.plist và mở nó bằng trình chỉnh sửa yêu thích của bạn:

    nhập mô tả hình ảnh ở đây

  4. Thay thế giá trị cho khóa này trong CFBundleDocumentTypesmảng:

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

    và thêm khóa này:

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

    Bây giờ, phần này trông như thế này:

    nhập mô tả hình ảnh ở đây

  5. Chuyển sang Finder, chọn thư mục, nhấn I, chọn biểu tượng thư mục ở góc trên cùng bên trái và sao chép nó bằng C:

    nhập mô tả hình ảnh ở đây

  6. Mở Xem trước và chọn Tệp> Mới từ Clipboard. Lưu tệp dưới dạng folder.icns:

    nhập mô tả hình ảnh ở đây

  7. Sao chép folder.icnsvào itmspOpener/Contents/Resources:

    nhập mô tả hình ảnh ở đây

  8. Liên kết tệp .itmsp với itmspOpenervà nhấn nút Change All...:

    nhập mô tả hình ảnh ở đây

Biểu tượng của các tệp .itmsp sẽ thay đổi thành một thư mục hoặc ít nhất tôi nghĩ vậy: thật không may, đây không phải là trường hợp. Vì vậy, tôi đã chuyển ứng dụng itmspOpener sang một vị trí khác (tôi đã tạo một thư mục tạm thời trên Bàn làm việc của mình, di chuyển nó đến đó và quay lại Bàn làm việc của tôi). Điều đó làm mới thông tin biểu tượng trong Finder:

nhập mô tả hình ảnh ở đây

Bây giờ, nhấp đúp vào tệp .itmsp và xem nó mở dưới dạng thư mục:

nhập mô tả hình ảnh ở đây


Điều này rất ấn tượng ... NHƯNG có vẻ như có một vấn đề rắc rối: Nếu Finder nằm trong chế độ xem cột (loại chế độ xem ưa thích của tôi), mọi thứ có trong .itmspthư mục đều vô hình. Tôi không thể sắp xếp tại sao, nhưng nó có. Ngoài ra, nếu tôi có máy khoan của tôi, bạn sẽ không phải nhấp đúp vào tệp để xem bên trong, nhưng ồ.
michaelmichael

1
Bạn đúng rồi. Tôi không lường trước được bạn đã sử dụng chế độ xem cột, mặc dù tôi phải nói rằng nó có ý nghĩa hoàn hảo khi xử lý hàng ngàn thư mục .itmsp. Nhưng tôi đã tìm ra một cách để giải quyết vấn đề, đó là buộc Finder phải coi các thư mục .itmsp là các thư mục. Hãy xem bản chỉnh sửa của tôi (hoặc chuyển trực tiếp đến đoạn cuối có tên là Giải pháp, nhưng đừng quên sửa đổi thông tin của itmspOpener trước tiên như được mô tả trong đoạn Bí quyết.)
jaume

Không thể tin được! Cảm ơn câu trả lời. Đây là một cái nhìn rất thú vị về một số điều làm cho Finder và OS X đánh dấu.
michaelmichael

Cảm ơn, tôi rất vui vì bạn thấy nó hữu ích! (Tôi sẽ chỉnh sửa câu trả lời sau để cải thiện khả năng đọc và cung cấp cho nó nhiều cấu trúc hơn.)
jaume

Cuối cùng tôi đã tìm thấy một chút thời gian để chỉnh sửa câu trả lời. Tôi đã sắp xếp lại các đoạn văn và thêm bằng chứng cho thấy giải pháp được giải thích trong câu trả lời của tôi là miễn dịch với các bản cập nhật iTunes.
jaume

7

Một tùy chọn sẽ là hủy đăng ký Trình tải ứng dụng lsregister -u /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/, nhưng nó được đăng ký lại nếu được mở, nếu cơ sở dữ liệu Dịch vụ khởi chạy được xây dựng lại hoặc có thể nếu Xcode được cập nhật.

Bạn cũng có thể nhận xét các mục trong từ điển CFBundleDocumentTypes và UTExportedTypeDeclarations trong /Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Info.plistvà chạy lsregister -f /Applications/Xcode.app/Contents/Applications/Utilities/Application\ Loader.app/. Nó không làm mất hiệu lực chữ ký mã của Xcode, nhưng những thay đổi có thể bị ghi đè bởi các bản cập nhật.

Đường dẫn đầy đủ đến lsregister là /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregistertrong 10.5 và sau đó.


Bạn có chắc chắn rằng việc hủy đăng ký ứng dụng sau khi thay đổi Info.plistsẽ hủy đăng ký các loại tệp bạn đã xóa khỏi danh sách không? Tôi có thể tưởng tượng nó hoạt động và tôi có thể dễ dàng tưởng tượng nó thất bại. quá.
Old Pro

@OldPro Vâng, lsregister -u $app && lsregister $appdường như áp dụng các thay đổi cho Info.plist ít nhất là trong trường hợp này.
Lri

Đây là một câu trả lời tuyệt vời - hãy nhớ rằng lần sau khi bạn nâng cấp Xcode - bạn có thể kết thúc với Trình tải ứng dụng đăng ký mặc định CFBundleDocumentTypesđể bạn có thể xóa "công cụ" đó khi nó xuất hiện nếu bạn không cần và / hoặc lốp sửa đổi nó.
bmike

2

Dưới đây là một đoạn trích có liên quan từ của Apple documenation về các gói ( nhấn mạnh thêm )

Cách hệ thống xác định gói và gói

Finder tìm thấy một thư mục là một gói nếu bất kỳ điều kiện nào sau đây là đúng:

  • Thư mục có phần mở rộng tên tệp đã biết: .app, .bundle, .framework, .plugin, .kext, v.v.
  • Thư mục có phần mở rộng mà một số yêu cầu ứng dụng khác đại diện cho một loại gói; xem các gói tài liệu của Nhật Bản .
  • Thư mục có tập bit gói của nó.

Cách ưa thích để chỉ định một gói là cung cấp cho thư mục gói một phần mở rộng tên tệp đã biết. Đối với hầu hết các phần, Xcode sẽ giải quyết vấn đề này cho bạn bằng cách cung cấp các mẫu áp dụng phần mở rộng chính xác. Tất cả bạn phải làm là tạo một dự án Xcode thuộc loại thích hợp.

Hầu như chắc chắn Xcode thể hiện rằng nó tuyên bố .itmspđại diện cho một loại gói, như được mô tả trong Gói tài liệu . Vì vậy, có thể xóa tiện ích mở rộng đó khỏi Xcode Info.plistsẽ thực hiện thủ thuật, nhưng tôi nghi ngờ rằng một khi sự liên kết đó đã được Finder tìm thấy, việc xóa nó khỏi Xcode sẽ không hoàn tác. "Ứng dụng được đề xuất" bạn nhận được khi nhấp chuột phải vào "Mở bằng ..." là gì? Bạn cần kiểm tra tất cả Info.plists của họ.

Tôi khuyên bạn nên xem liệu bạn có thể thoát khỏi việc sử dụng lsregister -uđể hủy đăng ký bất kỳ ứng dụng nào đã khiếu nại hay không .itmsp. Nếu không, bạn có thể phải xóa .itmspkhỏi tất cả các bảng và sau đó hủy toàn bộ cơ sở dữ liệu liên kết công cụ tìm bằng cách sử dụng lsregister -kill -seed. Không bao giờ làm điều đó, không nói bao nhiêu thiệt hại sẽ làm cho phần còn lại của hệ thống của bạn. Có lẽ bạn muốn hủy đăng ký, sau đó chỉnh sửa các bảng, sau đó giết và lục lại cơ sở dữ liệu. Sẽ không làm tôi ngạc nhiên nếu người hủy đăng ký không xóa liên kết nếu bạn đã xóa khỏi danh sách này và reseed sẽ thêm lại nếu bạn chưa xóa liên kết. Thêm vào đó, bạn sẽ không mất tất cả các hiệp hội khác cho các ứng dụng vi phạm.

Tệ hơn nữa, Xcode có thể đã trải qua và thiết lập bit bó trên tất cả các thư mục. Tôi đoán sau đó bạn sẽ phải viết một tập lệnh bằng cách sử dụng GetFileInfoSetFilequét đĩa và hoàn tác chúng, đó là một điều khó khăn, nhưng có thể làm được. Các ngón tay vượt qua các bit bó vẫn không được đặt. Sử dụng GetFileInfođể kiểm tra bằng cách thử nghiệm một vài.


0

Tôi tin rằng bạn có thể khắc phục điều này bằng cách sử dụng

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

Kiểm tra nó trên một trước khi bạn thử nó trên tất cả những người khác, rõ ràng.

Nếu bạn cần nó để chạy trên tất cả chúng trong một thư mục nhất định:

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

nên làm điều đó cho bạn


1
SetFile -a B đặt bit bó. Trong thực tế, nó nên bị vô hiệu hóa : SetFile -a b. Nhưng điều này sẽ không có hiệu lực vì Has bundlebit không được đặt: GetFileInfo -ab foo.itmsptrả về 0.
jaume
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.