可以从我的共享扩展程序中获取保存文档文件吗?
我尝试构建共享扩展,共享扩展可以获取文件路径。我写了一个函数将文件保存到我的Documents文件夹。
我需要从我的主应用程序中获取该文件。但我发现我从共享扩展路径保存文件是
/var/mobile/Containers/Data/PluginKitPlugin/9EBF8983-E1DE-49E2-8589-CEE7305EB644/Documents/xxx.png
我使用主应用程序获取文档路径
/var/mobile/Containers/Data/Application/CFD67CD9-5A8A-473E-8ECF-FC1C1CF18098/Documents
文件夹ID不相同。
可以从共享扩展程序保存文件中获取文件吗? 非常感谢你。
答案 0 :(得分:1)
然而,应用程序组允许共享的目录 。您可以使用NSFileManager访问App Group的目录,如下所示:
let groupPath = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.documents")
与组权利匹配的任何目标都可以从/向共享目录(或 容器 )进行读/写。因此,它们实际上并不是您的应用程序或扩展程序的一部分。看看iOS File System Basics可能也很有趣,以便了解App Group容器的架构。
正如其他人所建议的那样,我强烈建议您阅读App Extension Guide,它可以很好地解释容器的用法。
答案 1 :(得分:1)
我尝试在共享扩展中使用objective-c编写代码。
在我的分享扩展中:
+(NSURL*)getSharedContainerURLPath
{
NSFileManager *fm = [NSFileManager defaultManager];
NSURL *groupContainerURL = [fm containerURLForSecurityApplicationGroupIdentifier:APP_GROUP];
return groupContainerURL;
}
-(void) saveFileAction{
NSString *docPath = [ClassName getSharedContainerURLPath].absoluteString;
NSString * fileNamePathString = [docPath stringByAppendingPathComponent:[self generateMyFileName]];
NSError *err;
BOOL fileSaveSuccess = [myFileData writeToFile: fileNamePathString
options:NSDataWritingFileProtectionComplete
error:&err];
}
然后我的主App加载文件夹数据代码:
NSString * folderPath = [ClassName getSharedContainerURLPath].absoluteString;
NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:folderPath error:NULL];
NSLog(@"directoryContent:%@",directoryContent);
我发现目录内容总是为空。
我已将APP群组设置在扩展程序和主要目标中。
我的共享扩展程序保存下面的日志文件路径:
在下面分享扩展跟踪日志:
write file success:0 / error:Error Domain=NSCocoaErrorDomain Code=4 "The file “0421_224358.png” doesn’t exist." UserInfo= {NSFilePath=file:/private/var/mobile/Containers/Shared/AppGroup/ACDE7845- E0E3-45C3-893F-6F6978EC3534/0421_224358.png, NSUnderlyingError=0x174251ac0 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
我的主应用程序跟踪下面的文件夹路径:
文件:///私人的/ var /移动/容器/共享/ AppGroup / ACDE7845-E0E3-45C3-893F-6F6978EC3534 /
我不知道为什么会保存错误。
有人可以提供一些提示吗?非常感谢你。