UnityでiOSのSocial.frameworkを使ってつぶやくネイティブプラグインを作ってみた

この記事は最終更新日から10年以上経過しています。

今Unityで作りかけているゲームで、TwitterとFacebookで得点をつぶやける機能を追加したかったのでネイティブプラグインを作ってみました。

GitHubに「SocialPost」という名前で公開していて、ソースコード一式を上げています。

unity-SocialPostPlugin

Twitterにつぶやきたい時は

コピーしました
SocialPost.twitter("呟きたい文字列");

Facebookにつぶやきたい時は

コピーしました
SocialPost.facebook("呟きたい文字列");

と記載するだけで使用できます。

プラグインを作成する中で引っかかった点2つ。

.cs->.mm間での文字列の受け渡し

Unityからプラグイン経由でObjective-Cに文字列を渡す時、 .csからはchar型で渡して、.mm側で受け取った後、NSString型にキャストしなければいけないのを知らず、ちょっと手間取ってしまいました。

コピーしました
void twitter_(char *s) {
    NSString* str = [NSString stringWithCString:s   encoding:NSUTF8StringEncoding];
    //その他の処理
}

受け取った文字列はキャストする際に合わせてNSUTF8StringEncodingでエンコードしておきます。

Unityからビルドした.xcodeprojにフレームワークを追加する。

Unityからビルドしたxcodeprojには予めSocial.frameworkがリンクされていないので、通常なら手動でBuild Phases->Link Binary With Librariesからフレームワークを追加する必要があるのですが、 調べてみたらPostprocessBuildPlayerという機能を使ってビルド後に追加できるようでしたので、さっそく試してみました。

ビルド プレイヤー パイプライン / Build Player Pipeline

  1. Unityでxcodeprojをビルド
  2. ビルド プレイヤー パイプラインでpythonのスクリプトを実行
  3. PostprocessBuildPlayer_Socialとmod_pbxproj.pycが実行されてxcodeprojにSocial.frameworkが追加される

みたいな流れになっています。

mod_pbxproj.pycは下記のものを使用させていただいてます。

mod_pbxproj.pyc

今回は先に見つかったのでPythonで追加する方法を使用しましたが、調べてみたらRubyでもできるそうです。

Profile

石原 悠 / Yu Ishihara

デザインとプログラミングと編み物とヨーグルトが好きです。