GROS AVERTISSEMENT : Assurez-vous à cent pour cent que votre extension n'est pas déjà liée à un type de mime.
Nous avons toujours utilisé l'extension '.icz' pour nos fichiers personnalisés, et Safari ne nous laissait jamais les ouvrir en nous disant "Safari ne peut pas ouvrir ce fichier", peu importe ce que nous faisions ou essayions avec le truc UT ci-dessus.
J'ai fini par me rendre compte qu'il existe des fonctions UT* C que l'on peut utiliser pour explorer diverses choses, et que si .icz donne la bonne réponse (notre application) :
Dans l'application, il y a un chargement en haut, il suffit de faire ça...
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
(CFStringRef)@"icz",
NULL);
CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);
et mettre break après cette ligne et voir ce que sont UTI et ur -- dans notre cas, c'était notre identifiant comme nous le voulions), et le bundle url (ur) pointait vers le dossier de notre application.
Mais le type MIME que Dropbox nous renvoie pour notre lien, que vous pouvez vérifier en faisant par ex.
$ 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
Le Content-Type est ce que nous voulons. Dropbox affirme qu'il s'agit d'une entrée de texte/calendrier. Très bien. Mais dans mon cas, j'ai DÉJÀ ESSAYÉ d'insérer text/calendar dans les types de mime de mon application, et cela ne fonctionne toujours pas. Au lieu de cela, lorsque j'essaie d'obtenir l'UTI et le bundle url pour le mimetype text/calendar,
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType,
(CFStringRef)@"text/calendar",
NULL);
CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);
Je vois "com.apple.ical.ics" comme UTI et ".../MobileCoreTypes.bundle/" comme URL du bundle. Pas notre application, mais Apple. J'essaie donc de mettre com.apple.ical.ics dans le LSItemContentTypes à côté du mien, et dans UTConformsTo dans l'exportation, mais sans succès.
Donc, en gros, si Apple pense vouloir, à un moment donné, gérer un certain type de fichier (qui pourrait être créé 10 ans après la mise en ligne de votre application), vous devrez changer d'extension car ils ne vous laisseront tout simplement pas gérer le type de fichier.