appcelerator titaniumでsocket.io (1.x)

16
Hyperloop + Socket.io Appcelerator Titanium [email protected]

Upload: toshiro-yagi

Post on 16-Apr-2017

296 views

Category:

Technology


0 download

TRANSCRIPT

Hyperloop + Socket.ioAppcelerator Titanium

[email protected]

Agenda

• Titanium と Socket.IO• Hyperloop 、挑戦と挫折• Hyperloop 復活• Hyperloop 活用の勘所

Titanium と Socket.IO

• Socket.IO ~0.9.x  よくある Websocket• 対応モジュール多数

• Socket.IO 1.0~    独自のプトロコルを採用• Swift で書かれたクライアントライブラリしか用意されていない• 対応モジュール無し• https://github.com/socketio/socket.io/issues/1590

• じゃあ作ろう

最初の試み: Hyperloop

• Hyperloop は Swift を扱うことができる• Swift クライアントをビルドした結果…

最初の試み: Hyperloop

• Hyperloop は Swift を扱うことができる• Swift クライアントをビルドした結果… エラー

• build directory の設定ができない• use of undeclared type ~

• 完全敗北

次の試み: Framework + Obj-C モジュール• Swift で書かれた部分を Framwork として Obj-C アプリに転用

• Swift では Static ライブラリが作成できないので Framework に• Framework は Obj-C で書いたモジュールから呼び出す

次の試み: Framework + Obj-C モジュール• Swift で書かれた部分を Framwork として Obj-C アプリに転用

• Swift では Static ライブラリが作成できないので Framework に• Framework は Obj-C で書いたモジュールから呼び出す

• 結果:  Carthoge で Framework を作成、モジュールからの呼び出し OK

次の試み: Framework + Obj-C モジュール• Swift で書かれた部分を Framwork として Obj-C アプリに転用

• Swift では Static ライブラリが作成できないので Framework に• Framework は Obj-C で書いたモジュールから呼び出す

• 結果:  Carthoge で Framework を作成、モジュールからの呼び出し OK• ただし:  Xcode からでないとビルドできない

考えた• Swift のコードはそのままでは使えない

• Framework にすると使える• Framework は動作する

• モジュールも作った• Embedded Binary として Xcode で手動で設定しないといけない

• ビルドの度に Xcode を開くなんて負け犬のやることだ

最大の壁• Embedded Binary として Xcode で手動で設定しないといけない

• ここをなんとかすればいい

突破口はいつもだいたいマニュアルから• なぜか modules/android/hyperloop/1.2.0/documentation/ にある

Adding a third-party frameworkIf you'd like to add a third-party framework which isn't distributed with source code or available in CocoaPods, you can use this example configuration:javascript module.exports = { hyperloop: { ios: { xcodebuild: { flags: { FRAMEWORK_SEARCH_PATHS: '/path/to/framework' }, frameworks: [ 'FrameworkName' ] } } } };In the above example, /path/to/framework should point the the location of the .framework file and FrameworkName should be the name of the Framework.

最終兵器 appc.js

• xcodebuild のオプションを設定できる xcodebuild: { flags: { LD_RUNPATH_SEARCH_PATHS: "$(inherited) @executable_path/../" } }

DEMO

• (感動と拍手)

備考• デフォルトでは Swift が有効にならない

• appc.js に適当な Swift の設定を仕込んでおく• 使わない Swift のコードを置いておく

• 今回は Obj-C でモジュールを書いたが逆にここを Swift にする手もある• Framework の wrapper クラスだけ Swift で書いて JS から呼び出す

まとめ• ActionCable を備えた Rails 5 が発表された翌日に敢えて

Socket.io

まとめ• Titanium は Obj-C アプリを生成するが Swift も扱える

• Swift のコードは Framework として利用出来る• 今後 Swift (のみ)で書かれたライブラリは増えるはず• 今回の手法を参考に試してみてください

• Hyperloop はそれほど万能でもない• 何も考えず使うのは難しい

• Hyperloop はそれほど使い道がないわけじゃない• xcodebuild の設定を変更することが可能になった

• 次は Phoenix に対応する予定• https://github.com/davidstump/SwiftPhoenixClient