理想としては、こんな感じににゅっとメニューが登場して動画を共有できるようにしたかった。

これを実現する方法は「UIDocumentInteractionController」「UIActivityViewController」っぽい。
試した結果……。
@UIDocumentInteractionController
⇒Instagramへの投稿例は多く見つけたけど、動画を共有する方法を見つけられませんでした。
self.interactionController.UTI でYouTubeが無いから?
【参考】http://qiita.com/blurrednote/items/1ef256e87d4bb9960b37
AUIActivityViewController
⇒UIKIT_EXTERN の中に YouTube がないため実現できず
【参考】http://www.toyship.org/archives/959
@Aのとおり、にゅっと出るメニューでの実現方法について見つけることができませんでした。
もし@Aについて、どなたか知っていれば教えてください orz
残る方法として、YouTube API(v3)を使うというものでした。
BYouTube API(Objective-C)
⇒メニューまわりは自前になってしまう
⇒Google Cloud Consoleに登録してYouTube APIを用意する必要がある
と手間があるのですが、これで上手くいきました。
今回はBの話です。
---------------------------------------------------
手順です。
@Google Cloud Consoleに登録して、YouTube API(v3) for Objective-C をダウンロード
AYouTube Direct Lite for iOS のサンプルをダウンロード
BAのサンプルを開き、YouTube APIへのリンクを登録
Cサンプルを実行して、動画をYouTubeにアップロード
それぞれを詳しく見ていきます。
@Google Cloud Consoleに登録して、YouTube API(v3) for Objective-C をダウンロード
Google Cloud Consoleにアクセスします
アプリを登録します↓

プロジェクト名は英数字指定でした。プロジェクトIDは自動で付けられます↓

左メニューの APIと認証 > API を選択して、必要なAPIを有効にします。
・Drive API ← 後述のYouTube Direct Liteで必要
・Google+ API ← YouTube API で必要
・YouTube Data API ← YouTube API で必要

【参考】
https://hutcraft.jp/?p=196
https://developers.google.com/console/help/new/#installedapplications
左メニューの APIと認証 > 認証情報 > 新しいクライアントIDを作成 選択して、OAuthの設定をします↓

「インストールされているアプリケーション」「iOS」「ディープリンク:無効」を選んでから
「クライアントIDを作成」を押します↓

画面が戻ると、
・クライアントID
・クライアントシークレット
が表示されるので、実装のときに使うのでメモしておきます。
Google Cloud Console での作業は以上です。
次はYouTube APIをダウンロードします。
YouTube Data API (v3):
https://developers.google.com/youtube/v3/?hl=ja
ここに説明が色々ありますが、
API のダウンロードについてはここで説明があります↓
https://code.google.com/p/google-api-objectivec-client/source/checkout
svnを使うので、Macのコンソールを起動して、
上記サイトに記載されているsvnコマンドを実行します。
svn checkout http://google-api-objectivec-client.googlecode.com/svn/trunk/ google-api-objectivec-client-read-only
コマンドを実行したディレクトリに「google-api-objectivec-client-read-only」という名前でAPIとサンプルが保存されます。
サンプルは
Examples > YouTubeSample > YouTubeSample.xcodeproj
にあるのですが、これは「MacOS」用でした。
あと、ビルドエラーが出て実行できませんでした orz
サンプルはこちらのURLからも確認できます↓
サンプル:
https://code.google.com/p/google-api-objectivec-client/source/browse/#svn/trunk/Examples/YouTubeSample
iOS用のXcodeプロジェクトはないものかと探していたら、「YouTube Direct Lite for iOS」というものを
発見しました。
AYouTube Direct Lite for iOS のサンプルをダウンロード
YouTube Direct Lite for iOS の使い方はこのサイトに記載されています↓
YouTube Direct Lite for iOS:
https://github.com/youtube/yt-direct-lite-iOS
サンプルをは、このサイトの画面右にある「Download Zip」ボタンを押してダウンロードします↓

解凍すると「yt-direct-lite-iOS-master」というディレクトリができます。
「yt-direct-lite-iOS-master」の中にあるXcodeプロジェクトが、iOSに対応したものでした。
ここで大切なのが、先ほどのYouTube APIと同じ階層に保存することです。
この2つのディレクトリは同じ階層に置く↓
・google-api-objectivec-client-read-only ← YouTube API
・yt-direct-lite-iOS-master ← YouTube Direct Lite for iOS
理由は、サンプルからYoutube APIへのリンクを設定しているからです↓

BAのサンプルを開き、YouTube APIへのリンクを登録
Aの最後で既にAPIへのリンクが設定されているので、特に作業は必要ないのですが、
次に自分のアプリでYouTube APIを使うときの参考になりました。
Cサンプルを実行して、動画をYouTubeにアップロード
BのXcodeプロジェクトで、設定して完成です。
Utils.h 内にて、@でメモした「クライアントID」「クライアントシークレット」を書き換えます。
static NSString *const kClientID ← クライアントID
static NSString *const kClientSecret ← クライアントシークレット
XcodeのIdentifierを Google Cloud Consoleで設定した「Bundle Identifier」に合わせます。
Bundle Identifierの変更の仕方は下記の通りです↓
Xcode5でBundle Identifierとプロジェクト名を同時に変更する:
http://blog.be-style.jpn.com/article/87567553.html
これで準備が整いました。
ビルドして実行すると、iPhoneで実行できました。
実行すると、こんなことができます。
・認証画面(二重認証にも対応)
・YouTubeのライブラリ一覧
・動画撮影
・撮影した動画のYouTubeへのアップロード
YouTubeのライブラリ一覧↓

YouTubeにアップロードが成功した画面↓

これでiPhoneからYouTubeへの動画アップロードができました。
次は、自分のアプリに流用することです。
なかなかiPhoneからYouTubeへのアップロード方法が見つからなかったので、解決してよかったです。
最後にハマったことを残しておきます。
■ハマったこと
@認証処理のところで、「invalid_client」が出て認証されない
【原因1】Google Cloud Console で、Google+ API 、YouTube Data API が有効になっていない
【原因2】Google Cloud Console で、以前使っていたプロジェクトを使い回したらダメでした。
新しくプロジェクトを作ったところうまくいきました。 ※これでハマりました orz
【参考】
http://stackoverflow.com/questions/15702336/how-do-i-use-the-youtube-api-gtlyoutube-to-search-for-a-video-on-iphone-sdk
http://stackoverflow.com/questions/11043840/getting-invalid-client-error-in-sample-gdata-objectivec-client