Kamcord が swift に対応したらしいので導入してみた

動画投稿機能ライブラリ Kamcord を試してみたでもご紹介した Kamcord ですが

  • Android の Native UI
  • iOS の Metal, Swift, ニコニコへのシェアが可能に

に対応したよ!
ってメールが来ていたので早速 swift を試してみました。
公式サイトを見たら CocoaPods に対応しているって書いてあったので
「これなら10分も有れば、Kamcordを導入して動画の撮影から投稿まで実装できるじゃん」
と思ったのもつかの間、、、
ものすごく苦戦しました。

Kamcord 導入(Metal + swift編)

プロジェクトの作成

今回は新規projectの作成から行います。既にプロジェクトがある場合は読み飛ばしてください。
project

game のテンプレートを選択してプロジェクトを作成します。
swift での導入なので swift を選択するのを忘れないでください。
今回は Metal にも対応とのことなので Game Technology は Metal を選択しました。

Kamcord をプロジェクトに追加

前回はframework等の追加を手動で行いましたが、今回は CocoaPods を使用します。
※ CocoaPods のインストール方法等はこちらを参考にしてください。
先程作成したプロジェクトのディレクトリに移動して Podfile を作成します。
内容はこんな感じ。

Podfile を追加したらターミナルから下記コマンドを叩きます。

これだけで kamcord をプロジェクトに追加してビルドが通る状態になっています。
試しにビルドしてみるとこんな感じ。

Sample

Kamcord の実装を追加

まず Kamcord の API を swift で呼び出す為にプロジェクトの Build Settings で「Objective-C Bridging Header」と検索し、「Pods/Kamcord/Kamcord.embeddedframework/Kamcord.framework/Headers/Kamcord-Bridging-Header.h」を追加します。

これで通常なら問題ないのですが、今回は Metal を使いたい。
でも、Kamcord-Bridging-Header.h には KamcordRecorder+Metal.h が含まれていないので Objective-C Bridging Header を自作しました。内容はこんな感じ。

この時点で若干面倒ですね。pod install するたび消えないだけまだ良いとしましょう。

次に AppDelegate.swift と GameViceContoller.swift を編集します。

ここまでは通常の Kamcord と同じです。ここから Metal 用に KamcordRecorder を追加して行きます。

以上で Kamcord の導入が終わって、動画のアップロードが出来るはず!
Metal は実機でしか動作確認出来ないので、実機でテスト!
と思ったら。。。

アレ…?

アーキテクチャーを変えても

.

まさかと思って

バイナリが抜け落ちている…

DL版を取得して podspec 見てみたら header と resource は書いてあるけど framework がない。
依存している framework の記載もない。
そもそもこのディレクトリ構成だと CocoaPods が framework として機能してくれないはず。

こんなの CocoaPods 対応しているって言わない!!!

といわけでダウンロード版を無理矢理(正しく) CocoaPods に対応させました。

まずはシンボリックリンクを張ったりしてディレクトリ構成を変更します。
Info.plist はなかったので適当に追加しました。
変更後のディレクトリ構成はこんな感じ。

次に Kamcord.podspec を変更します。
やった事は

  • 各種依存 framework の追加
  • vendored_frameworks の追加

最後に、先程追加した Podfile だとリモートのものを参照しに行ってしまうのでローカルを参照するように変更しました。

これで pod install か pod update すればうまく動く。
ちゃんとフレームワークとして追加されてる。

アプリの方も下記のような感じにちゃんと動いてくれました。

IMG_3211

実際にアップロードした動画はこんな感じです。