Skip to content

Instantly share code, notes, and snippets.

@Callonski
Created October 17, 2017 13:16
Show Gist options
  • Save Callonski/d3d18de1ab480f111aac790fa7b74b78 to your computer and use it in GitHub Desktop.
Save Callonski/d3d18de1ab480f111aac790fa7b74b78 to your computer and use it in GitHub Desktop.
// Userdefaults group
let defaults = UserDefaults(suiteName: "group.sharing")!
if(defaults.object(forKey: "sharedUrl") != nil)
{
urlLabel.text = defaults.string(forKey: "sharedUrl")
}
// Share
@IBAction func letsShare(_ sender: AnyObject) {
let shareText = "Website to find stuff"
let shareWebsite = URL(string: "http://www.google.com")
let shareImage = UIImage(named:"frog.jpg")
//var imageArray : [UIImage] = [shareImage!]
let shareObject : [AnyObject] = [shareText as AnyObject, shareWebsite! as AnyObject, shareImage! as AnyObject]
let activityVC = UIActivityViewController(activityItems: shareObject, applicationActivities: nil)
activityVC.excludedActivityTypes = [UIActivityType.airDrop]
self.present(activityVC, animated: true, completion: nil)
}
// Share extension
import UIKit
import Social
import MobileCoreServices
//class ShareViewController: SLComposeServiceViewController {
class ShareViewController: UIViewController {
@IBOutlet weak var shareTextLabel: UILabel!
@IBOutlet weak var shareUrlLabel: UILabel!
@IBOutlet weak var shareImageview: UIImageView!
var shareText : String?
var shareUrl : String?
var shareImage : UIImage?
override func viewDidLoad() {
let content = extensionContext!.inputItems[0] as! NSExtensionItem
let contentTypeImage = kUTTypeImage as String
let contentTypeText = kUTTypeText as String
let contentTypeUrl = kUTTypeURL as String
for attachment in content.attachments as! [NSItemProvider] {
if attachment.hasItemConformingToTypeIdentifier(contentTypeUrl) {
attachment.loadItem(forTypeIdentifier: contentTypeUrl, options: nil) { data, error in
if error == nil {
var someData = data as! NSURL
print(someData.absoluteString)
DispatchQueue.main.async(execute: {
self.shareUrlLabel.text = someData.absoluteString
})
self.shareUrl = someData.absoluteString
} else {
// ERROR
}
}
}
if attachment.hasItemConformingToTypeIdentifier(contentTypeText) {
attachment.loadItem(forTypeIdentifier: contentTypeText, options: nil) { data, error in
if error == nil {
var someText = data as! String
print(someText)
DispatchQueue.main.async(execute: {
self.shareTextLabel.text = someText
})
self.shareText = someText
} else {
// ERROR
}
}
}
if attachment.hasItemConformingToTypeIdentifier(contentTypeImage) {
attachment.loadItem(forTypeIdentifier: contentTypeImage, options: nil) { data, error in
if error == nil {
let someUrl = data as? URL
let someData = data as? Data
if(someUrl != nil)
{
print(someUrl!.absoluteString)
let sharedImage = UIImage(data: try! Data(contentsOf: someUrl!))
self.shareImage = sharedImage
DispatchQueue.main.async(execute: {
self.shareImageview.image = sharedImage
})
}
if(someData != nil)
{
let sharedImage = UIImage(data: someData!)
DispatchQueue.main.async(execute: {
self.shareImageview.image = sharedImage
})
}
} else {
// ERROR
}
}
}
}
}
func didSelectPost() {
print("didSelectPost")
// This is called after the user selects Post. Do the upload of contentText and/or NSExtensionContext attachments.
let content = extensionContext!.inputItems[0] as! NSExtensionItem
let contentTypeImage = kUTTypeImage as String
let contentTypeText = kUTTypeText as String
let contentTypeUrl = kUTTypeURL as String
for attachment in content.attachments as! [NSItemProvider] {
print(attachment.registeredTypeIdentifiers)
if attachment.hasItemConformingToTypeIdentifier(contentTypeText) {
attachment.loadItem(forTypeIdentifier: contentTypeText, options: nil) { data, error in
if error == nil {
var someText = data as! String
print(someText)
let defaults = UserDefaults(suiteName: "group.pia6")!
defaults.set(someText, forKey: "sharedText")
defaults.synchronize()
} else {
// ERROR
}
}
}
if attachment.hasItemConformingToTypeIdentifier(contentTypeImage) {
attachment.loadItem(forTypeIdentifier: contentTypeImage, options: nil) { data, error in
if error == nil {
var someData = data as! NSData
print(someData.length)
} else {
// ERROR
}
}
}
if attachment.hasItemConformingToTypeIdentifier(contentTypeUrl) {
attachment.loadItem(forTypeIdentifier: contentTypeUrl, options: nil) { data, error in
if error == nil {
var someData = data as! NSURL
print(someData.absoluteString)
let defaults = UserDefaults(suiteName: "group.pia6")!
defaults.set(someData.absoluteString, forKey: "sharedUrl")
defaults.synchronize()
} else {
// ERROR
}
}
}
}
// Inform the host that we're done, so it un-blocks its UI. Note: Alternatively you could call super's -didSelectPost, which will similarly complete the extension context.
self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
}
func configurationItems() -> [Any]! {
// To add configuration options via table cells at the bottom of the sheet, return an array of SLComposeSheetConfigurationItem here.
return []
}
@IBAction func cancelShare(_ sender: AnyObject) {
let userInfo = [NSLocalizedDescriptionKey : "User cancelled"]
let error = NSError(domain: "Extension", code: -1, userInfo: userInfo)
extensionContext!.cancelRequest(withError: error)
}
@IBAction func postShare(_ sender: AnyObject) {
if(shareText != nil)
{
let defaults = UserDefaults(suiteName: "group.pia6")!
defaults.set(shareText, forKey: "sharedText")
defaults.synchronize()
}
if(shareUrl != nil)
{
let defaults = UserDefaults(suiteName: "group.pia6")!
defaults.set(shareUrl, forKey: "sharedUrl")
defaults.synchronize()
}
extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment