我设法使它工作(iOS 11+):
首先,您需要为您的应用程序提供一个有效的文件提供程序扩展。我已经有了。
然后将我的扩展的 File Provider 和 File Provider Item 类添加到我的主应用程序中。唯一无法从扩展中解决的事情是尝试访问文件提供程序的documentStorageURL
. 我通过在我的自定义类中实现一个 getter 来解决这个问题:
- (NSURL *)documentStorageURL
{
return NSFileProviderManager.defaultManager.documentStorageURL;
}
然后我可以初始化它并从我的主应用程序中使用它:
// I created a singleton for my custom FileProvider class
NSURL* url = [FileProvider.sharedFileProvider URLForItemWithPersistentIdentifier:item.itemIdentifier];
// Calling providePlaceholderAtURL is key
[FileProvider.sharedFileProvider providePlaceholderAtURL:url completionHandler:^(NSError * _Nullable error)
{
if (error)
{
// ...
}
// This will download the requested file from my server
[FileProvider.sharedFileProvider startProvidingItemAtURL:url completionHandler:^(NSError * _Nullable error)
{
[APP_DELEGATE hideHUD];
if (error)
{
// ...
}
// Now I can use the url to start a UIDocumentInteractionController
UIDocumentInteractionController * controller = [UIDocumentInteractionController interactionControllerWithURL:url];
// Call presentOpenInMenuFromRect ...
}];
}];
这使 Word(以及其他 Office 和应用程序)显示“在 Word 中打开”而不是“复制到 Word”,从而允许直接从我的应用程序进行就地编辑。
使用我的扩展程序的类和调用providePlaceholderAtURL
(这会创建隐藏的(.myfile.docx.icloud
文件)神奇地使 Word 相信该文件来自 Files 应用程序。