XamarinでNativeライブラリを使用する(Android編)
XamarinでNativeのライブラリを使用するには、 使用したいライブラリをBindingする必要があります。
今回はLogPushのライブラリをBindingした方法をまとめます。
サンプルはこちら
LogPushについてはこちら
Nativeライブラリの準備
ライブラリをダウンロードする
こちらから最新版をダウンロードしてください。
現時点では1.2.3が最新版です。
NativeライブラリをBindingする
Xamarin Studio で Bindingプロジェクトを作成する
NativeライブラリをBinding するための Bindingプロジェクトを作成します。
作成されたプロジェクトは下記のようなものになります。
プロジェクトにNativeライブラリを追加する
ダウンロードしておいたライブラリ(.jarファイル)をJarsフォルダに追加します。
ビルドアクションは「EnbeddedJar」とします。
ビルドする
この状態でビルドすると、警告が2件表示されます。 *1
修正する
警告なのでそのままでも動作しますが、内容を確認すると
"com/google/android/gms"
のクラスが見つからないということがわかります。
LogPushのSDKの導入ページでも、
下記の Google Play Services への依存が必要とあるので、
この2つのパッケージを追加します。
確認する
この状態で再度ビルドすると、警告もない状態でビルドが完了します。
以上で、Binding完了となります。
参照
*1:このライブラリは非常に簡単にBindingできましたが、大抵はエラーがたくさん出ます。
その対処方法に関しては、また別途まとめることにします。
iOSアプリのCertificate(証明書)の更新方法
iOSアプリの開発で必要な証明書の有効期限は1年です。
毎年更新が必要なので、手順をまとめておきます。
新規ではなく、更新の手順です(ほとんど同じですが)。
期限切れの確認
証明書の有効期限が切れると、証明書と紐付いているプロビジョニングプロファイルも使用できなくなります。
Status : Expired
ビルドもエラーになります。
手順
- 証明書署名要求ファイル(CSR : Certificate Signing Request)の作成
- 証明書(Certificate)の作成
- 証明書(.cerファイル)の登録
1. 証明書署名要求ファイル(CSR : Certificate Signing Request)の作成
第3者による為りすまし防止のため、CSRを作成します。*1
CSRの作成は「キーチェーンアクセス」で行います。
1.1 「キーチェーンアクセス」を開く
1.2 認証局に証明書を要求する
「キーチェーンアクセス」のメニューから、
「証明書アシスタント」→「認証局に証明書を要求する...」と選択します。
1.3 証明書アシスタントに必要項目を入力する
- ユーザのメールアドレス : 「Apple Developer Program」に登録してあるアドレス
- 通称 : わかりやすい名前(秘密鍵の名前として使用される)
- CAのメールアドレス : 入力しなくて良い
- ディスクに保存 : チェックする
- 鍵ペア情報を指定 : チェックする*2
1.4 保存先を設定する
あとで必要になるので、わかりやすい場所に保存してください。
ここではデスクトップに保存しています。
1.5 鍵ペア情報を設定する
上記以外の値を指定するとエラーになるようです。
1.6 保存
下記画面が表示され、作成完了です。
2. 証明書(Certificate)の作成
Certificateの作成はiOS Developer の 「Member Center」で行います。
ブラウザはSafariを使用してください。
2.1 「Certificates, Identifiers & Profiles」ページにアクセスする
2.2 期限切れ(更新したい)のCertificateを使用しているProvisioning Profileにアクセスする
期限切れを確認し、編集を開始します。
2.3 Certificateを作成する
有効なCertificateがないと表示されるので、「Create Certificate」ボタンを押してCertificateの作成を開始します。
2.4 Certificateの種類を選択する
目的に合わせたものを選択します。
- 開発用 : Development
- 製品用 : Production
2.5 証明書署名要求(CSR)の確認
1.で説明したCSRの作成方法が記載されています。
「Continue」ボタンで次に進みます。
2.6 証明書署名要求(CSR)の選択
「Choose File...」ボタンを押し、1.で作成しておいたCSRファイルを選択します。 ファイルを選択したら、「Generate」ボタンを押し、次に進みます。
2.7 Certificateの作成完了
下記のような画面が表示され、Certificateの作成が完了です。
2.8 Certificateのダウンロード
「Dowonload」ボタンを押し、作成したCeftificateを開発用のMacにダウンロードしておきます。
下記ファイルがダウンロードされます。
3. 証明書(.cerファイル)の登録
作成した証明書を開発用のMacに登録します。
3.1 証明書をキーチェーンアクセスに登録する
2.で作成し、ダウンロードしておいた.cerファイルをダブルクリックします。
3.2 「"システムルート"キーチェーンは変更できません。」ダイアログが表示される場合
下記メッセージが表示される場合があります。
この場合は別の手順で追加します。
3.3 証明書をキーチェーンアクセスに登録する(その2)
「キーチェーンアクセス」のメニューから 「ファイル」→「読み込む...」を選択します。
登録したい.cerファイルを選択し、読み込みます。
登録の確認
キーチェーンアクセスに正常に登録されたか確認し、完了です。
DeployGateで新規アプリをインストールする(端末での操作)
DeployGateで配布されたアプリを端末にインストールする方法をまとめます。
手順
- インストール用のWebページを開く
- DeployGateをインストールする
- 自分の名前を設定する
- アプリをインストールする
詳細
ブラウザでインストール用のWebページを開く
WebページのURLは開発者から聞いてください。 指定のURLを開くと下記のようなページが表示されるので、「テストに参加」ボタンを押します。
DeployGateをインストールする
DeployGateを未インストールの場合は下記の画面がが表示されるので、 「DeployGateをインストール」ボタンを押します。
プロファイル画面が表示されるので、「インストール」ボタンを押します。
(*既にインストールされている場合があります。
その場合は「プロファイルを削除してください」と警告が表示されインストールに失敗しますが、
気にせず進みます。)
アプリをインストールする
プロファイルのインストールが完了すると、インストール可能なアプリの一覧が表示されます。
インストールしたいアプリを選択します。
アプリの詳細が表示されるので、問題なければインストールボタンを押します。
DeployGateアプリを閉じます。
ホーム画面に戻ると、インストール中のアイコンが表示されます。*1
アプリのアイコンが表示されれば、インストール完了です。
自分の名前を設定する
最後に自分の名前を設定しておきましょう。
開発者に自分が使用中だということを知らせることができます。
(名前はアプリごとに設定できます。)
(アプリのインストール後でも変更できます。)
*1:ホーム画面に戻った時点でインストールが完了していると、インストールアイコンは表示されません。
DeployGateでインストール済みアプリを更新する(端末での操作)
DeployGateで配布されたアプリを端末側で更新する方法をまとめます。
新規アプリを端末にインストール方法はこちら。
手順
- DeployGateアプリを開く
- 更新するアプリを選択する
- インストールする
詳細
DeployGateアプリを開きます。
アプリを開くと、DeployGateで使用できるアプリの一覧が表示されます。
更新したいアプリを選択します。
アプリの詳細が表示されるので、問題なければインストールボタンを押します。
DeployGateアプリを閉じます。
ホーム画面に戻ると、インストール中のアイコンが表示されます。*1
インストール中のアイコンが消えてアプリのアイコンだけになれば、更新完了です。
*1:ホーム画面に戻った時点でインストールが完了していると、インストールアイコンは表示されません。
XamarinでNativeライブラリを使用する (iOS編)
XamarinでNativeのライブラリを使用するには、
使用したいライブラリをBindingする必要があります。
今回はReproのライブラリをBindingした方法をまとめます。
サンプルはこちら
Reproについてはこちら
Nativeライブラリの準備
ライブラリをダウンロードする
こちらから最新版をダウンロードしてください。
現時点では1.2.10.1というのが最新版です。
ライブラリの拡張子を変更する
ダウンロードしたファイルを解答すると下記のようなフォルダ構成になっています。
Repro.framework内の Repro を変更して Repro.a にしておきます。
ヘッダーファイルを保管する
Bindingにはヘッダーファイルも必要になります。
上の画像内の、Repor.hファイルを保管しておきます。
*1
ライブラリをC#で呼び出すための定義ファイルを生成する
ライブラリをC#で使用するには、ライブラリ内の関数をC#で呼び出せるようにする必要があります。
これは、Objective Sharpieを使用しすることで簡単にできるようになっています。
Objective Sharpieの使い方や、定義ファイルの生成はこちらにまとめてあります。
参考にしてファイルを生成してください。
NativeライブラリをBindingする
Xamarin Studio で Bindingプロジェクトを作成する
NativeライブラリをBinding するための Bindingプロジェクトを作成します。
作成されたプロジェクトは下記のようなものになります。
プロジェクトにNativeライブラリを追加する
ダウンロードしておいたライブラリ(.aファイル)をプロジェクト直下に追加します。 追加すると自動でlinkwith.csファイルが作成されます。
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)
完了
以上で完了になります。 あとは実際に使用したいプロジェクトに追加して使用してみてください。
参考
Objective Sharpieの使い方
XamarinでiOSのNativeのライブラリを使用する場合、 ライブラリをC#で呼び出すために、C#定義ファイルを作成する必要があります。
Objective Sharpieは、その定義ファイルを自動で作成するためのコマンドラインツールです。
(初期にはGUIツールとしても存在していましたが。)
使い方をまとめました。
Objective Sharpie をインストールする
こちらのページ内のリンクからインストールしてください。
現在のバージョンは2.1.6です。
バージョンが上がっている場合、下記コマンドでアップデートもできるようです。
sharpie update
iOS SDK を確認する
Objective Sharpie の実行時にターゲットSDKを指定する必要があります。
ターミナルで下記コマンドを実行し、使用できるターゲットSDKを確認しておきましょう。
sharpie xcode -sdks
このような結果が得られます。
sdk: iphoneos9.0 arch: arm64 armv7
sdk: iphoneos8.4 arch: arm64 armv7
sdk: macosx10.11 arch: x86_64 i386
sdk: macosx10.10 arch: x86_64 i386
sdk: macosx10.9 arch: x86_64 i386
sdk: watchos2.0 arch:
sdk: watchsimulator2.0 arch:
ヘッダーファイルを用意する
Objective Sharpieはヘッダーファイルから、C#用の定義ファイルを生成します。
ここでは、わかりやすいように1つのヘッダーファイルのみ扱いました。
複数のヘッダーファイルがある場合は、1つのフォルダにまとめて入れておきます。
C#定義ファイルを生成する
下記コマンドを環境に合わせて変更し、実行してください。 相対パスで指定してあるので、コマンドを実行するディレクトリまでは先に移動しておいてください。
sharpie bind --output=[出力先のディレクトリ] --namespace=[定義する名前空間] --sdk=[確認しておいたiOS SDKのバージョン] [ヘッダーファイルをおいてあるディレクトリ]/*.h
今回は下記のようなコマンドを実行しました。
実行ディレクトリへ移動 cd Sharpie 定義ファイルの生成 sharpie bind --output=Output --namespace=Repro --sdk=iphoneos8.4 Headers/*.h
成功すると、出力先のディレクトリに2つのファイルが生成されます。
定義ファイルを修正する
出力された定義ファイルを必要に応じて修正します。
(修正なしでそのまま使用できることは少ないです。)
今回は2つのパラメータを変更しました。
Verify
この属性が付いているものは、変換内容が間違っていないか確認が必要です。
特に問題がなければ削除するだけで完了です。
[Verify (ConstantsInterfaceAssociation)] partial interface Constants { // extern double ReproVersionNumber; [Field ("ReproVersionNumber")] double ReproVersionNumber { get; } // extern const unsigned char [] ReproVersionString; [Field ("ReproVersionString")] byte[] ReproVersionString { get; } }
partial interface Constants { // extern double ReproVersionNumber; [Field ("ReproVersionNumber")] double ReproVersionNumber { get; } // extern const unsigned char [] ReproVersionString; [Field ("ReproVersionString")] byte[] ReproVersionString { get; } }
delegate
引数に「@delegate」と書かれているとエラーになります。
単に「delegate」という名前が悪いだけなので、適当な名前に変更すれば完了です。
[Static] [Export ("startWebViewTracking:")] void StartWebViewTracking (NSObject @delegate);
[Static] [Export ("startWebViewTracking:")] void StartWebViewTracking (NSObject @id);
C#定義ファイルを使用する
以上で、C#定義ファイルの生成は完了です。
生成したファイルを使用して、XamarinでNativeライブラリを使用してみました。
こちらをご覧ください。