fc2ブログ

記事一覧

バインドライブラリの作成方法 -iOS編-


今回はXamarin.iOSでバインドライブラリを作成する方法をご紹介いたします。
バインドライブラリとは、Objective-Cで作成されたビルド済みのファイル「aファイル」等、ネイティブなファイルをXamarinに取り込み、Xamarin上で動作するように変換できるライブラリです。
すなわち、ネイティブなObjective-CからXamarinのC#への変換ができる強力なツールとなります。
しかし、ビルドまでには少し難解な手順がありますので、順を追って見ていきたいと思います。

尚、Androidでのバインドライブラリの作成方法は前回の記事「バインドライブラリの作成方法 -Android編-」にてご紹介しております。



前提条件
・Windows10 Pro 64Bit
・Visual Studio 2015 Community Update3
・Xamarin 4.3.0.795 (NuGet Xamarin.Forms 2.3.4.247)
・macOS Sierra 10.12.4 / Xcode8.3.1 / Xamarin.iOS 10.6.0.10



1.frameworkとは

SDK等をダウンロードして、解凍するとframeworkフォルダになっている場合があります。これはXcodeで作成したObjective-Cのコードをビルドして一定のルールに基づいた階層にまとめたものになります。

frameworkフォルダは以下のように構成されております。

SDK.framework -> Headers フォルダ -> *.h ファイル
                       -> Resources フォルダ
                       -> Versions フォルダ
                       -> 拡張子の無いSDKファイル


ここで必要となるのは、拡張子の無いSDKファイルと *.hファイル群です。
拡張子の無いSDKファイルに、拡張子「.a」を付けます。



2.バインドライブラリ

(1)Visual Studioでバインドライブラリプロジェクトを作成します。

xamarin_nend_ios_03.png


(2)ソリューションエクスプローラを開き、バインドライブラリ内のトップディレクトリにリネームしたaファイルをドラッグ&ドロップします。



3.Objective Sharpie

ネイティブなaファイルから、XamarinのC#に変換するために必要な変換定義ファイルを自動生成するのがObjective Sharpieです。

基本的には、ダウンロードしたSDKのframeworkフォルダをMac上にコピーし、ターミナルからsharpie bind コマンドで frameworkフォルダ内のHeaderファイル群を読み込みます。
※作成する方法は以前の記事「Objective Sharpieの使用方法」をご参考ください。

自動生成により2つのファイルが作成されます。
ApiDefinitions.cs
StructsAndEnums.cs

(※SDKの種類によりStructsAndEnums.csは作成されない場合があります。)


上記2つのファイルをバインドライブラリのトップディレクトリに配置します。
よって以下のようなフォルダ構成になります。

xamarin_nend_ios_05.png

※linkwith.csファイルは自動で作成されます。



4.ビルドアクション

3つのファイルのビルドアクションを変更します。
ファイル名ビルドアクション
SDK.a ObjcBindingNativeLibrary
ApiDefinitions.csObjcBindingApiDefinition
StructsAndEnums.csObjcBindingApiDefinition
ObjcBindingCoreSource

xamarin_nend_ios_04.png



5.変換定義ファイルの編集

Objective Sharpieで自動生成された定義ファイルが正確ではないため、修正します。
基本的には以下のように変更していきます。

<ApiDefinitions.cs>
・string は NSString に変更
・***Delegate @***Delegate という引数名称を ***Delegate @p1 というカンジで名称変更
・[Verify]は全てコメントアウト
・[Static]も場合によりコメントアウト

<StructsAndEnums.cs>
・nint は long に変更
・enum は public enum に変更



6.ビルドプロパティ

バインドライブラリプロジェクトのプロパティを設定します。
バインドライブラリ→プロパティ→ビルド→「コードの最適化」のチェックをONにします。
この設定をしないと実行時に「Invalid IL code in SDKView:.ctor (CoreGraphics.CGRect,bool): IL_002b: stloc.0」というようなエラーが発生する場合があります。

xamarin_nend_ios_06.png



7.ビルドと参照設定

(1)BindLibraryプロジェクトをビルドします。
(2)iOSプロジェクト(アプリ側)からビルドしたBindLibraryプロジェクトまたはビルドしたDLLを参照設定します。



8.実装例

実際にバインドライブラリを用いた作成例を以下の記事でご紹介しておりますので、ご参考にしてください。
「nendでバナー広告を表示する方法 -iOS編-」
「忍者AdMaxでバナー広告を表示する方法 -iOS編-」





最後までお読みいただきありがとうございます。
当ブログの内容をまとめた Xamarin逆引きメニュー は以下のURLからご覧になれます。
https://itblog.dynaspo.com/blog-entry-81.html


関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Catalina 10.15 / Mojave 10.14 / High Sierra 10.13 / Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
【データベース】
Oracle 10g/9i
SQLServer 2016/2008R2/2005/2000
SQLAnywhere 16/11/8
【BI/レポートツール】
Cognos ReportNet (IBM)
Microsoft PowerBI
ActiveReport (GrapeCity)
CrystalReport
【OCX関連】
GrapeCity InputMan SPREAD MultiRow GridView
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS jQuery IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。