はじめまして、Martha(マーサ)です。
Qiitaへの初投稿です。
概要
Instagramのドキュメントに記載されているDocument Interactionの手順に従い、SwiftでInstagramアプリに画像を渡す方法を紹介します。1
経緯・目的
- プライベートでInstagramを利用するので試しました。
- この手順に関する日本語のブログ記事は少ないようです。(内容がショボいからでしょうか)
- この機能だけを提供しているライブラリは少ないようです。(同上)
- ついでに ライブラリを作った のでそれを宣伝します。
手順
-
対象画像をPNGまたはJPEG形式で保存します。公式ではJPEG形式を推奨しているのでそのようにします。
ファイル名は任意で、拡張子とUTIは次の2つの組合せがあります。2つ目のほうが余計なメニューが少ないので個人的にオススメします。拡張子 UTI .ig com.instagram.photo .igo com.instagram.exclusivegram -
UIDocumentInteractionController
を使って画像を渡します。
実装例
まず Xcode プロジェクトの Info.plist に LSApplicationQueriesSchemes
キーを追加します。
Key | Type | Value |
---|---|---|
LSApplicationQueriesSchemes | Array |
一時的に保存するためtmpフォルダに書き込みます。Pathについてはほかにスマートな方法がないかなとこのあたりのドキュメントをながめているところです。
let imageData = UIImageJPEGRepresentation(YourImage, 1.0)
let temporaryDirectory = NSTemporaryDirectory() as NSString
let temporaryImagePath = temporaryDirectory.stringByAppendingPathComponent("YourImageFileName.igo")
let boolValue = imageData.writeToFile(temporaryImagePath, atomically: true)
UIDocumentInteractionController
を宣言しておきます。2
lazy private var documentInteractionController = UIDocumentInteractionController()
URL
プロパティとUTI
プロパティを設定し、presentOpenInMenuFromRect
メソッドでメニューを表示します。
documentInteractionController.URL = temporaryImagePath
documentInteractionController.UTI = "com.instagram.exclusivegram"
documentInteractionController.presentOpenInMenuFromRect(
YourView.bounds,
inView: YourView,
animated: true
)
あとはデバイス上での操作です。
「Instagramにコピー」アイコンをタップすると、Instagramアプリが起動してフィルタ画面へ遷移します。
そして勢いで作ったライブラリ
EggsBenedict(エッグベネディクト)
最低限の機能しか実装していませんが、ほぼ独学4なのでこの段階で道を踏み外さないようどこかで発表しようと考えていました。ただ1月23日の第65回 Cocoa勉強会関西や1月27日の関西モバイルアプリ研究会(関モバ)はまだ先なのでQiitaに投稿しました。
ツッコミを受けて強くなりたいです。
参考記事
次の記事を参考にさせていただきました。ありがとうございます。
Instagram関連
- Instagramへの画像投稿 (blurrednoteさん)
- SwiftでInstagramやLINEに画像を投稿する (Maple Blog)
Carthage関連
- Carthageについて知りたいn個のこと (ikesyoさん)
- iOSでのFramework導入のおさらい (ikesyoさん)
- Swiftでライブラリを公開する (morizotterさん)
- Swiftを使ってモダンなWeb APIクライアントを爆速で開発する (giginetさん)
- シンプルな依存関係管理システム Carthage (Realmニュース)
CocoaPods関連
- Swiftでライブラリを公開する (morizotterさん)
その他
アニメーションGIF作成のためこちらを利用させていただきました。ありがとうございます。
- 動画をアニメーションGIFに変換するウェブアプリケーション作った - hitode909の日記 (hitode909さん)
最後に
ちょっと自己紹介
-
関モバではパンケーキをネタにしていてTwitterアカウントよりそれを書くほうが誰だかわかりやすい気がします。事前に京都限定パンケーキを食べるので用意してくださった軽食を食べられないことが多いです。
-
Lluminoパーカーを着用して発表することがありますが開発者ではありません。たまにボタンをタップされてリアクションを要求されます。
-
try! Swift にスーパーSwift早割で申し込みました。4:47の電車に乗れば渋谷駅に8:59に着きますが初日をどうするか悩んでいます。
-
Instagram APIを利用して直接投稿する方法もありますがこの記事では触れません。 ↩
-
これを保持しないと例外が発生します。
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UIDocumentInteractionController has gone away prematurely!'
↩ -
1月9日に追記しました。 ↩
-
勉強会によく参加しているので独学とは言えないかもしれません。 ↩