应用程序扩展如何访问包含应用程序文档/文件夹中的文件
How can app extension access files in containing app Documents/ folder
在应用程序扩展中,有没有办法获取存储在 /var/mobile/Containers/Data/Application//Documents// 文件夹中的包含应用程序生成的图像?
为了使文件可用于应用程序扩展,您必须使用 Group Path
,因为应用程序扩展无法访问应用程序的文档文件夹,为此您已按照以下步骤操作,
- 从项目设置-> 功能.
启用应用组
- 添加群组扩展,例如
group.yourappid
。
然后使用下面的代码。
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!)
}
在应用程序扩展中,有没有办法获取存储在 /var/mobile/Containers/Data/Application//Documents// 文件夹中的包含应用程序生成的图像?
为了使文件可用于应用程序扩展,您必须使用 Group Path
,因为应用程序扩展无法访问应用程序的文档文件夹,为此您已按照以下步骤操作,
- 从项目设置-> 功能. 启用应用组
- 添加群组扩展,例如
group.yourappid
。 然后使用下面的代码。
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!)
}