Help us understand the problem. What is going on with this article?

[Swift] macOS Mojaveでシェアボタンからツイートする

More than 1 year has passed since last update.

これはなに?

自作のmacOSアプリケーションのシェアボタンからツイートできるようにするframeworkです。
複数枚の画像の投稿もできます。

なんで作ったの?

Mojaveからなくなったからに決まってるでしょ!!
ついでに複数枚画像の投稿機能も追加したからHigh Sierraとかでも有効よ!

使い方

GitHubにあるよー

GitHub TweetService

Carthageが使えるよー

Cartfile
github "masakih/TweetService"

組み込み方

Step 0

Twitter Appを登録。
callback URLはカスタムスキームを設定。

Step 1

Twitter Appの登録情報からTweetServiceを生成。

class ViewController: NSViewController {

    private var tweetService: TweetService?

    override func viewDidLoad() {

        self?.tweetService = TweetService(callbackScheme: "customscheme",  // カスタムスキームは何でもOK
                                         consumerKey: "########",
                                         consumerSecretKey: "###############")
        self?.tweetService.delegate = self
    }
}

Step 2

TweetServiceDelegate Protocolに準拠。

ツイートパネルのparentViewControllerとなれるNSViewControllerを返す。

extension ViewController: TweetServiceDelegate {

    func tweetSetviceAuthorizeSheetPearent(_ service: TweetService) -> NSViewController? {

        return self
    }
}

Step 3

NSSharingServicePickerDelegate Protocolに準拠。

sharingServicePicker(_:sharingServicesForItems:proposedSharingServices:)TweetService#sharingServicePicker(_:proposedSharingServices:)の戻り値を返す。

extension ViewController: NSSharingServicePickerDelegate {

    func sharingServicePicker(_ sharingServicePicker: NSSharingServicePicker, sharingServicesForItems items: [Any], proposedSharingServices proposedServices: [NSSharingService]) -> [NSSharingService] {

        return tweetService?.sharingServicePicker(items, proposedSharingServices: proposedServices) ?? proposedServices
    }
}

Step 4

アクションを作ってシェアボタンに接続。

extension ViewController {

    @IBAction private func tweet(_ button: NSButton) {

        let items: [Any?] = [
            textField?.stringValue,
            imageView?.image,
            imageView2?.image,
            imageView3?.image,
            imageView4?.image,
            ]

        let picker = NSSharingServicePicker(items: items.compactMap( { $0 } ))
        picker.delegate = self
        picker.show(relativeTo: .zero, of: button, preferredEdge: .minX)
    }
}

以上、たったこれだけであなたのアプリケーションからツイートが出来るようになります。

おわりに

うちの環境では動かすことができてるけど、ほかの環境で動くかどうかはわからない。

一応、バグ報告とか要望とかには対応すると思う。
PRとかよくわからないからfork or 丸パクリ、アイデアを参考にするとかしたほうが早いかも。

masakihori
非えんじにあ / 素人が雰囲気で書いてます
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away