XCODE / IOS - Поделиться через UIDocumentInteractionController
Мне не удалось поделиться чем-либо через "UIDocumentInteractionController", так как я просмотрел почти все учебные пособия и онлайн-помощь, я хочу найти решение:
Это код, который я использую:
let fileName = "banner_1"
let filePath = Bundle.main.path(forResource: fileName, ofType: "jpg")!
let urlData = URL.init(fileURLWithPath: filePath)
let nsData = NSData(contentsOf: urlData)
let newFileName = "banner_1.jpg"
let newFilePath = "\(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])/\(newFileName)"
nsData?.write(toFile: newFilePath, atomically: true)
let newUrlData = URL.init(fileURLWithPath: newFilePath)
documentController?.url = urlData // or newUrlData
documentController?.uti = "net.whatsapp.image"
documentController?.presentOpenInMenu(from: CGRect.zero, in: self.view, animated: true)
Каждый раз, когда я нажимаю одну плитку меню обмена для WhatsApp или Messenger, ничего не происходит, и у меня есть этот журнал ошибок:
2018-02-02 19: 56: 31.293849-0300 myapp [748: 116227] [core] SLComposeViewController initWithExtension: {id = net.whatsapp.WhatsApp.ShareExtension} requiredServiceType: (null)
2018-02-02 19: 56: 31.296021-0300 myapp [748: 116227] [core] SLComposeViewController addExtensionItem: - userInfo: {NSExtensionItemAttachmentsKey = ("{types = (\ n \" public.jpeg \ ", \ n \" public.file-url \ "\ n)}"); }
2018-02-02 19: 56: 31.883007-0300 myapp [748: 116227] [core] viewWillAppear
2018-02-02 19: 56: 31.883240-0300 myapp [748: 116227] [core] SLComposeViewController, включающий 1 явный NSExtensionItems
2018-02-02 19: 56: 31.883311-0300 myapp [748: 116227] [core] SLComposeViewController собирается создать экземпляр контроллера удаленного представления с массивом 1 NSExtensionItems
2018-02-02 19: 56: 31.886583-0300 myapp [748: 116227] [core] viewDidAppear
2018-02-02 19: 56: 31.989725-0300 myapp [748: 116362] [ops] Ошибка подключения к концентратору Ошибка Домен =NSCocoaErrorDomain Code=4097 "подключение к службе с именем net.whatsapp.WhatsApp.ShareExtension" UserInfo={NSDebugDescription= подключение к сервису с именем net.whatsapp.WhatsApp.ShareExtension}
2018-02-02 19: 56: 31.991895-0300 myapp [748: 116227] [core] SLComposeViewController завершил ошибку создания экземпляра удаленного контроллера представления (null) Ошибка Domain=NSCocoaErrorDomain Code=4097 "подключение к службе с именем net.whatsapp.WhatsApp.ShareExtension "UserInfo = {NSDebugDescription = подключение к службе с именем net.whatsapp.WhatsApp.ShareExtension} идентификатор запроса расширения (пусто)
2018-02-02 19: 56: 31.992325-0300 myapp [748: 116227] [core] HOST: не удалось загрузить контроллер удаленного просмотра с ошибкой: Ошибка Domain=NSCocoaErrorDomain Code=4097 "подключение к службе с именем net.whatsapp.WhatsApp. ShareExtension "UserInfo = {NSDebugDescription = подключение к службе с именем net.whatsapp.WhatsApp.ShareExtension}
2018-02-02 19: 56: 31.992433-0300 myapp [748: 116227] [core] Лист не отображается, вызывая преждевременное завершение
2018-02-02 19: 56: 31.992479-0300 myapp [748: 116227] [core] SLComposeViewController completeWithResult: 0
2018-02-02 19: 56: 31.995770-0300 myapp [748: 116227] [core] SLComposeViewController пропускает явное отклонение, поскольку isBeingDismissed уже равен 1 г
2018-02-02 19:56:32.001500-0300 myapp[748:116227] [core] SLComposeViewController dealloc
Я добавил "LSApplicationQueriesSchemes" с "whatsapp" в файл plist.
Я попытался с UIDocumentInteractionControllerDelegate, чтобы найти, есть ли какое-то странное событие, но не очень помогло.
Если у вас есть адеа?! Спасибо, Антуан.
1 ответ
Вот рабочий код, через который вы можете поделиться своим изображением с WhatsApp. Все, что вам нужно сделать, это просто добавить LSApplicationQueriesSchemes whatsapp в ваш plist-файл для включения общего доступа WhatsApp.
Swift 4
func shareOnWhatsUp() {
if UIApplication.shared.canOpenURL(URL(string: "whatsapp://app")!) {
var documentInteractionController: UIDocumentInteractionController = UIDocumentInteractionController.init()
let iconImage = UIImage(named: "IMG_1.jpg")
let pathURL = URL.init(fileURLWithPath: NSHomeDirectory() + "/Documents/whatsAppTmp.wai")
do {
try UIImageJPEGRepresentation(iconImage!, 1.0)?.write(to: pathURL)
} catch {
print(error.localizedDescription)
}
documentInteractionController!.url = pathURL
documentInteractionController!.uti = "net.whatsapp.image"
documentInteractionController!.delegate = self
documentInteractionController!.presentOpenInMenu(from: CGRect(x: 0, y: 0, width: 0, height: 0), in: self.view, animated: true)
}
else {
print("whatsup not installed")
}
}