我正在尝试将新的iOS11文件应用程序中的多个文件导入我的应用程序.但是,当我在文件应用程序中选择两个或多个文件(两者都是相同类型,pdf)时,然后点击分享按钮并选择我的应用程序(复制到myApp)
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
只被调用一次,只有我选择的第一个文件被成功导入.
所以我试过,如果这在其他一些应用程序如Dropbox或GoogleDrive中有效,但它会导致相同的行为.如果我选择iOS Mail应用程序或Gmail应用程序(在文件应用程序中点击共享后),我的所有选定文件都将被导入(作为附件).所以我认为必须有一种方法可以在我自己的应用程序中实现这一点.
我的应用程序现在Documents在iOS 11文件应用程序"On My iPhone"部分共享目录.
(感谢这篇文章:在iOS 11中使用Files App)
问题是如何通过URL Scheme打开此目录或至少打开文件应用程序根页面.UIDocumentPickerViewController或者UIDocumentBrowserViewController在这种情况下没有帮助.
我的 iOS 应用程序及其扩展通过应用程序组容器在本地成功共享文件。设置后,该应用程序还将其应用程序容器的文档文件夹中的文件公开给文件应用程序UISupportsDocumentBrowser in the app's info.plist.
我怎么能够expose files stored in the app-group's container to the Files app?
扩展(小部件)在应用程序组容器中生成文件,并以这种方式与应用程序共享它们。目前,应用程序将更改的文件从应用程序组容器复制到应用程序容器的文档文件夹,以将它们公开给文件应用程序。这会带来延迟,因为应用程序只能在运行时(在前台或后台)进行复制。
我想将文件从 iOS 11 Files 应用程序复制到我的本地应用程序沙箱。出于测试目的,假设文件在“文件”应用程序中本地可用(从 iCloud 下载到本地存储)。文件扩展名已在我的应用程序中注册,当在“文件”应用程序中按下文件时,我的应用程序会从“文件”应用程序接收文件 URL:
NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
NSURL *nsUrl; // comes from Files app. For instance "file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/test.rar"
NSURL *targetUrl; // file in my app's document directory
NSError *coordinatorError = nil;
[fileCoordinator coordinateReadingItemAtURL:nsUrl options:NSFileCoordinatorReadingWithoutChanges error:&coordinatorError byAccessor:^(NSURL *newURL)
{
NSFileManager *fileManager = [NSFileManager defaultManager];
//if ([fileManager fileExistsAtPath: [nsUrl path]])
{
NSLog(@"Copy from %@ to %@", newURL, targetUrl);
NSError *copyError = nil;
[fileManager copyItemAtURL:newURL toURL:targetUrl error:©Error];
if (!copyError)
{
// OK
}
else
{
NSLog(@"Files app …Run Code Online (Sandbox Code Playgroud) 使用 PDFKit,我在我的应用程序中创建了一个 pdf 文档。我可以成功地在预览中显示它,并在预览控制器中使用以下代码向用户展示共享操作:
@objc func shareAction(_ sender: UIBarButtonItem)
{
if let data = documentData
{
let vc = UIActivityViewController(activityItems: [data], applicationActivities: [])
present(vc, animated: true, completion: nil
}
}
Run Code Online (Sandbox Code Playgroud)
documentData包含创建的 pdf 文档。
当用户选择“保存到文件”时,文档将获得默认名称“PDF Document.pdf”,用户可以更改该名称。
如何提供不同的默认文件名?
在 iOS (iPad) 的文件应用程序中,我想查看 HTML 文件,我不想打开它并查看代码,我想以最终用户的身份查看它:当我单击html 文件,它显示预览(一个空页面),因为此步骤没有调用任何链接(js、css 等)我尝试点击并按住以查看是否可以使用 safari 打开它,但我无法选择 safari。\我也尝试在保管箱中打开它。它再次显示一个空页面。\ngoodreader 应用程序:它打开文件,但冻结并且应用程序停止响应。\n我也没有\xe2\x80\x99 找到从 safari 找到特定文件并打开它的方法。
\n但我知道iOS能够轻松显示HTML文件,因为当我在iPad上使用Pyto3应用程序(适用于iPad和iPhone的Python IDE)并使用plotly创建绘图然后执行时,fig.show()safari会自动打开并完全按照原样显示它在操作系统/Windows 的浏览器中。
我真的不敢相信没有办法告诉iOS用safari打开HTML文件。
\n有没有直接用safari的方法?如果没有,还有其他办法吗?
\n我正在使用 UIDocumentPickerViewController 将图像导出到 iOS 11 中的文件应用程序。选择器出现,我可以选择文件的目标位置。我收到文件已移动的回调,我可以在文件中看到它们,所以看起来工作正常。然而,用户界面是错误的——“添加”和“取消”按钮看起来被禁用,但实际上它们工作正常。如果我只使用共享表中的“保存到文件”,按钮看起来不会这样。
这是我的代码:
UIDocumentPickerViewController *docPicker =
[[UIDocumentPickerViewController alloc] initWithURLs:self.assetURLs inMode:UIDocumentPickerModeExportToService];
docPicker.delegate = self;
[vc presentViewController:docPicker animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
我尝试过的事情:
1)我尝试过移动和导出类型
2)我启用了 iCloud 功能(所有三项:键值、文档和 CloudKit)- 体验上没有区别 [事实上,代码有效即使没有这些设置,尽管文档另有说明])
这是用户界面的屏幕截图。正如您所看到的,用户界面表示它将将该项目添加到所选目录中(事实上,如果我点击“添加”,它就会添加该项目):

有人知道如何让按钮显示为蓝色并看起来已启用吗?我还没有在网上找到任何可以尝试的示例代码——如果有人有指针,我可以尝试看看它是否与我的配置或代码有关。
我正在尝试实现一个功能,用户可以使用 iOS 的“文件”应用程序定义自己的文档。我读到为了让您的应用程序访问文件应用程序,您需要在 info.plist 中定义这两个键
<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
Run Code Online (Sandbox Code Playgroud)
我定义了这两个键,但是当我运行我的应用程序并写入文档目录时,
FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
Run Code Online (Sandbox Code Playgroud)
我在“文件”应用程序中没有看到使用我的书面文件创建的任何文件夹。有趣的是,如果我在 iPhone 上运行相同的应用程序,我会立即在“文件”应用程序中看到我的应用程序文件夹。我不确定是什么让共享只发生在 iPhone 而不是 iPad 上。我的 iPhone 运行的是 iOs 13.3,而我的 iPad 运行的是 13.3.1,所以这里没有太大区别。有没有人知道什么可能是错的?
如何使用url方案或其他方式打开ios的本机文件应用程序?我尝试搜索网址方案,但没有运气。
这个问题似乎没有答案,在苹果论坛上有这个问题的线索开放,但是仍然没有答案。 https://forums.developer.apple.com/message/257860#257860 可以使用捆绑包标识符来完成吗?
files-app ×9
ios ×8
swift ×3
ios11 ×2
iphone ×2
objective-c ×2
containers ×1
filesystems ×1
html ×1
ios-pdfkit ×1
ios-urlsheme ×1
ios13 ×1
ipad ×1
url-scheme ×1