中間レベルのアプリ用に、Iphone と Android の両方に単一のコードベースを作成しようとしています。(4 つのタブ、複数のウィンドウ、マップなど) itanium 2.1 API を使用。しかし、私は、Android プラットフォームでの物事が Iphone でのテーブルビューや UI 要素のようにスムーズに、または喜んで機能しないことを発見しました。Android の UI の応答性も鈍いです。台所の流し台の例は非常に簡単です。少なくとも今後数年間は維持する必要があるエンタープライズ対応アプリを検討しています。プラットフォームの癖で同様の行に取り組み、同じコードベースから完全に機能する iOS および Android アプリの作成に成功した人はいますか?
2 に答える
コンパイル時のCommonJSメカニズムを使用して、OS固有の機能を持つルートビューを作成することで、多くの成功を収めています。
たとえば、OSに依存しないビューはui/MyView.jsのようになります。
var createAddButton = require("ui/MyView.AddButton");
var MyView = function() {
var self = Ti.UI.createWindow();
createAddButton(self, function() { alert('ADD!'); });
return self;
};
module.exports = MyView;
次に、それを処理するOS固有の関数を作成します。
iphone / ui / MyView.AddButton.js
module.exports = function(view, addHandler) {
var addButton = Titanium.UI.createButton({
systemButton: Titanium.UI.iPhone.SystemButton.ADD
});
addButton.addEventListener("click", addHandler);
view.rightNavButton = addButton;
};
android / ui / MyView.AddButton.js
module.exports = function(view, addHandler) {
view.activity.onCreateOptionsMenu = function(e){
var menuItem = e.menu.add({ title: "Add" });
menuItem.addEventListener("click", addHandler);
};
};
彼らが実装したCommonJSシステムは、ボタンが適切な場所に追加されるように、MyView.AddButton.jsの適切なバージョンを選択します。これにより、ビューの大部分を同じにすることができますが、OS固有のものを適切に分離することができます。
Titanium は、1 つのコードベースをすべての人に提供することを意図したものではありません。OSごとに書き直す必要があります。ただし、一部のアプリ開発者は、コードの 95% を再利用したと主張しています。したがって、コードの 5% のみが OS 固有です。しかし、彼らのコードは if-else でいっぱいだと確信しています。
何千ものif-else構造を使わずに適切に維持できるようにするために、私が推奨することは、単一のバックエンドコアを構築し、OSごとにUI関連の問題に特化したコードを書くことです. このようにして、Android 用の UI 関連のコード、iOS 用の UI 関連のコード、および両方で動作する 1 つのコアが得られます。
Android と iOS は大きく異なるため、単一のコードベースを作成すると、OS 固有の機能 (Android ハードウェア メニュー ボタンや iOS NavigationGroup など) を使用できなくなり、UI が直感的ではなくなります。