share extension@pixiv
DESCRIPTION
Share Extension@pixivTRANSCRIPT
kitasuke@trippiece
Share Extension を触ってみた @pixiv
自己紹介
Ref. http://cnet4.cbsistatic.com/hub/i/r/2014/09/09/1d101da2-7abd-40aa-b0c9-94e4f9b27b95/thumbnail/770x433/c2705e97ac76cc74f2c19abc83929de9/apple-event-apple-watch-5446.jpg
Ref. http://cdn.macrumors.com/article-new/2014/09/applewatch2.jpg
TodayShareActionPhoto EditingStorage ProviderCustom Keyboard
App Extensions
← 今日はこれ
SNS への投稿コンテンツの共有
Share Extension とは?
使用例
e.g. Twitter e.g. Pocket
1. Share Extension 用のターゲット追加2. App Groups の設定3. NSExtensionAttributes の設定4. Containing app 側での認証・バリデーション・アップロード処理の実装5. Host app 側での更新処理実装
実装の流れ
ターゲット
App Groups
e.g. Capabilities
NSExtensionAttributes
e.g. Info.plist
主要なメソッド
e.g. SLComposeServiceViewController
ローカル → NSUserDefaults
サーバー → NSURLSession でアップロード
コンテンツ共有
1. NSExtensionContext の inputItems からNSExtensionItem を取得
2. NSExtensionItem の attachments から各NSItemProvider を取得
3. loadItemForTypeIdentifier: options: completionHandler: で各コンテンツを取得
コンテンツ取得
Pocket の辞書版を作りたいSafari で英語の記事を読んでいて、分からない単語があれば保存して後で調べる→ Safari で選択中のテキストをShare Extension で保存する
本題
1. Safari 上での情報を取得したい(そもそも可能?)2. テキストだけ共有したい( NSExtensionActivationSupportsImageWit
hMaxCount をゼロにしても駄目だった)
やりたいこと
← 勝手に表示されるこの画像が不要
Extension タスク開始時に実行される run 関数Extension タスク終了時に実行される finalize 関数Info.plist の NSExtensionAttributes 以下のNSExtensionJavaScriptPreprocessingFile にファイル名を指定する* JavaScript ファイルを使用すると、 kUTTypePropertyList タイプのNSItemProvider がセットされる
JavaScript ファイル
1. JavaScript ファイルをNSExtensionJavaScriptPreprocessingFile に設定
2. Safari が選択中の文字列とサイト URL を取得する処理を JavaScript で実装3. 選択された文字列をテキストビューに表示4. Post ボタンを押すと、選択された文字列と URLを NSUserDefaults に保存5. Host app で NSUserDefaults からコンテンツ取得
実装内容
デモ
情報量が少ないが思ったより簡単ログ見ながら手探りで進めるApple Watch 用アプリを開発出来ると思って、わくわくしながら開発するのが大事
まとめ
We’re hiring iOS & Android Engineers!!