<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Weird rocketry &#187; titanium</title>
	<atom:link href="http://webapp.org.ua/tag/titanium/feed" rel="self" type="application/rss+xml" />
	<link>https://webapp.org.ua</link>
	<description>Flights to outer code</description>
	<lastBuildDate>Sat, 16 Jul 2016 11:12:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Phonegap vs. Titanium</title>
		<link>https://webapp.org.ua/dev/phonegap-vs-titanium/</link>
		<comments>https://webapp.org.ua/dev/phonegap-vs-titanium/#comments</comments>
		<pubDate>Mon, 02 Jul 2012 13:59:46 +0000</pubDate>
		<dc:creator>bananos</dc:creator>
				<category><![CDATA[dev]]></category>
		<category><![CDATA[comparison]]></category>
		<category><![CDATA[cross-platform]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[phonegap]]></category>
		<category><![CDATA[titanium]]></category>

		<guid isPermaLink="false">http://webapp.org.ua/?p=214</guid>
		<description><![CDATA[For a while we&#8217;ve been spiking on different solutions to implement mobile app for our platform, and here are some of my initial thoughts on the problem.  Given that I&#8217;m too lazy and not so enthusiastic about Objective-C for iOS or Java for Android I was searching for some solution which could deliver value from both worlds [...]]]></description>
			<content:encoded><![CDATA[<p>For a while we&#8217;ve been spiking on different solutions to implement mobile app for our platform, and here are some of my initial thoughts on the problem.  Given that I&#8217;m too lazy and not so enthusiastic about Objective-C for iOS or Java for Android I was searching for some solution which could deliver value from both worlds with minimum initial effort.</p>
<h2>Phonegap (hybrid approach)</h2>
<p><a href="http://phonegap.com/"><img class="aligncenter size-full wp-image-267" title="Phonegap logo" src="http://webapp.org.ua/wp-content/uploads/2012/05/Logo.png" alt="" width="512" height="512" /></a></p>
<p>&nbsp;</p>
<h3>Pros</h3>
<ul>
<li> Ability to develop apps in HTML5 ( means more web devices are captured)</li>
<li>Overall speed of iterative development is high (it&#8217;s almost like refreshing the page)</li>
<li>Easy to debug (remote WebKit console in Emulator)</li>
<li>It&#8217;s JavaScript!</li>
<li>Huge amount of JS-frameworks for touch devices (Sencha, iUI, jQuery mobile, iWebkit, etc) ready for use</li>
<li>Ability to make bindings to native hardware by writing Objective-C plugins</li>
<li>Good  documentation &amp; large community</li>
</ul>
<p><span id="more-214"></span></p>
<h3>Cons</h3>
<ul>
<li>Overall performance of demos is poor</li>
<li>Contact list demos with huge amount of data just crash Safari (tested on hardware)</li>
<li>Building custom GUI is limited by HTML/CSS, there is a huge risk of ending up with unresponsive UI</li>
<li>A particular weakness of Phonegap is that it&#8217;s being migrated into Apache incubator &amp; development/docs seem a bit messy</li>
<li>Adobe recently bought Phonegap &amp; most probably their focus will shift towards Adobe&#8217;s AIR platform</li>
</ul>
<h2>Titanium (native approach)</h2>
<p><a href="http://www.appcelerator.com/"><br />
<img class="aligncenter size-full wp-image-270" title="titanium_logo" src="http://webapp.org.ua/wp-content/uploads/2012/07/titanium_logo.png" alt="" width="512" height="512" /></a></p>
<h3>Pros</h3>
<ul>
<li>Javascript, no need for Objective-C</li>
<li>Resulting app is Native!</li>
<li>Possibility to fully customize GUI</li>
<li>Produce HTML5 version of your application (works in browser!)</li>
<li>Ability to write cross-platform code for Android as well (also native!)</li>
<li>Titanium IDE (a free integrated development environment based on Eclipse, <a href="http://techcrunch.com/2011/01/18/appcelerator-acquires-web-app-development-suite-aptana/">ex-Aptana</a>)</li>
<li>Ability to make bindings to native hardware by writing Objective-C plugins</li>
<li>A shift towards iPhone development first (Android comes second) — which is adequate for current market shares of both</li>
<li>Community &amp; company behind Titanium seems to be pretty responsive</li>
<li><a href="http://venturebeat.com/2011/11/01/appcelerator-raises-15m/">Appcelerator recently raised 15 million series C funding</a>, which means they are serious about the platformm &amp; will<br />
continue to improve it</li>
<li>Appcelerator is known to be largest third-party app publisher on both iOS and Android and is used by companies like NBC, Zipcar, eBay</li>
</ul>
<h3>Cons</h3>
<ul>
<li>Even though it&#8217;s Javascript, you&#8217;ll have to learn Titanium mobile API</li>
<li>Some developers had <a href="http://usingimho.wordpress.com/2011/06/14/why-you-should-stay-away-from-appcelerators-titanium/">hard time debugging their apps</a> &amp; catching memory leaks</li>
<li>Documentation is somewhat messy &amp; not as perfect if compared to Phonegap, however there is a positive improvement trend since the beginning of this year</li>
<li>A sort of platform lock-in, which means that in the long run it will be way too hard to switch to other mobile technology</li>
</ul>
<blockquote><p>Just to make it clear, Titanium does not produce fully native code from your javascript. It does not compile your code to ARM  opcodes, what it does, in fact,<br />
is binary javascript interpreter (Webkit&#8217;s JavascriptCore on iPhone, V8 on Android)</p></blockquote>
<h2>A note on hybrid approach</h2>
<p>By hybrid approach I mean usage of HTML5/javascript with hooks into native iOS/Android API calls.</p>
<p>Of course, both Titanium and Phonegap fall into the category of &#8220;hybrid&#8221; but the key difference is implementation:<br />
while Phonegap application runs inside browser, Titanium&#8217;s app runs inside javascript interpreter</p>
<p>Hybrid approach seemed like a real option, but in fact for custom/responsive GUI app you&#8217;ll inevitably need a lot of<br />
code to support native UI.  Hybrid works for small features like accessing accelerometer, camera, phone&#8217;s contacts, etc.</p>
<p>It seems that creating complex &amp; responsive UI in HTML5 is not really possible, thus UX will be pretty<br />
limited. Hybrid approach for the UI part is not a good fit from the development point of view:</p>
<ul>
<li>Large amount of platform specific UI code (Obj-C) + javascript leads to technology fragmentation which is generally bad</li>
<li>a lot of quirks to connect native platform &amp; javascript app leads to poor app design which will hurt you in long run</li>
</ul>
<h2>Conclusion</h2>
<p>As you might guess, in the end it all comes to what type of application you&#8217;re going to build. If it&#8217;s mostly data-access, satellite mobile<br />
application to your mainline app, than Titanium might be an option to consider. If you&#8217;re building something more similar to Path,<br />
you&#8217;d better start right from hiring Objective-C folks.</p>
<p>And yet another warning, if you&#8217;re looking for cross-platform mobile application development, Titanium might not be a good choice.<br />
Bad news, there&#8217;s no silver bullet here. Though, it does provide some mechanisms to do it well, but the dream of writing one single codebase<br />
and ability to produce native apps for multiple platforms is very hard to achieve.</p>
<ul>
<li>Native app for iPhone &amp; Android (rich UX, more happy users)</li>
<li>Huge company behind Titanium,  paid support which means you&#8217;ll not be left with your problems alone</li>
<li>Hundreds of successful apps already made with Titanium which fit Nimble API model (i.e. they are not standalone)</li>
</ul>
<table>
<tbody>
<tr>
<th></th>
<th>Phonegap</th>
<th>Titanium</th>
</tr>
<tr>
<th>Language</th>
<td>Javascript</td>
<td>Javascript</td>
</tr>
<tr>
<th>Dev toolkit</th>
<td>poor</td>
<td>IDE, almost full integration</td>
</tr>
<tr>
<th>Custom GUI</th>
<td>Bound by browser&#8217;s CSS engine</td>
<td>Native capabilities</td>
</tr>
<tr>
<th>3-rd party native plugins</th>
<td>Yes</td>
<td>Yes, there is even marketplace</td>
</tr>
<tr>
<th>Community</th>
<td>Large</td>
<td>Large</td>
</tr>
<tr>
<th>Documentation</th>
<td>Good</td>
<td>Good</td>
</tr>
<tr>
<th>JS skills required</th>
<td>Web-dev is enough</td>
<td>Need to learn custom APIs</td>
</tr>
<tr>
<th>App performance</th>
<td>Mediocre</td>
<td>Good</td>
</tr>
<tr>
<th>Debugging</th>
<td>Easy</td>
<td>Hard</td>
</tr>
<tr>
<th>iPhone support</th>
<td>Yes</td>
<td>Yes, first-class</td>
</tr>
<tr>
<th>Android support</th>
<td>Yes</td>
<td>Yes, second-class</td>
</tr>
</tbody>
</table>
<h2>References</h2>
<ul>
<li><a href="http://www.quora.com/Path-company-product/Is-Path-built-with-PhoneGap">Phonegap giveaways on CSS animations and location services</a></li>
<li><a href="http://www.mobileapptesting.com/native-app-or-html5-pandora-says-yes/2011/10/">Native app or html5?</a></li>
<li><a href="http://stackoverflow.com/questions/4217551/what-happens-to-javascript-code-after-app-is-compiled-using-titanium-mobile/4798547">How Titanium really works? </a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>https://webapp.org.ua/dev/phonegap-vs-titanium/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Preparing AdHoc distribution in Titanium Mobile</title>
		<link>https://webapp.org.ua/dev/preparing-adhoc-distribution-in-titanium-mobile/</link>
		<comments>https://webapp.org.ua/dev/preparing-adhoc-distribution-in-titanium-mobile/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 16:39:26 +0000</pubDate>
		<dc:creator>bananos</dc:creator>
				<category><![CDATA[dev]]></category>
		<category><![CDATA[adhoc]]></category>
		<category><![CDATA[distribution]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ios code signing]]></category>
		<category><![CDATA[ios provisioning]]></category>
		<category><![CDATA[ipa]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[titanium]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://webapp.org.ua/?p=218</guid>
		<description><![CDATA[Appcelerator Titanium is a very promising technology which allows you to write native mobile applications in Javascript for both iPhone &#38; Android. After playing around a bit with Titanium Mobile, I decided to showcase technology strengths to our stakeholders, particularly by letting them use KitchenSink demo for iOS. In order to distribute iOS application into [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-224 alignright" title="TITANIUM_logo1" src="http://webapp.org.ua/wp-content/uploads/2012/02/TITANIUM_logo1.png" alt="" width="325" height="325" /></p>
<p><a title="Appcelerator" href="http://www.appcelerator.com/">Appcelerator Titanium</a> is a very promising technology which allows you to write native mobile applications in Javascript for both iPhone &amp; Android.</p>
<p>After playing around a bit with Titanium Mobile, I decided to showcase technology strengths to our stakeholders, particularly by letting them use KitchenSink demo for iOS.</p>
<p>In order to distribute iOS application into real hardware you&#8217;ll have to pass through a bunch of  Apple&#8217;s obstacles including:</p>
<ul>
<li>Registering as an apple developer &amp; getting valid certificate</li>
<li>Registering your app ID</li>
<li>Creating provisioning profile for specific iPhone UDIDs</li>
<li>Mess around with certificates/private keys to properly sign your application</li>
</ul>
<p>It turns out that it&#8217;s not that easy to produce valid AdHoc distribution of your iOS app in Titanium, in this post I&#8217;m going to show you how to do it.</p>
<p>&nbsp;</p>
<p><span id="more-218"></span></p>
<p>Before we start, make sure you have latest Xcode &amp; Titanium SDK/Studio installed, as of the time of this writing Xcode version was 4.2.1, and Titanium mobile SDK was 1.8.1</p>
<p>For demo purposes we&#8217;ll use <a href="https://github.com/appcelerator/KitchenSink">KitchenSink</a> application provided as a showcase of Titanium mobile:</p>
<h2>Clone &amp; run KitchenSink in emulator</h2>
<pre><code>git clone https://github.com/appcelerator/KitchenSink.git</code></pre>
<p>Open <a href="http://www.appcelerator.com/products/titanium-studio/">Titanium Studio</a> and select <code>File-&gt;Import-&gt;Import Existing Titanium Project</code></p>
<p><a href="http://webapp.org.ua/wp-content/uploads/2012/02/tisdtudio_import_existing.png"><img class="aligncenter size-full wp-image-227" title="tisdtudio_import_existing" src="http://webapp.org.ua/wp-content/uploads/2012/02/tisdtudio_import_existing.png" alt="" width="616" height="550" /></a></p>
<p>&nbsp;</p>
<h3>Configure project for iphone only</h3>
<p><a href="http://webapp.org.ua/wp-content/uploads/2012/02/ti_configure-1.png"><img class="aligncenter size-full wp-image-238" title="ti_configure" src="http://webapp.org.ua/wp-content/uploads/2012/02/ti_configure-1.png" alt="KitchenSink configuration" width="803" height="729" /></a></p>
<h3>Run project on iOS simulator</h3>
<p><a href="http://webapp.org.ua/wp-content/uploads/2012/02/Run_on_simulator.png"><img class="aligncenter size-full wp-image-239" title="Run_on_simulator" src="http://webapp.org.ua/wp-content/uploads/2012/02/Run_on_simulator.png" alt="KitchenSink on iOS simulator" width="923" height="724" /></a></p>
<p>At this point,  Titanium will create an Xcode project for KitchenSink application. Wait for it to compile and run, then exit Simulator.</p>
<h2>Open generated Xcode project</h2>
<p><a href="http://webapp.org.ua/wp-content/uploads/2012/02/Screen-Shot-2012-02-14-at-4.58.17-PM.png"><img class="aligncenter size-full wp-image-241" title="Titanium mobile xcode project" src="http://webapp.org.ua/wp-content/uploads/2012/02/Screen-Shot-2012-02-14-at-4.58.17-PM.png" alt="Titanium mobile xcode project" width="414" height="335" /></a></p>
<p>Run Xcode, and open <code>KitchenSink.xcodeproj</code> , Objective-C code could be found at <code>kitchensink/build/iphone</code></p>
<h3>Manage project schemas</h3>
<p>In Xcode, open <code>Product-&gt;Edit scheme:</code></p>
<p><a href="http://webapp.org.ua/wp-content/uploads/2012/02/xcode_project_schema.png"></a><a href="http://webapp.org.ua/wp-content/uploads/2012/02/xcode_project_schema-1.png"><img class="aligncenter size-full wp-image-244" title="xcode project schema" src="http://webapp.org.ua/wp-content/uploads/2012/02/xcode_project_schema-1.png" alt="Xcode project schema" width="900" height="699" /></a><br />
For each schema (<code>KitchenSink, KitchenSink-iPad, KitchenSink-universal</code>)  select <code>Archive</code> and make sure that<br />
<code>Build Configuration</code> is set to <code>debug</code></p>
<p>&nbsp;</p>
<h2>Configure code signing for build targets</h2>
<p>For each target, select <code> Build Settings -&gt; Code Signing -&gt; Code Signing  Identity </code></p>
<p><a href="http://webapp.org.ua/wp-content/uploads/2012/02/code_signing.png"><img class="aligncenter size-full wp-image-245" title="code_signing" src="http://webapp.org.ua/wp-content/uploads/2012/02/code_signing.png" alt="code signing configuration for Titanium" width="909" height="699" /></a></p>
<p>Make sure to select valid provisioning identity that you previously created on Apple&#8217;s provisioning portal for a particular iOS device/application. In my case, it was called <code>com.nimble.KitchenSink</code> and provisioning profile was called <code>KitchenSink_AdHoc</code>.  For identities to be recognized by Xcode you should have been installed Apple Developer&#8217;s certificate as well as your organization certificate into MacOS keychain.</p>
<h2>Archive (produce final IPA file)</h2>
<p>Select <code>KitchenSink</code> target, then from the main menu choose <code>Product-&gt;Archive</code></p>
<p><a href="http://webapp.org.ua/wp-content/uploads/2012/02/Screen-Shot-2012-02-14-at-5.49.33-PM.png"><img class="aligncenter size-full wp-image-250" title="Xcode archive" src="http://webapp.org.ua/wp-content/uploads/2012/02/Screen-Shot-2012-02-14-at-5.49.33-PM.png" alt="Produce IPA file" width="677" height="546" /></a></p>
<p>Wait for Xcode to compile &amp; archive. You may find resulting Archive in Xcode Organizer:</p>
<p><a href="http://webapp.org.ua/wp-content/uploads/2012/02/kitchensink_archive-1.png"><img class="aligncenter size-full wp-image-254" title="kitchensink archive" src="http://webapp.org.ua/wp-content/uploads/2012/02/kitchensink_archive-1.png" alt="Kitchensink archive" width="848" height="338" /></a></p>
<p>Click &#8220;Share&#8221; and provide the same identity which was used for <code>Code Signing</code> section above:</p>
<p><a href="http://webapp.org.ua/wp-content/uploads/2012/02/ipa_provisioning.png"><img class="aligncenter size-full wp-image-257" title="ipa_provisioning" src="http://webapp.org.ua/wp-content/uploads/2012/02/ipa_provisioning.png" alt="IPA provisioning" width="728" height="491" /></a></p>
<p>Save resulting IPA file along with corresponding <code>KitchenSink_Adhoc.mobileprovision</code>   profile.</p>
<p>&nbsp;</p>
<h2>Install it on device</h2>
<p>That&#8217;s the easiest part if you&#8217;ve done everything right.  Just drag&amp;drop  mobileprovision &amp; ipa  files into iTunes and run sync with an actual iOS device.</p>
<p>If you missed something for code signing, during iTunes sync, you might encounter errors like this:</p>
<blockquote><p>The executable was signed with invalid entitlements.<br />
The entitlements specified in your application’s Code Signing Entitlements file do not match those specified in your provisioning profile.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>https://webapp.org.ua/dev/preparing-adhoc-distribution-in-titanium-mobile/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
