WIELKIE OSTRZEŻENIE: Upewnij się, że JEDEN STOŻEK PROCENTOWY ma pewność, że twoje rozszerzenie nie jest już powiązane z jakimś typem MIME.
Użyliśmy rozszerzenia „.icz” dla naszych niestandardowych plików, w zasadzie na zawsze, a Safari po prostu nigdy nie pozwoli ci ich otworzyć, mówiąc: „Safari nie może otworzyć tego pliku”. bez względu na to, co zrobiliśmy lub wypróbowaliśmy z materiałami UT powyżej.
W końcu zdałem sobie sprawę, że istnieją pewne funkcje UT * C, których można używać do eksploracji różnych rzeczy, a podczas gdy .icz daje właściwą odpowiedź (nasza aplikacja):
W aplikacji ładowałem na górze, po prostu zrób to ...
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
(CFStringRef)@"icz",
NULL);
CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);
i położyć kres po tej linii i zobaczyć, jakie są UTI i ur - w naszym przypadku był to nasz identyfikator, jak chcieliśmy), a adres URL pakietu (ur) wskazywał na folder naszej aplikacji.
Ale typ MIME, który Dropbox zwraca nam dla naszego linku, który możesz sprawdzić, wykonując np
$ 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
Typ zawartości jest tym, czego chcemy. Dropbox twierdzi, że jest to wpis tekstowy / kalendarzowy. Świetny. Ale w moim przypadku JUŻ SPRÓBOWAŁEM WSTAWIANIE tekstu / kalendarza do typów MIME mojej aplikacji i nadal nie działa. Zamiast tego, gdy próbuję uzyskać identyfikator UTI i pakiet URL dla typu tekstowego / kalendarza,
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType,
(CFStringRef)@"text/calendar",
NULL);
CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);
Widzę „com.apple.ical.ics” jako UTI i „... / MobileCoreTypes.bundle /” jako adres URL pakietu. Nie nasza aplikacja, ale Apple. Próbuję więc umieścić com.apple.ical.ics w LSItemContentTypes obok moich własnych i w UTConformsTo w eksporcie, ale nie ma mowy.
Zasadniczo, jeśli Apple myśli, że w pewnym momencie chce obsłużyć jakiś typ pliku (który może zostać utworzony 10 lat po uruchomieniu aplikacji, pamiętaj), musisz zmienić rozszerzenie, ponieważ po prostu nie pozwoli ci to obsłużyć typ pliku.
-application:didFinishLaunchingWithOptions:
w aplikacji delegat jest wywoływany tylko wtedy, gdy aplikacja nie była uruchomiona w tle, gdy jest otwarta do obsługi pliku.