これはなに?
自作のmacOSアプリケーションのシェアボタンからツイートできるようにするframeworkです。
複数枚の画像の投稿もできます。
なんで作ったの?
Mojaveからなくなったからに決まってるでしょ!!
ついでに複数枚画像の投稿機能も追加したからHigh Sierraとかでも有効よ!
使い方
GitHubにあるよー
Carthageが使えるよー
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 丸パクリ、アイデアを参考にするとかしたほうが早いかも。