2016-10-13 12 views
1

I 이미지 및 PDF 파일과 상호 작용하는 내 응용 프로그램을 할 수 있습니다 내 공유 확장을 위해 다음과 같은 NSExtensionActivationRule이 : 나는 액세스하기 위해 다른 방법을 사용할 때, 그러나하위 쿼리 파일 유형을 제외

SUBQUERY (
    extensionItems, $extensionItem, 
    SUBQUERY (
     $extensionItem.attachments, $attachment, 
     ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.adobe.pdf" || 
     ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image" || 
     ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url" 
    )[email protected] == 1 
)[email protected] > 0 

내 내 애플 리케이션 문서 형식이 com.myApp.extension 인 파일에 대해 내 애플 리케이션을 표시하지 않아야합니다.
정제의 방법이 있습니까 :

ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url

특정 유형의 파일을 제외 시키십시오.

감사
레자

당신은 그것을
+0

가 해결 되었습니까? 공유 할 수 있을까요? 나는 그것도 필요로한다. 이미지와 비디오를 제외하고 싶습니다. –

+0

아니요, 해결책을 찾으면 알려주세요. – reza23

+0

내가 원하는 것을 허용했는지 확인해보십시오. https://gist.github.com/adrianotadao/43a03701fdc80a748759c8d3ce01c020 –

답변

2
<key>NSExtensionAttributes</key> 
<dict> 
    <key>NSExtensionActivationRule</key> 
    <string> 
    SUBQUERY (
     extensionItems, 
     $extensionItem, 
      SUBQUERY (
       $extensionItem.attachments, 
       $attachment, 
       (ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.adobe.pdf" OR 
       ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.file-url" OR 
       ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url" OR 
       ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.jpeg" OR 
       ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.png") 
       AND NOT (ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "your.unique.uti.here") 
      )[email protected] == [email protected] 
    )[email protected] == 1 
    </string> 
</dict> 
+0

답변에 코드 만 포함되어 있습니다. 왜 이것이 정답인지에 대해 조금 자세히 설명해주십시오. – Mittal

+0

activityVC.excludedActivityTypes = [UIActivityType.init (rawValue : "your.unique.uti.here")] –

+0

예 공유 확장에 plist로 추가하고 활동을 제외하십시오. –

0
<dict> 
      <key>NSExtensionAttributes</key> 
      <dict> 
       <key>NSExtensionActivationRule</key> 
       <string> 
        SUBQUERY (
        extensionItems, 
        $extensionItem, 
        SUBQUERY (
        $extensionItem.attachments, 
        $attachment, 
        (
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.file-url" OR 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url" OR 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.jpeg" OR 
        ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.png") 
        AND NOT (ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "YourIdentifier") 
        )[email protected] >= 1 
        )[email protected] == 1 
       </string> 
       <key>NSExtensionJavaScriptPreprocessingFile</key> 
       <string>DemoPreprocessor</string> 
       <key>NSExtensionActivationSupportsImageWithMaxCount</key> 
       <integer>3</integer> 
       <key>NSExtensionActivationSupportsText</key> 
       <true/> 
       <key>NSExtensionActivationSupportsWebPageWithMaxCount</key> 
       <integer>1</integer> 
       <key>NSExtensionActivationSupportsWebURLWithMaxCount</key> 
       <integer>1</integer> 
      </dict> 




    class ActionExtensionBlockerItem: NSObject, UIActivityItemSource { 
     func activityViewController(_ activityViewController: UIActivityViewController, dataTypeIdentifierForActivityType activityType: UIActivityType?) -> String { 
      return "com.tops.pushnotification"; 
     } 
     func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? { 
      // Returning an NSObject here is safest, because otherwise it is possible for the activity item to actually be shared! 
      return NSObject() 
     } 
     func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivityType?) -> String { 
      return "" 
     } 
     func activityViewController(_ activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: UIActivityType?, suggestedSize size: CGSize) -> UIImage? { 
      return nil 
     } 
     func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any { 
      return "" 
     } 
    } 



if let myWebsite = NSURL(string: url) { 
      let objectsToShare = [textToShare, ActionExtensionBlockerItem()] as [Any] 
      // let activityViewController = UIActivityViewController(activityItems: [/* Items to be shared, */ ActionExtensionBlockerItem()], applicationActivities: nil) 
      let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil) 
//   let item = NSItemProvider() 
      activityVC.excludedActivityTypes = [UIActivityType.airDrop,UIActivityType.print, UIActivityType.postToWeibo, UIActivityType.copyToPasteboard, UIActivityType.addToReadingList, UIActivityType.postToVimeo, UIActivityType.init(rawValue: "com.tops.pushnotification")]