class ShareViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
}
}
익스텐션과 앱은 별개라 서로 영역을 접근할 수 없지만 앱의 데이터를 사용해야하는 경우 사용할 수 있는게 UserDefault! userDefault는 key: vlaue 형태의 폰 DB.
동일한 App Groups에 묶여 있는 애들은 또 다른 외부의 앱, 익스텐션에서도 호출이 가능하기 때문에 같은 그룹으로 묶어줍니다.
let defaults = UserDefaults(suiteName: "group.Bundle Identifier")
defaults?.set(nameTextField.text, forKey: "Name") // (value, key)
defaults?.set(tags, forKey: "Tag")
defaults?.set(memoTextView.text, forKey: "Memo")
defaults?.set(currentURL, forKey: "URL")
defaults?.synchronize() // 동기화
let defaults = UserDefaults(suiteName: "group.com.sainkr.WishList")
guard let name = defaults?.string(forKey: "Name") else { return }
guard let memo = defaults?.string(forKey: "Memo") else { return }
guard let tags = defaults?.stringArray(forKey: "Tag") else { return }
guard let url = defaults?.string(forKey: "URL") else { return }
// 다 사용했으면 제거
defaults?.removeObject(forKey: "Name")
defaults?.removeObject(forKey: "Memo")
defaults?.removeObject(forKey: "Tag")
defaults?.removeObject(forKey: "URL")
private func getLink(){
if let item = extensionContext?.inputItems.first as? NSExtensionItem {
if let attachments = item.attachments {
for attachment: NSItemProvider in attachments {
if attachment.hasItemConformingToTypeIdentifier("public.url") {
attachment.loadItem(forTypeIdentifier: "public.url", options: nil, completionHandler: { (url, error) in
if let shareURL = url as? NSURL {
// Do stuff with your URL now.
print(shareURL.absoluteString)
}
})
}
}
}
}
}
self.extensionContext!.cancelRequest(withError: NSError(domain: "com.domain.name", code: 0, userInfo: nil))
self.extensionContext!.completeRequest(returningItems: nil, completionHandler: nil)
생성한 target에 General -> Deplyment Info를 디바이스의 iOS 버전보다 낮춰주자 !