GRANDE AVVERTENZA: assicurati che UN CENTRO PER CENTO sia sicuro che la tua estensione non sia già legata a un tipo MIME.
Abbiamo usato l'estensione '.icz' per i nostri file personalizzati per, praticamente, in assoluto, e Safari non ti avrebbe mai lasciato aprire dicendo "Safari non può aprire questo file". non importa cosa abbiamo fatto o provato con le cose UT sopra.
Alla fine mi sono reso conto che ci sono alcune funzioni UT * C che puoi usare per esplorare varie cose, e mentre .icz dà la risposta giusta (la nostra app):
Nell'app è stato caricato in alto, basta fare questo ...
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
(CFStringRef)@"icz",
NULL);
CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);
e interrompi dopo quella linea e vedi cosa sono UTI e ur - nel nostro caso, era il nostro identificatore come volevamo) e l'URL bundle (ur) puntava alla cartella della nostra app.
Ma il tipo MIME che Dropbox ci restituisce per il nostro link, che puoi controllare facendo ad es
$ 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
Il tipo di contenuto è ciò che vogliamo. Dropbox afferma che si tratta di una voce di testo / calendario. Grande. Ma nel mio caso, ho già provato a mettere il testo / calendario nei tipi mime della mia app, e ancora non funziona. Invece, quando provo a ottenere l'URI e l'URL del bundle per il mimetype text / calendar,
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType,
(CFStringRef)@"text/calendar",
NULL);
CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);
Vedo "com.apple.ical.ics" come UTI e "... / MobileCoreTypes.bundle /" come URL del bundle. Non la nostra app, ma Apple. Quindi provo a inserire com.apple.ical.ics in LSItemContentTypes insieme al mio, e in UTConformsTo nell'esportazione, ma non ci riesco.
Quindi in pratica, se Apple pensa che a un certo punto vorranno gestire una qualche forma di tipo di file (che potrebbe essere creato 10 anni dopo che l'app è attiva, intendiamoci), dovrai cambiare l'estensione perché semplicemente non ti lasceranno gestire il tipo di file.
-application:didFinishLaunchingWithOptions:
nell'app delegato viene chiamato solo se l'app non era in background quando è aperta per gestire un file.