【转】Appcelerator公司开发人员谈Titanium和PhoneGap区别
【原文】ComparingTitaniumandPhoneGap
中文版:http://mobile.51cto.com/web-338270.htm
AcommonquestionIgetaskedatdevelopereventsandconferencesishowTitaniumcomparestoPhoneGap.IthoughtIwouldtakesometimetoexplainhoweachtechnologyworksatahighlevel,andassesshowthetwotechnologiescomparetooneanother.
From10,000feet,PhoneGapandTitaniumappeartobesimilar.Theybothprovidetoolsforcross-platformmobiledevelopment.BothalsorequiretheuseofJavaScriptandwebtechnologiesinsomecapacity.BothTitaniumandPhoneGapareopensourcesoftwarewithpermissivelicenses(theTitaniumMobileSDKisreleasedundertheApache2.0license-PhoneGap,whichmightalsobecalleda“distro”oftheApacheSoftwareFoundation-governedproject“Cordova”,issimilarlylicensed).
Butthat’sreallywherethesimilaritiesend.Whilebothtechnologiesexisttoenablecross-platformmobiledevelopment,thephilosophiesandapproachestosolvingthisproblemhaveverylittleincommon.Also,thebusinessgoalsdrivingeachprojectfromtheperspectiveofthesponsoringcompanies(AdobeforPhoneGapandAppceleratorforTitanium)areverydifferent.Iwillattempt,frommyperspective,todescribethesetechnical,philosophical,andbusinessmodeldifferencesinsomedetailinthetexttofollow.
Also,ifyouweren’talreadyaware,IamalongtimeAppceleratorcontributorandemployee.Thatsaid,Ihaveworkedhardtokeepmytechnicalandphilosophicalassessmentsbasedintechnicalfactandtheexplicitlyexpressedgoalsoftheteamsinvolved.IfyoufeelIhavemadeanypointsthatarefactuallyincorrectormisleadinginsomeway,pleaseletmeknowinthecommentsandIwillupdatethispostasappropriate.
Iwillfirstdescribeatahighlevelhowbothtechnologieswork.Iwillalsodescribehowbothtechnologiesareextendedwithadditionalnativefunctionality.Foreachtechnology,Iwillalsosummarizethekeystrengthsandweaknesseswiththeirchosenapproachtocross-platform.Thetechnicaldifferenceswillquicklybecomeobvious,butaftertheseoverviewsandcomparisons,IwillalsodescribewhatIfeelarethephilosophicalandstrategicdifferencesbetweentheplatformsandwheretheyaregoing.
Let’sstartbyexploringPhoneGapandhowitworks.
WhatisPhoneGapTryingToAccomplish?
ThepurposeofPhoneGapistoallowHTML-basedwebapplicationstobedeployedandinstalledasnativeapplications.PhoneGapwebapplicationsarewrappedinanativeapplicationshell,andcanbeinstalledviathenativeappstoresformultipleplatforms.Additionally,PhoneGapstrivestoprovideacommonnativeAPIsetwhichistypicallyunavailabletowebapplications,suchasbasiccameraaccess,devicecontacts,andsensorsnotalreadyexposedinthebrowser.
Atahigherlevel,PhoneGapmightbeconsideredthevanguardoftheemergingW3CDeviceAPIstandards,astheyattempttobringthatfuturetowebdevelopersinthepresent.Today,noplatformmakeswebapplicationsfirstclasscitizens,thoughMozilla’spromisingBootToGeckoplatformhasachancetochangethat.MicrosoftisalsomakinginterestingstridesforWindows8withregardtofirst-classAPIaccesstowebapplications.ButthegoalofPhoneGapistoseizeasubsetoftheserightsforwebapplicationstoday.
EndUserWorkflow,ToolingandInterfaceforPhoneGap
TodevelopPhoneGapapplications,developerswillcreateHTML,CSS,andJavaScriptfilesinalocaldirectory,muchlikedevelopingastaticwebsite.Infact,somePhoneGapdevelopersciteasabonusofthetoolthattheycandevelopinadesktopwebbrowsermostofthetime,withoutneedingthenativetoolchainatall.
TorunaPhoneGapapplicationonanativeemulator/simulator,developerswillgenerateaprojectforeachofthenativeplatformstheywishtosupport,configurethatproject’s“webroot”directoryinXcode,Eclipse,orwhatevernativetoolchainisneeded,andthenruntheprojectusingthattool.Theprecisestepsareoutlinedintheirgettingstartedguides,perplatform.Often,symboliclinksareusedtoroutethe“www”folderacrossmultiplenativeprojectstoacommondirectorylocation.
Installinganative-wrappedPhoneGapapplicationtoadevicerequiresasimilarworkflow.However,toaugmentthatprocessandalleviatetheneedtohavenativeSDKsinstalledlocally,Nitobi(recentlyacquiredbyAdobe)hadcreatedaservicecalledPhoneGapBuild,whichwillgenerateinstallableapplicationsinthecloud.FunctionalitytosupportPhoneGapbuilddeploymenthasrecentlybeenintegratedintoAdobe’sDreamweavertool.
ThetoolsusedwithPhoneGaparethestandardtoolsofwebdevelopment,suchasFirebug,WebInspector,andyourtexteditorofchoice.ThereisalsoanemergingtoolforremotedebuggingknownasWeinrethatisbecomingmorecommonlyused.Overall,thefactthatyouaredevelopinganativeapplicationatallismostlyabstractduringthedevelopmentprocess.
HowPhoneGapWorks
Aswementionedpreviously,aPhoneGapapplicationisa“native-wrapped”webapplication.Let’sexplorehowthewebapplicationis“wrapped”.
ManynativemobiledevelopmentSDKsprovideawebbrowserwidget(a“webview”)asapartoftheirUIframework(iOSandAndroid,forexample).Inpurelynativeapplications,webviewcontrolsareusedtodisplayHTMLcontenteitherfromaremoteserver,orlocalHTMLpackagedalongwiththenativeapplicationinsomeway.Thenative“wrapper”applicationgeneratedbyPhoneGaploadstheenddeveloper’sHTMLpagesintooneofthesewebviewcontrols,anddisplaystheresultingHTMLastheUIwhentheapplicationislaunched.
IfJavaScriptfilesareincludedinapageloadedbyawebview,thiscodeisevaluatedonthepageasnormal.However,thenativeapplicationwhichcreatesthewebviewisableto(indifferentways,dependingontheplatform)asynchronouslycommunicatewithJavaScriptcoderunninginsideofthewebview.Thistechnologyisusuallyreferredtoas“thebridge”inthecontextofPhoneGaparchitecture-the“bridge”meanssomethingslightlydifferentinTitanium,aswewillseelater.
PhoneGaptakesadvantageofthistocreateaJavaScriptAPIinsideawebviewwhichisabletosendmessagestoandreceivemessagesfromnativecodeinthewrapperapplicationasynchronously.Thewaythebridgelayerisimplementedisdifferentperplatform,butoniOS,whenyoucallforalistofcontacts,yournativemethodinvocationgoesintoaqueueofrequeststobesentoverthebridge.PhoneGapwillthencreateaniframewhichloadsaURIscheme(“gap://”)thatthenativeappisconfiguredtohandle,atwhichpointallthequeuedcommandswillbeexecuted.CommunicationbackintothewebviewisdonebyevaluatingastringofJavaScriptinthecontextofthewebviewfromnativecode.
ThereismuchmoretoPhoneGapthanthat,butthemessagingfromwebviewtonativecodeviathebridgeimplementationisthekeypieceoftechnologywhichallowslocalwebapplicationstocallnativecode.
ExtendingPhoneGap
WritingnativeextensionsforPhoneGaprequiresthatyou:
WriteaJavaScriptinterfaceforyourextensionwhichwillusePhoneGap’sAPItoqueueupmessagestobesenttonativecode.
Registeryourextensionwiththenativeprojectinsomeway-oniOSthisisdoneintheCordova.plistfile.
WritenativecodethatPhoneGapwillrouterequeststofromthewebview,andimplementanynativecodeneeded
Basically,developerscanparticipateinthesameasynchronousmessagingsystemwhichpowersthecorePhoneGapnativeAPIs.
StrengthsofthePhoneGapApproach
Inmyestimation,PhoneGap’sprimaryarchitecturalstrengthisthatitissosmallandsimple.Itdoeswhatitdoes,anditdoesthatwell.ThePhoneGapteamhasintentionallyimplementedonlythelowestcommondenominatorofnativeAPIsforthewebbrowser-basedapp.BecausethenativeAPIsetissosmall,ithasbeenrelativelyeasytoportPhoneGaptomanydifferentenvironments.BasicallyanynativeplatformthatsupportsawebvieworwebruntimecanbeaPhoneGapplatform.
Non-visualnativeextensionsinPhoneGaparealsoverysimple.Therequirementsforregisteringnativecodetoreceivemessagesfromthewebviewareverymodest.Simplenativeextensionscanbedevelopedrapidly.Thisplug-inarchitecturewasalsowellexecutedinmyopinion.
ThereisalsostrengthinthefactthatnativeAPIsandnativeappdevelopmentarealmostcompletelyabstracttotheenddeveloper.AnyonewhocanwriteHTML,CSS,andevenasmallbitofJavaScriptcanwrapupawebpageinanativeappanddistributeitassuch.ThebarriertoentryinusingPhoneGaptopackagewebpagesasnativeappsisextremelylow.
WeaknessesofthePhoneGapApproach
ThequalityoftheuserinterfaceinaPhoneGapapplicationwillvarybasedonthequalityofthewebviewandrenderingengineontheplatform.TheWebkit-basedrenderingengineoniOSisstrong,andprovidesthebestperformance.TheAndroidwebviewisfunctional,buthassomenotablelimitations.Onotherplatforms,thewebviewperformancecanbesuspectdependingontheOSversion.
Therearealsothestandardcross-browserissueswebdevelopershavealwayshadtodealwith.UIswillneedtoemployprogressiveenhancement,mediaqueries,andthatentirebagoftrickstoremainusableonmultipleplatforms.IthelpsthatmanymobileplatformsareadoptingWebkit,buttherearestillsignificantdifferenceseveninWebkitbasedenvironments.
Mobilebrowsersaregettingbetterallthetime,whichwillhelpmitigatethoseproblems.Butapproachingnative-qualityUIperformanceinthebrowserisanon-trivialtask-Senchaemploysalargeteamofwebprogrammingexpertsdedicatedfull-timetosolvingthisproblem.Evenso,onmostplatforms,inmostbrowserstoday,reachingnative-qualityUIperformanceandresponsivenessissimplynotpossible,evenwithaframeworkasadvancedasSenchaTouch.Isthebrowseralready“goodenough”though?Itdependsonyourrequirementsandsensibilities,butitisunquestionablylessgoodthannativeUI.Sometimesmuchworse,dependingonthebrowser.
PhoneGapalsocannotbeextendedwithnativeuserinterface.Theenddeveloper’sapplicationitsselflivesinsideawebview,anduserinterfaceisrenderedinHTML.OnecanmessagetonativecodeandcreatenativeUIthatgoeson,over,above,oradjacenttothewebview,butit’sdifficultorimpossibletointegrateadynamic,HTMLDOM-basedUIwithnativeUIcomponents.Appceleratorwouldknow-wetriedtoassociatenativeUIwithDOMelementsearlyon,andneededtoscrapthateffortastheresultswereunpredictableandofinsufficientquality.
Thereisalsotheotheredgeofthe“lowestcommondenominator”sword.VeryfewnativeAPIsareexposedtoPhoneGapapplicationsbydefault,whichmakesplatformintegrationlimited.Thereareavarietyofplug-insthatexisttoplugsomeoftheseholes,butinmypersonalexperiencetheyhavevariedinqualityandmaintenance.Thiscouldverywellcontinuetoimproveovertimethough-thereisastrongcommunityaroundPhoneGap.
We’lldivemoreintothephilosophicalaspectsofPhoneGapsoon,butlet’sexplorethesesametechnicalareasforTitaniumfirst.
WhatisTitaniumTryingtoAccomplish?
ThegoalofTitaniumMobileistoprovideahighlevel,cross-platformJavaScriptruntimeandAPIformobiledevelopment(todaywesupportiOS,Android,andthebrowser,withBlackBerry10andWindowsPhonecomingsoonandeventually,respectively).TitaniumactuallyhasmoreincommonwithMacRuby/HotCocoa,PHP,ornode.jsthanitdoeswithPhoneGap,AdobeAIR,Corona,orRhomobile.Titaniumisbuiltontwoassertionsaboutmobiledevelopment:
ThereisacoreofmobiledevelopmentAPIswhichcanbenormalizedacrossplatforms.Theseareasshouldbetargetedforcodereuse.
Thereareplatform-specificAPIs,UIconventions,andfeatureswhichdevelopersshouldincorporatewhendevelopingforthatplatform.Platform-specificcodeshouldexistfortheseusecasestoprovidethebestpossibleexperience.
Soforthosereasons,Titaniumisnotanattemptat“writeonce,runeverywhere”.Wethinktherearegreat,user-experienceenhancingfeaturesacrossmultipleplatformsthatdevelopersshouldbeusing.Wethinkthatnativeappsshould,whereappropriate,takeadvantageoffamiliar,high-performancenativeUIwidgets.However,wethinkitisunnecessarythatnativedevelopersneedtolearnplatform-specificAPIstodrawarectangle,ormakeanHTTPrequest.
TitaniumisanattempttoachievecodereusewithaunifiedJavaScriptAPI,withplatform-specificfeaturesandnativeperformancetomeetuserexpectations.WhenyouwriteaTitaniumapplication,youarewritinganativeapplicationinJavaScript.Titaniumshouldbeconsideredaframeworkforwritingnativeapps,versusanabstractionfromtheactualplatformyouaretargeting.
EndUserWorkflow,Tooling,andInterfaceforTitanium
TodevelopnativeapplicationswithTitanium,thedeveloperisrequiredtoinstallthenativetoolchainsforiOSandAndroid.Afterthosetoolsareinstalled,however,thedeveloperusuallyonlyinteractswiththeTitaniumSDK’sscriptinginterface(todayPythonbased).Thisisdoneeitherdirectlythroughthecommandlineor(morecommonly)throughTitaniumStudio,ourEclipse-basedIDE.
UsingtheTitaniumtoolset,youwillgenerateanapplicationprojectdirectorywhichcontainsaconfigurationfile,localizationfiles,andadirectorytocontaintheimages,assets,andJavaScriptsourceyouwillbewritingtopoweryourapplication.Youwillnot,bydefault,beeditingHTMLandCSSfiles,unlessyouintendtocreateahybrid-typeapplicationwhichcontainsbothnativeandHTML-basedUI.Titaniumapplicationscanandoftendoemploya“hybrid”(nativeandweb)UI,likeFacebook’snativeapplicationforinstance.Inthisway,onecouldactuallyimplementPhoneGapwithTitanium,butthat’soutofscopeforthisdiscussion.
Usingthistoolchain,yourapplicationisrunusingtheactualem/simulatorsfortheplatformsyou’retargeting.TitaniumStudioalsoprovidesstep-throughdebugging,codecompletion,andotherIDE-levelfeatures.
Installingtoadevicefortestingisalsotypicallydoneusingourbuildsystem.InStudioweprovideawizardinterfacetoconfigureanycode-signingdependencies,andthenhandlethedeploymentofyourapplicationtoaconnecteddevice.Youcanalsousethenativetoolchainstodeployorpackageyourapplications,ifthatisyourpreference.
Whenitcomestimetoshipyourapplicationtothestores,ourbuildsystemwillhandlethecreationofthefinalapplicationpackagesforyou.Thisisdonelocallyonthedeveloper’smachineusingthenativetoolchains.Theuploadprocesswillbethesameasitisfornative-onlydevelopers.
WhiledevelopingaTitaniumapplication,theunderlyingtoolchainsaremostlyabstract.Theymustbepresentfordevelopment,buttheenddeveloperisrarelyrequiredtousethemdirectly.Thefactthatnativeappsarebeingdeveloped,however,isnotabstract.Userinterfacesarecreatedwithcross-platformANDplatform-specificcomponents,andyourapplicationsshouldbedealingwiththingslikebackgroundservices,localnotifications,appbadges,configuration,activities/intents(onAndroid)…allthingsthatareexposedviatheTitaniumJavaScriptAPI.
HowTitaniumWorks
There’squiteabithappeningbehindthescenesinaTitaniumapplication.Butbasically,atruntime,yourapplicationconsistsofthreemajorcomponents-yourJavaScriptsourcecode(inlinedintoaJavaorObjective-Cfileandcompiledasanencodedstring),theplatform-specificimplementationoftheTitaniumAPIinthenativeprogramminglanguage,andaJavaScriptinterpreterthatwillbeusedtoevaluateyourcodeatruntime(V8(default)orRhinoforAndroid,orJavaScriptCoreforiOS).Exceptinthebrowser,ofcourse,wherethebuilt-inJavaScriptenginewillbeused.
Whenyourapplicationislaunched,aJavaScriptexecutionenvironmentiscreatedinnativecode,andyourapplicationsourcecodeisevaluated.InjectedintotheJavaScriptruntimeenvironmentofyourapplicationiswhatwecall“proxy”objects-basically,aJavaScriptobjectwhichhasapairedobjectinnativecode.Colloquiallywewilloftenreferto“JavaScriptland”and“nativeland”inaTitaniumapplication,astheyarekindofparalleluniversestooneanother.TheproxyobjectexistsbothinJavaScriptlandandnativeland,andservesasthe“bridge”betweenthetwo.
InyourJavaScriptcode,whenyoucallafunctionontheglobalTitaniumorTiobject,suchasvarb=Ti.UI.createButton({title:'PokeMe'});,thatwillinvokeanativemethodthatwillcreateanativeUIobject,andcreatea“proxy”object(b)whichexposespropertiesandmethodsontheunderlyingnativeUIobjecttoJavaScript.
UIcomponents(viewproxies)canbearrangedhierarchicallytocreatecomplexuserinterfaces.Proxyobjectswhichrepresentaninterfacetonon-visualAPIs(likefilesystemI/Oordatabaseaccess)executeinnativecode,andsynchronously(orasynchronouslyforAPIslikenetworkaccess)returnaresulttoJavaScript.
HopefullythishelpsdirectlyaddresstwocommonmisconceptionsaboutTitanium-atnopointdoesTitaniumrequiretheuseofawebviewcomponent.ThedevelopercancreateawebviewasanativeUIwidget,butthewebviewisnotusedtoevaluateTitaniumsourcecode.NorisJavaScriptcodecross-compiledtoObjective-CorJavainTitanium.YourJavaScriptsourceisevaluatedatruntime.
ExtendingTitanium
Titaniumisextensiblewithbothnon-visualandUIcapabilitiesinnativecode.ByimplementingaProxyand/orViewProxyinterfaceinnativecode,developerscancreatenewnativefunctionalityforTitaniumapplicationsexposedinJavaScript.WeexposethesameinterfaceweusetocreateTitanium’sowninternalinterfacetomoduledevelopersbothoniOSandAndroid.
StrengthsoftheTitaniumApproach
SincethegoalofTitaniumistoprovideahigherlevelAPIfornativemobiledevelopmentacrossplatforms,youwillgetaccesstoawidearrayofnativefeaturesandfunctionalityoutofthebox,fromuserinterfacecomponentstosocketinterfacestonotificationsystemintegration.ThegoalofTitaniumistoreducethefunctionalitygapbetweenTitaniumandpurenativeappstosomethingapproachingzero.We’relikelytoneversupportanentireplatform’sAPIoutofthebox,butwewanttocover90%ofthemostcommonusecasesandprovideaplatformwheretheother10%canbeaddedbypeoplethatneedit.
SinceTitaniumcanbeextendedwithvisualcomponentsthatplugintothesameviewhierarchyastherestoftheapplication,you’reableto(ultimately)implementanyuserinterfacethatispossibleontheunderlyingnativeplatform.NeedaTableViewtoscrollat60fpswithspecialnativecode?Youcandothat.WanttoseamlesslyintegrateanOpenGLdrawingsurfaceforagame,andkeepthelogicfortherunloopinJavaScript?Youcandothat.YoucanintegratetheseUIextensionsdirectlyintotherestofyourapplicationbuiltwiththecoreTitaniumAPIs.
ThelookandfeelofaTitaniumapplication,whenusingcommonUIwidgets,isalsoastrengthoftheplatform.Thereisnovisualemulationgoingon(eitherthroughtheapplicationofCSS,orrenderingofUIwidgetsusingOpenGLorFlash).WhenyoucreateaNavigationGroup,itisbackedbyanactualUINavigationControlleroniOS.Theanimationsandbehaviormatchwhatanativeappuserwillexpect,becauseyou’reusingthesameUIcontrol.
SinceTitaniumprovidesahighlevelnativeprogrammingAPIinJavaScript,thebarriertoentryfornativeprogrammingissignificantlyreducedforanyonewhohasusedanECMAScriptbasedlanguage(whichisalotofdevelopers).Atwood’sLawisaliveandwellthroughTitanium.
WeaknessesoftheTitaniumApproach
ThescopeoftheTitaniumAPImakestheadditionofnewplatformsdifficult-implementingtheTitaniumAPIonanewnativeplatformisamassiveundertaking.Forthatreason,theTitaniumplatformisonlyavailableonwhathavebeendeemedthemostcriticalmobileplatformsatpresent:iOS,Android,andtheweb.
OurmobilewebbrowsersupportisnotyetofGAquality-wearecontinuingtoworkontheperformanceandfeelofourUIwidgetset,aswellasroundingouttheimplementationofourcoreTitaniumAPIs.
BecausethelayerofabstractionprovidedbyTitaniumislarge,sub-optimalAPIimplementationsremaininourowninternalframework.Someuserinterfacecomponentsdonotyetperformaswellastheirnativecounterpartsundersomecircumstances,suchasverylargetableviewswithhighlycustomizedlayouts.Optimizingourcoreuserinterfacecomponentsremainstheprimaryengineeringtaskforourteam.Aswefixbugsandhardwareimproves,weareseeingthisbecomelessofanissue.Wealsofindthatinformationarchitecture,especiallyforlargedatasets,needstobeappliedinmanycases.
AlsoowingtotheambitiousnessoftheTitaniumplatform,extendingTitaniumisnon-trivial.AgoodworkingknowledgeofTitanium’sarchitectureandtheenvironmentisnecessarytoeffectivelyintegrateanewnativecontrolorAPI.Thedeveloperexperience,APIdocs,andhighlevelguidesformoduledeveloperswereimprovedalotwithourlatest2.0release,butremainanareaoffocusforus.
PhilosophicalDifferences
Bynow,IwouldhopethatthetechnicaldifferencesbetweenPhoneGapandTitaniumareprettyclear.Butbeyondthosedifferences,thegoalsanddirectionofeachprojectaredifferentaswell.ThestatedgoalofthePhoneGapprojectisto,eventually,ceasetoexist.Asstatedearlier,PhoneGapisintendedtobetheleadingimplementationofemergingbrowserstandardsarounddeviceAPIs.Intheory,oncebrowservendorsimplementthefeaturesofPhoneGap,theplatformwillnolongerbenecessary.PhoneGapitsselfisn’tintendedtobeaplatform-it’sashimtoaddnativeapp-likefunctionalitytowebapplications.Thewebisintendedtobetheplatform.
PhoneGap’snewsponsoringorganization,Adobe,isalsoverymuchinterestedintheadvancementofthewebasaplatform.Inrecentmonths,AdobehasbeenaggressivelybuildingouttoolstoenablethedevelopmentofHTML5/CSS3webapplications.Itseemsobvioustome(andmanyothers)thatAdobeseesadiminishingroleforFlashasstandardwebtechnologiesevolve.
Atit’score,Adobeisatoolsbusiness.PlatformsareachannelthroughwhichAdobecanselltools.Once,thatplatformwasFlash.Now,thatplatformisthewebbrowser(inadditiontoFlash).Idon’tknowpreciselyhowPhoneGapfactorsintoAdobe’sproductroadmap,butinalotofwaysitservesasimilarpurposeasFlash.PhoneGapisanattempttocreateanabstractruntimeenvironmenttoenablecross-platformdeployment.
IfAdobecanselltoolstodevelopfortheweb,andthewebcanbeusedtodevelopmoretypesofapplications,thenthat’saclearwinforAdobe.Whichisfine,bytheway-nothingwrongwithsellingtools.
It’sworthnoting,however,thatAdobeisnotthegoverningbodyoftheCordovaproject,onwhichPhoneGapisnowbased.ThatprojectisownedandgovernedbytheApacheSoftwareFoundation.Itremainstobeseenwhattheinterplayisgoingtobebetweenthetwoprojects,butmygutinstinctisthattheywon’tdivergemuch.Ithinktheirgoalswillremainphilosophicallyaligned.
Appceleratorisalsointerestedinandsupportiveoftheadvancementofthewebasaplatform.Everyonewinswhenthewebgetsstrongerasanapplicationplatform.Thedifferenceisthatweviewthewebasonegreatplatformamongothers,withauniquecharacterandsetofstrengthsandweaknesses.Wedon’texpectthewebtobecometheonlymobileapplicationplatform.WethinkthatplatformslikeiOS,Android,BlackBerry,WindowsPhone,andthelikewillcontinuetobeinfluential,andwillprovidegreatexperiencesforusers.Thatchoiceandcompetitionwillbeagoodthingforconsumers,butwillremainaproblemfordevelopers.
WhatweexpecttoprovidefordevelopersthroughTitaniumisawaytotargetthewebandnativeplatformsfromasinglecodebase,whileretainingthefeatures,performance,andtightplatformintegrationthattheusersofthatplatformexpect.Weexpecttobuildanenduringplatformformobileclientdevelopment,withservicesandtoolstospeedupthatprocess.Wearenotatoolscompany-weareaplatformcompany,andoursuccesswillbelinkedtothesuccessofdevelopersontopofourplatform.Overtime,wehopetobuildanopensourceplatformcompanyinthespiritofRedHatandothergiantsinthatspace.
Whichtoolorapproachisrightforyou?Likeallthingsinsoftwaredevelopment,itdepends.Therearenosilverbullets.Buthopefullythisdescriptionandcomparisonwillhelpyoumaketherightchoiceforyoursituation.