ionic(cordova)でサードパーティSDKのプラグインの実装手順 - iOS

はじめに

今回やりたかったことは、ネイティブのSDKが公開されているけどcordova用のプラグインは公開されていないようなケースでそれ用のプラグインの実装手順をメモしておく。プラグインの基本的な作成手順はコチラに書いたのでこれの後にやることを書く。

ながれとしては
1. SDKの入手
2. SDKに必要なframeworkをplugin.xmlに追加
3. プラグインをプロジェクトへ追加(というか更新)
4. SDK本体をxcodeから追加
5. Bridging-Header.hへSDKを追記
6. プログラムからSDK呼び出せるようになったらひたすら実装

実装

今回は例として以下のようなSDKを組み込む想定で。
・SampleSDK.framework(SDK本体)
・UIKit.framework(SDKを使うために必要)

また、プラグイン名はplugin-sampleとする。

plugin.xmlの編集

plugins-dev/plugin-sample/plugin.xml

<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
	id="plugin-sample"
        version="0.1">
  ・・・

  <platform name="ios">                                                                                                                                                                                            
  ・・・

  <!-- 必要なframework -->
  <framework src="UIKit.framework" />

  </platform>
</plugin>

プラグインを更新してplatformディレクトリへ反映

$ ionic plugin rm plugin-sample
$ ionic plugin add plugin-dev/plugin-sample
$ ionic prepare
SDK本体をxcodeから追加

今回は入手したSDKをplugin-dev/plugin-sample/src/iosの下におく。(場所はどこでも良い)
xcodeのプロジェクトを選択して、「Linked Frameworks and Libraries」へSDKをドラック&ドロップ。
「Build Settings」を選択して「Search Paths」の「Framework Search Paths」を設定。
今回は「"${PROJECT_DIR}/../../plugins-dev/plugin-sample/src/ios"」とした。

Bridging-Header.h編集

xcodeに「Other Sources」というフォルダがあって、その中の「Bridging-Header.h」へ追記。

#import <Cordova/CDV.h>
#import <Sample/Sample.h> # ★追記

ここまででビルドできるようになると思うのであとは開発してゆく。

さいごに

今回はSDK本体を手動でxcodeに追加したけど、cordovaのplugin.xmlに以下みたいな形で追加することもできるみたい。

<framework src="/path/to/SampleSDK.framework" custome=true />                                                                                                                                                      

だけどこれやるとプラグインを削除しようとすると以下のようなエラーが出るようになってもうた。。。理由もちょっとわからないので手動でやることにしたという経緯。

こんなエラー

$ ionic rm plugin-sample
・・・
Error: TypeError: Uh oh!
Path must be a string. Received undefined

このままだと複数人で作業する場合、みんなにSDKの組み込む作業をやってもらうことなっちゃうので解決するか考えないと。。。
とりあえず以上です。