iOS/iOS

[iOS] ShareExtension을 사용해보자 (2) - NSExtensionActivationRule

여성일 2025. 10. 8. 15:24
728x90
NSExtensionActivationRule

 NSExtensionActivationRule은 iOS 앱 확장, 특히 ShareExtension에서 확장을 언제 활성화할지 조건을 지정하는 규칙을 정의하는 설정이다. 쉽게 말하면, 사용자가 공유 버튼을 눌렀을 때 내 확장이 나타날 조건을 지정하는 것이다.

 

NSExtensionActivationRule는 Info.plist에서 설정할 수 있다. 확장이 활성화될 수 있는 데이터 타입이나 컨텍스트 조건을 지정할 수 있다. 예를 들어, 텍스트만 공유할 때 나타나도록 하거나, URL 공유 시에만 활성화되도록 할 수 있다. 

어우 복잡해

 

1. NSExtensionActivationSupportsAttachmentsWithMaxCount

→ 최대 몇 개의 첨부 파일까지 ShareExtension이 지원하는지 시스템과 다른 앱에 알려주는 룰

<key>NSExtensionActivationSupportsAttachmentsWithMaxCount</key>
<integer>5</integer>

최대 5개의 파일을 한 번에 공유할 수 있음을 의미한다.

 

2. NSExtensionActivationSupportsAttachmentsWithMinCount

→ 최소 몇 개의 첨부 파일을 필요로 하는지 설정하는 룰

<key>NSExtensionActivationSupportsAttachmentsWithMinCount</key>
<integer>1</integer>

적어도 1개 이상의 파일이 있어야 ShareExtension이 나타남.

 

3. NSExtensionActivationSupportsFileWithMaxCount

→ 일반 파일 공유 시 ShareExtension이 나타나는 최대 파일 개수를 설정하는 룰

<key>NSExtensionActivationSupportsFileWithMaxCount</key>
<integer>3</integer>

3개 이하의 파일만 공유 가능할 때 ShareExtension이 나타남.

 

4. NSExtensionActivationSupportsImageWithMaxCount

→ 이미지 파일 공유 시 ShareExtension이 나타나는 최대 이미지 파일 개수를 설정하는 룰

<key>NSExtensionActivationSupportsImageWithMaxCount</key>
<integer>2</integer>

2장 이하 이미지 공유 시 ShareExtension이 나타남.

 

5. NSExtensionActivationSupportsMovieWithMaxCount

→ 동영상 공유 시 ShareExtension이 나타나는 최대 동영상 개수를 설정하는 룰

<key>NSExtensionActivationSupportsMovieWithMaxCount</key>
<integer>1</integer>

1개 이하의 동영상 공유 시 ShareExtension이 나타남.

 

6. NSExtensionActivationSupportsText

→ 텍스트 공유를 지원하는 룰

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

텍스트가 포함된 항목이 있을 때 ShareExtension이 나타남

 

7. NSExtensionActivationSupportsWebURLWithMaxCount

→ 웹 링크 공유 시 ShareExtension이 나타나는 최대 웹 링크 개수를 설정하는 룰

<key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
<integer>1</integer>

1개 이하의 URL 공유 시 ShareExtension이 나타남.

 

8. NSExtensionActivationSupportsWebPageWithMaxCount

→ 웹 페이지 공유 시 ShareExtension이 나타나는 최대 웹 페이지 개수를 설정하는 룰

<key>NSExtensionActivationSupportsWebPageWithMaxCount</key>
<integer>1</integer>

1개 이하의 웹 페이지 공유 시 ShareExtension이 나타남.

 

직접 룰을 설정해보자!

❓엥.. 나는 링크만 공유하고 싶어.. 사파리에서만 나오면 좋겠는데 왜 갤러리나 다른 앱에서도 공유할 때 우리 앱이 나오지?

 

이럴때! 룰들을 활용해서 조건을 걸어주면 된다.

 기본적으로 Info.plist는 위와 같이 되어있을 것이다. NSExtensionActivationRule을 String 타입에서 Dictionary 타입으로 수정해주고, 룰을 딕셔너리에 넣어주면 된다. 소스 코드로 직접 수정하던지, 프로퍼티 리스트에서 추가해주던지 편하게 하자!

...
<key>NSExtensionAttributes</key>
<dict>
  <key>NSExtensionActivationRule</key>
  <string>TRUEPREDICATE</string>
</dict>
...

 나는 소스 코드로 수정했다. 기본적으로 이렇게 되어있을텐데, 아래처럼 바꾸면 된다. 

...
<dict>
  <key>NSExtensionActivationRule</key>
  <dict/>
    <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
    <integer>1</integer>
  </dict>
</dict>
...

 링크 공유할 때나 Safari에서만 공유를 원하기 때문에 NSExtensionActivationSupportsWebURLWithMaxCount 룰을 추가했다. Value로 count 값을 넣어줄 수 있는데, 공유를 원하는 링크의 최대 개수라고 생각하면 된다.

 

 URL만 공유 가능하도록 룰을 설정했으니, 이미지를 공유하려고 하면 우리 앱이 공유 항목에 표시되지 않는 것을 확인할 수 있다!

 


❓엥.. 나는 링크와 이미지를 둘 다 공유하고 싶고, 이미지는 최대 2개까지만 공유하고 싶어.

...
<key>NSExtensionActivationRule</key>
  <dict>
    <key>NSExtensionActivationSupportsImageWithMaxCount</key>
    <integer>2</integer>
    <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
    <integer>1</integer>
  </dict>
...

 이미지 공유를 위해 NSExtensionActivationSupportsImageWithMaxCount 룰을 사용했고, Value로 2를 넘겨 최대 두 개의 이미지만 공유할 수있게 했다. 또 URL 공유를 위해 NSExtensionActivationSupportsWebURLWithMaxCount 룰을 사용했고, Value로 1을 넘겨 최대 한 개의 이미지만 공유할 수 있게 했다.

 잘 된다~