Sélectionner une image dans Photos pour la récupérer dans mon app

Bonjour,

Je souhaite pouvoir ouvrir mon application iOS en sélectionnant une image et en cliquant sur la petite icône "partage" :

J'arrive à le faire à partir d'une image dans un mail, après avoir déclaré que mon app était capable de récupérer des documents de type "public.image":

Mais ça ne fonctionne pas à partir de l'app Photos.

J'ai regardé sur internet, et ai trouvé qu'on pouvait utiliser une "share extension". Est-il possible de faire plus simple ?

Merci d'avance,
Bonne fin de weekend,
Nicolas

Réponses

  • Ouch... Oui effectivement tu dois créer une extension pour faire transiter des informations d'app à d'app. Ce qui m'étonne en revanche c'est que ça fonctionne dans mail sans en créer. Peut être que Safari et Mail by pass ce mécanisme en se basant uniquement sur les capacités des apps à ouvrir tel ou tel type de fichier.

  • Salut,

    Tu peux montrer un bout de code pour récupérer les images d'un mail stp, je suis intéressé, merci.

  • RistrettoRistretto Membre
    avril 2018 modifié #4

    Bonsoir,

    Un appel à la fonction qui va bien dans le AppDelegate:

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    
      let myData = try? Data(contentsOf: url)
    
      if myData != nil, let myImage = UIImage(data: myData!) {
    
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
    
        if let vc = storyboard.instantiateViewController(withIdentifier: "CreateNewBottle") as? AddBouteilleTableViewController {
    
          vc.delegate = LocalDatabase.sharedInstance
    
          DispatchQueue.main.async {
    
            let rootViewController = self.window?.rootViewController as! UINavigationController
    
            rootViewController.pushViewController(vc, animated: true)
    
            vc.importImage(image: myImage)
          }  
        }
      }
    
       return true
     }
    

    (et je suis preneur d'une explication pour que mon code apparaisse mieux que ça !!! :# )

    A ta disposition si besoin !
    Cordialement,
    Nicolas

  • Joanna CarterJoanna Carter Membre, Modérateur

    @Nicholas

    À part que tu n'as pas mis les derniers backticks sur sa propre ligne, il faut utiliser plus d'espace entre les lignes, afin que le code soit plus lisible.

  • Joanna CarterJoanna Carter Membre, Modérateur

    Et, n'utilises pas les ! !!!!!!!!

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
      {
        guard let myData = try? Data(contentsOf: url),
              let myImage = UIImage(data: myData) else
        {
          return false
        }
    
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
    
        guard let vc = storyboard.instantiateViewController(withIdentifier: "CreateNewBottle") as? AddBouteilleTableViewController,
              let rootViewController = self.window?.rootViewController as? UINavigationController else
        {
          return false
        }
    
        vc.delegate = LocalDatabase.sharedInstance
    
        DispatchQueue.main.async
        {
          rootViewController.pushViewController(vc, animated: true)
    
          vc.importImage(image: myImage)
        }
    
        return true
      }
    
  • Je ne le ferai plus jamais !!!!!!!

    Thanks o:)

  • Merci beaucoup ;-)

Connectez-vous ou Inscrivez-vous pour répondre.