Как расширение приложения может обращаться к файлам в папке "Документы / папка" приложения?
В расширении приложения есть способ получить изображения, сгенерированные из содержащего приложения, которое хранится в папке /var/mobile/Containers/Data/Application//Documents//?
1 ответ
Чтобы сделать файлы доступными для расширения приложения, вы должны использовать 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!)
}