<?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>Cocoanetics &#187; Updates</title>
	<atom:link href="http://www.cocoanetics.com/category/updates/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cocoanetics.com</link>
	<description>Our DNA is written in Objective-C</description>
	<lastBuildDate>Sun, 20 May 2012 14:40:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>GCD, ARC, Blocks &#8211; Oh How Simple!</title>
		<link>http://www.cocoanetics.com/2012/05/gcd-arc-blocks-oh-how-simple/</link>
		<comments>http://www.cocoanetics.com/2012/05/gcd-arc-blocks-oh-how-simple/#comments</comments>
		<pubDate>Sat, 05 May 2012 16:32:42 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=6327</guid>
		<description><![CDATA[I&#8217;m &#8220;totally&#8221; migrating my iCatalog framework project to ARC, GCD and blocks and I&#8217;d like to share with you some of the revelations that the use of these modern technologies brings with them. Here are two examples of the kind of simplifications you will see if you do the same. This approach is compatible with iOS 4.0 and above. &#160; Executing a Multi-Parameter Method on Main Thread I was looking for instances of performSelectorOnMainThread so that I could replace them with a dispatch_sync on main_queue instead. Previously when calling methods that take more than one parameter you had to jump through hoops. Before: - &#40;void&#41;reportAddProduct:&#40;Product *&#41;product toBagAs:&#40;BagItem*&#41;bagItem &#123; SEL selector = @selector&#40;onlineIntegrationManager:willAddProduct:toBagAs:&#41;; if &#40;&#91;delegate respondsToSelector:selector&#93;&#41; &#123; NSMethodSignature *signature = &#91;self methodSignatureForSelector:selector&#93;; if &#40;!signature&#41; &#123; return; &#125; &#160; NSInvocation* invocation = &#91;NSInvocation invocationWithMethodSignature:signature&#93;; &#91;invocation setTarget:delegate&#93;; &#91;invocation setSelector:selector&#93;; &#91;invocation setArgument:&#38;product atIndex:2&#93;; &#91;invocation setArgument:&#38;bagItem atIndex:3&#93;; &#91;invocation retainArguments&#93;; &#91;invocation performSelectorOnMainThread:@selector&#40;invoke&#41; withObject:nil waitUntilDone:YES&#93;; &#125; &#125; After: - &#40;void&#41;reportAddProduct:&#40;Product *&#41;product toBagAs:&#40;BagItem *&#41;bagItem &#123; if &#40;&#91;delegate respondsToSelector:@selector&#40;onlineIntegrationManager:willAddProduct:toBagAs:&#41;&#93;&#41; &#123; dispatch_sync&#40;dispatch_get_main_queue&#40;&#41;, ^&#123; &#91;delegate onlineIntegrationManager:self willAddProduct:product toBagAs:bagItem&#93;; &#125;&#41;; &#125; &#125; The handy dispatch_sync on main queue can call any method, with any number of parameters on the main thread. The sync is equivalent to the waitUntilDone:YES. Since this allows for putting the main thread code inline you no longer need to have special methods that you then performSelectorOnMainThread:. As a second note I found that it calls to the main thread should generally be done synchronously because I had a situation where a UILabel would not get updated if I did waitUntilDone:NO. Having everything as dispatch_sync now also takes care of that. Abusing the UIView Animation Context Before we had block based animation I would find myself often passing some context to the animationDidStopSelector so that I can do some wrap-up work when the animation is done. This is quite unsafe, even ARC complains about that unless you add a (__bridge id) to tell it to ignore the memory management of this object. Context parameters didn&#8217;t get retained as a rule of thumb. In this example I needed to remove a view that has been animated out also from an internal dictionary after it was done. Having a dedicated instance variable would not have been an option because you could potentially have multiple animations going on at the same time. Before: - &#40;void&#41;removalAnimationDidStop:&#40;NSString *&#41;animationID finished:&#40;NSNumber *&#41;finished context:&#40;void *&#41;context &#123; UIView *removedView = &#40;__bridge UIView *&#41;context; &#160; for &#40;NSNumber *oneKey in &#91;self.viewsForItems allKeys&#93;&#41; &#123; UIView *view = &#91;self.viewsForItems objectForKey:oneKey&#93;; &#160; if &#40;view == removedView&#41; &#123; &#91;removedView removeFromSuperview&#93;; &#91;self.viewsForItems removeObjectForKey:oneKey&#93;; &#125; &#125; &#125; &#160; // the above being called by: &#160; for &#40;id oneItem in itemsToRemove&#41; &#123; // we must have a view for this item to remove it __unsafe_unretained UIView *itemView = &#91;self viewForItem:oneItem&#93;; &#160; if &#40;animated&#41; &#123; &#91;UIView beginAnimations:@&#34;ItemRemoval&#34; context:&#40;__bridge void *&#41;itemView&#93;; &#91;UIView setAnimationDuration:deleteAnimationDuration&#93;; if &#40;delaySoFar&#62;0&#41; &#123; &#91;UIView setAnimationDelay:delaySoFar&#93;; &#125; &#91;UIView setAnimationBeginsFromCurrentState:YES&#93;; &#91;UIView setAnimationDidStopSelector:@selector&#40;removalAnimationDidStop:finished:context:&#41;&#93;; &#91;UIView setAnimationDelegate:self&#93;; &#125; &#160; itemView.alpha = 0; itemView.transform =CGAffineTransformMakeScale&#40;0.5, 0.5&#41;; &#160; if &#40;animated&#41; &#123; &#91;UIView commitAnimations&#93;; &#125; &#160; delaySoFar +=deleteAnimationOffset; &#125; After: // moved into a convenience method - &#40;void&#41;removeCachedView:&#40;UIView *&#41;removedView &#123; for &#40;NSNumber *oneKey in &#91;self.viewsForItems allKeys&#93;&#41; &#123; UIView *view = &#91;self.viewsForItems objectForKey:oneKey&#93;; &#160; if &#40;view == removedView&#41; &#123; &#91;removedView removeFromSuperview&#93;; &#91;self.viewsForItems removeObjectForKey:oneKey&#93;; &#125; &#125; &#125; &#160; // called from: &#160; for &#40;id oneItem in itemsToRemove&#41; &#123; // we must have a view for this item to remove it __unsafe_unretained UIView *itemView = &#91;self viewForItem:oneItem&#93;; &#160; &#91;UIView animateWithDuration:&#40;animated?deleteAnimationDuration:0&#41; delay:&#40;animated?delaySoFar:0&#41; options:UIViewAnimationOptionBeginFromCurrentState animations:^&#123; itemView.alpha = 0; itemView.transform =CGAffineTransformMakeScale&#40;0.5, 0.5&#41;; &#125; completion:^&#40;BOOL finished&#41; &#123; &#91;self removeCachedView:itemView&#93;; &#125;&#93;; &#160; delaySoFar +=deleteAnimationOffset; &#125; A boolean animated value can easily be replaced with a duration of 0. Animation delays are passed in the appropriate method and the beginsFromCurrentState is now a UIViewAnimationOption. This method is way safer because the blocks &#8220;capture&#8221; (i.e.) retain all the used variables making it impossible for the thing that was previously passed via the context to already been deallocated. Conclusion Sorry for not having more wise words to add here. The beauty of the possible simplifications you get if you decide to make iOS 4 your minimum deployment target should speak for itself.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2012/05/gcd-arc-blocks-oh-how-simple/"></g:plusone></div><p>I&#8217;m &#8220;totally&#8221; migrating my iCatalog framework project to ARC, GCD and blocks and I&#8217;d like to share with you some of the revelations that the use of these modern technologies brings with them.</p>
<p>Here are two examples of the kind of simplifications you will see if you do the same. This approach is compatible with iOS 4.0 and above.</p>
<p><span id="more-6327"></span></p>
<div class="inner_ad_block">
<div id="advman-7" class="widget Advman_Widget">
<h3 class="widgettitle"></h3>
<p><!-- BuySellAds.com Zone Code --></p>
<div id="bsap_1260346" class="bsarocks bsap_fc3166ea4a479e0fdb4251fbe92a1219"></div>
<p><!-- End BuySellAds.com Zone Code --></div>
<div id="text-21" class="widget widget_text">
<div class="textwidget">
<p>&nbsp;</p>
</div></div>
</div>
<h3>Executing a Multi-Parameter Method on Main Thread</h3>
<p>I was looking for instances of performSelectorOnMainThread so that I could replace them with a dispatch_sync on main_queue instead. Previously when calling methods that take more than one parameter you had to jump through hoops.  </p>
<p><strong>Before:</strong></p>

<div class="wp_codebox"><table><tr id="p63275"><td class="code" id="p6327code5"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>reportAddProduct<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Product <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>product toBagAs<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>BagItem<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>bagItem
<span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">SEL</span> selector <span style="color: #002200;">=</span> <span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>onlineIntegrationManager<span style="color: #002200;">:</span>willAddProduct<span style="color: #002200;">:</span>toBagAs<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span>;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>delegate respondsToSelector<span style="color: #002200;">:</span>selector<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
		<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMethodSignature_Class/"><span style="color: #400080;">NSMethodSignature</span></a> <span style="color: #002200;">*</span>signature <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self methodSignatureForSelector<span style="color: #002200;">:</span>selector<span style="color: #002200;">&#93;</span>;
		<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">!</span>signature<span style="color: #002200;">&#41;</span> 
		<span style="color: #002200;">&#123;</span>
			<span style="color: #a61390;">return</span>;	
		<span style="color: #002200;">&#125;</span>
&nbsp;
		<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSInvocation_Class/"><span style="color: #400080;">NSInvocation</span></a><span style="color: #002200;">*</span> invocation <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSInvocation_Class/"><span style="color: #400080;">NSInvocation</span></a> invocationWithMethodSignature<span style="color: #002200;">:</span>signature<span style="color: #002200;">&#93;</span>;
		<span style="color: #002200;">&#91;</span>invocation setTarget<span style="color: #002200;">:</span>delegate<span style="color: #002200;">&#93;</span>;
		<span style="color: #002200;">&#91;</span>invocation setSelector<span style="color: #002200;">:</span>selector<span style="color: #002200;">&#93;</span>;
		<span style="color: #002200;">&#91;</span>invocation setArgument<span style="color: #002200;">:&amp;</span>product atIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">2</span><span style="color: #002200;">&#93;</span>;
		<span style="color: #002200;">&#91;</span>invocation setArgument<span style="color: #002200;">:&amp;</span>bagItem atIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">3</span><span style="color: #002200;">&#93;</span>;
		<span style="color: #002200;">&#91;</span>invocation retainArguments<span style="color: #002200;">&#93;</span>;
		<span style="color: #002200;">&#91;</span>invocation performSelectorOnMainThread<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>invoke<span style="color: #002200;">&#41;</span> withObject<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span> waitUntilDone<span style="color: #002200;">:</span><span style="color: #a61390;">YES</span><span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p><strong>After:</strong></p>

<div class="wp_codebox"><table><tr id="p63276"><td class="code" id="p6327code6"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>reportAddProduct<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>Product <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>product toBagAs<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>BagItem <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>bagItem
<span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>delegate respondsToSelector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>onlineIntegrationManager<span style="color: #002200;">:</span>willAddProduct<span style="color: #002200;">:</span>toBagAs<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
		dispatch_sync<span style="color: #002200;">&#40;</span>dispatch_get_main_queue<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>, <span style="color: #002200;">^</span><span style="color: #002200;">&#123;</span>
			<span style="color: #002200;">&#91;</span>delegate onlineIntegrationManager<span style="color: #002200;">:</span>self willAddProduct<span style="color: #002200;">:</span>product toBagAs<span style="color: #002200;">:</span>bagItem<span style="color: #002200;">&#93;</span>;
		<span style="color: #002200;">&#125;</span><span style="color: #002200;">&#41;</span>;
	<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>The handy dispatch_sync on main queue can call any method, with any number of parameters on the main thread. The sync is equivalent to the waitUntilDone:YES. Since this allows for putting the main thread code inline you no longer need to have special methods that you then performSelectorOnMainThread:.</p>
<p>As a second note I found that it calls to the main thread should generally be done synchronously because I had a situation where a UILabel would not get updated if I did waitUntilDone:NO. Having everything as dispatch_sync now also takes care of that.</p>
<h3>Abusing the UIView Animation Context<br />
<h3>
<p>Before we had block based animation I would find myself often passing some context to the animationDidStopSelector so that I can do some wrap-up work when the animation is done. This is quite unsafe, even ARC complains about that unless you add a (__bridge id) to tell it to ignore the memory management of this object. </p>
<p>Context parameters didn&#8217;t get retained as a rule of thumb. In this example I needed to remove a view that has been animated out also from an internal dictionary after it was done. Having a dedicated instance variable would not have been an option because you could potentially have multiple animations going on at the same time.</p>
<p><strong>Before:</strong></p>

<div class="wp_codebox"><table><tr id="p63277"><td class="code" id="p6327code7"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>removalAnimationDidStop<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>animationID finished<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>finished context<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>context
<span style="color: #002200;">&#123;</span>
	UIView <span style="color: #002200;">*</span>removedView <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>__bridge UIView <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>context;
&nbsp;
	<span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> <span style="color: #002200;">*</span>oneKey <span style="color: #a61390;">in</span> <span style="color: #002200;">&#91;</span>self.viewsForItems allKeys<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
		UIView <span style="color: #002200;">*</span>view <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self.viewsForItems objectForKey<span style="color: #002200;">:</span>oneKey<span style="color: #002200;">&#93;</span>;
&nbsp;
		<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>view <span style="color: #002200;">==</span> removedView<span style="color: #002200;">&#41;</span>
		<span style="color: #002200;">&#123;</span>
			<span style="color: #002200;">&#91;</span>removedView removeFromSuperview<span style="color: #002200;">&#93;</span>;
			<span style="color: #002200;">&#91;</span>self.viewsForItems removeObjectForKey<span style="color: #002200;">:</span>oneKey<span style="color: #002200;">&#93;</span>;
		<span style="color: #002200;">&#125;</span>
	<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// the above being called by:</span>
&nbsp;
<span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span> oneItem <span style="color: #a61390;">in</span> itemsToRemove<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
	<span style="color: #11740a; font-style: italic;">// we must have a view for this item to remove it</span>
	__unsafe_unretained UIView <span style="color: #002200;">*</span>itemView <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self viewForItem<span style="color: #002200;">:</span>oneItem<span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>animated<span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
		<span style="color: #002200;">&#91;</span>UIView beginAnimations<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;ItemRemoval&quot;</span> context<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>__bridge <span style="color: #a61390;">void</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>itemView<span style="color: #002200;">&#93;</span>;
		<span style="color: #002200;">&#91;</span>UIView setAnimationDuration<span style="color: #002200;">:</span>deleteAnimationDuration<span style="color: #002200;">&#93;</span>;
		<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>delaySoFar&gt;<span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span>
		<span style="color: #002200;">&#123;</span>
			<span style="color: #002200;">&#91;</span>UIView setAnimationDelay<span style="color: #002200;">:</span>delaySoFar<span style="color: #002200;">&#93;</span>;
		<span style="color: #002200;">&#125;</span>
		<span style="color: #002200;">&#91;</span>UIView setAnimationBeginsFromCurrentState<span style="color: #002200;">:</span><span style="color: #a61390;">YES</span><span style="color: #002200;">&#93;</span>;
		<span style="color: #002200;">&#91;</span>UIView setAnimationDidStopSelector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>removalAnimationDidStop<span style="color: #002200;">:</span>finished<span style="color: #002200;">:</span>context<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;
		<span style="color: #002200;">&#91;</span>UIView setAnimationDelegate<span style="color: #002200;">:</span>self<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
&nbsp;
	itemView.alpha <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>;
	itemView.transform <span style="color: #002200;">=</span>CGAffineTransformMakeScale<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0.5</span>, <span style="color: #2400d9;">0.5</span><span style="color: #002200;">&#41;</span>;
&nbsp;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>animated<span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
		<span style="color: #002200;">&#91;</span>UIView commitAnimations<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
&nbsp;
	delaySoFar <span style="color: #002200;">+=</span>deleteAnimationOffset;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p><strong>After:</strong></p>

<div class="wp_codebox"><table><tr id="p63278"><td class="code" id="p6327code8"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// moved into a convenience method</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>removeCachedView<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UIView <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>removedView
<span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> <span style="color: #002200;">*</span>oneKey <span style="color: #a61390;">in</span> <span style="color: #002200;">&#91;</span>self.viewsForItems allKeys<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
	<span style="color: #002200;">&#123;</span>
		UIView <span style="color: #002200;">*</span>view <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self.viewsForItems objectForKey<span style="color: #002200;">:</span>oneKey<span style="color: #002200;">&#93;</span>;
&nbsp;
		<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>view <span style="color: #002200;">==</span> removedView<span style="color: #002200;">&#41;</span>
		<span style="color: #002200;">&#123;</span>
			<span style="color: #002200;">&#91;</span>removedView removeFromSuperview<span style="color: #002200;">&#93;</span>;
			<span style="color: #002200;">&#91;</span>self.viewsForItems removeObjectForKey<span style="color: #002200;">:</span>oneKey<span style="color: #002200;">&#93;</span>;
		<span style="color: #002200;">&#125;</span>
	<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// called from:</span>
&nbsp;
<span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span> oneItem <span style="color: #a61390;">in</span> itemsToRemove<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
	<span style="color: #11740a; font-style: italic;">// we must have a view for this item to remove it</span>
	__unsafe_unretained UIView <span style="color: #002200;">*</span>itemView <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self viewForItem<span style="color: #002200;">:</span>oneItem<span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #002200;">&#91;</span>UIView animateWithDuration<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>animated?deleteAnimationDuration<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span>
						  delay<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>animated?delaySoFar<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span>
						options<span style="color: #002200;">:</span>UIViewAnimationOptionBeginFromCurrentState 
					 animations<span style="color: #002200;">:^</span><span style="color: #002200;">&#123;</span>
						 itemView.alpha <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>;
						 itemView.transform <span style="color: #002200;">=</span>CGAffineTransformMakeScale<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0.5</span>, <span style="color: #2400d9;">0.5</span><span style="color: #002200;">&#41;</span>;
					 <span style="color: #002200;">&#125;</span> completion<span style="color: #002200;">:^</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">BOOL</span> finished<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
						 <span style="color: #002200;">&#91;</span>self removeCachedView<span style="color: #002200;">:</span>itemView<span style="color: #002200;">&#93;</span>;
					 <span style="color: #002200;">&#125;</span><span style="color: #002200;">&#93;</span>;
&nbsp;
	delaySoFar <span style="color: #002200;">+=</span>deleteAnimationOffset;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>A boolean animated value can easily be replaced with a duration of 0. Animation delays are passed in the appropriate method and the beginsFromCurrentState is now a UIViewAnimationOption. This method is way safer because the blocks &#8220;capture&#8221; (i.e.) retain all the used variables making it impossible for the thing that was previously passed via the context to already been deallocated.</p>
<h3>Conclusion</h3>
<p>Sorry for not having more wise words to add here. The beauty of the possible simplifications you get if you decide to make iOS 4 your minimum deployment target should speak for itself.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=6327&amp;md5=e15b14064d5e5b9cbd7d133de4682619" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2012/05/gcd-arc-blocks-oh-how-simple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2012%2F05%2Fgcd-arc-blocks-oh-how-simple%2F&amp;language=en_GB&amp;category=text&amp;title=GCD%2C+ARC%2C+Blocks+%26%238211%3B+Oh+How+Simple%21&amp;description=I%26%238217%3Bm+%26%238220%3Btotally%26%238221%3B+migrating+my+iCatalog+framework+project+to+ARC%2C+GCD+and+blocks+and+I%26%238217%3Bd+like+to+share+with+you+some+of+the+revelations+that+the+use+of+these+modern+technologies...&amp;tags=blog" type="text/html" />
	</item>
		<item>
		<title>Linguan with XIB Support</title>
		<link>http://www.cocoanetics.com/2012/04/linguan-with-xib-support/</link>
		<comments>http://www.cocoanetics.com/2012/04/linguan-with-xib-support/#comments</comments>
		<pubDate>Sat, 28 Apr 2012 07:05:16 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[Linguan]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=6292</guid>
		<description><![CDATA[I&#8217;ve seen it! The fabled XIB support for Linguan is almost done. &#160; A week ago I received a preview for the next version of Linguan which will also allow you to localize XIB files. Initially this will be facilitated by the ibtool tool which is contained in Xcode.app as well as gets installed in /usr/bin if you setup the command line tools. The guys at BytePoets &#8211; who we partnered with to make Linguan a reality &#8211; integrated it such that you can edit strings and XIB files with virtually no difference. Behind the scenes you have ibtool humming away extracting the tokens from the interface builder files and if you make a modification to write them back in. There are a few minor adjustments still necessary. For one there needs to be a preference setting to specify the path to ibtool. Without it the XIB functionality has to be disabled. Then we need to disable editing of the name column for tokens coming from a XIB because that&#8217;s the key that ibtool needs to send the updated string to the right place. If users can edit that it would probably cause trouble. I am hoping to have a similar approach as we did in the past with genstrings. You might remember that initially Linguan was calling the original genstrings, but I reverse-engineered a static library with the same functionality which is orders of magnitude faster. Once this was working properly we replaced the external function to an internal one. As soon as I have some time I hope to getting started with ibtool2 in a similar fashion. Write a GCD-multithreaded super-charged open-source version of ibtool that we can put in a static library and thus eliminate this external dependency. Oh, if you have not done so yet I strongly urge you to purchase Linguan now because we will definitely raise the price tag once XIB support is live. Also your purchase gives us the budget to add more exciting features in the future.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2012/04/linguan-with-xib-support/"></g:plusone></div><p>I&#8217;ve seen it! The fabled XIB support for Linguan is almost done.</p>
<p><span id="more-6292"></span></p>
<div class="inner_ad_block">
<div id="advman-7" class="widget Advman_Widget">
<h3 class="widgettitle"></h3>
<p><!-- BuySellAds.com Zone Code --></p>
<div id="bsap_1260346" class="bsarocks bsap_fc3166ea4a479e0fdb4251fbe92a1219"></div>
<p><!-- End BuySellAds.com Zone Code --></div>
<div id="text-21" class="widget widget_text">
<div class="textwidget">
<p>&nbsp;</p>
</div></div>
</div>
<p>A week ago I received a preview for the next version of Linguan which will also allow you to localize XIB files. Initially this will be facilitated by the ibtool tool which is contained in Xcode.app as well as gets installed in /usr/bin if you setup the command line tools.</p>
<p>The guys at <a href="http://www.bytepoets.com">BytePoets</a> &#8211; who we partnered with to make Linguan a reality &#8211; integrated it such that you can edit strings and XIB files with virtually no difference. Behind the scenes you have ibtool humming away extracting the tokens from the interface builder files and if you make a modification to write them back in.</p>
<p><a href="http://www.cocoanetics.com/files/Bildschirmfoto-2012-04-28-um-08.55.49.png"><img class="alignnone  wp-image-6293" title="Linguan XIB picture proof" src="http://www.cocoanetics.com/files/Bildschirmfoto-2012-04-28-um-08.55.49.png" alt="" width="677" height="475" /></a></p>
<p>There are a few minor adjustments still necessary. For one there needs to be a preference setting to specify the path to ibtool. Without it the XIB functionality has to be disabled. Then we need to disable editing of the name column for tokens coming from a XIB because that&#8217;s the key that ibtool needs to send the updated string to the right place. If users can edit that it would probably cause trouble.</p>
<p>I am hoping to have a similar approach as we did in the past with genstrings. You might remember that initially Linguan was calling the original genstrings, but I reverse-engineered a static library with the <a title="genstrings2" href="http://www.cocoanetics.com/2012/01/genstrings2/">same functionality which is orders of magnitude faster</a>. Once this was working properly we replaced the external function to an internal one.</p>
<p>As soon as I have some time I hope to getting started with ibtool2 in a similar fashion. Write a GCD-multithreaded super-charged open-source version of ibtool that we can put in a static library and thus eliminate this external dependency.</p>
<p>Oh, if you have not done so yet I strongly urge you to <a href="http://itunes.apple.com/at/app/linguan/id477163052?mt=12">purchase Linguan now</a> because we will definitely raise the price tag once XIB support is live. Also your purchase gives us the budget to add more exciting features in the future.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=6292&amp;md5=f055672f06886e137c635e849fed15d3" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2012/04/linguan-with-xib-support/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2012%2F04%2Flinguan-with-xib-support%2F&amp;language=en_GB&amp;category=text&amp;title=Linguan+with+XIB+Support&amp;description=I%26%238217%3Bve+seen+it%21+The+fabled+XIB+support+for+Linguan+is+almost+done.+%26nbsp%3B+A+week+ago+I+received+a+preview+for+the+next+version+of+Linguan+which+will+also+allow...&amp;tags=Linguan%2Cblog" type="text/html" />
	</item>
		<item>
		<title>DTCoreText 1.0.1, Linker Flags and Rich Text News</title>
		<link>http://www.cocoanetics.com/2012/04/dtcoretext-1-0-1-linker-flags-and-rich-text-news/</link>
		<comments>http://www.cocoanetics.com/2012/04/dtcoretext-1-0-1-linker-flags-and-rich-text-news/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 09:08:24 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[DTCoreText]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=6255</guid>
		<description><![CDATA[I reported a while ago that I was forced to tag the current state of the DTCoreText master repository as 1.0.0. The reason for this was that CocoaPods was starting to gain lots of momentum and several people wanted to use DTCoreText via a podspec. You can have podspecs point to the master branch as well, but then you never really know what you get. This can possibly cause many headaches especially in larger projects where you cannot track the state of each individual sub-project. Therefore it is generally recommended &#8211; if not required &#8211; to make use of tags in GitHub. &#160; Tags are like labels that you attach to the current state of a repository. You can create them simply by issuing the following command in the repository root folder. git tag &#34;1.0.1&#34; You can list the existing tags with: git tag -l There is an option on git push to have the tags also travel to the origin repository on GitHub: git push origin master --tags Once you&#8217;ve done that, GitHub provides snapshots of the tagged state as tar balls and zip files&#8230; though you probably don&#8217;t want to use these but rather have the project as a clone so that you can easily update it. DTCoreText News Amongst the fixes that made this maintenance release necessary where: Fixed Block-Retain-Cycle Fixed a second minor retain-cycle Workaround for Chinese Font cascade bug in iOS 5.x (radar://11262229) Workaround for a CoreText memory leak in iOS 4.3 (fixed in 5.0) Some Unit Testing corrections Updated Readme regarding necessary linker flags I finally got around to also filing a Radar for the cascade bug. The memory leak issue is fixed as of iOS 5, the problem there was that if you replaced the paragraph style attribute on an NSAttributedString with a new one, the previous entry would leak. I fixed that by simply removing the attribute first before calling addAttribute with the new style. The project has surpassed 1000 watchers on GitHub which tells me that it is definitely of use for many people. If you have any app making use of it, then please tell me about it as I like to feature your work. I especially love to receive testimonials like this one. The changes to the Readme reflect the outcome of research done by David Hoerl. The question was to determine which linker flags are really necessary when linking in DTCoreText &#8211; or any other static library that contains categories &#8211; into an app. Linker Flags Wisdom The linker in general tries to only link in code that is actually used. So if you have C-functions then their code will not end up in the final app binary if it is never being called. This does not work for Objective-C category extensions because of the dynamic nature of method resolution. Therefore you would generally use the -ObjC linker flag when dealing with static libraries that contain Objective-C code. Greg Parker from Apple who refers to himself as &#8220;Runtime Wrangler&#8221; explains it like this: -all_load and -force_load act at link time, not at load time. -all_load and -force_load tell the linker to link the entire static archive in the final executable, even if the linker thinks that parts of the archive are unused. When you link a traditional C static archive (.a file), any code from the archive that is never referenced in the final executable is simply omitted from the executable. So if you had a static archive with 999 functions you did not call and 1 function that you did call, your final executable would include only that one function. Objective-C categories break the C static archive model, because you want the Objective-C category to appear in the final executable even though there are no C symbol references to it from the executable. The best solution for Objective-C categories in static archives is the -ObjC linker option, which tells the linker that all Objective-C categories in the archives are &#8220;used&#8221; but to apply the usual reference algorithm for everything else in the archives. The -ObjC option is broken in some versions of the linker. For those cases the -force_load and -all_load options work. The final executable may be larger than necessary with those options, if there were classes or C functions that could have been omitted by the linker. If you have multiple archives and only some of them have Objective-C code then -force_load may generate smaller output than -all_load. On iOS you&#8217;d typically only link in libraries that you need, as opposed to traditional C or C++ where you&#8217;d often link in large static libraries that are collections of utility methods. So in the case where the libDTCoreText.a is the only static library should be  no difference between force_load and all_load at all. Personally I prefer the [...]]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2012/04/dtcoretext-1-0-1-linker-flags-and-rich-text-news/"></g:plusone></div><p>I reported a while ago that I was forced to tag the current state of the DTCoreText master repository as <a title="DTRichTextEditor / DTCoreText News" href="http://www.cocoanetics.com/2012/02/dtrichtexteditor-dtcoretext-news/">1.0.0</a>. The reason for this was that CocoaPods was starting to gain lots of momentum and several people wanted to use DTCoreText via a podspec.</p>
<p>You can have podspecs point to the master branch as well, but then you never really know what you get. This can possibly cause many headaches especially in larger projects where you cannot track the state of each individual sub-project.</p>
<p>Therefore it is generally recommended &#8211; if not required &#8211; to make use of tags in GitHub.</p>
<p><span id="more-6255"></span></p>
<div class="inner_ad_block">
<div id="advman-7" class="widget Advman_Widget">
<h3 class="widgettitle"></h3>
<p><!-- BuySellAds.com Zone Code --></p>
<div id="bsap_1260346" class="bsarocks bsap_fc3166ea4a479e0fdb4251fbe92a1219"></div>
<p><!-- End BuySellAds.com Zone Code --></div>
<div id="text-21" class="widget widget_text">
<div class="textwidget">
<p>&nbsp;</p>
</div></div>
</div>
<p>Tags are like labels that you attach to the current state of a repository. You can create them simply by issuing the following command in the repository root folder.</p>

<div class="wp_codebox"><table><tr id="p625516"><td class="code" id="p6255code16"><pre class="objc" style="font-family:monospace;">git tag <span style="color: #bf1d1a;">&quot;1.0.1&quot;</span></pre></td></tr></table></div>

<p>You can list the existing tags with:</p>

<div class="wp_codebox"><table><tr id="p625517"><td class="code" id="p6255code17"><pre class="objc" style="font-family:monospace;">git tag <span style="color: #002200;">-</span>l</pre></td></tr></table></div>

<p>There is an option on git push to have the tags also travel to the origin repository on GitHub:</p>

<div class="wp_codebox"><table><tr id="p625518"><td class="code" id="p6255code18"><pre class="objc" style="font-family:monospace;">git push origin master <span style="color: #002200;">--</span>tags</pre></td></tr></table></div>

<p>Once you&#8217;ve done that, GitHub provides snapshots of the tagged state as tar balls and zip files&#8230; though you probably don&#8217;t want to use these but rather have the project as a clone so that you can easily update it.</p>
<p><a href="http://www.cocoanetics.com/files/Bildschirmfoto-2012-04-17-um-9.59.15-AM.png"><img class="alignnone size-full wp-image-6256" title="Tags on GitHub" src="http://www.cocoanetics.com/files/Bildschirmfoto-2012-04-17-um-9.59.15-AM.png" alt="" width="341" height="371" /></a></p>
<h3>DTCoreText News</h3>
<p>Amongst the fixes that made this maintenance release necessary where:</p>
<ul>
<li>Fixed <a title="Block Retain Loop" href="http://www.cocoanetics.com/2012/03/block-retain-loop/">Block-Retain-Cycle</a></li>
<li>Fixed a second minor retain-cycle</li>
<li>Workaround for Chinese Font cascade bug in iOS 5.x (<a href="http://openradar.appspot.com/radar?id=1647415">radar://11262229</a>)</li>
<li>Workaround for a CoreText memory leak in iOS 4.3 (fixed in 5.0)</li>
<li>Some Unit Testing corrections</li>
<li>Updated Readme regarding necessary linker flags</li>
</ul>
<p>I finally got around to also filing a Radar for the cascade bug. The memory leak issue is fixed as of iOS 5, the problem there was that if you replaced the paragraph style attribute on an NSAttributedString with a new one, the previous entry would leak. I fixed that by simply removing the attribute first before calling addAttribute with the new style.</p>
<p>The project has <a href="https://github.com/Cocoanetics/DTCoreText/watchers">surpassed 1000 watchers</a> on GitHub which tells me that it is definitely of use for many people. If you have any app making use of it, then please tell me about it as I like to feature your work. I especially love to receive testimonials <a title="DTCoreText Feedback" href="http://www.cocoanetics.com/2012/03/dtcoretext-feedback/">like this one</a>.</p>
<p>The changes to the Readme reflect the outcome of research done by David Hoerl. The question was to determine which linker flags are really necessary when linking in DTCoreText &#8211; or any other static library that contains categories &#8211; into an app.</p>
<h3>Linker Flags Wisdom</h3>
<p>The linker in general tries to only link in code that is actually used. So if you have C-functions then their code will not end up in the final app binary if it is never being called. This does not work for Objective-C category extensions because of the dynamic nature of method resolution.</p>
<p>Therefore you would generally use the <strong>-ObjC</strong> linker flag when dealing with static libraries that contain Objective-C code.</p>
<p>Greg Parker from Apple who refers to himself as &#8220;Runtime Wrangler&#8221; <a href="http://osdir.com/ml/general/2012-04/msg28235.html">explains</a> it like this:</p>
<blockquote><p>-all_load and -force_load <strong>act at link time</strong>, not at load time. -all_load and<br />
-force_load tell the linker to link the entire static archive in the final<br />
executable, even if the linker thinks that parts of the archive are unused.</p>
<p>When you link a traditional C static archive (.a file), any code from the<br />
archive that is never referenced in the final executable is simply omitted from<br />
the executable. So if you had a static archive with 999 functions you did not<br />
call and 1 function that you did call, your final executable would include only<br />
that one function.</p>
<p>Objective-C categories break the C static archive model, because you want the<br />
Objective-C category to appear in the final executable even though there are no<br />
C symbol references to it from the executable.</p>
<p>The <strong>best solution for Objective-C categories in static archives is the -ObjC</strong><br />
<strong> linker option</strong>, which tells the linker that all Objective-C categories in the<br />
archives are &#8220;used&#8221; but to apply the usual reference algorithm for everything<br />
else in the archives.</p>
<p>The -ObjC option is <strong>broken in some versions of the linker</strong>. For those cases the<br />
-force_load and -all_load options work. The final executable may be larger than<br />
necessary with those options, if there were classes or C functions that could<br />
have been omitted by the linker. If you have multiple archives and only some of<br />
them have Objective-C code then -force_load may generate smaller output than<br />
-all_load.</p></blockquote>
<p>On iOS you&#8217;d typically only link in libraries that you need, as opposed to traditional C or C++ where you&#8217;d often link in large static libraries that are collections of utility methods. So in the case where the libDTCoreText.a is the only static library should be  no difference between force_load and all_load at all.</p>
<p>Personally I prefer the simplest approach which is to first try to get by with only -ObjC and if I get unrecognized selector crashes to additionally add -force_load because there I don&#8217;t need to know or specify the path to the specific library.</p>
<h3>DTRichTextEditor</h3>
<p>I&#8217;ve streamed all the 1.0.1 updates also into DTRichTextEditor which uses DTCoreText for display of rich text. Changes there include:</p>
<ul>
<li>Support Left, Center, Right and Justified toggling of paragraphs</li>
<li>Preliminary work on supporting lists</li>
</ul>
<p>I love to get feedback from people who are actually using the editor in shipping apps. The most prominent one is Dootrix who made the <a href="http://www.simpl.com/">Simpl iPad app</a>. I <a title="Podcast #33 – “Rich Texting”" href="http://www.cocoanetics.com/2012/04/podcast-33-rich-texting/">interviewed the maker</a> on my podcast, if you haven&#8217;t done so I urge you to listen to it as I think it was one of the most enlightening conversations I ever had on air.</p>
<p><a href="http://www.cocoanetics.com/files/mzl.qmfvnljn.480x480-75.jpg"><img class="alignnone size-full wp-image-6257" title="Simpl app using DTRichTextEditor" src="http://www.cocoanetics.com/files/mzl.qmfvnljn.480x480-75.jpg" alt="" width="480" height="351" /></a></p>
<p>I keep getting requests for a ways to test the editor component before purchasing it. Also the work on lists as well as some feature requests are still open for the editor.</p>
<p>Unfortunately I won&#8217;t have any time to devote to these requests as we are in &#8220;crunch time&#8221; for a major project of maximum importance for the next two weeks. Therefore I ask for some patience.</p>
<h3>The Future</h3>
<p>I&#8217;m not making very much money from selling licenses. Only enough to justify it as a hobby. I might be forced to dramatically raise the price in the near future. So if you are thinking of buying then better do so now, because you then will have access to my Subversion repository and get the benefit of all future updates.</p>
<p>On the above mentioned podcast episode I also discussed what my thoughts where related to the future of rich text editing on iOS.</p>
<p>I am happy if Apple takes on more of the burden that DTCoreText and DTRichTextEditor are currently carrying. It is astonishing that they truly believe that people would use contentEditable UIWebViews for that task. As iPads become equal-partners in content creation this is an essential platform feature.</p>
<p>There are two levels that I can see Apple move forward on:</p>
<ul>
<li>Add the missing protocols and interfaces for interacting with selections and the magnifying glass &#8211; you would still have to create your own editor but at least you could do way more easily</li>
<li>Enhance UITextView &#8211; which is using <a href="http://code.google.com/p/iphone-dev/source/browse/branches/include-1.2-sdk/include/UIKit/UITextView.h?r=266">WebKit under the hood</a> already &#8211; to be editable. Or alternatively create a totally new Rich Text Editing View.</li>
</ul>
<p>Either way I will still have a market and and audience while people support 4.3 and above, or 5.0 and above when 6.0 finally ships. I would predict the former and not bet on the latter.</p>
<p>To cut a long story short: progress is being made and patience is required.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=6255&amp;md5=06938ab9e3ec6f3c8f79b6abe64f38f8" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2012/04/dtcoretext-1-0-1-linker-flags-and-rich-text-news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2012%2F04%2Fdtcoretext-1-0-1-linker-flags-and-rich-text-news%2F&amp;language=en_GB&amp;category=text&amp;title=DTCoreText+1.0.1%2C+Linker+Flags+and+Rich+Text+News&amp;description=I+reported+a+while+ago+that+I+was+forced+to+tag+the+current+state+of+the+DTCoreText+master+repository+as+1.0.0.+The+reason+for+this+was+that+CocoaPods+was+starting...&amp;tags=DTCoreText%2Cblog" type="text/html" />
	</item>
		<item>
		<title>iWoman 2.0.6</title>
		<link>http://www.cocoanetics.com/2012/03/iwoman-2-0-6/</link>
		<comments>http://www.cocoanetics.com/2012/03/iwoman-2-0-6/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 09:39:00 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[iWoman]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=6138</guid>
		<description><![CDATA[I thought I was smart when refactoring some code in DTAboutViewController to use block-based animations. Turns out that I had not considered backwards compatibility for 3.x when doing that simple change. This caused some unlucky users (still on iOS 3.1.3) to get the update pushed via iTunes, but then finding themselves unable to launch the app. I do plan to cease supporting 3.x sooner or later, but not like this. The proper way is to raise the deployment target when implementing features that require 4.x. This way people unwilling (or unable) to update their devices just won&#8217;t be receiving those new updates but will still be able to continue using the old version. Changes Fixed: Incompatibility with 3.x causes app to crash Added: Alert when user tries to send support e-mail but has no account configured Fixed: Tapping on today button in cycle view would show the wrong day in cycle view. Fixed: Tapping on the calendar button in Wheel View would lead to the wrong day in calendar view (in some time zones) The update has been submitted to Apple and should be available soon. Update April 4th: &#8230; the update is now available on the App Store.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2012/03/iwoman-2-0-6/"></g:plusone></div><p>I thought I was smart when refactoring some code in DTAboutViewController to use block-based animations. Turns out that I had not considered backwards compatibility for 3.x when doing that simple change. This caused some unlucky users (still on iOS 3.1.3) to get the update pushed via iTunes, but then finding themselves unable to launch the app.</p>
<p>I <em>do</em> plan to cease supporting 3.x sooner or later, but <em>not like this</em>. The proper way is to raise the deployment target when implementing features that require 4.x. This way people unwilling (or unable) to update their devices just won&#8217;t be receiving those new updates but will still be able to continue using the old version.</p>
<h3>Changes</h3>
<ul>
<li>Fixed: Incompatibility with 3.x causes app to crash</li>
<li>Added: Alert when user tries to send support e-mail but has no account configured</li>
<li>Fixed: Tapping on today button in cycle view would show the wrong day in cycle view.</li>
<li>Fixed: Tapping on the calendar button in Wheel View would lead to the wrong day in calendar view (in some time zones)</li>
</ul>
<p>The update has been submitted to Apple and should be available soon.</p>
<p>Update April 4th: &#8230; the update is now available on the App Store.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=6138&amp;md5=9d8ad76bd3d74797500a40560af1fb8e" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2012/03/iwoman-2-0-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2012%2F03%2Fiwoman-2-0-6%2F&amp;language=en_GB&amp;category=text&amp;title=iWoman+2.0.6&amp;description=I+thought+I+was+smart+when+refactoring+some+code+in+DTAboutViewController+to+use+block-based+animations.+Turns+out+that+I+had+not+considered+backwards+compatibility+for+3.x+when+doing+that+simple...&amp;tags=iWoman%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Linguan 1.0.5</title>
		<link>http://www.cocoanetics.com/2012/03/linguan-1-0-5/</link>
		<comments>http://www.cocoanetics.com/2012/03/linguan-1-0-5/#comments</comments>
		<pubDate>Thu, 15 Mar 2012 11:08:37 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[Linguan]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=6097</guid>
		<description><![CDATA[I did a quick fix for Linguan after several users complained about the strict slash-escaping that we had introduced in 1.0.4. Linguan un-escapes all texts it reads from strings files so that they can be displayed correctly. You don&#8217;t want to have to deal with backslashes in the editor. Now on writing I had thought it to be a good idea to also escape everything, including question marks, backslashes and single quotes. It was a bad idea to do that because this unduely changes the tokens and translations. Translators (the sad kind without Linguan) would be confused by having to deal with lots of \&#8217; in the text. And there where some reports of the localized string loading functions not being able to find the key. Not always, but this is clearly not what we wanted. This update relaxes the escaping on writing to the extent that only double quotes and invisible characters are now being escaped.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2012/03/linguan-1-0-5/"></g:plusone></div><p>I did a quick fix for <a href="http://www.cocoanetics.com/apps/linguan/">Linguan</a> after several users complained about the strict slash-escaping that we had introduced in <a title="Linguan 1.0.4" href="http://www.cocoanetics.com/2012/02/linguan-1-0-4/">1.0.4</a>.</p>
<p>Linguan un-escapes all texts it reads from strings files so that they can be displayed correctly. You don&#8217;t want to have to deal with backslashes in the editor. Now on writing I had thought it to be a good idea to also escape everything, including question marks, backslashes and single quotes. It was a bad idea to do that because this unduely changes the tokens and translations.</p>
<p>Translators (the sad kind without Linguan) would be confused by having to deal with lots of \&#8217; in the text. And there where some reports of the localized string loading functions not being able to find the key. Not always, but this is clearly not what we wanted.</p>
<p>This update relaxes the escaping on writing to the extent that only double quotes and invisible characters are now being escaped.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=6097&amp;md5=ff342c7b2771ff8c5a8371eb65b19418" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2012/03/linguan-1-0-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2012%2F03%2Flinguan-1-0-5%2F&amp;language=en_GB&amp;category=text&amp;title=Linguan+1.0.5&amp;description=I+did+a+quick+fix+for+Linguan+after+several+users+complained+about+the+strict+slash-escaping+that+we+had+introduced+in+1.0.4.+Linguan+un-escapes+all+texts+it+reads+from+strings+files...&amp;tags=Linguan%2Cblog" type="text/html" />
	</item>
		<item>
		<title>SpeakerClock 1.1.2</title>
		<link>http://www.cocoanetics.com/2012/03/speakerclock-1-1-2/</link>
		<comments>http://www.cocoanetics.com/2012/03/speakerclock-1-1-2/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 15:42:01 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[SpeakerClock]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=6068</guid>
		<description><![CDATA[This release fixes the crash on iOS 5 that I had in all my apps using the version of DTAboutViewController from before iOS 5 was released. I&#8217;m sorry for having procrastinated so long on updating SpeakerClock, but I had forgotten about this issue until a user reminded me of it via e-mail. The update has been submitted to Apple and we hope to have it available on the app store in about 5 days. Update March 10th: &#8230; and it&#8217;s approved and available for download.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2012/03/speakerclock-1-1-2/"></g:plusone></div><p>This release fixes the crash on iOS 5 that I had in all my apps using the version of DTAboutViewController from before iOS 5 was released. I&#8217;m sorry for having procrastinated so long on updating <a href="http://www.cocoanetics.com/apps/speakerclock/">SpeakerClock</a>, but I had forgotten about this issue until a user reminded me of it via e-mail.</p>
<p>The update has been submitted to Apple and we hope to have it available on the app store in about 5 days.</p>
<p>Update March 10th: &#8230; and it&#8217;s approved and available for download.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=6068&amp;md5=8bbe77aa83ce238b162b5d57155aabaf" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2012/03/speakerclock-1-1-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2012%2F03%2Fspeakerclock-1-1-2%2F&amp;language=en_GB&amp;category=text&amp;title=SpeakerClock+1.1.2&amp;description=This+release+fixes+the+crash+on+iOS+5+that+I+had+in+all+my+apps+using+the+version+of+DTAboutViewController+from+before+iOS+5+was+released.+I%26%238217%3Bm+sorry+for+having...&amp;tags=SpeakerClock%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Linguan 1.0.4</title>
		<link>http://www.cocoanetics.com/2012/02/linguan-1-0-4/</link>
		<comments>http://www.cocoanetics.com/2012/02/linguan-1-0-4/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 08:30:53 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[Linguan]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=5986</guid>
		<description><![CDATA[This is a hot fix release addressing several issues that users found. You now have a new option to decode unicode sequences with two backslashes on loading strings files or scanning source code. Decoding and Encoding of slash escapes now uses the functions provided by genstrings2. &#160; Changes ADDED: Option to decoding of \\U unicode sequences on loading files ADDED: Copy/Paste now possibly without the need to double-click on cell FIXED: Problem with xcodeproject with non-English CFBundleDevelopmentRegion FIXED: Warnings not being updated if tab is visible before validating FIXED: Over-Escaping of single quotes on scanning FIXED: Parse File duplicates loaded tokens The update has been submitted to Apple. UPDATE Feb 21st: now available]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2012/02/linguan-1-0-4/"></g:plusone></div><p>This is a hot fix release addressing several issues that users found. You now have a new option to decode unicode sequences with two backslashes on loading strings files or scanning source code. Decoding and Encoding of slash escapes now uses the functions provided by <a title="genstrings2" href="http://www.cocoanetics.com/2012/01/genstrings2/">genstrings2</a>.</p>
<p><span id="more-5986"></span></p>
<div class="inner_ad_block">
<div id="advman-7" class="widget Advman_Widget">
<h3 class="widgettitle"></h3>
<p><!-- BuySellAds.com Zone Code --></p>
<div id="bsap_1260346" class="bsarocks bsap_fc3166ea4a479e0fdb4251fbe92a1219"></div>
<p><!-- End BuySellAds.com Zone Code --></div>
<div id="text-21" class="widget widget_text">
<div class="textwidget">
<p>&nbsp;</p>
</div></div>
</div>
<h3>Changes</h3>
<ul>
<li>ADDED: Option to decoding of \\U unicode sequences on loading files</li>
<li>ADDED: Copy/Paste now possibly without the need to double-click on cell</li>
<li>FIXED: Problem with xcodeproject with non-English CFBundleDevelopmentRegion</li>
<li>FIXED: Warnings not being updated if tab is visible before validating</li>
<li>FIXED: Over-Escaping of single quotes on scanning</li>
<li>FIXED: Parse File duplicates loaded tokens</li>
</ul>
<div>The update has been submitted to Apple. UPDATE Feb 21st: now available</div>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=5986&amp;md5=b46a3d5089aa2ab7597035136469b961" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2012/02/linguan-1-0-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2012%2F02%2Flinguan-1-0-4%2F&amp;language=en_GB&amp;category=text&amp;title=Linguan+1.0.4&amp;description=This+is+a+hot+fix+release+addressing+several+issues+that+users+found.+You+now+have+a+new+option+to+decode+unicode+sequences+with+two+backslashes+on+loading+strings+files+or...&amp;tags=Linguan%2Cblog" type="text/html" />
	</item>
		<item>
		<title>GeoCorder 1.3.2</title>
		<link>http://www.cocoanetics.com/2012/02/geocorder-1-3-2/</link>
		<comments>http://www.cocoanetics.com/2012/02/geocorder-1-3-2/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 15:49:59 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[GeoCorder]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=5937</guid>
		<description><![CDATA[Here&#8217;s another maintenance release fixing a crashing bug in the About section. Changes Fixed: Crash on trying to open usage instructions Added: More detailed explanation of accuracy and filter settings This update, like the one before it, goes out for the paid version of GeoCorder first. If the issues are resolved once this comes into the store then we&#8217;ll update the ad-sponsored version, too. Update Feb 11th: The update has been approved.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2012/02/geocorder-1-3-2/"></g:plusone></div><p>Here&#8217;s another maintenance release fixing a crashing bug in the About section.</p>
<h3>Changes</h3>
<ul>
<li>Fixed: Crash on trying to open usage instructions</li>
<li>Added: More detailed explanation of accuracy and filter settings</li>
</ul>
<p>This update, like the one before it, goes out for the paid version of GeoCorder first. If the issues are resolved once this comes into the store then we&#8217;ll update the ad-sponsored version, too.</p>
<p>Update Feb 11th: The update has been approved.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=5937&amp;md5=36eb0acd6222cc4eff6f0b6fed224f40" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2012/02/geocorder-1-3-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2012%2F02%2Fgeocorder-1-3-2%2F&amp;language=en_GB&amp;category=text&amp;title=GeoCorder+1.3.2&amp;description=Here%26%238217%3Bs+another+maintenance+release+fixing+a+crashing+bug+in+the+About+section.+Changes+Fixed%3A+Crash+on+trying+to+open+usage+instructions+Added%3A+More+detailed+explanation+of+accuracy+and+filter+settings...&amp;tags=GeoCorder%2Cblog" type="text/html" />
	</item>
		<item>
		<title>iWoman 2.0.5</title>
		<link>http://www.cocoanetics.com/2012/02/iwoman-2-0-5/</link>
		<comments>http://www.cocoanetics.com/2012/02/iwoman-2-0-5/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 17:17:21 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[iWoman]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=5883</guid>
		<description><![CDATA[This is a maintenance update. There was a bug in DTAboutViewController which caused a crash under iOS 5. Change Fixed: Crash on iOS 5 when opening About Section The update has been submitted to Apple for approval. Update Feb 8th: Ready for Sale. It should be available shortly.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2012/02/iwoman-2-0-5/"></g:plusone></div><p>This is a maintenance update. There was a bug in <a href="http://www.cocoanetics.com/parts/dtaboutviewcontroller/">DTAboutViewController</a> which caused a crash under iOS 5.</p>
<h3>Change</h3>
<ul>
<li>Fixed: Crash on iOS 5 when opening About Section</li>
</ul>
<p>The update has been submitted to Apple for approval.</p>
<p>Update Feb 8th: Ready for Sale. It should be available shortly.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=5883&amp;md5=de635343e7b090f1dcbaf62c0c51755e" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2012/02/iwoman-2-0-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2012%2F02%2Fiwoman-2-0-5%2F&amp;language=en_GB&amp;category=text&amp;title=iWoman+2.0.5&amp;description=This+is+a+maintenance+update.+There+was+a+bug+in+DTAboutViewController+which+caused+a+crash+under+iOS+5.+Change+Fixed%3A%C2%A0Crash+on+iOS+5+when+opening+About+Section+The+update+has...&amp;tags=iWoman%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Linguan 1.0.3</title>
		<link>http://www.cocoanetics.com/2012/01/linguan-1-0-3/</link>
		<comments>http://www.cocoanetics.com/2012/01/linguan-1-0-3/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 18:32:27 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[Linguan]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=5823</guid>
		<description><![CDATA[Besides fixing several bugs reported by users this release focusses on implementing a new custom-built super-charged strings scanner. Changes FIXED: missing strings file no longer aborts import FIXED: added &#8211; Button for deleting tokens FIXED: deletion of wrong row FIXED: over-escaping of \ on writing strings files FIXED: wrong token name updated on enter key FIXED: search filter not reset on adding a new token FIXED: Previous/Next buttons in wizard cease to function NEW: replaced genstrings with high-speed custom implementation (&#62;20x speed improvement) NEW: support custom localization macro prefix This new version does no longer support 32-bit because the new strings scanner was implemented using ARC. We hope that this does not inconvenience any of our existing uses. But then again, serious developers are on a 64 bit machine anyway since Snow Leopard&#8230; The new version has been submitted to Apple today.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2012/01/linguan-1-0-3/"></g:plusone></div><p>Besides fixing several bugs reported by users this release focusses on implementing a new <a title="genstrings2" href="http://www.cocoanetics.com/2012/01/genstrings2/">custom-built super-charged strings scanner</a>.</p>
<p><strong>Changes</strong></p>
<ul>
<li>FIXED: missing strings file no longer aborts import</li>
<li>FIXED: added &#8211; Button for deleting tokens</li>
<li>FIXED: deletion of wrong row</li>
<li>FIXED: over-escaping of \ on writing strings files</li>
<li>FIXED: wrong token name updated on enter key</li>
<li>FIXED: search filter not reset on adding a new token</li>
<li>FIXED: Previous/Next buttons in wizard cease to function</li>
<li>NEW: replaced genstrings with high-speed custom implementation (&gt;20x speed improvement)</li>
<li>NEW: support custom localization macro prefix</li>
</ul>
<p>This new version does no longer support 32-bit because the new strings scanner was implemented using ARC. We hope that this does not inconvenience any of our existing uses. But then again, serious developers are on a 64 bit machine anyway since Snow Leopard&#8230;</p>
<p>The new version has been submitted to Apple today.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=5823&amp;md5=97da7c954c1ebe8f2634920018c31cdc" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2012/01/linguan-1-0-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2012%2F01%2Flinguan-1-0-3%2F&amp;language=en_GB&amp;category=text&amp;title=Linguan+1.0.3&amp;description=Besides+fixing+several+bugs+reported+by+users+this+release+focusses+on+implementing+a+new+custom-built+super-charged+strings+scanner.+Changes+FIXED%3A+missing+strings+file+no+longer+aborts+import+FIXED%3A+added+%26%238211%3B...&amp;tags=Linguan%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Linguan 1.0.2</title>
		<link>http://www.cocoanetics.com/2011/12/linguan-1-0-2/</link>
		<comments>http://www.cocoanetics.com/2011/12/linguan-1-0-2/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 17:11:08 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[Linguan]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=5716</guid>
		<description><![CDATA[The second hot fix pack for Linguan 1.0 fixes a couple more issues that some of our (mostly) happy customers reported. Changes Fixed: Translations will no longer get trimmed Fixed: Problem opening projects with absolute file paths Fixed: Table did not update on deletion of token Changed: Extended duration of &#8220;no new tokens found&#8221; HUD Changed: Enter key now opens selected recent project in welcome screen If you haven&#8217;t done so please post your feedback on iTunes. To be able to add additional features to Linguan we need to have sufficient sales. And for that we need your positive reviews, high rating and that you tell other developers about Linguan. Today is the best day for them to also get a copy because: As a Thank You for your interest in our app we reduced the sale price by 50% until the new version gets approval by Apple.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2011/12/linguan-1-0-2/"></g:plusone></div><p>The second hot fix pack for Linguan 1.0 fixes a couple more issues that some of our (mostly) happy customers reported.</p>
<h3>Changes</h3>
<ul>
<li>Fixed: Translations will no longer get trimmed</li>
<li>Fixed: Problem opening projects with absolute file paths</li>
<li>Fixed: Table did not update on deletion of token</li>
<li>Changed: Extended duration of &#8220;no new tokens found&#8221; HUD</li>
<li>Changed: Enter key now opens selected recent project in welcome screen</li>
</ul>
<p>If you haven&#8217;t done so please post your feedback on iTunes. To be able to add additional features to Linguan we need to have sufficient sales. And for that we need your positive reviews, high rating and that you tell other developers about Linguan.</p>
<p>Today is the best day for them to also get a copy because: As a <strong>Thank You</strong> for your interest in our app we reduced the sale price by 50% until the new version gets approval by Apple.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=5716&amp;md5=7f742425a1bdd037dcf0d84600f79cc2" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2011/12/linguan-1-0-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2011%2F12%2Flinguan-1-0-2%2F&amp;language=en_GB&amp;category=text&amp;title=Linguan+1.0.2&amp;description=The+second+hot+fix+pack+for+Linguan+1.0+fixes+a+couple+more+issues+that+some+of+our+%28mostly%29+happy+customers+reported.+Changes+Fixed%3A+Translations+will+no+longer+get+trimmed+Fixed%3A...&amp;tags=Linguan%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Linguan 1.0.1 &#8211; Ginormous Hotfix Pack</title>
		<link>http://www.cocoanetics.com/2011/11/linguan-1-0-1-ginormous-hotfix-pack/</link>
		<comments>http://www.cocoanetics.com/2011/11/linguan-1-0-1-ginormous-hotfix-pack/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 15:08:32 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[Linguan]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=5671</guid>
		<description><![CDATA[My partners at BytePoets have been causing their keyboards to emit steam from walking through 26 issues that we identified on the 1.0 release just 9 days ago. Almost all had been identified as typical &#8220;oh shoot&#8221; elements, mostly items that you only find when people begin to actually use your software. Also I was able to smuggle in one or the other new feature since I consider &#8220;user confusion&#8221; also as a form of bug that you should hot fix if you can. &#160; Changes Fixed: potential crash on exporting tokens Fixed: on Export Missing Tokens + Translated Tokens = All Tokens Fixed: Undo bug when adding a new token Fixed: Location of HUD with app running on external monitor Fixed: red filename when opening a single strings file Fixed: entries in recent file list get duplicated Fixed: string parser did not properly deal with escaped characters Fixed: Warnings window scrollbar was cut off Fixed: Warnings and Errors should not be editable Fixed: Potential crash on closing a window or sending app into background Fixed: Problem saving files with French accent characters Fixed: Problem reading certain UTF16 files Fixed: Double-clicking a Warning should select the related token Fixed: Order of files to select for export was different from project tree Fixed: Warnings did not get flushed on revalidation Fixed: Inconsistencies in Wizard mode Fixed: Inconsistent handling of recent files Fixed: App no longer asks if you want to save the xcodeproj (which it does not modify) Fixed: you could open the same file twice Fixed: Inconsistent showing of Welcome window Fixed: Potential crash on reopening a file from recent file menu Fixed: confusing behavior of the setting for the token order in saved files Fixed: saving of files now cleans them up properly Fixed: Previous button was active in Wizard even when there was no previous token Changed: Error message improved when trying to import file that was not exported from Linguan Added: you can now add newlines in grid view with Alt+Enter, regular enter moves to the next row I wanted to also get in several localizations and 10 volunteers jumped forward to provide translations of the tokens. But it turns out that this is only a third of the whole app. There are also many strings in XIBS and the help file. So instead of doing an incomplete job, I did not put these into this version just yet. In Mac apps people tend to put more text in XIBs. Probably because there you have much more screen space which leads to more labels and setting all those in code would require many more outlets. But I ordered XIB support for 1.1. Linguan is localized in English and German at present, so I&#8217;m also taking the opportunity to add a German app store description which I found you can only add if the app is not yet approved. More languages will follow in another point release. Another thing that did not make it for 1.0.1 is support for settings bundles because Xcode 4.2 seems to be in inconsistent about importing and handling these. So that needs a bit more research to support. One thing that was also confusing was the naming of the &#8220;Last Import&#8221; auto-folder. If you scan your sources &#8211; Linguan uses genstrings for that &#8211; you will see new tokens appear there for quick access to what you need to add translations for. So we renamed that to &#8220;Last Scan&#8221;. There are many more things that our enthusiastic users would like us to add, but as you can see we had our hands full at polishing up the 1.0 release. New features are being planned for the 1.1 version due later this year. It would be awfully nice of you if you could help us spread the word about Linguan, here&#8217;s the app store link. And maybe a review on the app store, preferably with 5 stars? If you need support with Linguan please e-mail us. UPDATE Nov 23rd: Now available.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2011/11/linguan-1-0-1-ginormous-hotfix-pack/"></g:plusone></div><p>My partners at <a href="http://www.bytepoets.com">BytePoets</a> have been causing their keyboards to emit steam from walking through 26 issues that we identified on the <a title="Linguan Available, Users in Ecstasy" href="http://www.cocoanetics.com/2011/11/linguan-available-users-in-ecstasy/">1.0 release</a> just 9 days ago. Almost all had been identified as typical &#8220;oh shoot&#8221; elements, mostly items that you only find when people begin to actually use your software. Also I was able to smuggle in one or the other new feature since I consider &#8220;user confusion&#8221; also as a form of bug that you should hot fix if you can.</p>
<p><span id="more-5671"></span></p>
<div class="inner_ad_block">
<div id="advman-7" class="widget Advman_Widget">
<h3 class="widgettitle"></h3>
<p><!-- BuySellAds.com Zone Code --></p>
<div id="bsap_1260346" class="bsarocks bsap_fc3166ea4a479e0fdb4251fbe92a1219"></div>
<p><!-- End BuySellAds.com Zone Code --></div>
<div id="text-21" class="widget widget_text">
<div class="textwidget">
<p>&nbsp;</p>
</div></div>
</div>
<h3>Changes</h3>
<ul>
<li>Fixed: potential crash on exporting tokens</li>
<li>Fixed: on Export Missing Tokens + Translated Tokens = All Tokens</li>
<li>Fixed: Undo bug when adding a new token</li>
<li>Fixed: Location of HUD with app running on external monitor</li>
<li>Fixed: red filename when opening a single strings file</li>
<li>Fixed: entries in recent file list get duplicated</li>
<li>Fixed: string parser did not properly deal with escaped characters</li>
<li>Fixed: Warnings window scrollbar was cut off</li>
<li>Fixed: Warnings and Errors should not be editable</li>
<li>Fixed: Potential crash on closing a window or sending app into background</li>
<li>Fixed: Problem saving files with French accent characters</li>
<li>Fixed: Problem reading certain UTF16 files</li>
<li>Fixed: Double-clicking a Warning should select the related token</li>
<li>Fixed: Order of files to select for export was different from project tree</li>
<li>Fixed: Warnings did not get flushed on revalidation</li>
<li>Fixed: Inconsistencies in Wizard mode</li>
<li>Fixed: Inconsistent handling of recent files</li>
<li>Fixed: App no longer asks if you want to save the xcodeproj (which it does not modify)</li>
<li>Fixed: you could open the same file twice</li>
<li>Fixed: Inconsistent showing of Welcome window</li>
<li>Fixed: Potential crash on reopening a file from recent file menu</li>
<li>Fixed: confusing behavior of the setting for the token order in saved files</li>
<li>Fixed: saving of files now cleans them up properly</li>
<li>Fixed: Previous button was active in Wizard even when there was no previous token</li>
<li>Changed: Error message improved when trying to import file that was not exported from Linguan</li>
<li>Added: you can now add newlines in grid view with Alt+Enter, regular enter moves to the next row</li>
</ul>
<p>I wanted to also get in several localizations and 10 volunteers jumped forward to provide translations of the tokens. But it turns out that this is only a third of the whole app. There are also many strings in XIBS and the help file. So instead of doing an incomplete job, I did not put these into this version just yet.</p>
<p>In Mac apps people tend to put more text in XIBs. Probably because there you have much more screen space which leads to more labels and setting all those in code would require many more outlets. But I ordered XIB support for 1.1. Linguan is localized in English and German at present, so I&#8217;m also taking the opportunity to add a German app store description which I found you can only add if the app is not yet approved. More languages will follow in another point release.</p>
<p>Another thing that did not make it for 1.0.1 is support for settings bundles because Xcode 4.2 seems to be in inconsistent about importing and handling these. So that needs a bit more research to support.</p>
<p>One thing that was also confusing was the naming of the &#8220;Last Import&#8221; auto-folder. If you scan your sources &#8211; Linguan uses genstrings for that &#8211; you will see new tokens appear there for quick access to what you need to add translations for. So we renamed that to &#8220;Last Scan&#8221;.</p>
<p>There are many more things that our enthusiastic users would like us to add, but as you can see we had our hands full at polishing up the 1.0 release. New features are being planned for the 1.1 version due later this year.</p>
<p>It would be awfully nice of you if you could help us spread the word about Linguan, here&#8217;s the <a href="http://bitly.com/Linguan">app store link</a>. And maybe a review on the app store, preferably with 5 stars? If you need support with Linguan please <a href="mailto:linguan@cocoanetics.com?subject=Linguan">e-mail us</a>.</p>
<p>UPDATE Nov 23rd: Now available.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=5671&amp;md5=7d678ce27a71e23dd005847c87a20355" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2011/11/linguan-1-0-1-ginormous-hotfix-pack/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2011%2F11%2Flinguan-1-0-1-ginormous-hotfix-pack%2F&amp;language=en_GB&amp;category=text&amp;title=Linguan+1.0.1+%26%238211%3B+Ginormous+Hotfix+Pack&amp;description=My+partners+at%C2%A0BytePoets+have+been+causing+their+keyboards+to+emit+steam+from+walking+through+26+issues+that+we+identified+on+the+1.0+release%C2%A0just+9+days+ago.+Almost+all+had+been...&amp;tags=Linguan%2Cblog" type="text/html" />
	</item>
		<item>
		<title>iWoman 2.0.4</title>
		<link>http://www.cocoanetics.com/2011/08/iwoman-2-0-4/</link>
		<comments>http://www.cocoanetics.com/2011/08/iwoman-2-0-4/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 11:44:50 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[iWoman]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=5381</guid>
		<description><![CDATA[There was a stupid problem before this version that could only be seen by users who where traveling between time zones. Notes that you made for a specific date would disappear when you moved into a different time zone and reappear if you moved back. This taught me that it is a bad idea to use an NSDate for a primary key. Updating a lower version iWoman will restore all entries that might have disappeared. In very rare circumstances &#8211; involving traveling more than 12 time zones &#8211; some entries might end up the day before or after the day they were originally entered on. The second change came from a user request who wanted to see the day number on all days of the cycle view. Previously it would not be shown on fertile days. &#160; Changes FIXED: Items would vanish from calendar view if user moved between time zones. MODIFIED: Now the day number is shown for all days in cycle view. The update has been submitted to Apple and we hope for a swift approval. UPDATE Sept 7th: the update is now available on the app store.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2011/08/iwoman-2-0-4/"></g:plusone></div><p>There was a stupid problem before this version that could only be seen by users who where traveling between time zones. Notes that you made for a specific date would disappear when you moved into a different time zone and reappear if you moved back. This taught me that it is a bad idea to use an NSDate for a primary key.</p>
<p>Updating a lower version <a href="http://www.cocoanetics.com/apps/iwoman/">iWoman</a> will restore all entries that might have disappeared. In very rare circumstances &#8211; involving traveling more than 12 time zones &#8211; some entries might end up the day before or after the day they were originally entered on.</p>
<p>The second change came from a user request who wanted to see the day number on all days of the cycle view. Previously it would not be shown on fertile days.</p>
<p><span id="more-5381"></span></p>
<div class="inner_ad_block">
<div id="advman-7" class="widget Advman_Widget">
<h3 class="widgettitle"></h3>
<p><!-- BuySellAds.com Zone Code --></p>
<div id="bsap_1260346" class="bsarocks bsap_fc3166ea4a479e0fdb4251fbe92a1219"></div>
<p><!-- End BuySellAds.com Zone Code --></div>
<div id="text-21" class="widget widget_text">
<div class="textwidget">
<p>&nbsp;</p>
</div></div>
</div>
<h3>Changes</h3>
<ul>
<li>FIXED: Items would vanish from calendar view if user moved between time zones.</li>
<li>MODIFIED: Now the day number is shown for all days in cycle view.</li>
</ul>
<p>The update has been submitted to Apple and we hope for a swift approval.</p>
<p>UPDATE Sept 7th: the update is now available on the app store.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=5381&amp;md5=3df8a7426f466a23549eb4c3da901f1c" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2011/08/iwoman-2-0-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2011%2F08%2Fiwoman-2-0-4%2F&amp;language=en_GB&amp;category=text&amp;title=iWoman+2.0.4&amp;description=There+was+a+stupid+problem+before+this+version+that+could+only+be+seen+by+users+who+where+traveling+between+time+zones.+Notes+that+you+made+for+a+specific+date+would...&amp;tags=iWoman%2Cblog" type="text/html" />
	</item>
		<item>
		<title>MyAppSales 1.0.19</title>
		<link>http://www.cocoanetics.com/2011/04/myappsales-1-0-19/</link>
		<comments>http://www.cocoanetics.com/2011/04/myappsales-1-0-19/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 17:56:36 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[MyAppSales]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=4862</guid>
		<description><![CDATA[The latest HotFix committed to the MyAppSales GitHub repo contain a fix for an AJAX change on iTunes connect. Changes Fixes a problem where only the first daily or weekly report would be downloaded. The problem started to occur because apple added a javascript function call into the method to switch between days and weeks. Something to do with rate limiting, I think they now disable the download button while the AJAX request is ongoing. Development of version 2.0 is still ongoing, you can sneak a peak on the development branch. There are a couple of  things to do before I can merge it back into master: changing the charting to DTChartView and doing the summing per app on a background thread. In the future I am still hoping that the Open Source community will get a bit more involved than it has been. i.e. totally hands off. I&#8217;ve open sourced MyAppSales precisely because I was hoping for contributions, but I have yet to see the first.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2011/04/myappsales-1-0-19/"></g:plusone></div><p>The latest HotFix committed to the <a href="https://github.com/Cocoanetics/MyAppSales">MyAppSales GitHub</a> repo contain a fix for an AJAX change on iTunes connect.</p>
<h3>Changes</h3>
<ul>
<li>Fixes a problem where only the first daily or weekly report would be downloaded.</li>
</ul>
<p>The problem started to occur because apple added a javascript function call into the method to switch between days and weeks. Something to do with rate limiting, I think they now disable the download button while the AJAX request is ongoing.</p>
<p>Development of version 2.0 is still ongoing, you can sneak a peak on the development branch. There are a couple of  things to do before I can merge it back into master: changing the charting to DTChartView and doing the summing per app on a background thread.</p>
<p>In the future I am still hoping that the Open Source community will get a bit more involved than it has been. i.e. totally hands off. I&#8217;ve open sourced MyAppSales precisely because I was hoping for contributions, but I have yet to see the first.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=4862&amp;md5=2cd57e4d4f1a73b5abd1615f5d75e837" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2011/04/myappsales-1-0-19/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2011%2F04%2Fmyappsales-1-0-19%2F&amp;language=en_GB&amp;category=text&amp;title=MyAppSales+1.0.19&amp;description=The+latest+HotFix+committed+to+the+MyAppSales+GitHub+repo+contain+a+fix+for+an+AJAX+change+on+iTunes+connect.+Changes+Fixes+a+problem+where+only+the+first+daily+or+weekly...&amp;tags=MyAppSales%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Summertime 1.1</title>
		<link>http://www.cocoanetics.com/2011/03/summertime-1-1/</link>
		<comments>http://www.cocoanetics.com/2011/03/summertime-1-1/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 07:26:38 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[Summertime]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=4758</guid>
		<description><![CDATA[Summertime is my app that helps you to never be surprised by Daylight Savings Time transitions. A customer nudged me to update the app in time for the upcoming transitions. Since he is traveling a lot I needed to add the capability of configuring multiple time zones. I spend several days to enhance the functionality as described below and to polish it to a level where I can release it in time for the upcoming DST transitions. March 13th in the US and March 27th in Europe. Updates NEW: Completely new Design NEW: Set multiple time zones for your travels NEW: Choose &#8220;Local Time Zone&#8221; to be automatically updated to your local time zone NEW: Multi-Language Time Zone picker The update is now under review by Apple. &#160; I&#8217;m rather proud of the new look which is modeled after the weather app. Before (October 2009): Now (March 2011): I&#8217;ve been working on several ingredients that made this possible. One part was to be able to localize the time zone name you see on the cards. This is typically in a form &#8220;Europe/Vienna&#8221; and there is no localization for it. The only localized description you get is for the &#8220;Central European Summer Time&#8221;. Quite an oversight I think, that&#8217;s why I started an Open Source project to have this available in a translated way as well: NSTimeZone+Localization. In order to get a well-performing way to group and filter the time zones I added a CoreData backend which re-imports all known time zones every time the locale or the iOS version changes. With this the grouping by continents is happening automatically for me and searching via the search bar on top is a snap. Time zones which observe DST are shown in green. Those which are not are shown in red. This is also an interesting view of the world. The second part is to eventually be able to make it a universal app that behaves like the weather app on iPhone and presents a novel card-based layout and interactions on iPad. I did not get the final 10% done in time for a release, so I set the target device family to iPhone-only for the time being. Displaying and managing cards works, but I have to think of a way to do what the i-button does on the iPhone version, display a sorting table view. The general idea of DTCards is to be able to fully reuse the views you are building for a utility iPhone app but make use of the wider space available on an iPad. DTCard would allow me to pinch-open on individual cards to zoom into a more detailed view, but in this context this also does not make sense, because I&#8217;m already displaying all there is to know about the next Daylight Savings Time transitions. In short, the iPad UI is not ready. At the same time Summertime is one of my glorified hobbies with which I don&#8217;t really make nearly enough to warrant put in the midnight oil. I&#8217;ll finish the iPad UI if I ever have time or if somebody specifically asks for it or if suddenly sales go through the roof. IF to the power of 3. There is one piece of functionality that gets shown only if you run iOS 4 or higher: the reminder button. When pushed it allows you to specify a reminder which happens in the form of a local push notification for the next transition. This way easy enough to implement but only came into iOS with version 4. Thus people still running an outdated 3.x only get the cog button for changing a card s time zone and the mail button to e-mail somebody with the info on the card. I posted some screenshots on twitter and feedback generally has been very favorable. Let&#8217;s see what the customers think as soon as Apple approves the update. Update March 12th: Out now!]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2011/03/summertime-1-1/"></g:plusone></div><p>Summertime is my app that helps you to never be surprised by Daylight Savings Time transitions. A customer nudged me to update the app in time for the upcoming transitions. Since he is traveling a lot I needed to add the capability of configuring multiple time zones.</p>
<p>I spend several days to enhance the functionality as described below and to polish it to a level where I can release it in time for the upcoming DST transitions. March 13th in the US and March 27th in Europe.</p>
<h3>Updates</h3>
<ul>
<li>NEW: Completely new Design</li>
<li>NEW: Set multiple time zones for your travels</li>
<li>NEW: Choose &#8220;Local Time Zone&#8221; to be automatically updated to your local time zone</li>
<li>NEW: Multi-Language Time Zone picker</li>
</ul>
<p>The update is now under review by Apple.</p>
<p><span id="more-4758"></span></p>
<div class="inner_ad_block">
<div id="advman-7" class="widget Advman_Widget">
<h3 class="widgettitle"></h3>
<p><!-- BuySellAds.com Zone Code --></p>
<div id="bsap_1260346" class="bsarocks bsap_fc3166ea4a479e0fdb4251fbe92a1219"></div>
<p><!-- End BuySellAds.com Zone Code --></div>
<div id="text-21" class="widget widget_text">
<div class="textwidget">
<p>&nbsp;</p>
</div></div>
</div>
<p>I&#8217;m rather proud of the new look which is modeled after the weather app.</p>
<p><strong>Before</strong> (October 2009):</p>
<p><a href="http://www.cocoanetics.com/files/Summertime1_en1.jpg"><img class="alignnone size-full wp-image-4764" title="Summertime old UI" src="http://www.cocoanetics.com/files/Summertime1_en1.jpg" alt="" width="320" height="480" /></a></p>
<p><strong>Now</strong> (March 2011):</p>
<p><a href="http://www.cocoanetics.com/files/SUMMERTIME_CARD2.jpg"><img class="alignnone size-full wp-image-4765" title="Summertime new UI" src="http://www.cocoanetics.com/files/SUMMERTIME_CARD2.jpg" alt="" width="320" height="460" /></a></p>
<p>I&#8217;ve been working on several ingredients that made this possible.</p>
<p>One part was to be able to localize the time zone name you see on the cards. This is typically in a form &#8220;Europe/Vienna&#8221; and there is no localization for it. The only localized description you get is for the &#8220;Central European Summer Time&#8221;. Quite an oversight I think, that&#8217;s why I started an Open Source project to have this available in a translated way as well: <a title="Translating NSTimeZone Geopolitical IDs" href="http://www.cocoanetics.com/2011/03/translating-nstimezone-geopolitical-ids/">NSTimeZone+Localization</a>. In order to get a well-performing way to group and filter the time zones I added a CoreData backend which re-imports all known time zones every time the locale or the iOS version changes. With this the grouping by continents is happening automatically for me and searching via the search bar on top is a snap.</p>
<p>Time zones which observe DST are shown in green. Those which are not are shown in red. This is also an interesting view of the world.</p>
<p><img class="alignnone size-full wp-image-4767" title="Summertime Time Zone Picker" src="http://www.cocoanetics.com/files/SUMMERTIME_PICKER.jpg" alt="" width="320" height="460" /></p>
<p>The second part is to eventually be able to make it a universal app that behaves like the weather app on iPhone and presents a <a title="DTCards – Universalizing an iPhone App" href="http://www.cocoanetics.com/2011/01/dtcards-universalizing-an-iphone-app/">novel card-based layout</a> and interactions on iPad. I did not get the final 10% done in time for a release, so I set the target device family to iPhone-only for the time being. Displaying and managing cards works, but I have to think of a way to do what the i-button does on the iPhone version, display a sorting table view. The general idea of DTCards is to be able to fully reuse the views you are building for a utility iPhone app but make use of the wider space available on an iPad. DTCard would allow me to pinch-open on individual cards to zoom into a more detailed view, but in this context this also does not make sense, because I&#8217;m already displaying all there is to know about the next Daylight Savings Time transitions.</p>
<p><a href="http://www.cocoanetics.com/files/Screen-shot-2011-03-09-at-8.07.30-AM.png"><img class="alignnone size-full wp-image-4766" title="Summertime iPad" src="http://www.cocoanetics.com/files/Screen-shot-2011-03-09-at-8.07.30-AM.png" alt="" width="682" height="528" /></a></p>
<p>In short, the iPad UI is not ready. At the same time Summertime is one of my glorified hobbies with which I don&#8217;t really make nearly enough to warrant put in the midnight oil. I&#8217;ll finish the iPad UI if I ever have time or if somebody specifically asks for it or if suddenly sales go through the roof. IF to the power of 3.</p>
<p>There is one piece of functionality that gets shown only if you run iOS 4 or higher: the reminder button. When pushed it allows you to specify a reminder which happens in the form of a local push notification for the next transition. This way easy enough to implement but only came into iOS with version 4. Thus people still running an outdated 3.x only get the cog button for changing a card<br />
s time zone and the mail button to e-mail somebody with the info on the card.</p>
<p>I posted some screenshots on twitter and feedback generally has been very favorable. Let&#8217;s see what the customers think as soon as Apple approves the update.</p>
<p>Update March 12th: Out now!</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=4758&amp;md5=c9cd6273013a7b8a8fdcbe69326ef6de" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2011/03/summertime-1-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2011%2F03%2Fsummertime-1-1%2F&amp;language=en_GB&amp;category=text&amp;title=Summertime+1.1&amp;description=Summertime+is+my+app+that+helps+you+to+never+be+surprised+by+Daylight+Savings+Time+transitions.+A+customer+nudged+me+to+update+the+app+in+time+for+the+upcoming+transitions....&amp;tags=Summertime%2Cblog" type="text/html" />
	</item>
		<item>
		<title>iWoman 2.0.3</title>
		<link>http://www.cocoanetics.com/2011/03/iwoman-2-0-3/</link>
		<comments>http://www.cocoanetics.com/2011/03/iwoman-2-0-3/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 06:31:26 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[iWoman]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=4719</guid>
		<description><![CDATA[In this quick-fix update for iWoman I addressed a bug that could only be seen by users of the basal temperature feature. Changes FIXED: The basal temperature chart would only show the first 30 entered values. Update was approved by Apple on March 8th it is available via the app store. &#160;]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2011/03/iwoman-2-0-3/"></g:plusone></div><p>In this quick-fix update for iWoman I addressed a bug that could only be seen by users of the basal temperature feature.</p>
<h3>Changes</h3>
<ul>
<li>FIXED: The basal temperature chart would only show the first 30 entered values.</li>
</ul>
<p>Update was approved by Apple on March 8th it is available via the app store.</p>
<p>&nbsp;</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=4719&amp;md5=e08db7ad4980d3749f28806abe862a21" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2011/03/iwoman-2-0-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2011%2F03%2Fiwoman-2-0-3%2F&amp;language=en_GB&amp;category=text&amp;title=iWoman+2.0.3&amp;description=In+this+quick-fix+update+for+iWoman+I+addressed+a+bug+that+could+only+be+seen+by+users+of+the+basal+temperature+feature.+Changes+FIXED%3A+The+basal+temperature+chart+would+only...&amp;tags=iWoman%2Cblog" type="text/html" />
	</item>
		<item>
		<title>LuckyWheel 1.2</title>
		<link>http://www.cocoanetics.com/2011/03/luckywheel-1-2/</link>
		<comments>http://www.cocoanetics.com/2011/03/luckywheel-1-2/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 10:55:44 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[LuckyWheel]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=4730</guid>
		<description><![CDATA[It&#8217;s been a while since we last updated our game LuckyWheel. There was a nasty bug on iOS 4.x that prevented the keyboard from appearing causing a great deal of frustration. We also used the opportunity of polishing the graphics and adding Retina support. Changes FIXED: Keyboard not appearing on iOS 4.x UPDATED: Now with Retina Graphics NEW: Lite Version has IAP option to purchase full version question pack NEW: Lite Version has IAP option to remove ads The new version has been submitted to Apple and is awaiting review.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2011/03/luckywheel-1-2/"></g:plusone></div><p>It&#8217;s been a while since we last updated our game <a href="http://www.cocoanetics.com/apps/luckywheel/">LuckyWheel</a>. There was a nasty bug on iOS 4.x that prevented the keyboard from appearing causing a great deal of frustration. We also used the opportunity of polishing the graphics and adding Retina support.</p>
<h3>Changes</h3>
<ul>
<li>FIXED: Keyboard not appearing on iOS 4.x</li>
<li>UPDATED: Now with Retina Graphics</li>
<li>NEW: Lite Version has IAP option to purchase full version question pack</li>
<li>NEW: Lite Version has IAP option to remove ads</li>
</ul>
<p>The new version has been submitted to Apple and is awaiting review.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=4730&amp;md5=bfc6de15417968cf22d150a6f8c508f8" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2011/03/luckywheel-1-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2011%2F03%2Fluckywheel-1-2%2F&amp;language=en_GB&amp;category=text&amp;title=LuckyWheel+1.2&amp;description=It%26%238217%3Bs+been+a+while+since+we+last+updated+our+game+LuckyWheel.+There+was+a+nasty+bug+on+iOS+4.x+that+prevented+the+keyboard+from+appearing+causing+a+great+deal+of...&amp;tags=LuckyWheel%2Cblog" type="text/html" />
	</item>
		<item>
		<title>iWoman 2.0.2</title>
		<link>http://www.cocoanetics.com/2011/01/iwoman-2-0-2/</link>
		<comments>http://www.cocoanetics.com/2011/01/iwoman-2-0-2/#comments</comments>
		<pubDate>Sun, 16 Jan 2011 22:58:58 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[iWoman]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=4631</guid>
		<description><![CDATA[The previous version of iWoman has a severe problem if you have an existing database that needs to get migrated. Turns out that old iPhone might take too long doing that. And if it takes longer than a couple of seconds for an app to start then there is a watchdog timer in iOS that will outright kill the app. Also there was a graphics glitch on the list view which has been remedied. I am really sorry for all these glitches. I promise you that they have not been intentional and I am quite embarrassed by them. The Update has been submitted to Apple and should become available soon. Changes Fixed: Graphics glitch on list view on 3.x devices Fixed: DB Migration is now done after app startup &#8211; instead of during startup &#8211; to prevent app termination by iOS. Hopefully with this patch migration and usage should be smooth on 3.x and 4.x alike. If so then I can concentrate on additional features. The app is doing pretty well in Russia and so I will add localization as a &#8220;Thank you!&#8221; for the Russian ladies. Also I am thinking about adding Japanese to see how this might affect sales there.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2011/01/iwoman-2-0-2/"></g:plusone></div><p>The previous version of iWoman has a severe problem if you have an existing database that needs to get migrated. Turns out that old iPhone might take too long doing that. And if it takes longer than a couple of seconds for an app to start then there is a watchdog timer in iOS that will outright kill the app.</p>
<p>Also there was a graphics glitch on the list view which has been remedied. I am really sorry for all these glitches. I promise you that they have not been intentional and I am quite embarrassed by them.</p>
<p>The Update has been submitted to Apple and should become available soon.</p>
<h3>Changes</h3>
<ul>
<li>Fixed: Graphics glitch on list view on 3.x devices</li>
<li>Fixed: DB Migration is now done after app startup &#8211; instead of during startup &#8211; to prevent app termination by iOS.</li>
</ul>
<p>Hopefully with this patch migration and usage should be smooth on 3.x and 4.x alike. If so then I can concentrate on additional features. The app is doing pretty well in Russia and so I will add localization as a &#8220;Thank you!&#8221; for the Russian ladies. Also I am thinking about adding Japanese to see how this might affect sales there.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=4631&amp;md5=174c2f5acb4a865c0f5a667780280795" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2011/01/iwoman-2-0-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2011%2F01%2Fiwoman-2-0-2%2F&amp;language=en_GB&amp;category=text&amp;title=iWoman+2.0.2&amp;description=The+previous+version+of+iWoman+has+a+severe+problem+if+you+have+an+existing+database+that+needs+to+get+migrated.+Turns+out+that+old+iPhone+might+take+too+long+doing...&amp;tags=iWoman%2Cblog" type="text/html" />
	</item>
		<item>
		<title>GeoCorder 1.3</title>
		<link>http://www.cocoanetics.com/2011/01/geocorder-1-3/</link>
		<comments>http://www.cocoanetics.com/2011/01/geocorder-1-3/#comments</comments>
		<pubDate>Fri, 07 Jan 2011 05:53:37 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[GeoCorder]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=4577</guid>
		<description><![CDATA[GeoCorder started out as a pure track recorder but since version 1.2 it also became a great position tracker, provided that you had your own server to receive the position updates. In this new version 1.3 you have a choice of two additional services: Google Latitude and Crossingways. Changes FIXED: Tracker would stop sending updates ADDED: Google Latitude as tracking service ADDED: Crossingways as tracking and upload service Update Jan 7th: The update is now available for download from the app store. &#160; These changes made it necessary to completely revamp the tracking screen. Each individual service is now shown with a traffic light indicating the last update status. Red means error, Yellow in progress and Green ok. The Update Interval is now set globally for all enabled service. You can switch services on and off on the &#8220;Configure Tracking Services&#8221; screen. Additionally you can configure an arbitrary number of custom servers to receive your updates via HTTP GET. In addition to these changes on the tracking screen there is a new section in settings where you can link the Crossingways and Latitude accounts. Generally a word of caution: Crossingways insists on mentioning that they are BETA, Latitude keeps telling us that it is a Google Labs service that might change when becoming a released product. Generally my tests have shown them to work without issues.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2011/01/geocorder-1-3/"></g:plusone></div><p>GeoCorder started out as a pure track recorder but since version 1.2 it also became a great position tracker, provided that you had your own server to receive the position updates.</p>
<p>In this new version 1.3 you have a choice of two additional services: <a href="http://www.google.com/latitude">Google Latitude</a> and <a href="http://www.crossingways.com">Crossingways</a>.</p>
<h3>Changes</h3>
<ul>
<li>FIXED: Tracker would stop sending updates</li>
<li>ADDED: Google Latitude as tracking service</li>
<li>ADDED: Crossingways as tracking and upload service</li>
</ul>
<p>Update Jan 7th: The update is now available for download from the app store.<br />
<span id="more-4577"></span></p>
<div class="inner_ad_block">
<div id="advman-7" class="widget Advman_Widget">
<h3 class="widgettitle"></h3>
<p><!-- BuySellAds.com Zone Code --></p>
<div id="bsap_1260346" class="bsarocks bsap_fc3166ea4a479e0fdb4251fbe92a1219"></div>
<p><!-- End BuySellAds.com Zone Code --></div>
<div id="text-21" class="widget widget_text">
<div class="textwidget">
<p>&nbsp;</p>
</div></div>
</div>
<p>These changes made it necessary to completely revamp the tracking screen. Each individual service is now shown with a traffic light indicating the last update status. Red means error, Yellow in progress and Green ok.</p>
<p><a href="http://www.cocoanetics.com/files/Screen-shot-2011-01-05-at-6.31.44-PM.png"><img class="alignnone size-full wp-image-4578" title="GeoCorder 1.3" src="http://www.cocoanetics.com/files/Screen-shot-2011-01-05-at-6.31.44-PM.png" alt="" width="396" height="744" /></a></p>
<p>The Update Interval is now set globally for all enabled service. You can switch services on and off on the &#8220;Configure Tracking Services&#8221; screen. Additionally you can configure an arbitrary number of custom servers to receive your updates via HTTP GET.</p>
<p>In addition to these changes on the tracking screen there is a new section in settings where you can link the Crossingways and Latitude accounts.</p>
<p>Generally a word of caution: Crossingways insists on mentioning that they are BETA, Latitude keeps telling us that it is a Google Labs service that might change when becoming a released product. Generally my tests have shown them to work without issues.</p>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=4577&amp;md5=a2991e286ac37a4377f95fc0581f33c0" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2011/01/geocorder-1-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2011%2F01%2Fgeocorder-1-3%2F&amp;language=en_GB&amp;category=text&amp;title=GeoCorder+1.3&amp;description=GeoCorder+started+out+as+a+pure+track+recorder+but+since+version+1.2+it+also+became+a+great+position+tracker%2C+provided+that+you+had+your+own+server+to+receive+the+position...&amp;tags=GeoCorder%2Cblog" type="text/html" />
	</item>
		<item>
		<title>iWoman 2.0.1</title>
		<link>http://www.cocoanetics.com/2011/01/iwoman-2-0-1/</link>
		<comments>http://www.cocoanetics.com/2011/01/iwoman-2-0-1/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 21:00:55 +0000</pubDate>
		<dc:creator>Drops</dc:creator>
				<category><![CDATA[Updates]]></category>
		<category><![CDATA[iWoman]]></category>

		<guid isPermaLink="false">http://www.cocoanetics.com/?p=4507</guid>
		<description><![CDATA[Right on the heels of the iWoman 2.0 major update this minor update addresses a couple of pressing issues: Fixed: when updating from 1.x the bleeding values where incorrectly migrated. The values will be corrected from the periods.dat.bak file. Fixed: crash on significant time change while app in background Fixed: incorrect analysis text on Basal Temperature Tracker Improved: Passcode Lock animations Update Dec 31st, 2010: Update has been submitted to Apple. We hope for a swift approval. Update Jan 5th: I was made aware that I had the deployment target on 4.2 effectively making the update unavailable for half of my user base. Because of this I pulled the 2.0.1 and submitted it again with a correction for this. This will delay the availability of this update once again. Update Jan 6th: Update has been approved and will be downloadable shortly via the app store. Also because of the fierce competition we saw ourselves forced to drop the price permanently to $1. &#160; The problem with the incorrect menstruation values came from an internal change to allow for importing another vendor&#8217;s file format. I had represented the values with 0,1,2 while the new representation was 0 for none, 1, 2, 3. This caused a medium value to become a low. A heavy became a medium and a low became an invalid value which got incorrectly corrected to medium as well. The fix will check for the backup file of the import and correct the values. Then there was an annoyance which you would only see if the app was kept running in background over a date boundary. It would immediately exit i.e. crash. That&#8217;s fixed as well. I&#8217;m terribly sorry for any inconvenience these bugs might have caused and I hope that you will love to use iWoman even more now that you see how committed I am now to make it a pleasant experience.]]></description>
			<content:encoded><![CDATA[<div class="plus-one-wrap"><g:plusone href="http://www.cocoanetics.com/2011/01/iwoman-2-0-1/"></g:plusone></div><div id="_mcePaste">
<div id="_mcePaste">Right on the heels of the iWoman 2.0 major update this minor update addresses a couple of pressing issues:</div>
<div>
<ul>
<li>Fixed: when updating from 1.x the bleeding values where incorrectly migrated. The values will be corrected from the periods.dat.bak file.</li>
<li>Fixed: crash on significant time change while app in background</li>
<li>Fixed: incorrect analysis text on Basal Temperature Tracker</li>
<li>Improved: Passcode Lock animations</li>
</ul>
</div>
<p>Update Dec 31st, 2010: Update has been submitted to Apple. We hope for a swift approval.</p>
<p>Update Jan 5th: I was made aware that I had the deployment target on 4.2 effectively making the update unavailable for half of my user base. Because of this I pulled the 2.0.1 and submitted it again with a correction for this. This will delay the availability of this update once again.</p>
<p>Update Jan 6th: Update has been approved and will be downloadable shortly via the app store. Also because of the fierce competition we saw ourselves forced to drop the price permanently to $1.</p>
<p><span id="more-4507"></span></p>
<div class="inner_ad_block">
<div id="advman-7" class="widget Advman_Widget">
<h3 class="widgettitle"></h3>
<p><!-- BuySellAds.com Zone Code --></p>
<div id="bsap_1260346" class="bsarocks bsap_fc3166ea4a479e0fdb4251fbe92a1219"></div>
<p><!-- End BuySellAds.com Zone Code --></div>
<div id="text-21" class="widget widget_text">
<div class="textwidget">
<p>&nbsp;</p>
</div></div>
</div>
<p>The problem with the incorrect menstruation values came from an internal change to allow for importing another vendor&#8217;s file format. I had represented the values with 0,1,2 while the new representation was 0 for none, 1, 2, 3. This caused a medium value to become a low. A heavy became a medium and a low became an invalid value which got incorrectly corrected to medium as well. The fix will check for the backup file of the import and correct the values.</p>
<p>Then there was an annoyance which you would only see if the app was kept running in background over a date boundary. It would immediately exit i.e. crash. That&#8217;s fixed as well.</p>
<p>I&#8217;m terribly sorry for any inconvenience these bugs might have caused and I hope that you will love to use iWoman even more now that you see how committed I am now to make it a pleasant experience.</p>
</div>
 <p><a href="http://www.cocoanetics.com/?flattrss_redirect&amp;id=4507&amp;md5=23e97b8db95cf690171f71571c6547ce" title="Flattr" target="_blank"><img src="http://www.cocoanetics.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.cocoanetics.com/2011/01/iwoman-2-0-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=dr_touch&amp;popout=1&amp;url=http%3A%2F%2Fwww.cocoanetics.com%2F2011%2F01%2Fiwoman-2-0-1%2F&amp;language=en_GB&amp;category=text&amp;title=iWoman+2.0.1&amp;description=Right+on+the+heels+of+the+iWoman+2.0+major+update+this+minor+update+addresses+a+couple+of+pressing+issues%3A+Fixed%3A+when+updating+from+1.x+the+bleeding+values+where+incorrectly+migrated....&amp;tags=iWoman%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>

