기본적으로 내 앱에서 Share를 하게 되면 다른 앱들이 만들어 놓은 Share extension이 알아서 뜨게 된다. 그 중에 특정 앱은 띄우지 않도록 하고 싶다면, exclude 할 수 있다.
let activityViewController = UIActivityViewController(
activityItems: activityItems,
applicationActivities: applicationActivities
)
activityViewController.excludedActivityTypes = [
.print,
.addToReadingList,
.saveToCameraRoll,
.openInIBooks,
.postToTwitter,
.postToFacebook,
.init(rawValue: "com.someCompany.SomeApp.Share")
]
uiViewController.present(activityViewController, animated: true)
activityViewController.completionWithItemsHandler = { (activity, success, info, error) in
// handle when share is compltede
}
excludedActivityTypes 에 UIActivity.ActivityType을 넣어주면 제외됨
애플에서 제외할 수 있도록 enum case를 제공하는 앱은 제외가 잘 되었음(위의 twitter, facebook)
enum case에 없더라도, 다른 앱의 share extension bundleId를 넣어서 ActivityType을 생성할 수 있을 것 같은데, 일단 다른 앱의 share extension bundleId를 알기가 쉽지 않음. 메인앱 bundleId까지는 어찌어찌 알수 있어서 넣어봤지만 제외되지 않음
share extension bundleId 넣어서 시험해볼 필요가 있음
https://openradar.appspot.com/radar?id=6078718283874304
https://johnszumski.com/blog/excluding-third-party-apps-from-ios-8-share-sheet
https://stackoverflow.com/questions/31792506/how-to-exclude-notes-and-reminders-apps-from-the-uiactivityviewcontroller