मैं Android / iPhone के विकास में एक पाठ्यक्रम ले रहा हूं और हमने टाइटेनियम के साथ 8 सप्ताह बिताए (पूर्णकालिक नहीं) (संस्करण टाइटेनियम 1.4.2 था और समय नवंबर 2010 के आसपास था)। यहाँ मेरा अनुभव है।
iPhone Android दोहरी लक्ष्यीकरण
भले ही एपीआई गाइड का दावा है कि कार्यक्षमता एंड्रॉइड और आईफोन दोनों के लिए उपलब्ध है, यह मामला नहीं है। अधिकांश सामान केवल एक प्लेटफॉर्म पर काम नहीं करते हैं। कुछ चीजें अलग तरीके से काम करती हैं।
क्लास के बहुत से लोगों ने आईफोन एप्लिकेशन किए हैं, और वे उन्हें बिना प्रमुख रीराइट किए एंड्रॉइड पर काम नहीं कर सकते हैं। मैंने अनिमैप नामक एक साधारण बाल ऐप विकसित किया (स्वीडन में एंड्रॉइड मार्केट / ऐपस्टोर देखें) और विंडोज के तहत विकसित करना शुरू कर दिया। एक बार जब एंड्रॉइड लक्ष्य काम कर रहा था तो मैंने ओएस एक्स पर प्रोजेक्ट खोला। यह केवल आईफोन के लिए आईफोन के लिए कोई निर्माण सामग्री नहीं दिखाता है। आपको ओएस एक्स के तहत एक दोहरी लक्ष्य परियोजना शुरू करने की आवश्यकता है। (ठीक है, मैंने संबंधित फाइलों को एक नई परियोजना में कॉपी किया है)। अगली समस्या - एनिमेशन iPhone पर काम नहीं करते (वे एंड्रॉइड पर काम करते हैं)। स्क्रॉलिंग इवेंट्स iPhone पर समान काम नहीं करते हैं। (यानी एंड्रॉइड पर आपको उपयोगकर्ता द्वारा स्क्रॉल करना बंद करने और स्क्रीन से अपनी उंगली छोड़ने पर अछूता घटना मिलती है, यह iPhone पर नहीं होता है)।
चूँकि इसका कहीं उल्लेख नहीं किया गया है, इसलिए आपको पहले एक प्लेटफ़ॉर्म पर, फिर दूसरे प्लेटफ़ॉर्म पर ट्रायल और एरर प्रोग्रामिंग करने की आवश्यकता है। परीक्षण और त्रुटि से मेरा मतलब है कि इस तरह के एक सरल ऐप को प्राप्त करने में लगभग दो दिन लगेंगे क्योंकि एनीमैप दूसरे प्लेटफॉर्म पर काम कर रहा है। आपको (android) तब ... या यदि (iphone) ... आपके कोड में ...
डाउनलोड करें और सेटअप करें
आपको पत्र के निर्देशों का पालन करना चाहिए। जावा 64 बिट का उपयोग करने की कोशिश न करें। यह किचनसिंक 1.4.0 डेमो एप्लिकेशन को संकलित नहीं करेगा। (1.3 कार्य ठीक है!) आपको सी ड्राइव पर सीधे फाइलें डालनी चाहिए क्योंकि जब तक वे लंबे नहीं हो जाते तब तक बाहरी प्रोग्राम सभी कमांड लाइन मापदंडों को प्राप्त नहीं करने वाले बाहरी प्रोग्राम को बनाएंगे। (हालांकि छोटे कार्यक्रमों के लिए ठीक है) 1/3 बार, टूलचिन बस बंद हो जाता है और आपको फिर से 'लॉन्च' प्रेस करना होगा। तब यह शायद काम करेगा ... बहुत अविश्वसनीय। सिम्युलेटर स्टार्टअप पर नहीं मिलेगा और फिर आपको बस Ctrl + Alt + Delete और पुनः प्रयास के साथ adb.exe को मारना होगा।
नेटवर्क कनेक्शन
वाईफ़ाई-नेटवर्क पर आप कभी-कभी लाइव कनेक्शन खो देते हैं और टाइटेनियम आप पर (कंपाइल / परिनियोजित इंटरफ़ेस) क्रैश हो जाता है, यदि आपके पास एक कार्यशील इंटरनेट कनेक्शन नहीं है तो यह शुरू नहीं होगा क्योंकि यह आपको उनके सर्वर में लॉग इन नहीं कर सकता है।
एपीआई
CSS, HTML और jQuery इसकी तुलना में एक हवा है। टाइटेनियम किसी अन्य पुराने GUI API जैसा दिखता है, और आपको हर एक बटन / फ़ील्ड / आदि के लिए कुछ गुण सेट करने की आवश्यकता होती है। फ़ील्ड को गलत करना केवल आसान है, उन सभी गुणों को याद रखना जो सेट करने की आवश्यकता है? क्या आपने इसे सही जगह पर बड़े अक्षरों में लिखा था? (क्योंकि यह संकलक द्वारा पकड़ा नहीं गया है, लेकिन यदि आप उस भाग का परीक्षण करने के लिए भाग्यशाली हैं तो एक रनटाइम त्रुटि के रूप में देखा जाएगा)
जब आप किसी नियंत्रण के ऊपर कोई अन्य दृश्य जोड़ते हैं या GUI में कहीं और क्लिक करते हैं, तो टाइटेनियम चीजों को बस तोड़ देते हैं।
प्रलेखन
कई एपीआई पृष्ठ एंड्रॉइड प्रतीक को ले जाते हैं, लेकिन जब आप नियंत्रण बनाने की कोशिश करते हैं तो केवल एक अशक्त वापस आ जाएगा। वे केवल प्रतीकों के बावजूद एंड्रॉइड प्लेटफॉर्म पर उपलब्ध नहीं हैं। कभी-कभी एंड्रॉइड का उल्लेख एक विशेष विधि का समर्थन नहीं करने के लिए किया जाता है, लेकिन फिर संपूर्ण एपीआई गायब है।
रसोई के पानी का नल
डेमो आवेदन। क्या मैंने उल्लेख किया है कि यह संकलित नहीं करता है यदि आप इसे अपने ग्रहण प्रोजेक्ट फ़ोल्डर में रखते हैं क्योंकि मार्ग बहुत लंबा हो जाता है? रूट फ़ोल्डर में अपने C ड्राइव पर रखा जाना चाहिए। मैं वर्तमान में एक प्रतीकात्मक लिंक (mklink / J ...) का उपयोग करता हूं
अप्राकृतिक तरीके
लेबल को विश्वसनीय रूप से बदलने के लिए आपको लेबल.setText ('हैलो वर्ल्ड') के रूप में चीजों का उपयोग करना चाहिए, लेकिन यह बिल्कुल भी प्रलेखित नहीं है।
डिबगिंग
Titanium.API.info ('डीबग करने के लिए प्रिंटआउट एकमात्र तरीका है');
संपादन
एपीआई किसी भी अच्छे प्रारूप में उपलब्ध नहीं हैं इसलिए आप ग्रहण में सहायता आदि के साथ साधारण कोड-पूर्ति नहीं कर सकते हैं। आप्तना कृपया मदद करें!
हार्डवेयर
ऐसा लगता है कि कंपाइलर / टूल्स को मल्टीथ्रेड नहीं किया जाता है, इसलिए फास्ट हार्डड्राइव वाला फास्ट कंप्यूटर बहुत जरूरी है, क्योंकि आपको बहुत परीक्षण और त्रुटि करनी चाहिए। क्या मैंने खराब प्रलेखन का उल्लेख किया है? तुम वहाँ सब कुछ बाहर की कोशिश करनी चाहिए क्योंकि तुम उस पर भरोसा नहीं कर सकते!
कुछ सकारात्मक बातें
- खुला स्त्रोत
पिछली परियोजनाओं से मैंने खुद को कभी भी बंद स्रोत का उपयोग करने का कभी वादा नहीं किया है क्योंकि आप बस चीजों को ठीक से घंटों और मैनपावर फेंककर ठीक नहीं कर सकते हैं। महत्वपूर्ण जब आप परियोजना में देर से हैं और एक कठिन समय सीमा के लिए देने की जरूरत है। यह खुला स्रोत है और मैं यह देखने में सक्षम हूं कि टूल चेन क्यों टूटती है और वास्तव में इसे ठीक भी करती है।
Bugdatabase
यह भी खुला है। आप बस देख सकते हैं कि आपका अकेला नहीं है और परीक्षण और त्रुटि पर खर्च किए गए 4 घंटे के बजाय एक वर्कअराउंड करें।
समुदाय
- अपने मंचों पर सक्रिय होने लगता है।
कीड़े
- टाइटेनियम 1.4 थ्रेडसेफ़ नहीं है । इसका मतलब है कि यदि आप थ्रेड्स का उपयोग करते हैं (url का उपयोग करें: createWindow कॉल में प्रॉपर्टी) और प्रोग्राम्स जैसे थ्रेड काम कर रहे हैं और घटनाओं को डेटा के साथ आगे और पीछे भेजते हैं तो आप बहुत सारे, बहुत ही अजीब सामानों में खो जाते हैं - खोए हुए हैंडलर, खो जाते हैं विंडोज़, बहुत सारे ईवेंट, बहुत कम ईवेंट, आदि। यह सब समय पर निर्भर है, कोड की पंक्तियों को अलग-अलग क्रम में लगाने से आपका एप्लिकेशन क्रैश या ठीक हो सकता है। एक अन्य file.js में एक विंडो जोड़ने से आपका app.js निष्पादन टूट जाता है ... यह टाइटेनियम में आंतरिक डेटास्ट्रक्चर को भी नष्ट कर देता है, क्योंकि वे कभी-कभी पार्टल में आंतरिक डेटास्ट्रक्चर को अपडेट कर सकते हैं, कुछ और के साथ बस बदले हुए मूल्य को ओवरराइट कर सकते हैं।
टाइटेनियम के साथ मुझे जो भी समस्याएं हुई हैं उनमें से ज्यादातर OSE जैसे रियलटाइम सिस्टम पर मेरे बैकग्राउंड से आती हैं, जो सैकड़ों थ्रेड्स, इवेंट्स और मैसेज पास करने का समर्थन करते हैं। यह टाइटेनियम 1.4 में काम करने वाला है, लेकिन यह केवल मज़बूती से ऐसा नहीं करता है।
जावास्क्रिप्ट (जो मेरे लिए नया है) रनटाइम त्रुटियों पर चुपचाप मर जाता है। इसका मतलब यह भी है कि छोटे और सामान्य बग, जैसे कि चर नाम को याद करना या नल-पॉइंटर में पढ़ना क्रैश नहीं होता है, जब ऐसा होना चाहिए तो आप इसे डीबग कर सकते हैं। उदाहरण के लिए, आपके कार्यक्रम के कुछ हिस्सों ने सिर्फ काम करना बंद कर दिया है, उदाहरण के लिए एक इवेंटहैंडलर, क्योंकि आपने एक चरित्र को गलत / गलत बताया है।
फिर हमारे पास टाइटेनियम में अधिक सरल बग हैं, जैसे कुछ पैरामीटर फ़ंक्शन में काम नहीं कर रहे हैं (जो कम से कम एंड्रॉइड प्लेटफॉर्म पर काफी आम है)।
परीक्षण और त्रुटि डिबग चक्र की गति कई कंप्यूटरों पर टाइटेनियम डेवलपर चलाती है, मैंने देखा कि अड़चन हार्डड्राइव है। एक लैपटॉप पर एक एसएसडी ड्राइव 4200 आरपीएम ड्राइव की तुलना में बिल्ड चक्र को 3-5 गुना तेज बनाता है। डेस्कटॉप पर, RAID 1 (स्ट्रिपिंग मोड) में दोहरी ड्राइव होने से बिल्ड लगभग 25 प्रतिशत तेजी से एकल ड्राइव पर कुछ हद तक सीपीयू के साथ बनाता है और यह एसएसडी ड्राइव लैपटॉप को भी धड़कता है।
सारांश
- इस थ्रेड में टिप्पणियों से प्लेटफ़ॉर्म की संख्या के लिए एक लड़ाई लगती है, जैसे कि यह ऐप के लिए एक उपकरण प्रदान कर सकता है। एपीआई की संख्या प्रमुख विक्रय-बिंदु प्रतीत होती है।
यह बहुत चमकता है जब आप इसका उपयोग करना शुरू करते हैं। यदि आप खुले बगट्रैक को देखते हैं तो आप देखते हैं कि बग की संख्या निश्चित बग की संख्या की तुलना में तेजी से बढ़ रही है। यह आमतौर पर एक संकेत है कि डेवलपर्स बग्स की संख्या को कम करने पर ध्यान केंद्रित करने के बजाय अधिक कार्यक्षमता जोड़ते रहते हैं।
एक सलाहकार के रूप में एक ग्राहक के लिए मल्टीप्लायरों के बजाय सरल एप्लिकेशन देने की कोशिश कर रहा है - मुझे यकीन नहीं है कि यह वास्तव में दो प्लेटफार्मों पर मूल एप्लिकेशन विकास करने से तेज है। यह इस तथ्य के कारण है कि जब आप गति करने के लिए उठते हैं तो आप टाइटेनियम के साथ तेज होते हैं, लेकिन फिर अचानक आप नीचे देखते हैं और अपने आप को एक छेद में इतना गहरा पाते हैं कि आप यह नहीं जानते कि एक वर्कअराउंड के लिए कितने घंटे खर्च करने होंगे। आप बस एक निश्चित समय सीमा / समय / लागत के लिए एक निश्चित कार्यक्षमता का वादा नहीं कर सकते।
अपने बारे में: wxPython के साथ दो वर्षों के लिए पायथन का उपयोग किया गया। (वह GUI असंगत है, लेकिन कभी भी इस तरह नहीं टूटता। यह मैं हो सकता है कि जावास्क्रिप्ट और टाइटेनियम द्वारा उपयोग किए गए थ्रेडिंग मॉडल को नहीं समझा है, लेकिन मैं उनके खुले चर्चा मंचों के अनुसार अकेला नहीं हूं, GUI ऑब्जेक्ट अचानक गलत संदर्भ का उपयोग कर रहे हैं / अद्यतन नहीं कर रहा है .. ???) इससे पहले कि मैं मोबाइल उपकरणों के लिए सी और एएसएम प्रोग्रामिंग में एक पृष्ठभूमि है।
[संपादित करें - बग के साथ जोड़ा गया भाग और थ्रेड सुरक्षित नहीं है] [संपादित करें - अब इसके साथ एक महीने + के लिए काम किया है, ज्यादातर पीसी पर लेकिन कुछ ओएस एक्स पर भी। जोड़ा iPhone और Android दोहरी लक्ष्यीकरण। जोड़ा गया परीक्षण और त्रुटि डिबग चक्र की गति।]