app扩展如何访问包含app Documents /文件夹的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了app扩展如何访问包含app Documents /文件夹的文件相关的知识,希望对你有一定的参考价值。

在应用程序扩展中有一种方法可以从包含应用程序生成图像,该应用程序存储在/ var / mobile / Containers / Data / Application // Documents //文件夹中?

答案

为了使文件可用于应用程序扩展,您必须使用Group Path,因为App Extension无法访问应用程序的文档文件夹,因为您已按照这些步骤操作,

  1. 从项目设置 - >功能启用应用程序组。
  2. 添加类似group.yourappid的群组扩展。
  3. 然后使用以下代码。 NSString *docPath=[self groupPath]; NSArray *contents=[[NSFileManager defaultManager] contentsOfDirectoryAtPath:docPath error:nil]; NSMutableArray *images=[[NSMutableArray alloc] init]; for(NSString *file in contents){ if([[file pathExtension] isEqualToString:@"png"]){ [images addObject:[docPath stringByAppendingPathComponent:file]]; } } -(NSString *)groupPath{ NSString *appGroupDirectoryPath = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:group.yourappid].path; return appGroupDirectoryPath; }

您可以根据要生成的图像扩展名添加或更改路径扩展名。

注意 - 请记住,您需要在组文件夹而不是文档文件夹中生成图像,因此它可用于应用程序和扩展程序。

干杯。

Swift 3更新

let fileManager = FileManager.default
let url = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "YOUR_GROUP_ID")?.appendingPathComponent("logo.png")

// Write to Group Container            
if !fileManager.fileExists(atPath: url.path) {

    let image = UIImage(named: "name")
    let imageData = UIImagePNGRepresentation(image!)
    fileManager.createFile(atPath: url.path as String, contents: imageData, attributes: nil)
}

// Read from Group Container - (PushNotification attachment example)              
// Add the attachment from group directory to the notification content                    
if let attachment = try? UNNotificationAttachment(identifier: "", url: url!) {

    bestAttemptContent.attachments = [attachment]

    // Serve the notification content
    self.contentHandler!(self.bestAttemptContent!)
}

以上是关于app扩展如何访问包含app Documents /文件夹的文件的主要内容,如果未能解决你的问题,请参考以下文章

如何测试是不是从包含应用程序授予“允许完全访问”权限?

需要在app的Documents文件夹中为图像加载延迟表图像

NSBundle 到底有啥用 - 仅用于访问 .app 包的资源?

javah 错误: 无法访问android.app.Activity问题解决

iOS开发之沙盒机制(SandBox)

扩展程序是不是可以访问包含应用程序的容器目录?