LoginSignup
40
42

More than 5 years have passed since last update.

SwiftでInstagramアプリに画像を渡す

Last updated at Posted at 2016-01-06

はじめまして、Martha(マーサ)です。
Qiitaへの初投稿です。

概要

Instagramのドキュメントに記載されているDocument Interactionの手順に従い、SwiftでInstagramアプリに画像を渡す方法を紹介します。1

EggsBenedict.gif

経緯・目的

  • プライベートでInstagramを利用するので試しました。
  • この手順に関する日本語のブログ記事は少ないようです。(内容がショボいからでしょうか)
  • この機能だけを提供しているライブラリは少ないようです。(同上)
  • ついでに ライブラリを作った のでそれを宣伝します。

手順

  1. 対象画像をPNGまたはJPEG形式で保存します。公式ではJPEG形式を推奨しているのでそのようにします。
    ファイル名は任意で、拡張子とUTIは次の2つの組合せがあります。2つ目のほうが余計なメニューが少ないので個人的にオススメします。

    拡張子 UTI
    .ig com.instagram.photo
    .igo com.instagram.exclusivegram
  2. UIDocumentInteractionControllerを使って画像を渡します。

実装例

まず Xcode プロジェクトの Info.plist に LSApplicationQueriesSchemes キーを追加します。

Key Type Value
LSApplicationQueriesSchemes Array instagram

一時的に保存するため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関連

Carthage関連

CocoaPods関連

その他

アニメーションGIF作成のためこちらを利用させていただきました。ありがとうございます。

最後に

ちょっと自己紹介

  • 関モバではパンケーキをネタにしていてTwitterアカウントよりそれを書くほうが誰だかわかりやすい気がします。事前に京都限定パンケーキを食べるので用意してくださった軽食を食べられないことが多いです。

  • Lluminoパーカーを着用して発表することがありますが開発者ではありません。たまにボタンをタップされてリアクションを要求されます。

  • try! Swift にスーパーSwift早割で申し込みました。4:47の電車に乗れば渋谷駅に8:59に着きますが初日をどうするか悩んでいます。


  1. Instagram APIを利用して直接投稿する方法もありますがこの記事では触れません。 

  2. これを保持しないと例外が発生します。*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UIDocumentInteractionController has gone away prematurely!' 

  3. 1月9日に追記しました。 

  4. 勉強会によく参加しているので独学とは言えないかもしれません。 

40
42
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
40
42