いきなりですが、今年はあんまりモジュールを書いていません。それだけありもので十分になってきたということでもあるのですが、それより何よりProアカウントを買ったのでHyperloopが使えるため、ちょっとした広告SDK程度のことならあまり気にしなくてもいいようになってきたのが大きいです。
それに、SDKに同梱されるモジュール自体も結構増えているんですよね。Httpsとか、CoreMotionとか、Geofence、NfcにSafariDialog、TouchIdからURLSessionなんてのもありますのでいつか紹介したいと思います。そう、(一部は)Proアカウントならね。
Hyperloopを使ってる人ってどれくらいいるのかわかりませんが、個人的に細々と使っています。本当はベータ版の時に作ったSocket.io(1.4以降に対応)を紹介しようと思ったのですが動かなくなったので、直すついでに調べた設定方法を説明していきます。
Hyperloopを利用するプロジェクトの作成は、CLIからはとても簡単です。質問にYと答えるだけな上にデフォルトの回答がYだからです。(そう、Proアカウントならね)
$ appc new
Appcelerator Command-Line Interface, version 6.0.0
Copyright (c) 2014-2016, Appcelerator, Inc. All Rights Reserved.
? What type of project are you creating? Native App (app)
? Which SDK would you like to use? Titanium SDK (JavaScript)
? What's the project name? HyperloopTest
? What's your application id (example: com.myapp)? app.test
MobileWeb platform has been deprecated and will be removed in 7.0.0.
? Would you like to enable native API access with Hyperloop for this app? Yes
*** new completed. ***
生成されるtiapp.xmlにはもうモジュールが追加されています。
<modules>
<module platform="android">hyperloop</module>
<module platform="iphone">hyperloop</module>
<module platform="commonjs">ti.cloud</module>
</modules>
もちろんPluginもロードされています。
<plugins>
<plugin version="1.0">ti.alloy</plugin>
<plugin>hyperloop</plugin>
</plugins>
それから、ビルド時にこちらの方がいいよとメッセージにあったので、iOSディレクティブにJSCoreを使うよう指定します。
<ios>
<use-jscore-framework>true</use-jscore-framework>
さあ、準備ができました。
そこで、本日これから作成するのは、CallKitに対応した新しいTwilioのiOS SDKです。そう、まだベータ版で本家のChangelogにはさっぱり何も書かれていないのになぜか日本のTwilioのChangelogにはバッチリ載ってる(ので見落としていました!)、iOS 10以降の機能VoIP Pushなどに追随した新しいSDKです。急に話が大きくなって自分でもびっくりですが、大きな車輪は一度回し始めたらなかなか止まらないものです。気にせず先に進みます。
Twilio SDKの中身はframeworkになっているので、これをプロジェクトに設置します。ここからいきなりカスタマイズしてしまいます。サードパーティーのライブラリなどを利用する場合はappc.js
という設定ファイルを用意します。
module.exports = {
hyperloop: {
ios: {
xcodebuild: {
frameworks: [
'CallKit',
'PushKit'
]
},
thirdparty: {
'TwilioVoiceClient': {
source: ['src'],
header: 'src',
resource: 'src'
}
}
}
}
};
プロジェクトのディレクトリ直下にsrcというディレクトリを置いて、そこにTwilioVoiceClient.framework
をコピーすればOK。他にもCallKitやPushKitのような組み込みのフレームワークを使いたい場合はxcodebuildプロパティに設定します。
JSのプログラム内ではObj-Cのimport
の代わりにrequireを利用します。
var tvc = require('TwilioVoiceClient');
これで呼び出しが可能になりました。あとはフレームワークの流儀に乗っ取って作っていくだけ、なのですが、Delegateの指定などはObj-Cのクラスを生成することで対応しなければいけないようです。
うん、ちょっと今日はまだ仕事が忙しくてそこまで書けてないんだ!また続きを書くね!いや近所のおじさんのお誕生日に呼ばれちゃってさ、じゃあね!