Penanganan tipe file baru dengan iPhone OS 3.2, dan berbeda dari skema URL khusus yang sudah ada. Anda dapat mendaftarkan aplikasi Anda untuk menangani jenis dokumen tertentu, dan aplikasi apa pun yang menggunakan pengontrol dokumen dapat menyerahkan pemrosesan dokumen ini ke aplikasi Anda sendiri.
Misalnya, Molekul aplikasi saya (yang menyediakan kode sumber) menangani jenis file .pdb dan .pdb.gz, jika diterima melalui email atau dalam aplikasi lain yang didukung.
Untuk mendaftar dukungan, Anda harus memiliki sesuatu seperti yang berikut ini di Info.plist Anda:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>Document-molecules-320.png</string>
<string>Document-molecules-64.png</string>
</array>
<key>CFBundleTypeName</key>
<string>Molecules Structure File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.sunsetlakesoftware.molecules.pdb</string>
<string>org.gnu.gnu-zip-archive</string>
</array>
</dict>
</array>
Dua gambar disediakan yang akan digunakan sebagai ikon untuk jenis yang didukung di Mail dan aplikasi lain yang mampu menunjukkan dokumen. The LSItemContentTypes
kunci memungkinkan Anda memberikan serangkaian Jenis Identifier Uniform (ISK) bahwa aplikasi Anda dapat membuka. Untuk daftar ISK yang ditentukan sistem, lihat Referensi Jenis Seragam Pengidentifikasi Apple . Rincian lebih lanjut tentang ISK dapat ditemukan di Apple Uniform Type Identifiers Overview . Panduan tersebut berada di pusat pengembang Mac, karena kemampuan ini telah porting di seberang Mac.
Salah satu ISK yang digunakan dalam contoh di atas adalah sistem-didefinisikan, tetapi yang lain adalah ISK khusus aplikasi. ISK khusus aplikasi perlu diekspor sehingga aplikasi lain pada sistem dapat dibuat sadar akan hal itu. Untuk melakukan ini, Anda akan menambahkan bagian ke Info.plist Anda seperti berikut:
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.plain-text</string>
<string>public.text</string>
</array>
<key>UTTypeDescription</key>
<string>Molecules Structure File</string>
<key>UTTypeIdentifier</key>
<string>com.sunsetlakesoftware.molecules.pdb</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>pdb</string>
<key>public.mime-type</key>
<string>chemical/x-pdb</string>
</dict>
</dict>
</array>
Contoh khusus ini mengekspor com.sunsetlakesoftware.molecules.pdb
UTI dengan ekstensi file .pdb, sesuai dengan tipe MIME chemical/x-pdb
.
Dengan ini, aplikasi Anda akan dapat menangani dokumen yang dilampirkan ke email atau dari aplikasi lain pada sistem. Di Mail, Anda dapat mengetuk dan menahan untuk memunculkan daftar aplikasi yang dapat membuka lampiran tertentu.
Ketika lampiran dibuka, aplikasi Anda akan dimulai dan Anda harus menangani pemrosesan file ini dalam -application:didFinishLaunchingWithOptions:
metode delegasi aplikasi Anda . Tampaknya file yang dimuat dengan cara ini dari Mail disalin ke direktori Dokumen aplikasi Anda di bawah subdirektori yang sesuai dengan kotak email tempat mereka masuk. Anda bisa mendapatkan URL untuk file ini dalam metode delegasi aplikasi menggunakan kode seperti berikut:
NSURL *url = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
Perhatikan bahwa ini adalah pendekatan yang sama yang kami gunakan untuk menangani skema URL khusus. Anda dapat memisahkan URL file dari yang lain dengan menggunakan kode seperti berikut:
if ([url isFileURL])
{
// Handle file being passed in
}
else
{
// Handle custom URL scheme
}
-application:didFinishLaunchingWithOptions:
dalam delegasi aplikasi hanya dipanggil jika aplikasi Anda tidak di-background ketika dibuka untuk menangani file.- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
iOS 4+Selain jawaban Brad yang sangat baik, saya telah menemukan bahwa (setidaknya di iOS 4.2.1) ketika membuka file khusus dari aplikasi Mail, aplikasi Anda tidak dipecat atau diberitahukan jika lampiran telah dibuka sebelumnya. Munculan "buka dengan ..." muncul, tetapi tidak melakukan apa pun.
Ini tampaknya diperbaiki dengan (kembali) memindahkan file dari direktori Inbox. Pendekatan yang aman tampaknya adalah untuk kedua (kembali) memindahkan file saat dibuka (in
-(BOOL)application:openURL:sourceApplication:annotation:
) serta melalui direktori Documents / Inbox, menghapus semua item, misalnya dalamapplicationDidBecomeActive:
. Tangkapan terakhir itu semua mungkin diperlukan untuk mendapatkan aplikasi dalam keadaan bersih lagi, seandainya impor sebelumnya menyebabkan kerusakan atau terganggu.sumber
-(BOOL)application:openURL:sourceApplication:annotation:
selalu dipanggil, bahkan untuk lampiran yang sudah dibuka. Setiap kali tambahan lampiran dibuka, nomor suffixed ke nama file dan bertambah menjadi unik - test.text, test-1.txt, test-2.txt, dll.PERINGATAN BESAR: Buat SATU SERATUS PERSEN yakin bahwa ekstensi Anda belum terikat ke beberapa jenis pantomim.
Kami menggunakan ekstensi '.icz' untuk file khusus kami untuk, pada dasarnya, dan Safari tidak akan pernah membiarkan Anda membukanya dengan mengatakan "Safari tidak dapat membuka file ini." tidak peduli apa yang kami lakukan atau coba dengan hal-hal UT di atas.
Akhirnya saya menyadari bahwa ada beberapa fungsi UT * C yang dapat Anda gunakan untuk menjelajahi berbagai hal, dan sementara .icz memberikan jawaban yang tepat (aplikasi kami):
Dalam aplikasi memuat di atas, lakukan saja ini ...
dan hancurkan garis itu dan lihat apa ISK dan Anda - dalam kasus kami, itu adalah pengidentifikasi kami seperti yang kami inginkan), dan url bundel (ur) bundel menunjuk ke folder aplikasi kami.
Tetapi tipe MIME yang diberikan Dropbox kepada kami untuk tautan kami, yang dapat Anda periksa dengan melakukan mis
Jenis-Konten adalah apa yang kita inginkan. Dropbox mengklaim ini adalah entri teks / kalender. Bagus. Tetapi dalam kasus saya, saya sudah MENCOBA MENEMPATKAN teks / kalender ke dalam jenis pantomim aplikasi saya, dan itu masih tidak berfungsi. Sebaliknya, ketika saya mencoba untuk mendapatkan UTI dan bundel url untuk mimetype teks / kalender,
Saya melihat "com.apple.ical.ics" sebagai UTI dan "... / MobileCoreTypes.bundle /" sebagai URL bundel. Bukan aplikasi kami, tapi Apple. Jadi saya mencoba memasukkan com.apple.ical.ics ke dalam LSItemContentTypes di samping milik saya, dan ke UTConformsTo dalam ekspor, tetapi jangan pergi.
Jadi pada dasarnya, jika Apple berpikir mereka ingin menangani suatu bentuk tipe file (yang dapat dibuat 10 tahun setelah aplikasi Anda aktif, ingatlah), Anda harus mengubah ekstensi karena mereka tidak akan membiarkan Anda menangani jenis file.
sumber
Untuk menangani semua jenis file untuk aplikasi saya sendiri, saya menggunakan konfigurasi ini untuk CFBundleDocumentTypes:
sumber