Та же база титановых кодов для Android и Iphone

Я пытаюсь создать единую базу кода для Iphone & Android для приложения среднего уровня. (4 вкладки, несколько окон, карт и т. Д.) С использованием itanium 2.1 API. Тем не менее, я обнаружил, что вещи на платформе Android не работают так гладко или охотно, как на Iphone epsecially tableviews & UI elemnts. Отзывчивость пользовательского интерфейса на Android также вяло. Примеры кухонной раковины довольно просты. Я смотрю готовое приложение для предприятия, которое должно поддерживаться как минимум через пару лет. Кто-нибудь работал над подобными линиями с причудами платформы и добился успеха в создании полностью функциональных приложений для iOS и Android из SAME codebase?

Титан не предназначен для 1 кодовой базы для всех. Вам нужно переписать материал для каждой ОС. Однако некоторые разработчики приложений заявляют, что повторно использовали 95% своего кода. Таким образом, только 5% кода зависит от ОС. Но я уверен, что их код заполнен if-elses.

То, что я рекомендую делать, чтобы иметь возможность поддерживать его должным образом, без тысяч конструкций if-else, создает единое базовое ядро ​​и записывает код специально для связанных с пользовательским интерфейсом вопросов для каждой ОС. Таким образом, у вас есть код, связанный с UI для Android, код UI для iOS и 1 ядро, работающее для обоих.

Поскольку Android и iOS сильно отличаются друг от друга, написание одной кодовой базы будет гарантировать, что вы никогда не сможете использовать специфичные для ОС функции (например, кнопку меню аппаратного обеспечения Android или iOS NavigationGroup) и позволят пользовательскому интерфейсу выглядеть неинтуитивно понятным.

Я получаю много успеха, используя механизм 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; }; 

андроид / щ / 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-specific вещи должны быть отделены должным образом.