2017-05-02 15 views
10

प्राप्त करने में सक्षम नहीं/प्रदर्शित नहीं कर रहा है मुझे अपने ऐप के आईओएस शेयर एक्सटेंशन में कोई समस्या है। मेरे पास शेयर एक्सटेंशन Info.plist में निम्न कोड है।आईओएस शेयर एक्सटेंशन यूआरएल

<key>NSExtension</key> 
<dict> 
    <key>NSExtensionAttributes</key> 
    <dict> 
     <key>NSExtensionActivationRule</key> 
     <dict> 
      <key>NSExtensionActivationSupportsWebPageWithMaxCount</key> 
      <integer>1</integer> 
      <key>NSExtensionActivationSupportsWebURLWithMaxCount</key> 
      <integer>1</integer> 
     </dict> 
    </dict> 
    <key>NSExtensionMainStoryboard</key> 
    <string>MainInterface</string> 
    <key>NSExtensionPointIdentifier</key> 
    <string>com.apple.share-services</string> 
</dict> 

बड़ी समस्या यह है कि एक्सटेंशन Google क्रोम, NYTimes, WSJ, और कई अन्य ऐप्स में दिखाई नहीं देता है। जिनमें से सभी को एक वेब पेज या वेब यूआरएल प्रदान करना चाहिए।

मैंने कहीं पढ़ा है कि मुझे निम्नलिखित को NSExtensionActivationRule dict में जोड़ना है।

<key>NSExtensionActivationSupportsText</key> 
<true/> 

यदि मैं जोड़ता हूं तो ऊपर सूचीबद्ध ऐप्स में शेयर एक्सटेंशन दिखाई देता है लेकिन केवल मेरे एक्सटेंशन में एक स्ट्रिंग देता है। उदाहरण के लिए यदि मैं Google क्रोम में apple.com पर जाता हूं और अपने शेयर एक्सटेंशन का उपयोग करता हूं तो यह मेरे एक्सटेंशन के लिए एक स्ट्रिंग के रूप में Apple प्रदान करता है जो मेरा ऐप वास्तव में समर्थन नहीं करता है। यह उन पंक्तियों के साथ कुछ प्रकार का यूआरएल या कुछ प्रदान करना चाहिए। और NYTimes ऐप में यह केवल लेख के शीर्षक को एक्सटेंशन में भेज देगा।

एक्सटेंशन सफारी में पूरी तरह से काम करता है। बस कुछ तृतीय पक्ष अनुप्रयोगों नहीं।

नीचे मेरे एक्सटेंशन की तेज़ फ़ाइल में यूआरएल प्राप्त करने के लिए मुख्य कोड है।

if let item = extensionContext?.inputItems.first as? NSExtensionItem { 
    if let itemProvider = item.attachments?.first as? NSItemProvider { 
     if itemProvider.hasItemConformingToTypeIdentifier("public.url") { 
      itemProvider.loadItem(forTypeIdentifier: "public.url", options: nil, completionHandler: { (url, error) -> Void in 
       if let shareURL = url as? NSURL { 
        print (shareURL.absoluteString!) 

वहां से मैं यूआरएल को अपने आवेदन के रूप में संभालता हूं।

जब मैं NSExtensionActivationSupportsText विकल्प मैं कोड से थोड़ा ऊपर public.url से public.text के लिए साथ में कुछ अन्य बातों के साथ यह परीक्षण करने के लिए बदल जोड़ा गया है और यह सिर्फ सुपर बेकार तार लौट रहा था।

मुझे पता है कि उन अनुप्रयोगों से यूआरएल प्राप्त करना संभव है क्योंकि NYTimes में भी Google क्रोम के लिए एक विकल्प है, जो बदनाम रूप से एक यूआरएल की आवश्यकता है, न केवल लेख की शीर्षक। उस यूआरएल को कैसे प्राप्त करें इस पर कोई विचार?

उत्तर

6

मैं आप इस का उपयोग करने का सुझाव देते हैं:

<key>NSExtension</key> 
<dict> 
    <key>NSExtensionAttributes</key> 
    <dict> 
     <key>NSExtensionActivationRule</key> 
     <string> 
    SUBQUERY (
     extensionItems, 
     $extensionItem, 
     SUBQUERY (
      $extensionItem.attachments, 
      $attachment, 
      ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url" 
    )[email protected] == 1 
)[email protected] == 1 
     </string> 
    </dict> 
    <key>NSExtensionMainStoryboard</key> 
    <string>MainInterface</string> 
    <key>NSExtensionPointIdentifier</key> 
    <string>com.apple.share-services</string> 
</dict> 

अपने कोड को ध्यान में रखते संलग्नक, तुम सिर्फ पहला inputItems और पहली लगाव की जाँच कर रहे प्राप्त करने के लिए, आप दोनों ही मामलों में foreach पाश है और जांच करने के लिए के सभी की जरूरत है उन्हें। `(शून्य): 'साझा एक्सटेंशन/Info.plist' की सामग्रियों को पार्स नहीं कर सकता: क्योंकि यह सही स्वरूप में नहीं है डेटा पढ़ा नहीं जा सका

+0

अपने कोड उदाहरण के साथ निम्न त्रुटि संदेश प्राप्त हो रही है। '। यदि आप अधिक जानकारी प्रदान कर सकते हैं और समझा सकते हैं कि वह कोड क्यों काम कर सकता है तो भी सहायक होगा। सुनिश्चित नहीं है कि यह अभी तक काम करता है क्योंकि यह त्रुटि संदेश देता है। –

+0

@CharlieFish यह विंडोज़ पर ज़ैमरिन से मेरी परियोजना से कॉपी किया गया है। यह हो सकता है कि विंडोज लाइन फीड वर्ण उस समस्या का कारण बनें, इसलिए रेखा से लाइन कॉपी करने का प्रयास करें, हालांकि इसे मैक पर अंतिम संस्करण को ठीक से एक्सकोड के साथ काम करना चाहिए। आपने कॉपी और पेस्ट के साथ शायद कुछ गलत किया है। –

+0

@CharlieFish स्पष्टीकरण पर विचार - क्रोम बस उस प्रारूप में डेटा सेट नहीं करता है। क्रोम के लिए आपको एक और डेटा प्रारूप (सादा पाठ मुझे विश्वास है) जोड़ने की जरूरत है। लेकिन यह भी सभी ऐप्स के लिए काम नहीं करेगा, उदा। ऐप्पल समाचार यह रूप में लंबे समय वहाँ वास्तव में यूआरएल के साथ सिर्फ एक लगाव है के रूप में काम करने के लिए एप्लिकेशन बताता है। –

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