I'm testing the new UIDocumentPickerViewController
API in iOS 8. I want to just open a file in iCloud, to see how the interaction works.
This is the code I'm running from my UIViewController
:
- (IBAction)openDocument:(id)sender {
[self showDocumentPickerInMode:UIDocumentPickerModeOpen];
}
- (void)showDocumentPickerInMode:(UIDocumentPickerMode)mode {
UIDocumentPickerViewController *picker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[(NSString *)kUTTypeData] inMode:mode];
picker.delegate = self;
[self presentViewController:picker animated:YES completion:nil];
}
openDocument
is tied to a button in IB. When I tap it, it opens the iCloud browser, but every folder in it is grayed out (I created some test Keynote, Numbers and Pages files) so I cannot get to the files:
.
I checked some documentation and did the following (with no luck):
Added the UTI for public.data
in my Info.plist as follows:
<key>CFBundleDocumentTypes</key>
CFBundleTypeIconFile icon.png CFBundleTypeName MyData CFBundleTypeRole Viewer LSItemContentTypes public.data LSTypeIsPackage NSDocumentClass Document NSPersistentStoreTypeKey Binary
Added the NSUbiquitousContainerIsDocumentScopePublic
key with a value of YES
to my Info.plist.
Any idea what could be wrong or missing?
**Swift 3+ Solution**
Will open and provide access to all items on drive.
//open document picker controller
func openImportDocumentPicker() {
let documentPicker = UIDocumentPickerViewController(documentTypes: ["public.item"], in: .import)
documentPicker.delegate = self
documentPicker.modalPresentationStyle = .formSheet
self.present(documentPicker, animated: true, completion: { _ in })
}
/*
*
* Handle Incoming File
*
*/
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {
if controller.documentPickerMode == .import {
let alertMessage: String = "Successfully imported \(url.absoluteURL)"
}
}
/*
*
* Cancelled
*
*/
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
print("Cancelled")
}
iWork documents do not conform to kUTTypeData
, they conform to kUTTypePackage
.
However, in iOS 8 beta 3, I had to use the exact UTIs:
UIDocumentPickerViewController *picker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"com.apple.iwork.pages.pages", @"com.apple.iwork.numbers.numbers", @"com.apple.iwork.keynote.key"] inMode:mode];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With