XamarinでNativeライブラリを使用する (iOS編)

XamarinでNativeのライブラリを使用するには、
使用したいライブラリをBindingする必要があります。

今回はReproのライブラリをBindingした方法をまとめます。

サンプルはこちら

github.com

Reproについてはこちら

repro.io

Nativeライブラリの準備

ライブラリをダウンロードする

こちらから最新版をダウンロードしてください。
現時点では1.2.10.1というのが最新版です。

github.com

ライブラリの拡張子を変更する

ダウンロードしたファイルを解答すると下記のようなフォルダ構成になっています。
Repro.framework内の Repro を変更して Repro.a にしておきます。

f:id:mattsuDev:20150925183341p:plain

ヘッダーファイルを保管する

Bindingにはヘッダーファイルも必要になります。
上の画像内の、Repor.hファイルを保管しておきます。 *1

ライブラリをC#で呼び出すための定義ファイルを生成する

ライブラリをC#で使用するには、ライブラリ内の関数をC#で呼び出せるようにする必要があります。
これは、Objective Sharpieを使用しすることで簡単にできるようになっています。
Objective Sharpieの使い方や、定義ファイルの生成はこちらにまとめてあります。 参考にしてファイルを生成してください。

mattsudev.hatenablog.com

NativeライブラリをBindingする

Xamarin Studio で Bindingプロジェクトを作成する

NativeライブラリをBinding するための Bindingプロジェクトを作成します。
作成されたプロジェクトは下記のようなものになります。

f:id:mattsuDev:20150925183944p:plain

プロジェクトにNativeライブラリを追加する

ダウンロードしておいたライブラリ(.aファイル)をプロジェクト直下に追加します。 追加すると自動でlinkwith.csファイルが作成されます。

f:id:mattsuDev:20150925184117p:plain

linkwith.csファイルの編集

Reproのドキュメントをフレームワークの追加が必要と書かれています。
クイックスタート: iOS (Objective-C, Swift) — Repro ドキュメント

必要なフレームワークについてはlinkwith.csファイルに追加します。

[assembly: LinkWith ("Repro.a",
                     LinkTarget.ArmV7 | LinkTarget.ArmV7s | LinkTarget.Simulator | LinkTarget.Simulator64 | LinkTarget.Arm64,
                     SmartLink = true,
                     ForceLoad = true)]
[assembly: LinkWith ("Repro.a",
                     LinkTarget.ArmV7 | LinkTarget.ArmV7s | LinkTarget.Simulator | LinkTarget.Simulator64 | LinkTarget.Arm64,
                     SmartLink = true,
                     ForceLoad = true,
                     Frameworks = "AVFoundation CoreMedia SystemConfiguration",
                     LinkerFlags = "-lz",
                     IsCxx = true)]

C#での呼び出し定義ファイルをプロジェクトに追加する

Objective Sharpieで生成しておいたライブラリ呼び出し用の定義ファイルをプロジェクトに追加します。
ビルドアクションは()内のものに設定してください。

  • ApiDefinitions.cs (ObjcBindingApiDefinition)
  • StructsAndEnums.cd (ObjcBindingCoreSource)

f:id:mattsuDev:20150925195911p:plain

完了

以上で完了になります。 あとは実際に使用したいプロジェクトに追加して使用してみてください。

参考

qiita.com

Binding Objective-C - Xamarin

*1:今回はRepro.hファイルしかありませんが、ヘッダーファイルが複数ある場合は全て保管しておきましょう