<?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>FlickDotNet.de - Holger&#039;s Take on Software Development &#187; iPad</title>
	<atom:link href="http://www.flickdotnet.de/index.php/categories/apple/ipad/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.flickdotnet.de</link>
	<description>Opinions, Reviews, Tutorials for Software Developers - Apple iOS, Microsoft .NET and Delphi</description>
	<lastBuildDate>Tue, 26 Jul 2011 17:32:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Making Apps Developer Days by Developer Experts and MacWelt</title>
		<link>http://www.flickdotnet.de/index.php/2010/10/making-apps-developer-days-developer-experts-and-macwelt/</link>
		<comments>http://www.flickdotnet.de/index.php/2010/10/making-apps-developer-days-developer-experts-and-macwelt/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 15:46:48 +0000</pubDate>
		<dc:creator>holger</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[DelphiExperts]]></category>
		<category><![CDATA[Developer Experts]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Xcode]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.flickdotnet.de/?p=348</guid>
		<description><![CDATA[With regard to my recent posts I would like to point out two events that will be held in Germany in November. Both events focus on development for iOS 4 and are scheduled as a two-day workshop. Day 1 will give an introduction to iOS 4 development, Objective-C in particular, and the development tools needed [...]]]></description>
			<content:encoded><![CDATA[<p>With regard to my recent posts I would like to point out two events that will be held in Germany in November. Both events focus on development for iOS 4 and are scheduled as a two-day workshop.</p>
<p>Day 1 will give an introduction to iOS 4 development, Objective-C in particular, and the development tools needed to write apps. Whereas day 2 will be more hands-on and will give attendees the chance to start with a small demo project with guidance from Daniel Magin and Olaf Monien.</p>
<p>I have been invited to take part and will be presenting some content as well. As my current work at University includes app development with iOS 4, my main focus will be to give practical advise and some in-depth analysis on various topics. When time allows, I might just show some code snippets from apps that are in the AppStore already. <img src='http://www.flickdotnet.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Hopefully, it will allow attendees to take the initial hurdles with Objective-C easier.  </p>
<p>If you are interested click <a href="http://tinyurl.com/2aw6lym">here</a> to view the complete agenda.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flickdotnet.de/index.php/2010/10/making-apps-developer-days-developer-experts-and-macwelt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS: Does this property or method retain my object instance?</title>
		<link>http://www.flickdotnet.de/index.php/2010/10/ios-dretain/</link>
		<comments>http://www.flickdotnet.de/index.php/2010/10/ios-dretain/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 15:30:04 +0000</pubDate>
		<dc:creator>holger</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Xcode]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.flickdotnet.de/?p=337</guid>
		<description><![CDATA[I already mentioned in earlier posts that it is quite tricky when beginning with iOS to decide whether one has to release an object instance or not. Sure, we have the golden rule number one: If I use alloc, copy or new to create an object instance, I own it and need to call release [...]]]></description>
			<content:encoded><![CDATA[<p>I already mentioned in earlier posts that it is quite tricky when beginning with iOS to decide whether one has to release an object instance or not.<br />
Sure, we have the golden rule number one:</p>
<blockquote><p>If I use <code>alloc</code>, <code>copy</code> or <code>new</code> to create an object instance, I own it and need to call <code>release</code> as soon as I do not need it anymore (or <code>autorelease</code>).</p></blockquote>
<p>This sounds simple, but people often state</p>
<blockquote><p>After calling <code>release</code>, the object is being removed from memory, so I cannot call <code>release</code> unless I am certain nobody is using it anymore.</p></blockquote>
<p>Sadly, that statement is simply wrong. On the one hand you should never even think about when an object is being removed from memory when coding in Objective-C with iOS in the first place. However, on the other hand you never need to consider &#8216;other parties&#8217; when releasing or retaining. If another party needs the object instance it will have called <code>retain</code> for certain which means that the object is not being removed when you call <code>release</code> in your code. If the other party did not call <code>retain</code>, their programming is flawed, but you can never assume that and keep your object instances around without calling <code>release</code>.</p>
<p>So, getting back at the inititial question how to decide if another method or property does call <code>retain</code> or not. It is quite easy to see if you know where to look. Apple delivers the complete source code for the headers with iOS. Yes, source code. But think again. I said &#8216;header files&#8217;. No implementation is given away, just the specification of the classes etc. which you find in the header file.</p>
<p>Xcode has a wonderful means to get you exactly to the right location in a header file that yields the result. You can also use the quick help feature which also lists the declaration of a property, but lacks the retain-information for methods. </p>
<p>Let us look at two examples.</p>
<pre class="brush: objc;">
  // example 1
  self.navigationItem.backBarButtonItem = backButton;

  // example 2
  NSMutableArray *names = [[NSMutableArray alloc] init];
  NSString *captain = [[NSString alloc] initWithString:@&quot;Jean-Luc&quot;];
  [names addObject:captain];
  [captain release];

  // sometime later

  [names release];
</pre>
<p>Example 1 is pretty brief as I talked about it in my last blog post with regard to the <code>navigationItem</code>. I am not going into any release or retain-discussions here. However, what does the assignment do exactly?<br />
Type the code into Xcode and hold down the Option-key and double-click <code>backBarButtonItem</code>.<br />
You will get the following hint:<br />
<img src="http://www.flickdotnet.de/wp-content/uploads/2010/10/Quickhelp.png" alt="" title="Quickhelp" width="530" height="165" class="alignleft size-full wp-image-339" /><br />
This is all you need. It clearly gives you the information that you need to pass an instance of  <code>UIBarButtonItem</code> and that the object is going to be retained. Time needed to assure yourself? 1 second. Xcode is very good in that regard. </p>
<p>Of course, you can also hold down the Command-key and double-click <code>backBarButtonItem</code>. This will not show you any help document, but will prompt you to select if you want more information about the property declaration or the setter method of the poperty. If you try both options you will find out that both lead to the same line of code in the  declaration as the property is synthesized and no custom set-method has been specified. You will navigate to source code of the header declaration of <code>UINavigationBar</code>. The property is declared as follows.</p>
<pre class="brush: objc;">
  @property (nonatomic,retain)
       UIBarButtonItem *backBarButtonItem;
</pre>
<p>Yet again, the same information we got from the quick help. Many roads lead to Rome it seems.</p>
<p>Thus, remember to make use of the navigation features of Xcode. Command-double-click takes you to the source. Option-double-clicking a property or method shows a quick help window. Very helpful. I wish there was a way to invoke that while watching &#8216;Lost&#8217; now and then.</p>
<p>Finally, let us inspect example number 2. It comes naturally to us to release objects that we add to an <code>NSArray</code> as we learned that <code>addObject:</code> does indeed retain object instances. Where can we find that info? Sadly, neither the quick help nor the detailed help for <code>addObject:</code>which you can invoke with a Command-Option-double click gives any hints if retain is being called. You need to have a look at a guide called &#8220;Collections Programming Topics&#8221; in the help. You can retrieve this guide in PDF format as well, which is great. There you can find the following statement in the section about arrays:</p>
<blockquote><p>In a managed memory environment, an object receives a retain message when it’s added; in a garbage collected environment, it is strongly referenced. When an array is deallocated in a managed memory environment, each element is sent a release message.</p></blockquote>
<p>Phew. It is documented, but it is very hard to find. It would be great if we could find a comment in the header file or some information in the help for <code>addObject:</code>. The documentation of iOS is very detailed and easy to navigate. But in this instance there is desperate need for improvement.</p>
<p>Thus, summing up our example number 2, we can release <code>captain</code> after adding the object instance to the array as the array owns it now and we may let go if we do not need it anymore.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flickdotnet.de/index.php/2010/10/ios-dretain/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Customizing an UINavigationController with title, prompt and buttons (in code)</title>
		<link>http://www.flickdotnet.de/index.php/2010/10/customizing-an-uinavigationcontroller-with-title-prompt-and-buttons-in-code/</link>
		<comments>http://www.flickdotnet.de/index.php/2010/10/customizing-an-uinavigationcontroller-with-title-prompt-and-buttons-in-code/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 15:00:02 +0000</pubDate>
		<dc:creator>holger</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.flickdotnet.de/?p=313</guid>
		<description><![CDATA[In the last few weeks I have seen quite a lot of different implementations how to customize the UINavigationController. When you are new to a programming language you tend to use snippets from newsgroups and blogs and often you forget to actually think about the semantics of the code. The UINavigationController examples have a huge [...]]]></description>
			<content:encoded><![CDATA[<p>In the last few weeks I have seen quite a lot of different implementations how to customize the <code>UINavigationController</code>. When you are new to a programming language you tend to use snippets from newsgroups and blogs and often you forget to actually think about the semantics of the code. The <code>UINavigationController</code> examples have a huge spectrum from being correct to awfully wrong.</p>
<p>With this blog post there will hopefully be one more correct entry on that subject. I will add some additional words with regard to memory management as well. Especially for Delphi programmers the memory management approach of iOS feels somewhat strange and takes quite some time to get used to. In my sessions I always say that there are 5 basic principles one has to consider when starting to write applications for the iPhone or iPad. Three of those five are &#8220;Patience&#8221;.</p>
<p>A <code>UINavigationController</code> can be customized that it shows the title of the current view with an optional additional prompt. Furthermore, there may be one button on the right side and one on the left. The button on the left side is mostly shown as an arrow that allows the user to navigate back to the previous view. In order to access these items you may use the property called <code>navigationItem</code>.</p>
<p>The following example sets the title of the current view that has just been loaded completely into memory. Is is not necessarily being shown yet. If you want to make sure that the title gets updated whenever the view does appear on screen, you have to use the corresponding event. That is common mistake number one. A view (or the corresponding view controller) may be only loaded once, but it can appear over and over again showing different (or the same) things.</p>
<pre class="brush: objc;">
// Implement viewDidLoad to do additional setup
// after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationItem.title = @&quot;Details&quot;;
}
</pre>
<p>Do not forget to call the <code>viewDidLoad</code>-event of the super-class. Furthermore, if you try this example, make sure that the <code>UIViewController</code> you implement it in, actually is being handled by a <code>UINavigationController</code>. If you insert this code into a view controller that is not owned by a navigation controller, <code>self.navigationItem</code> will yield <code>nil</code>. </p>
<p>Of course, you might consider using <code>setTitle:</code> instead of using the dot-syntax. The dot-syntax is well-known from other languages, but it also has significant side-effects in the Objective-C language. However, this is the non-dot-version of the code from above:</p>
<pre class="brush: objc;">
// Implement viewDidLoad to do additional setup
// after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];

    [self.navigationItem setTitle:@&quot;Details&quot;];
}
</pre>
<p>This code will not crash if <code>self.navigationItem</code> is <code>nil</code>, because trying to send a message (aka calling a method) to <code>nil</code> will simply lead to nothing being executed. If this is a good thing and the view will still be able to show the information needed is another topic, but at least your app will not crash!</p>
<p>Setting up the prompt is just the same. Use the property named <code>prompt</code> or send the message <code>setPrompt:</code> to the <code>navigationItem</code>:</p>
<pre class="brush: objc;">
// Implement viewDidLoad to do additional setup
// after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];

    [self.navigationItem setPrompt:&quot;Please keep the &quot;
      &quot;following information confidential.&quot;];
    [self.navigationItem setTitle:@&quot;Details&quot;];
}
</pre>
<p>The buttons are the trickiest part for most developers. Just put one thing in your mind at first: </p>
<ul>
<li><code>navigationItem</code> has three properties that take care of positioning buttons. One is <code>leftBarButtonItem</code> the other is <code>rightBarButtonItem</code>. Finally, and that one is always forgotten, there is <code>backBarButtonItem</code>.</li>
<li>Second, you can only have one button on the left. If you define a back button, you cannot have another one on the left side. Period. If you define both only one will be shown and accessible to the user. The <code>backBarButtonItem</code> is always drawn with an arrow on the left side. You do not have to pay any special attention to that &#8211; iOS handles the drawing for you. If you use <code>leftBarButtonItem</code>, there will be no arrow. </li>
<li>Third, you define the back button in the view controller that shows the depending view (so-called detail view). Thinking of the mail application, the view controller that shows all your mails in a list defines the back button for the view that displays the content of one mail. About 80% of all blog posts miss to mention this tiny little detail. You always find it in the comments or further down in a thread to a specific question. That is a true time waster for beginners. However, it makes sense as the caption of the back button mostly depends on information of the view that is being left. Thus, only that view controller has the necessary data to set it.</li>
<li>Fourth, if you assign a customized button to the property of the navigation controller, this object instance is being retained. This means there is no need to use the autorelease pool when designing your custom buttons. You can simply release your button after assigning is to the property. You are done with it, so release it. Why use the autorelease pool? Almost all code snippets I found on the web use <code>autorelease</code>. There is never a reason given why the author used it. I can only conclude that he or she never really understood what the property assignment to the <code>navigationItem</code> actually does. It does retain, thus you can release the button. You do not need the reference anymore. You explicitly state a method that is being called if your button is touched. You do not need to remember the object reference yourself as the event passes the object instance of the button to you. Even then, you seldom need it. I can only think of one example for which I need the object instance of the button and that is to change is color after the touch. Well, then you can use the <code>sender</code> of the event and do not need to carry it around in your view controller. Be brave, release it, the navigation controller will take good care of it.</li>
</ul>
<p>If we keep those four aspects in mind, this leads us to the following code snippet for a custom back button:</p>
<pre class="brush: objc;">
    UIBarButtonItem *btnBack = [[UIBarButtonItem alloc] initWithTitle:@&quot;Sign off&quot;
                   style:UIBarButtonItemStylePlain
                   target:nil action:nil];
    self.navigationItem.backBarButtonItem = btnBack; // object is being retained
    [btnBack release]; // release it
</pre>
<p>Remember that this button will show if the view controller you set it in pushes a new view onto the navigation controller.</p>
<p>If I had a quarter for every time the autorelease pool is used for no good reason or memory is even being leaked, i.e. the <code>release</code> is not being called, I would be a very rich man &#8230;</p>
<p>Here you see two screenshots from an example I wrote which customizes all the parts discussed here.</p>
<p><img src="http://www.flickdotnet.de/wp-content/uploads/2010/10/Navigation.png" alt="" title="Navigation" width="414" height="770" class="alignnone size-full wp-image-332" /><br />
<img src="http://www.flickdotnet.de/wp-content/uploads/2010/10/Navigation2.png" alt="" title="Navigation" width="414" height="770" class="alignnone size-full wp-image-332" /></p>
<p>Hopefully, this very detailed post will help more developers understand the inner-workings of using multiple views in their iOS applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flickdotnet.de/index.php/2010/10/customizing-an-uinavigationcontroller-with-title-prompt-and-buttons-in-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ANN: Developer Experts App for iPhone and iPad</title>
		<link>http://www.flickdotnet.de/index.php/2010/09/ann-developer-experts-app-for-iphone-and-ipad/</link>
		<comments>http://www.flickdotnet.de/index.php/2010/09/ann-developer-experts-app-for-iphone-and-ipad/#comments</comments>
		<pubDate>Sat, 25 Sep 2010 14:43:05 +0000</pubDate>
		<dc:creator>holger</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[DelphiExperts]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Developer Experts]]></category>

		<guid isPermaLink="false">http://www.flickdotnet.de/?p=298</guid>
		<description><![CDATA[We released yet another (free) application in the AppStore: The Developer Experts App. The app will keep you informed about all Developer Experts events and will allow you to purchase additional course materials in the near future. However, update 1 will introduce Push Notifications so that you will be pinged whenever something interesting happens in [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">We released yet another (free) application in the AppStore: <strong>The Developer Experts App</strong>. The app will keep you informed about all Developer Experts events and will allow you to purchase additional course materials in the near future.</p>
<p style="text-align: left;">However, update 1 will introduce Push Notifications so that you will be pinged whenever something interesting happens in the world of Developer Experts. Push Notifications will notify you about upcoming events and current releases in the world of Delphi, .NET and Objective-C.</p>
<p style="text-align: left;">Just go to the AppStore and search for &#8216;Developer Experts&#8217;. US-based customers may click the AppStore logo to go to the app:<br />
<span class="apps"><a id="Bild" href="http://www.flickdotnet.de/wp-content/plugins/appstore/AppStore.php?appid=391265334" target="_blank"><img id="Image" align="left" src="http://www.flickdotnet.de/wp-content/plugins/appstore/cache/391265334.png" alt="Developer Experts - Stay up to date (AppStore Link) " /></a> <span id="Titel">Developer Experts - Stay up to date</span><br /> <span id="Hersteller">Hersteller: </span> <a href="" target="_blank">Holger Flick</a><br /> <span id="Freigabe">Freigabe: </span>4+<br /> <span id="Preis">Preis: </span>Kostenlos <span id="Download"></span><a href="http://www.flickdotnet.de/wp-content/plugins/appstore/AppStore.php?appid=391265334" rel="nofollow" target="_blank" >Download</a></span><div style="clear: both"></div><br />
<img class="size-medium wp-image-304 aligncenter" title="appstore" src="http://www.flickdotnet.de/wp-content/uploads/2010/09/appstore.png" border="0" alt="" width="159" height="55" />
</p>
<p style="text-align: left;"><img class="alignnone size-full wp-image-300" title="devexapp" src="../wp-content/uploads/2010/09/devexapp.png" alt="" width="386" height="742" border="0"/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flickdotnet.de/index.php/2010/09/ann-developer-experts-app-for-iphone-and-ipad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS: Activating InApp Purchases and the issue with invalid Product IDs</title>
		<link>http://www.flickdotnet.de/index.php/2010/08/ios-activating-inapp-purchases-and-the-issue-with-invalid-product-ids/</link>
		<comments>http://www.flickdotnet.de/index.php/2010/08/ios-activating-inapp-purchases-and-the-issue-with-invalid-product-ids/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 08:43:35 +0000</pubDate>
		<dc:creator>holger</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Xcode]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[InApp Purchase]]></category>

		<guid isPermaLink="false">http://www.flickdotnet.de/?p=293</guid>
		<description><![CDATA[It is being discussed quite a lot on the internet that it is very difficult to get started to develop applications with InApp Purchases. Most of the times developers report that the SKProductsRequest does not yield any result or reports the Product ID of the feature as invalid. To make this post brief: most of [...]]]></description>
			<content:encoded><![CDATA[<p>It is being discussed quite a lot on the internet that it is very difficult to get started to develop applications with InApp Purchases. Most of the times developers report that the SKProductsRequest does not yield any result or reports the Product ID of the feature as invalid.</p>
<p>To make this post brief: most of the issues discussed do not exist if you follow the step-by-step guide 100%. However, I got hit by an issue that none of the post addressed:</p>
<ul>
<li>my product called EniRemote is already in the store, it has no InApp Purchases</li>
<li>I want to use InApp Purchases for the update</li>
<li>on my device that is also used for development, I have EniRemote installed, however, the AppStore version, not the developer version</li>
</ul>
<p>I followed Apple&#8217;s documentation 100%. However, all my IDs were still reported as &#8216;invalid&#8217;. Where did I mess up? First, I waited a couple of hours as a lot of developers claim it takes about 12-24 hours for the AppStore to update. I tried again this morning, the issue prevailed.</p>
<p>Then I remembered that my device had the AppStore version installed. I was able to deploy my app to the device without any issues. It also ran in development mode, however, the application always ran in an environment that was created by the AppStore version. Thus, it always must have queries the live-store, not the sandbox.</p>
<p>How did I fix this? Very easy! I removed the app from my device and deployed it again by debugging it in Xcode. My Product IDs were immediately listed as valid and I can use In-App purchases.</p>
<p>Thus, when using InApp features, make sure that you do only use app environments that have been created by Xcode and not the AppStore. It will not work unless you delete any &#8216;live-version&#8217; of the app that has been downloaded from the AppStore first.</p>
<p>I really hope this will help some folks to save some time!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flickdotnet.de/index.php/2010/08/ios-activating-inapp-purchases-and-the-issue-with-invalid-product-ids/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to set up EniRemote</title>
		<link>http://www.flickdotnet.de/index.php/2010/08/how-to-set-up-eniremote/</link>
		<comments>http://www.flickdotnet.de/index.php/2010/08/how-to-set-up-eniremote/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 18:19:26 +0000</pubDate>
		<dc:creator>holger</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Xcode]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[EniRemote]]></category>

		<guid isPermaLink="false">http://www.flickdotnet.de/?p=288</guid>
		<description><![CDATA[A few people complained that EniRemote would not work properly. Please be aware that you have to set up the App before you can use it. In order to connect to your Dreambox, EniRemote needs the IP and credentials. You have to use the Settings application on your iPad and select EniRemote on the left [...]]]></description>
			<content:encoded><![CDATA[<p>A few people complained that EniRemote would not work properly. Please be aware that you have to set up the App before you can use it. In order to connect to your Dreambox, EniRemote needs the IP and credentials.</p>
<p>You have to use the Settings application on your iPad and select EniRemote on the left side to enter that information:</p>
<p><a href="http://www.flickdotnet.de/wp-content/uploads/2010/08/settings.png"><img class="alignnone size-medium wp-image-289" title="Settings for EniRemote" src="http://www.flickdotnet.de/wp-content/uploads/2010/08/settings-300x180.png" alt="" width="300" height="180" /></a></p>
<p>SSL encryption is not supported.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flickdotnet.de/index.php/2010/08/how-to-set-up-eniremote/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EniRemote released in AppStore</title>
		<link>http://www.flickdotnet.de/index.php/2010/08/eniremote-released-in-appstore/</link>
		<comments>http://www.flickdotnet.de/index.php/2010/08/eniremote-released-in-appstore/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 18:13:53 +0000</pubDate>
		<dc:creator>holger</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Xcode]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[EniRemote]]></category>

		<guid isPermaLink="false">http://www.flickdotnet.de/?p=286</guid>
		<description><![CDATA[EniRemote for iPad has been released in Apple&#8217;s AppStore! Right now it is not available in all countries yet, but it will be released in all countries. The App is free for a limited time. If you have an iPad and a Dreambox running with the Gemini Image, be sure to check it out. Here [...]]]></description>
			<content:encoded><![CDATA[<p>EniRemote for iPad has been released in Apple&#8217;s AppStore!</p>
<p>Right now it is not available in all countries yet, but it will be released in all countries. The App is free for a limited time.</p>
<p>If you have an iPad and a Dreambox running with the Gemini Image, be sure to check it out.</p>
<p>Here is the link for the US AppStore:</p>
<p><a href="http://itunes.apple.com/app/eniremote/id386161917?mt=8#">http://itunes.apple.com/app/eniremote/id386161917?mt=8#</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flickdotnet.de/index.php/2010/08/eniremote-released-in-appstore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Announcing EniRemote for iPad, a remote for any DreamBox set-top box with Gemini Image (Enigma2) &#8230;and a hint for Delphi programmers</title>
		<link>http://www.flickdotnet.de/index.php/2010/08/announcing-eniremote-for-ipad-a-remote-for-any-dreambox-set-top-box-with-gemini-image-enigma2-and-a-hint-for-delphi-programmers/</link>
		<comments>http://www.flickdotnet.de/index.php/2010/08/announcing-eniremote-for-ipad-a-remote-for-any-dreambox-set-top-box-with-gemini-image-enigma2-and-a-hint-for-delphi-programmers/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 17:48:56 +0000</pubDate>
		<dc:creator>holger</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[DelphiExperts]]></category>
		<category><![CDATA[Xcode]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[EniRemote]]></category>

		<guid isPermaLink="false">http://www.flickdotnet.de/?p=276</guid>
		<description><![CDATA[Finally, I am able to announce my first iPad project written in Objective-C and Xcode, written in association with DeveloperExperts, LLC. One can hardly believe how hard-felt the &#8220;finally&#8221; is. I have been programming since 1988 and Objective-C has been the toughest programming language yet. My biggest issue was getting used to the strange way [...]]]></description>
			<content:encoded><![CDATA[<p>Finally, I am able to announce my first iPad project written in Objective-C and Xcode, written in association with DeveloperExperts, LLC. One can hardly believe how hard-felt the &#8220;finally&#8221; is. I have been programming since 1988 and Objective-C has been the toughest programming language yet. My biggest issue was getting used to the strange way how memory allocation and deallocation is handled. It might be me, but it took quite some getting used to. Actually, I undertook my first steps in Objective-C in 2008. However, I really got into it after the seminar I attended in April 2010. Evan Doll, Daniel Magin and Olaf Monien held a workshop with the basics about iPhone-App Development (Making Apps).</p>
<p>Thus, before I introduce you all to my latest app, let me highly recommend their workshop that will take place in <a href="http://www.amiando.com/delphitageBerlin1.html">September in Berlin, Germany</a>. Why did I blog about it here? It is a special workshop for people who have programming skills in Delphi already and want to start with the iPhone/iPad as well. Again, I can only underline how good this workshop is to get started building mobile applications on Apple&#8217;s mobile iOS platform. Furthermore, there is a whole day dedicated to Delphi and the German Delphi days two days later. If that is not a reason for booking a trip&#8230; so, hurry, before all places are taken!</p>
<p>Now back to EniRemote. The application is still being reviewed by Apple while I am writing this. However, I have a team of about 10 beta testers that already had access to the application and judged that it was ready for general distribution. Thanks guys! Sadly, the application that will be published in the App Store is already one week old and is lacking some feature improvements that I already made this week.</p>
<p>As I already said, EniRemote allows you to control your DreamBox from anywhere as long as you connect to it via HTTP. It currently does not support SSL in order to circumvent any encryption/export restrictions that might exist. The phrase &#8216;control your DreamBox&#8217; has many interpretations. Firstly, you have a huge remote control-like view that allows you to mimic any of the keys you can press on your physical remote control. This alone is a huge improvement for me as the DreamBox 800 PVR HD has a very picky remote sensor &#8230;</p>
<p><img class="aligncenter size-full wp-image-277" title="Landscape orientation of Remote Control view" src="http://www.flickdotnet.de/wp-content/uploads/2010/08/remote-land.png" alt="" width="500" height="384" /></p>
<p>Furthermore, the app allows easy zapping and browsing of service EPGs. Even the picons of the channels in different bouquets are downloaded from the box and cached on the iPad device. We do not ship any of the channel icons with the application. Please not that all logos displayed in the screenshots belong to their copyrightholders and these images are shown as an example to illustrate the functionality of the application. I use the Picon Icon Set by LicherPils which is being published on the I-Have-A-DreamBox boards. Right now the bouquets are fully controlled by the box settings. We are planning however to offer a favorite list of channels that can be assembled on the iPad and needs no change of any settings on the box.</p>
<p><a href="http://www.flickdotnet.de/wp-content/uploads/2010/08/channels.png"><img class="aligncenter size-full wp-image-278" title="Services of one bouquet" src="http://www.flickdotnet.de/wp-content/uploads/2010/08/channels.png" alt="" width="500" height="384" /></a></p>
<p><a href="http://www.flickdotnet.de/wp-content/uploads/2010/08/example-epg.png"><img class="aligncenter size-full wp-image-280" title="Episode guide loaded from box." src="http://www.flickdotnet.de/wp-content/uploads/2010/08/example-epg.png" alt="" width="500" height="666" /></a></p>
<p>Recordings are also being displayed and you can take a screenshot if the grab plugin is installed on your box.</p>
<p>We do not support timers as of yet, but work has started to offer that feature. Furthermore, the next release will offer support to connect to more than one box. You will be able to create box settings profiles.</p>
<p>Maybe you own a DreamBox and will give the app a shot as soon as it will be released in the AppStore.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flickdotnet.de/index.php/2010/08/announcing-eniremote-for-ipad-a-remote-for-any-dreambox-set-top-box-with-gemini-image-enigma2-and-a-hint-for-delphi-programmers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>NSString: Using stringWithFormat and left pad integers with zeros</title>
		<link>http://www.flickdotnet.de/index.php/2010/04/nsstring-using-stringwithformat-and-left-pad-integers-with-zeros/</link>
		<comments>http://www.flickdotnet.de/index.php/2010/04/nsstring-using-stringwithformat-and-left-pad-integers-with-zeros/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 04:41:07 +0000</pubDate>
		<dc:creator>holger</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.flickdotnet.de/?p=257</guid>
		<description><![CDATA[Today, I wanted to display a time-value of 9 minutes and 3 seconds like this: 09:03 Thus, I typed this snippet into my Objective-C code: labelTimer.text = [NSString stringWithFormat:@"%2d:%2d", minutes, seconds ]; [/code] This did not yield the result I wanted. The numbers were padded with spaces, not zeros. Sadly, Apple left out the options [...]]]></description>
			<content:encoded><![CDATA[<p>Today, I wanted to display a time-value of 9 minutes and 3 seconds like this: <tt>09:03</tt></p>
<p>Thus, I typed this snippet into my Objective-C code:<br />
<code><br />
labelTimer.text = [NSString stringWithFormat:@"%2d:%2d", minutes, seconds ];<br />
[/code]</p>
<p>This did not yield the result I wanted. The numbers were padded with spaces, not zeros. Sadly, Apple left out the options for the different format specifiers like f, d, @ ... completely. You have to rely on old C skills in order to know how to pad with zeros or format decimal numbers the way you want. As a side-note, if you have a float and want to format it with 2 decimals, use <tt>%.2f</tt>. In order to pad zeros, you have to use <tt>%02d</tt> in this case, which leads to the following snippet in Objective-C code:</p>
<p></code><code><br />
labelTimer.text = [NSString stringWithFormat:@"%02d:%02d", minutes, seconds ];<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flickdotnet.de/index.php/2010/04/nsstring-using-stringwithformat-and-left-pad-integers-with-zeros/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>libxml: Memory Management and leaks in Frameworks you consider &#8216;safe&#8217;</title>
		<link>http://www.flickdotnet.de/index.php/2010/04/libxml-memory-management-and-leaks-in-frameworks-you-consider-safe/</link>
		<comments>http://www.flickdotnet.de/index.php/2010/04/libxml-memory-management-and-leaks-in-frameworks-you-consider-safe/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 03:39:25 +0000</pubDate>
		<dc:creator>holger</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.flickdotnet.de/?p=255</guid>
		<description><![CDATA[If you have ever written code in Java or .NET, you will truly learn to appreciate the garbage collection, i.e. objects that are no longer referenced are being freed from memory. Automatically no less. A lot of people do not like it for reasons of their own and I do not want to get into [...]]]></description>
			<content:encoded><![CDATA[<p>If you have ever written code in Java or .NET, you will truly learn to appreciate the garbage collection, i.e. objects that are no longer referenced are being freed from memory. Automatically no less.</p>
<p>A lot of people do not like it for reasons of their own and I do <strong>not</strong> want to get into those.</p>
<p>What I do want to discuss is that in an environment in which you are responsible to allocate and free memory yourself (like Delphi, C++, Objective-C), you might stumble about issues with frameworks or base classes you use.</p>
<p>In my case it was the libxml part of the iPhone OS which allows you to parse XML documents. (I even now of Delphi developers using this library to parse large documents). Its biggest advantage is that the xml document is not read in one go but step-by-step in chunks. The developer can hook into it with an event-driven approach and can thus interpret the file. However, during the parse operation the library tends to produce memory leaks that cost me two hours of debugging.</p>
<p>With iPhone applications it is very simple: the iPhone is a mobile device with limited memory. If you produce too many leaks in a certain amount of time, you will not have many customers using your application as it might crash frequently (it might not even be accepted if you want to deploy to the Apple AppStore due to this fact). This makes you very aware of producing code that produces absolutely no memory leaks of any sort. Apple delivers Instruments so that you can debug your code for memory leaks. As I was not familiar with the tool, I did not realize at first that the leak did occur in the library and not in or because of code I had written.</p>
<p>Now comes the important part: formulate a rule. I do not want to waste another minute because of issues that are in 3rd party code. However, it is not as easy, because it might not be the 3rd party library but you not handing over the data to the library correctly (especially when dealing with different languages and use DLLs e.g.). To state the rule &#8216;Always check the call stack where the leak originates.&#8217; will not suffice. An example for this is that you allocate memory for an object instance and then hand a reference to this instance to a function or method. The method allocates memory again and returns another reference instead of using the one you provided. In that case you are responsible for the leak. Documentation needs to be clear in cases like this.</p>
<p>I think that fact is the biggest pro for garbage collection. Some people might call it lazy, but I prefer it considering how much time I spent when writing iPhone applications thinking  of proper memory management. iPhone OS comes with strict guidelines how to name methods so that you know if the caller or the function is responsible to allocate and free the memory which makes it easier, but it is still difficult enough.</p>
<p>As a final point, please be aware that my googling and analysis really points to a method in the parser of libxml leaking some bytes when parsing a document. In case you develop an iPhone app and use libxml, do not worry about the leaks that Instruments shows you that derive from a call to the parse mehod of the xml parser &#8212; not your fault.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flickdotnet.de/index.php/2010/04/libxml-memory-management-and-leaks-in-frameworks-you-consider-safe/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

