LoginSignup
5
1

More than 5 years have passed since last update.

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

Posted at

これはなに?

自作の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 丸パクリ、アイデアを参考にするとかしたほうが早いかも。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1