2017-06-12 17 views
6

मैं एक तस्वीर शेयर विस्तार, जहां छवि संसाधित किया जाता है और हमारे मुख्य कार्यक्षमता शुरू हो रहा है का उपयोग करता है या किसी iOS एप्लिकेशन पर काम कर रहा हूँ ..आईओएस शेयर एक्सटेंशन दुर्घटनाओं जब आईओएस 11 स्क्रीनशॉट

से साझा करने पर सिम्युलेटर में फोटो का ऐप यह बहुत अच्छा काम करता है। मैंने फोटो के ऐप से डिवाइस पर चलाने का फैसला किया और यह भी बहुत अच्छा काम करता है, लेकिन जब मैं स्क्रीनशॉट करता हूं और आईओएस 11 के नए "क्विक स्क्रीनशॉट" से साझा करने का प्रयास करता हूं तो एक्सटेंशन क्रैश हो जाता है, कोई विचार?

एक्सटेंशन एक छवि लेता है, इसे सर्वर पर भेजता है, प्रतिक्रिया प्राप्त करता है और उस प्रतिक्रिया को प्रदर्शित करता है (सभी विस्तार में)। यह मुझे मैसेंजर के रूप में परेशान करता है और स्नैपचैट शेयर एक्सटेंशन अभी भी एक त्वरित स्क्रीनशॉट से एक्सेस करते समय काम करता है !!

एक्सकोड 9 मुझे शेयर एक्सटेंशन से कोई भी लॉग नहीं दे रहा है। यह ध्यान देने योग्य भी है कि मैं एक डेवलपर खाते का उपयोग कर रहा हूं जिसे हर बार डिवाइस पर ऐप इंस्टॉल करने पर मुझे "भरोसा" करने की आवश्यकता होती है।

कोड:

// App Group keys 

let suiteName = "group.suite.id" 

override func viewDidLoad() { 
    print("Styling views..") 
    styleViews() 
    print("Styled views") 
    print("Adding notifications..") 
    addNotifications() 
    print("Added notifications") 
    print("Fetching image..") 
    fetchSharedImage() 
} 

func styleViews(){ 
    // Set up main view 
    mainView.layer.cornerRadius = 8 
    mainShadowView.addShadow() 

    // Set up views and buttons 
    // Code hidden, applies shadows etc. 

    // Code hidden, moves constraints of a view 
} 

func addNotifications(){ 
    // Helps views tell their parent (this view controller) to navigate to another form 
    NotificationCenter.default.addObserver(forName: NotificationDisplayFetchedLink, object: nil, queue: nil){ notification in 
     // Handles user info in lambda block 
     guard let userInfo = notification.userInfo, 
      let link = userInfo["link"] as? String 
      else { 
       print("No userInfo found in notification") 
       return 
      } 
     self.displayResult(with: link) 
    } 
} 

func fetchSharedImage(){ 
    // Make sure we have a valid extension item 
    if let content = extensionContext!.inputItems[0] as? NSExtensionItem { 
     let contentType = kUTTypeImage as String 

     // Verify the provider is valid 
     if let contents = content.attachments as? [NSItemProvider] { 
      // look for images 
      for attachment in contents { 
       if attachment.hasItemConformingToTypeIdentifier(contentType) { 
        attachment.loadItem(forTypeIdentifier: contentType, options: nil) { data, error in 
         let url = data as! URL 
         if let imageData = try? Data(contentsOf: url) { 
          self.selectedImage = UIImage(data: imageData) 

          DispatchQueue.main.async { 
           self.selectedImageView.layer.cornerRadius = 8 
           self.selectedImageView.image = self.selectedImage 
          } 
          self.makeWebRequest() 

         } 
        } 
       } 
      } 
     } 
    } 
} 

func makeWebRequest(){ 
    let url = URL(string: "url.json") 
    let task = URLSession.shared.dataTask(with: url!) { data, response, error in 
     guard error == nil else { 
      return 
     } 
     guard let data = data else { 
      // Data is empty 
      return 
     } 

     let json = try! JSONSerialization.jsonObject(with: data, options: []) as! NSDictionary 
     guard let dict = json as? [String:Any] else { return } 
     let item = dict["item"] 
     guard let itemData = item as? [[String:Any]] else { return } 
     let link = itemData[0]["url"] 
     NotificationCenter.default.post(name: NotificationDisplayFetchedLink, object: nil, userInfo: [link: link!]) 
    } 
    task.resume() 
} 

संपादित करें:

तो समाधान (के रूप में ओवेन झाओ ने कहा है) कि आईओएस 11 स्क्रीनशॉट संपादक रिटर्न एक UIImage, जबकि तरह तस्वीरें क्षुधा यूआरएल वापसी होगी है।

इस सुंदरता को संभालने का मेरा समाधान UIImage को सहेज रहा था या यूआईएम अस्थायी निर्देशिका (3 दिनों के बाद हटाया गया) में यूआईएममेज में डाला गया यूआरएल, और उसके बाद उस निर्देशिका में छवि के यूआरएल को शेयर एक्सटेंशन में वापस कर रहा था।

+1

कृपया अपना कोड साझा करें जो आपने कोशिश की है – Krunal

+0

एक्सटेंशन को शक्ति देने वाले कोड को दिखाने के लिए अपडेट किया गया .. – bluey31

+1

क्या आप त्रुटि रेखा साझा कर सकते हैं .. यदि यह कंसोल में कोई त्रुटि संदेश प्रिंट नहीं कर रहा है, तो डीबग मोड का उपयोग करें और एक त्रुटि रेखा प्रदान करें (यह makeWebRequest() विधि में हो सकता है) – Krunal

उत्तर

5

let url = data as! URL if let imageData = try? Data(contentsOf: url) {

मुद्दा है क्योंकि यहां डेटा एक यूआरएल नहीं है। यह एक "public.image" है, डेटा के बजाय UIImage में कनवर्ट करने का प्रयास करें।

+0

हां, यह समाधान था। मैं कुछ और जानकारी का विवरण देने के लिए एक फॉलो अप पोस्ट करूंगा .. – bluey31

संबंधित मुद्दे