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

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

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

サンプルはこちら

LogPushについてはこちら

push.logbk.net

Nativeライブラリの準備

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

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

Latest LogPush Android SDK

NativeライブラリをBindingする

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

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

f:id:mattsuDev:20160224164607j:plain

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

ダウンロードしておいたライブラリ(.jarファイル)をJarsフォルダに追加します。
ビルドアクションは「EnbeddedJar」とします。

f:id:mattsuDev:20160224164530j:plain

ビルドする

この状態でビルドすると、警告が2件表示されます。 *1

f:id:mattsuDev:20160224164441j:plain

修正する

警告なのでそのままでも動作しますが、内容を確認すると
"com/google/android/gms"
のクラスが見つからないということがわかります。

LogPushのSDKの導入ページでも、
下記の Google Play Services への依存が必要とあるので、
この2つのパッケージを追加します。

f:id:mattsuDev:20160224164321j:plain

f:id:mattsuDev:20160224164302j:plain

確認する

この状態で再度ビルドすると、警告もない状態でビルドが完了します。

以上で、Binding完了となります。

参照

Binding a .JAR - Xamarin

*1:このライブラリは非常に簡単にBindingできましたが、大抵はエラーがたくさん出ます。
その対処方法に関しては、また別途まとめることにします。

UDIDの確認方法

iPhoneアプリを実機で動作確認するために、
デバイス(iPhone,iPad)を開発端末として登録する必要があります。

登録に必要なデバイスのUDIDの確認方法をまとめます。

手順

1. iTunesのインストールしてあるPCにデバイスを接続する

接続したらiTunesを立ち上げてください。

f:id:mattsuDev:20151005120736j:plain

2. 登録したいデバイスを選択する

f:id:mattsuDev:20151005121741j:plain

3. デバイスのUDIDを表示する

f:id:mattsuDev:20151005115918j:plain

4. UDIDを確認し、コピーする

f:id:mattsuDev:20151005115930j:plain

以上で完了です。

iOSアプリのCertificate(証明書)の更新方法

iOSアプリの開発で必要な証明書の有効期限は1年です。

毎年更新が必要なので、手順をまとめておきます。
新規ではなく、更新の手順です(ほとんど同じですが)。

期限切れの確認

証明書の有効期限が切れると、証明書と紐付いているプロビジョニングプロファイルも使用できなくなります。
Status : Expired
ビルドもエラーになります。

f:id:mattsuDev:20150930113914j:plain

手順

  1. 証明書署名要求ファイル(CSR : Certificate Signing Request)の作成
  2. 証明書(Certificate)の作成
  3. 証明書(.cerファイル)の登録

1. 証明書署名要求ファイル(CSR : Certificate Signing Request)の作成

第3者による為りすまし防止のため、CSRを作成します。*1
CSRの作成は「キーチェーンアクセス」で行います。

1.1 「キーチェーンアクセス」を開く

f:id:mattsuDev:20150930114712j:plain

1.2 認証局に証明書を要求する

「キーチェーンアクセス」のメニューから、
「証明書アシスタント」→「認証局に証明書を要求する...」と選択します。

f:id:mattsuDev:20150930115500j:plain

1.3 証明書アシスタントに必要項目を入力する

f:id:mattsuDev:20150930120423j:plain

  • ユーザのメールアドレス : 「Apple Developer Program」に登録してあるアドレス
  • 通称 : わかりやすい名前(秘密鍵の名前として使用される)
  • CAのメールアドレス : 入力しなくて良い
  • ディスクに保存 : チェックする
  • 鍵ペア情報を指定 : チェックする*2

1.4 保存先を設定する

f:id:mattsuDev:20150930122237j:plain

あとで必要になるので、わかりやすい場所に保存してください。
ここではデスクトップに保存しています。

1.5 鍵ペア情報を設定する

f:id:mattsuDev:20150930122630j:plain

上記以外の値を指定するとエラーになるようです。

1.6 保存

下記画面が表示され、作成完了です。

f:id:mattsuDev:20150930122937p:plain

2. 証明書(Certificate)の作成

Certificateの作成はiOS Developer の 「Member Center」で行います。

ブラウザはSafariを使用してください。

2.1 「Certificates, Identifiers & Profiles」ページにアクセスする

f:id:mattsuDev:20150930123431j:plain

f:id:mattsuDev:20150930123445j:plain

2.2 期限切れ(更新したい)のCertificateを使用しているProvisioning Profileにアクセスする

期限切れを確認し、編集を開始します。

f:id:mattsuDev:20150930123609j:plain

2.3 Certificateを作成する

有効なCertificateがないと表示されるので、「Create Certificate」ボタンを押してCertificateの作成を開始します。

f:id:mattsuDev:20150930124040j:plain

2.4 Certificateの種類を選択する

目的に合わせたものを選択します。

f:id:mattsuDev:20150930124214j:plain

  • 開発用 : Development
  • 製品用 : Production

2.5 証明書署名要求(CSR)の確認

1.で説明したCSRの作成方法が記載されています。
「Continue」ボタンで次に進みます。

f:id:mattsuDev:20150930124508j:plain

2.6 証明書署名要求(CSR)の選択

「Choose File...」ボタンを押し、1.で作成しておいたCSRファイルを選択します。 ファイルを選択したら、「Generate」ボタンを押し、次に進みます。

f:id:mattsuDev:20150930125040j:plain

2.7 Certificateの作成完了

下記のような画面が表示され、Certificateの作成が完了です。

f:id:mattsuDev:20150930125822j:plain

2.8 Certificateのダウンロード

「Dowonload」ボタンを押し、作成したCeftificateを開発用のMacにダウンロードしておきます。

f:id:mattsuDev:20150930125854j:plain

下記ファイルがダウンロードされます。

  • 開発用 : ios_development.cer
  • 製品用 : ios_distribution.cer

3. 証明書(.cerファイル)の登録

作成した証明書を開発用のMacに登録します。

3.1 証明書をキーチェーンアクセスに登録する

2.で作成し、ダウンロードしておいた.cerファイルをダブルクリックします。

f:id:mattsuDev:20150930150343j:plain

3.2 「"システムルート"キーチェーンは変更できません。」ダイアログが表示される場合

下記メッセージが表示される場合があります。

f:id:mattsuDev:20150930150759j:plain

この場合は別の手順で追加します。

3.3 証明書をキーチェーンアクセスに登録する(その2)

「キーチェーンアクセス」のメニューから 「ファイル」→「読み込む...」を選択します。

f:id:mattsuDev:20150930151251j:plain

登録したい.cerファイルを選択し、読み込みます。

f:id:mattsuDev:20150930151308j:plain

登録の確認

キーチェーンアクセスに正常に登録されたか確認し、完了です。

f:id:mattsuDev:20150930151857j:plain

*1:CSRとは、デジタル証明書の発行を認証局に請求するメッセージのこと。申請者の識別情報や公開鍵などから成り、秘密鍵電子署名されて認証局に送信される。

*2:いろんな資料でチェック必須とされていますが、私の環境ではチェックしなくても問題ありませんでした

DeployGateで新規アプリをインストールする(端末での操作)

DeployGateで配布されたアプリを端末にインストールする方法をまとめます。

手順

  • インストール用のWebページを開く
  • DeployGateをインストールする
  • 自分の名前を設定する
  • アプリをインストールする

詳細

ブラウザでインストール用のWebページを開く

WebページのURLは開発者から聞いてください。 指定のURLを開くと下記のようなページが表示されるので、「テストに参加」ボタンを押します。

f:id:mattsuDev:20150929163805j:plain

DeployGateをインストールする

DeployGateを未インストールの場合は下記の画面がが表示されるので、 「DeployGateをインストール」ボタンを押します。

f:id:mattsuDev:20150929163832j:plain

プロファイル画面が表示されるので、「インストール」ボタンを押します。
(*既にインストールされている場合があります。
その場合は「プロファイルを削除してください」と警告が表示されインストールに失敗しますが、 気にせず進みます。)

f:id:mattsuDev:20150929163914j:plain

アプリをインストールする

プロファイルのインストールが完了すると、インストール可能なアプリの一覧が表示されます。
インストールしたいアプリを選択します。

f:id:mattsuDev:20150929164905j:plain

アプリの詳細が表示されるので、問題なければインストールボタンを押します。

f:id:mattsuDev:20150928162924p:plain

f:id:mattsuDev:20150928163112p:plain

DeployGateアプリを閉じます。

ホーム画面に戻ると、インストール中のアイコンが表示されます。*1

f:id:mattsuDev:20150929164409j:plain

アプリのアイコンが表示されれば、インストール完了です。

f:id:mattsuDev:20150929164425j:plain

自分の名前を設定する

最後に自分の名前を設定しておきましょう。
開発者に自分が使用中だということを知らせることができます。
(名前はアプリごとに設定できます。)
(アプリのインストール後でも変更できます。)

f:id:mattsuDev:20151008120518j:plain

f:id:mattsuDev:20151008120534j:plain

*1:ホーム画面に戻った時点でインストールが完了していると、インストールアイコンは表示されません。

DeployGateでインストール済みアプリを更新する(端末での操作)

DeployGateで配布されたアプリを端末側で更新する方法をまとめます。

新規アプリを端末にインストール方法はこちら。

mattsudev.hatenablog.com

手順

  • DeployGateアプリを開く
  • 更新するアプリを選択する
  • インストールする

詳細

DeployGateアプリを開きます。

f:id:mattsuDev:20150928162438p:plain

アプリを開くと、DeployGateで使用できるアプリの一覧が表示されます。

更新したいアプリを選択します。

f:id:mattsuDev:20150928162558p:plain

アプリの詳細が表示されるので、問題なければインストールボタンを押します。

f:id:mattsuDev:20150928162924p:plain

f:id:mattsuDev:20150928163112p:plain

DeployGateアプリを閉じます。

ホーム画面に戻ると、インストール中のアイコンが表示されます。*1

f:id:mattsuDev:20150928163234p:plain

インストール中のアイコンが消えてアプリのアイコンだけになれば、更新完了です。

f:id:mattsuDev:20150928163333p:plain

*1:ホーム画面に戻った時点でインストールが完了していると、インストールアイコンは表示されません。

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ファイルしかありませんが、ヘッダーファイルが複数ある場合は全て保管しておきましょう

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つのフォルダにまとめて入れておきます。

f:id:mattsuDev:20150925192910p:plain

C#定義ファイルを生成する

下記コマンドを環境に合わせて変更し、実行してください。 相対パスで指定してあるので、コマンドを実行するディレクトリまでは先に移動しておいてください。

sharpie bind --output=[出力先のディレクトリ] --namespace=[定義する名前空間] --sdk=[確認しておいたiOS SDKのバージョン] [ヘッダーファイルをおいてあるディレクトリ]/*.h

今回は下記のようなコマンドを実行しました。

実行ディレクトリへ移動
cd Sharpie

定義ファイルの生成
sharpie bind --output=Output --namespace=Repro --sdk=iphoneos8.4 Headers/*.h

成功すると、出力先のディレクトリに2つのファイルが生成されます。

f:id:mattsuDev:20150925192927p:plain

  • ApiDefinitions.cs
    C#での呼び出しが定義されます
  • StructsAndEnums.cs
    構造体やEnumが定義されます。

定義ファイルを修正する

出力された定義ファイルを必要に応じて修正します。
(修正なしでそのまま使用できることは少ないです。)
今回は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ライブラリを使用してみました。
こちらをご覧ください。

mattsudev.hatenablog.com

参照

qiita.com

Binding Objective-C - Xamarin

Objective Sharpie - Xamarin