나는 안드로이드 / 아이폰 개발 과정을 밟고 있으며 티타늄으로 8 주를 보냈습니다 (풀 타임 아님) (버전은 티타늄 1.4.2 였고 시간은 2010 년 11 월경이었습니다). 여기 내 경험이 있습니다.
아이폰 안드로이드 듀얼 타겟팅
API 가이드에서 기능을 Android와 iPhone 모두에서 사용할 수 있다고 주장하지만, 그렇지 않습니다. 대부분의 플랫폼은 플랫폼 중 하나에서 작동하지 않습니다. 일부는 다르게 작동합니다.
수업 시간에 많은 사람들이 iPhone 응용 프로그램을 수행했으며 주요 재 작성 없이는 Android에서 작동하도록 할 수 없습니다. 나는 Animap (스웨덴의 Android 마켓 / Appstore 참조)이라는 간단한 어린이 앱을 개발하고 Windows에서 개발을 시작했습니다. Android 대상이 작동하면 OS X에서 프로젝트를 열었습니다. iPhone 용 빌드 항목은 표시되지 않으며 Android 전용입니다. OS X에서 이중 대상 프로젝트를 시작해야합니다. (관련 파일을 새 프로젝트에 복사했습니다.) 다음 문제-애니메이션은 iPhone에서 작동하지 않습니다 (Android에서 작동 함). 스크롤 이벤트는 iPhone에서 동일하게 작동하지 않습니다. (즉, Android에서는 사용자가 스크롤을 중지하고 화면에서 손가락을 when 때 untouch 이벤트가 발생합니다. 이는 iPhone에서 발생하지 않습니다).
이것은 어딘가에 언급되어 있지 않으므로 기본적으로 첫 번째 플랫폼에서 시행 착오 프로그래밍을 수행 한 다음 다른 플랫폼에서 시행해야합니다. 시행 착오로 Animap과 같은 간단한 앱을 다른 플랫폼에서 사용하려면 약 2 일이 걸릴 것입니다. 또한 코드 전체에 if (android) 또는 if (iphone) ...이 있어야합니다.
다운로드 및 설정
서신에 대한 지침을 따라야합니다. Java 64 비트를 사용하지 마십시오. KitchenSink 1.4.0 데모 애플리케이션은 컴파일하지 않습니다. (1.3 작동 OK!) 긴 경로 이름으로 인해 외부 프로그램이 길어질 경우 모든 명령 행 매개 변수를받지 못하게하므로 파일을 C 드라이브에 직접 두어야합니다. (작은 프로그램에는 적합) 1/3의 시간에 툴체인은 단순히 정지하고 '시작'을 다시 눌러야합니다. 그러면 아마 잘 작동 할 것입니다 ... 시작시 시뮬레이터를 찾을 수 없으므로 Ctrl + Alt + Delete를 사용하여 adb.exe를 종료 한 후 다시 시도해야합니다.
네트워크 연결
Wi-Fi 네트워크에서는 때때로 라이브 연결이 끊어지고 티타늄이 충돌합니다 (컴파일 / 배포 인터페이스) 인터넷에 연결되어 있지 않으면 서버에 로그인 할 수 없으므로 시작되지 않습니다.
API
CSS, HTML 및 jQuery는 이것에 비해 산들 바람입니다. 티타늄은 기존의 다른 GUI API와 비슷하며 모든 단일 버튼 / 필드 / 등에 대해 일부 속성을 설정해야합니다. 필드를 잘못 얻는 것은 설정하는 데 필요한 모든 속성을 기억하는 것이 쉬운 일입니까? 올바른 장소에 대문자로 철자를 썼습니까? (이것은 컴파일러에 의해 잡히지 않지만 해당 부분을 테스트하는 것이 운이 좋으면 런타임 오류로 표시됩니다)
Titanium에서는 컨트롤 위에 다른보기를 추가하거나 GUI의 다른 곳을 클릭하면 문제가 발생합니다.
선적 서류 비치
여러 API 페이지에는 Android 기호가 있지만 컨트롤을 만들려고 할 때만 null을 반환합니다. 기호에도 불구하고 단순히 Android 플랫폼에서 사용할 수 없습니다. 때로는 안드로이드가 특정 메소드를 지원하지 않는다고 언급하지만 전체 API가 누락되었습니다.
부엌 싱크대
데모 애플리케이션. 경로가 너무 길어 Eclipse 프로젝트 폴더에 넣으면 컴파일되지 않는다고 언급 했습니까? C 드라이브의 루트 폴더에 있어야합니다. 나는 현재 symbolik 링크를 사용합니다 (mklink / J ...)
문서화되지 않은 방법
레이블을 안정적으로 변경하려면 레이블을 set.setText ( 'Hello World')로 적절하게 사용해야하지만 전혀 문서화되어 있지 않습니다.
디버깅
Titanium.API.info ( '인쇄는 디버깅하는 유일한 방법입니다');
편집
API는 올바른 형식으로 제공되지 않으므로 Eclipse에서 도움말 등으로 일반적인 코드 완성을 얻을 수 없습니다. 앱 타나 도와주세요!
하드웨어
컴파일러 / 도구는 다중 스레드가 아닌 것이므로 많은 시행 착오를해야하므로 빠른 하드 드라이브가 장착 된 빠른 컴퓨터가 필수입니다. 잘못된 문서를 언급 했습니까? 믿을 수 없으므로 모든 것을 시험해보십시오!
긍정적 인 것들
- 오픈 소스
이전 프로젝트에서 나는 단순히 시간과 인력을 투입하여 문제를 해결할 수 없으므로 폐쇄 소스를 다시 사용하지 않겠다고 약속했습니다. 프로젝트에 늦어서 어려운 마감일을 전달해야 할 때 중요합니다. 이것은 오픈 소스이며 툴 체인이 왜 깨져서 실제로 수정했는지 알 수 있습니다.
버그 데이터베이스
또한 열려 있습니다. 당신은 단순히 혼자가 아니라는 것을 알 수 있으며 시행 착오에 소비 된 다른 4 시간 대신 해결 방법을 수행하십시오.
커뮤니티
- 그들의 포럼에서 활동적인 것 같습니다.
버그
- 티타늄 1.4는 스레드 세이프가 아닙니다 . 즉, 스레드를 사용하고 (createWindow 호출에서 url : 속성 사용) 스레드가 작동하는 것과 같은 프로그램을 사용하여 데이터가있는 이벤트를 앞뒤로 보내면 매우 이상한 것들이 많이 발생합니다. 창, 너무 많은 이벤트, 너무 적은 이벤트 등. 이것은 모두 타이밍에 따라 달라 지므로 코드 행을 다른 순서로 배치하면 응용 프로그램이 중단되거나 치유 될 수 있습니다. 다른 file.js에 창을 추가하면 app.js 실행이 중단됩니다. 이것은 또한 내부 데이터 구조를 병렬화하여 병렬로 내부 데이터 구조를 업데이트하여 변경된 값을 다른 것으로 덮어 쓸 수 있습니다.
티타늄과 관련된 많은 문제는 수백 개의 스레드, 이벤트 및 메시지 전달을 지원하는 OSE와 같은 실시간 시스템에서 저의 배경에서 비롯됩니다. 이것은 티타늄 1.4에서 작동해야하지만 안정적으로 작동하지 않습니다.
Javascript (나에게 새로운)는 런타임 오류로 자동으로 죽습니다. 또한 변수 이름의 철자를 잘못 입력하거나 널 포인터로 읽는 것과 같은 작고 일반적인 버그는 디버그해야 할 때 충돌하지 않습니다. 대신 문자를 잘못 입력하거나 잘못 입력했기 때문에 이벤트 처리기와 같은 프로그램의 일부가 작동을 멈 춥니 다.
그런 다음 함수에서 작동하지 않는 일부 매개 변수와 같은 티타늄에 더 간단한 버그가 있습니다 (적어도 Android 플랫폼에서 일반적 임).
평가판 및 오류 디버그주기 속도 여러 컴퓨터에서 Titnium Developer를 실행 한 결과 병목 현상이 하드 드라이브라는 것을 알았습니다. 랩톱의 SSD 드라이브는 4200rpm 드라이브보다 빌드주기가 약 3-5 배 빠릅니다. 데스크탑에서 RAID 1 (스트라이핑 모드)에 이중 드라이브를 사용하면 CPU가 약간 빠른 단일 드라이브보다 약 25 % 더 빠르게 빌드 할 수 있으며 SSD 드라이브 랩톱을 능가합니다.
요약
- 이 스레드의 의견에서 이와 같은 도구가 앱을 제공 할 수있는 플랫폼 수에 맞서 싸울 것 같습니다. API의 수가 핵심 판매 포인트 인 것 같습니다.
이것은 당신이 그것을 사용하기 시작할 때 매우 빛난다. 열려있는 버그 추적기를 보면 버그 수가 수정 된 버그 수보다 계속 빠르게 증가하고 있음을 알 수 있습니다. 이것은 일반적으로 개발자가 버그 수를 줄이는 데 집중하는 대신 기능을 계속 추가한다는 신호입니다.
고객에게 멀티 플랫폼에 간단한 앱을 제공하려는 컨설턴트로서 실제로 두 플랫폼에서 기본 앱을 개발하는 것보다 이것이 더 빠르지는 않습니다. 이것은 당신이 속도를 낼 때 티타늄으로 빠르다는 사실 때문입니다. 그러나 갑자기 당신은 구멍을 뚫고 깊이 빠져 나와서 해결책을 찾기 위해 얼마나 많은 시간을 소비해야하는지 알지 못합니다. 특정 마감 시간 / 시간 / 비용에 대해 특정 기능을 약속 할 수는 없습니다.
나 자신에 관하여 : wxPython과 함께 2 년 동안 Python을 사용했다. (GUI는 무의식적이지만 결코 깨지지 않습니다. Javascript와 Titanium에서 사용하는 스레딩 모델을 이해하지 못했을 수도 있지만 공개 토론 포럼에 따르면 GUI 개체가 갑자기 잘못된 컨텍스트를 사용하고 있습니다 / 그 전에 업데이트하지 않습니다 .. ???) 전에 모바일 장치에 대한 C 및 ASM 프로그래밍에 대한 배경 지식이 있습니다.
[편집-버그가있는 부분이 추가되었으며 스레드로부터 안전하지 않음] [편집-이제는 한 달 이상 (대부분 PC에서는 작동했지만 일부는 OS X에서도) 작동했습니다. iPhone 및 Android 이중 타겟팅이 추가되었습니다. 평가판 및 오류 디버그주기 속도가 추가되었습니다.]