GRAND AVERTISSEMENT: assurez-vous UN CENT POUR CENT que votre extension n'est pas déjà liée à un type MIME.
Nous avons utilisé l'extension «.icz» pour nos fichiers personnalisés pour, fondamentalement, jamais, et Safari ne vous laissait jamais les ouvrir en disant «Safari ne peut pas ouvrir ce fichier». peu importe ce que nous avons fait ou essayé avec les trucs UT ci-dessus.
Finalement, j'ai réalisé qu'il existe certaines fonctions UT * C que vous pouvez utiliser pour explorer diverses choses, et tandis que .icz donne la bonne réponse (notre application):
Dans l'application, il s'est chargé en haut, faites-le ...
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
(CFStringRef)@"icz",
NULL);
CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);
et mettre une pause après cette ligne et voir ce que UTI et ur sont - 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 donne en retour pour notre lien, que vous pouvez vérifier en faisant par exemple
$ 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 prétend qu'il s'agit d'une entrée de texte / calendrier. Génial. Mais dans mon cas, j'ai DÉJÀ ESSAYÉ DE METTRE du texte / calendrier dans les types MIME de mon application, et cela ne fonctionne toujours pas. Au lieu de cela, lorsque j'essaie d'obtenir l'URI et l'URL de l'ensemble pour le type de mime texte / calendrier,
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 de bundle. Pas notre application, mais Apple. J'essaie donc de mettre com.apple.ical.ics dans les LSItemContentTypes à côté des miens, et dans UTConformsTo dans l'exportation, mais pas la peine.
Donc, fondamentalement, si Apple pense vouloir à un moment donné gérer une certaine forme de type de fichier (qui pourrait être créé 10 ans après la mise en ligne de votre application, pensez-vous), vous devrez changer d'extension car ils ne vous laisseront tout simplement pas gérer le type de fichier.
-application:didFinishLaunchingWithOptions:
dans l'application, le délégué n'est appelé que si votre application n'était pas en arrière-plan lorsqu'elle est ouverte pour gérer un fichier.