Meine iOS App (Swift 3) benötigt wichtige Bilder von anderen Apps mit einer Action Extension. Ich verwende den Code der Standard-Action-Extension-Vorlage, der sich gut für Apps wie iOS Mail und Fotos eignet, bei denen das freigegebene Bild eine URL zu einer lokalen Datei ist. Aber für bestimmte Apps, bei denen das Bild geteilt wird, sind die tatsächlichen Bilddaten selbst, mein Aktions-Erweiterungscode erhält das Bild nicht.Importieren eines Bildes mit Action Extension - URL zu einem lokalen Image funktioniert aber nicht mit aktuellen Bilddaten
for item: Any in self.extensionContext!.inputItems {
let inputItem = item as! NSExtensionItem
for provider: Any in inputItem.attachments! {
let itemProvider = provider as! NSItemProvider
if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeImage as String) { //we'll take any image type: gif, png, jpg, etc
// This is an image. We'll load it, then place it in our image view.
weak var weakImageView = self.imageView
itemProvider.loadItem(forTypeIdentifier: kUTTypeImage as String, options: nil, completionHandler: { (imageURL,
error) in
OperationQueue.main.addOperation {
if let strongImageView = weakImageView {
if let imageURL = imageURL as? NSURL {
strongImageView.image = UIImage(data: NSData(contentsOf: imageURL as URL)! as Data)
let imageData = NSData(contentsOf: imageURL as URL)! as Data
self.gifImageView.image = UIImage.gif(data: imageData)
let width = strongImageView.image?.size.width
let height = strongImageView.image?.size.height
.... my custom logic
}
}
Als Referenz erreichte ich für eine der Anwendungen in den Entwickler, wo die Dinge nicht funktioniert und er teilte diesen Code auf, wie er das Bild auf die Aktion Erweiterung teilt.
//Here is the relevant code. At this point the scaledImage variable holds a UIImage.
var activityItems = Array<Any?>()
if let pngData = UIImagePNGRepresentation(scaledImage) {
activityItems.append(pngData)
} else {
activityItems.append(scaledImage)
}
//Then a little later it presents the share sheet:
let activityVC = UIActivityViewController(activityItems: activityItems,applicationActivities: [])
self.present(activityVC, animated: true, completion: nil)