40歳からのキャリアチェンジ

20代はエンジニア・PM、30代はWeb系エンジニア向けのキャリアアドバイザー。40代の今はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連あたり

TiFileのソースコードを読もうと思ったきっかけについて

前置き

前回こんなことを書いてから、しばらく以下2つのことを考えてました

  • クローラで収集したデータをJSON化する時に適切な形でエスケープ処理する実装方法
  • Ti.Database.openにも関連ありそうなTitanium.Filesystemの内部構造ってどうなってるんだろう

こんなことをつぶやいていたように前者は思った以上に苦戦しながら、ActiveSupport::JSON.encode()を利用することで期待する結果が得られそうな目処が立った気がします。

Ti.Database.openに関連する所でちょっとうまくいってないこともあるのですが実はそれだけではなくって、JSONDBのモジュールが実機ではうまくいってないことも重なって、Titanium.Filesystemの内部構造について把握したくなってきました

ちなみにJSONDBを使ってみたというエントリを読む以前にも、その存在が気になっていたJSONDBなのですが、先日のTitanium新年会のLTの中で取り上げられていてて

「これはもう利用しとかないと!」

と思って、別のモジュールも含めて購入しました(※ちなみに初めてモジュール買いました)

この辺りで少し触れている通りMongoDBをちょっとだけいじっていたこともあり、JSONDBはかなりMongoっぽく馴染み易く、簡単なサンプル作り、エミュレータ上で動作することを確認した上で、実機転送したら、アプリが落ちる・・

念のためTitaniumStudio上で新規にプロジェクト作っても同様の症状になりました。

File I/Oに関する処理がうまくいってない気がしてきた

この段階でふと思ったのは、SQLiteのファイルやJSONDBのファイルそれぞれが存在するパスの指定がなんか怪しい気がしてきました。

Titanium Mobileの機能を使って生成されるファイルの保存先のパスってどっかで指定出来たのかなという素朴な疑問が思いつき、ひとまず、ファイルI/Oに関するTitanium.Filesystemをひとまずいじってみました

var baseDir = Titanium.Filesystem.applicationSupportDirectory;
var rootDir = Titanium.Filesystem.applicationDirectory;
var resoce = Titanium.Filesystem.resourcesDirectory;
Ti.API.info(resoce);
Ti.API.info(baseDir);
Ti.API.info(rootDir);

上記結果はこうなりましたが、resourcesDirectoryの結果が@donayamaさんがまとめているWikiの情報と違う結果になりました。

/Users/xxxx/production/asunaroViewer/Resources/
/Users/xxxx/Library/Application%20Support/iPhone%20Simulator/4.3.2/Applications/A196F63E-019F-4491-B10B-5B6B79DF5C10/Library/Application%20Support/
/Users/xxxx/Library/Application%20Support/iPhone%20Simulator/4.3.2/Applications/A196F63E-019F-4491-B10B-5B6B79DF5C10/Applications/

「Titanium Mobileの内部構造理解すれば、どの部分でresourcesDirectoryの設定しているのかわかるんじゃないかなぁ」

という考えに至り、ひとまずTiFileのソースコードを追っかけてみることにしました。

ObjectiveC全然わからないけど、メソッド名からなんとなくの処理を推測してコード読んでるので気が向いたら続きを書くかも