CẢNH BÁO LỚN: Thực hiện MỘT PERCENT HÀNG NGÀY chắc chắn rằng tiện ích mở rộng của bạn chưa được gắn với một số loại mime.
Về cơ bản, chúng tôi đã sử dụng tiện ích mở rộng '.icz' cho các tệp tùy chỉnh của mình và Safari sẽ không bao giờ cho phép bạn mở chúng nói rằng "Safari không thể mở tệp này." không có vấn đề gì chúng tôi đã làm hoặc đã thử với các công cụ UT ở trên.
Cuối cùng, tôi nhận ra rằng có một số hàm UT * C bạn có thể sử dụng để khám phá nhiều thứ khác nhau và trong khi .icz đưa ra câu trả lời đúng (ứng dụng của chúng tôi):
Trong ứng dụng đã tải ở đầu, chỉ cần làm điều này ...
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
(CFStringRef)@"icz",
NULL);
CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);
và đặt dấu ngắt sau dòng đó và xem UTI và ur là gì - trong trường hợp của chúng tôi, đó là định danh của chúng tôi như chúng tôi muốn) và url url (ur) đang chỉ vào thư mục ứng dụng của chúng tôi.
Nhưng loại MIME mà Dropbox cung cấp cho chúng tôi liên kết của chúng tôi, bạn có thể kiểm tra bằng cách thực hiện, ví dụ:
$ curl -D headers THEURLGOESHERE > /dev/null
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 27393 100 27393 0 0 24983 0 0:00:01 0:00:01 --:--:-- 28926
$ cat headers
HTTP/1.1 200 OK
accept-ranges: bytes
cache-control: max-age=0
content-disposition: attachment; filename="123.icz"
Content-Type: text/calendar
Date: Fri, 24 May 2013 17:41:28 GMT
etag: 872926d
pragma: public
Server: nginx
x-dropbox-request-id: 13bd327248d90fde
X-RequestId: bf9adc56934eff0bfb68a01d526eba1f
x-server-response-time: 379
Content-Length: 27393
Connection: keep-alive
Kiểu nội dung là những gì chúng ta muốn. Dropbox tuyên bố đây là một mục nhập văn bản / lịch. Tuyệt quá. Nhưng trong trường hợp của tôi, tôi ĐÃ TRỞ THÀNH văn bản / lịch vào các loại mime của ứng dụng và nó vẫn không hoạt động. Thay vào đó, khi tôi cố gắng lấy UTI và gói url cho mô hình văn bản / lịch,
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType,
(CFStringRef)@"text/calendar",
NULL);
CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);
Tôi thấy "com.apple.ical.ics" là UTI và "... / MobileCoreTypes.bundle /" là URL gói. Không phải ứng dụng của chúng tôi, mà là Apple. Vì vậy, tôi thử đưa com.apple.ical.ics vào LSItemContentTypes cùng với chính tôi và vào UTConformsTo trong xuất, nhưng không được.
Vì vậy, về cơ bản, nếu Apple nghĩ rằng tại một thời điểm nào đó, Apple muốn xử lý một số loại tệp (có thể được tạo 10 năm sau khi ứng dụng của bạn hoạt động, hãy nhớ bạn), bạn sẽ phải thay đổi tiện ích mở rộng vì họ sẽ không cho phép bạn xử lý loại tập tin.
-application:didFinishLaunchingWithOptions:
trong ứng dụng, đại biểu chỉ được gọi nếu ứng dụng của bạn không được chạy nền khi ứng dụng được mở để xử lý tệp.