<?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>Thomas Post</title>
	<atom:link href="http://www.postblog.me/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.postblog.me</link>
	<description>Swiss Developer Immigrated to Germany</description>
	<lastBuildDate>Fri, 09 Mar 2012 17:43:05 +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>Playing Multiple Overlapping Audio Tracks in Background</title>
		<link>http://www.postblog.me/2012/03/playing-multiple-overlapping-audio-tracks-in-background/</link>
		<comments>http://www.postblog.me/2012/03/playing-multiple-overlapping-audio-tracks-in-background/#comments</comments>
		<pubDate>Fri, 09 Mar 2012 17:43:05 +0000</pubDate>
		<dc:creator>tpost</dc:creator>
				<category><![CDATA[how-to]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[AVFoundation]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Cocoa-Touch]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://www.postblog.me/?p=91</guid>
		<description><![CDATA[I wanted to play music in the background on my iPhone. To make the transition between two songs smooth and nice they should overlap and fade.  To achieve this I used the AVPlayer class: created an instance of it and started playing it. After some time it starts fading out, creates a new AVPlayer instance [...]]]></description>
			<content:encoded><![CDATA[<p>I wanted to play music in the background on my iPhone. To make the transition between two songs smooth and nice they should overlap and fade.  To achieve this I used the AVPlayer class: created an instance of it and started playing it. After some time it starts fading out, creates a new AVPlayer instance with a new song and starts playing again. This works perfectly well as long as my app runs in foreground. But when it is in background. It just fades out the old AVPlayer instance but does not start playing the new AVPlayer instance.</p>
<p>So I looked around what I was doing wrong. Along that I figured out that I&#8217;m doing this completely wrong. Using multiple AVPlayer instances was a bad idea. Instead a AVMutableComposition should be used. That&#8217;s designed for exactly that purpose. Maybe I&#8217;m not the only one struggling with this, so I put up this blogpost about it.</p>
<p><span id="more-91"></span></p>
<p>The idea is that you have one AVPlayer that plays one AVComposition which contains multiple tracks. I will demonstrate this here on a sample app. That app takes the first 20 songs from your iPod library. And plays every first five seconds of these songs after each other with a nice fade out when the next one begins.</p>
<p>Get the first 20 songs from your iPod library:</p>
<pre class="brush: java; gutter: false">MPMediaQuery *query = [MPMediaQuery songsQuery];
NSArray *searchResult = [[query items] subarrayWithRange:NSMakeRange(0, 20)];</pre>
<p>Then for every MPMediaItem in the searchResult we add a new AVMutableCompositionTrack to a AVMutableComposition.</p>
<pre class="brush: java; gutter: false">AVMutableCompositionTrack *track;
track  = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];</pre>
<p>Into this track we put the track we get from the iPod Library. Important here is that we create an AVURLAsset with the AVURLAssetPreferPreciseDurationAndTimingKey option. Otherwise it will fail when adding the track from the iPod library to the track in the AVComposition.</p>
<p>Now we have the the full track in our AVComposition. So we cut out the part we don&#8217;t want in there.</p>
<pre class="brush: java; gutter: false">NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL];
NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES]
                                                    forKey:AVURLAssetPreferPreciseDurationAndTimingKey];
AVAsset *asset = [AVURLAsset URLAssetWithURL:url options:options];
AVAssetTrack *iPodTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
CMTimeRange iPodTrackTimeRange = iPodTrack.timeRange;
NSError *error = nil;
BOOL success = [track insertTimeRange:iPodTrackTimeRange
                              ofTrack:iPodTrack
                               atTime:CMTimeMakeWithSeconds(insertTime, 1)
                                error:&amp;error];
if (!success) {
    NSLog(@&quot;Error inserting new track: %@&quot;,error);
    continue;
}</pre>
<p>And for every track added, we add a fade out property at the end.</p>
<pre class="brush: java; gutter: true">AVMutableAudioMixInputParameters *params;
params =[AVMutableAudioMixInputParameters audioMixInputParameters];
[params setVolumeRampFromStartVolume:1.0
                         toEndVolume:0.0
                           timeRange:CMTimeRangeMake(CMTimeMakeWithSeconds(insertTime + playTime, 1),
                                                     CMTimeMakeWithSeconds(fadeTime, 1))];

[params setTrackID:[track trackID]];
[allAudioParams addObject:params];</pre>
<p>Now when this is done for every track, we create a AVPlayerItem with the AVComposition and play it with an AVPlayer. We also apply the AudioMix to the player item to make the fadeout work.</p>
<pre class="brush: actionscript3; gutter: true">AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:composition];
self.player = [[AVPlayer alloc] initWithPlayerItem:playerItem];

//add the audio mix for fade outs
AVMutableAudioMix * fadeOutMix = [AVMutableAudioMix audioMix];
[fadeOutMix setInputParameters:allAudioParams];
[playerItem setAudioMix:fadeOutMix];

[self.player play];
[sender setTitle:@&quot;Pause&quot;
        forState:UIControlStateNormal];</pre>
<p>If this was too fast and not clear. It might be easier to see it in a working Xcode project. So I set up an small Xcode project which you can simply open and run to see what happens.</p>
<ul>
<li><a href="http://www.postblog.me/wp-content/uploads/2012/03/MultiTrackPlaybackDemo.zip">MultiTrackPlaybackDemo</a></li>
<li><a title="AVMutableComposition Documentation" href="https://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVMutableComposition_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40009526" target="_blank">AVMutableComposition</a></li>
<li><a title="AVMutableCompositionTrack Documentation" href="https://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVMutableCompositionTrack_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40009528" target="_blank">AVMutableCompositionTrack</a></li>
<li><a title="AVPlayer Documentation" href="https://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVPlayer_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40009530" target="_blank">AVPlayer</a></li>
</ul>
<p>For many other AVFoundation related problems and questions, take a look at <a href="http://www.subfurther.com/blog/" target="_blank">http://www.subfurther.com/blog/</a> that blog is a great resource of information!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postblog.me/2012/03/playing-multiple-overlapping-audio-tracks-in-background/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fix Radar or GTFO: My Opinion on it</title>
		<link>http://www.postblog.me/2012/03/fix-radar-or-gtfo-my-opinion-on-it/</link>
		<comments>http://www.postblog.me/2012/03/fix-radar-or-gtfo-my-opinion-on-it/#comments</comments>
		<pubDate>Thu, 08 Mar 2012 17:18:54 +0000</pubDate>
		<dc:creator>tpost</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Bugreporting]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Radar]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://www.postblog.me/?p=103</guid>
		<description><![CDATA[A few days ago this site: http://fixradarorgtfo.com/ came up on my twitter stream. And shortly after that some people complained about it, that it is disrespectful. I don&#8217;t agree with that. Maybe it&#8217;s not the nicest way to say it. But I think we can all agree on that there has to change something. Here are a [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago this site: <a title="Fix Radar or GTFO" href="http://fixradarorgtfo.com/">http://fixradarorgtfo.com/</a> came up on my twitter stream. And shortly after that some people complained about it, that it is disrespectful. I don&#8217;t agree with that. Maybe it&#8217;s not the nicest way to say it. But I think we can all agree on that there has to change something. Here are a few things I would like to see there because I don&#8217;t agree with all the points on the “Fix Radar or GTFO” text.</p>
<ul>
<li><strong>Open</strong>: By default a radar bug should be viewable by everyone. So if I have an issue, I can search for it and see if that bug is already reported. Then I don&#8217;t have to do all the work which might include creating a new Xcode project and write some case to reproduce the error in a vanilla environment etc. etc. This would be a win-win situation. So apple does not have to search for duplicates and we can save a lot a time spent on writing duplicates. (now that I&#8217;ve wrote it down the status quo sounds even more ridiculous) For people who have to share some secret bug reports, a simple “private” would still do.</li>
<li><strong>Rewards</strong>: Every accepted bug report should give some reward. Then that reward can be traded into support incidents. That would be a fair trade. We help apple finding bugs, they help us fixing our problems. This would motivate a lot a people to write bug reports. Just look how well stack overflow does with exactly that motivation!</li>
<li><strong>Interface</strong>: As “Fix Radar or GTFO” already said. That interface is so 90&#8242;s and we&#8217;re now in 2012! In my opinion putting the bug reporting into Xcode is not such a good idea. There&#8217;s too much stuff in Xcode already. But make a new nice app and putt all the bug reporting in there. And if that&#8217;s too much, at least build a proper web app for it that&#8217;s state of the art.</li>
<li><strong>Feedback</strong>: Please apple communicate with us some time. Right now most of the time it feels like your bug reports are going straight to /dev/null. If you&#8217;re lucky you gets a “This is a duplicate GTFO” response. But most of the time you get absolutely no response for months if not years. This brings us back to the first point. Make it open and then communicate with us about what&#8217;s going on. So we know on what we can really on and on what not.</li>
</ul>
<p>These are my four main points about radar. Any other improvement welcome too. But there have to be some changes in the near future! Developers among many others made apple the most valuable company in the world, now they should show the necessary respect by improving bug reporting.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postblog.me/2012/03/fix-radar-or-gtfo-my-opinion-on-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kony 2012</title>
		<link>http://www.postblog.me/2012/03/kony-2012/</link>
		<comments>http://www.postblog.me/2012/03/kony-2012/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 09:10:21 +0000</pubDate>
		<dc:creator>tpost</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[donation]]></category>
		<category><![CDATA[kony]]></category>
		<category><![CDATA[politics]]></category>

		<guid isPermaLink="false">http://www.postblog.me/?p=84</guid>
		<description><![CDATA[Today when I woke up and looked into my twitter stream I saw this video (thx to @notch). It made me donate some money to them, hopefully it will make you too. http://www.kony2012.com Good article about the project: http://blog.zeit.de/netzfilmblog/2012/03/08/joseph-kony-2012-social-media-uganda-film/ (in german)]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/37119711?title=0&amp;byline=0&amp;portrait=0&amp;color=d13030" frameborder="0" width="400" height="225"></iframe></p>
<p>Today when I woke up and looked into my twitter stream I saw this video (thx to <a title="@notch" href="http://twitter.com/#!/notch">@notch</a>). It made me donate some money to them, hopefully it will make you too.</p>
<p><a title="Kony 2012" href="http://www.kony2012.com">http://www.kony2012.com</a></p>
<p>Good article about the project: <a title="Kony 2012 zeit.de" href="http://blog.zeit.de/netzfilmblog/2012/03/08/joseph-kony-2012-social-media-uganda-film/">http://blog.zeit.de/netzfilmblog/2012/03/08/joseph-kony-2012-social-media-uganda-film/</a> (in german)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postblog.me/2012/03/kony-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SopCast for Mac OS X</title>
		<link>http://www.postblog.me/2012/02/sopcast-for-mac-os-x/</link>
		<comments>http://www.postblog.me/2012/02/sopcast-for-mac-os-x/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 13:28:32 +0000</pubDate>
		<dc:creator>tpost</dc:creator>
				<category><![CDATA[how-to]]></category>
		<category><![CDATA[SopCast]]></category>
		<category><![CDATA[Stream]]></category>
		<category><![CDATA[VLC]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Wine]]></category>
		<category><![CDATA[WineBottler]]></category>

		<guid isPermaLink="false">http://www.postblog.me/?p=62</guid>
		<description><![CDATA[Using SopCast on the mac was always very hard. You had to use it with Windows in a virtual machine. Which made it very inconvenient. But lately I discovered that with the WineBottler.app you can build a SopCast.app with just a few clicks. First get the newest version of the SopCast client for Windows. Then [...]]]></description>
			<content:encoded><![CDATA[<p>Using SopCast on the mac was always very hard. You had to use it with Windows in a virtual machine. Which made it very inconvenient. But lately I discovered that with the WineBottler.app you can build a SopCast.app with just a few clicks.</p>
<p><span id="more-62"></span></p>
<p><img class="size-medium wp-image-65 alignright" title="WineBottler Combo" src="http://www.postblog.me/wp-content/uploads/2012/02/WineBottler-Combo-300x227.png" alt="WineBottler DMG" width="300" height="227" />First get the newest version of the <a title="SopCast Client Download" href="http://www.sopcast.com/download/" target="_blank">SopCast client for Windows</a>. Then get the <a title="WineBottler Download" href="http://winebottler.kronenberg.org/" target="_blank">WineBottler app</a>. After you&#8217;ve downloaded the WineBottler app, copy the Wine.app and the WineBottler.app into your Applications folder.</p>
<p><img class="size-medium wp-image-66 alignright" title="WineBottler - Create Custom Prefixes" src="http://www.postblog.me/wp-content/uploads/2012/02/WineBottler-Create-Custom-Prefixes-300x220.png" alt="WineBottler - Create Custom Prefixes" width="300" height="220" /></p>
<p>Then start the WineBottler.app and select “Create Custom Prefixes”. Press “select File…” and select the downloaded and unzipped SopCast exe. <strong>Check the “Self Contained” checkbox, so you don&#8217;t need Wine anymore after creating the SopCast.app.</strong> Finally press “Install”.</p>
<p>Select where to put your generated .app and wait until the sop cast installer starts.</p>
<p><img class="size-full wp-image-67 alignright" title="Installer Language" src="http://www.postblog.me/wp-content/uploads/2012/02/Installer-Language.png" alt="Installer Language" width="320" height="182" /></p>
<p>Press OK and click through the installer. Make sure to <strong>uncheck the “Run SopCast” checkbox</strong> in the end and finish. After that the WineBottler asks you for the file that should be run when starting the new app. <strong>By default “StreamServer.exe” is selected. Chang this to “SopCast.exe”</strong>.</p>
<p><img class="size-full wp-image-68 alignnone" title="WineBottler - Selecte exe" src="http://www.postblog.me/wp-content/uploads/2012/02/WineBottler.png" alt="WineBottler - Selecte exe" width="434" height="175" /></p>
<p>Click OK and you&#8217;re done. Now you can start your SopCast client and watch TV Streams. The first time you start a stream, SopCast might show you an error that something crashed and it might not work with Wine. Just ignore it and double click the stream again. Then it works.</p>
<p>Because <strong>your SopCast client doesn&#8217;t show the stream itself.  You have to use VLC to actually watch a stream</strong>. When SopCast is running. Open the following URL with your VLC: http://localhost:8902/tv.asf</p>
<div><a href="http://www.postblog.me/wp-content/uploads/2012/02/VLC-SopCast.png"><img class="alignnone size-medium wp-image-69" title="VLC SopCast" src="http://www.postblog.me/wp-content/uploads/2012/02/VLC-SopCast-300x180.png" alt="VLC SopCast" width="300" height="180" /></a></div>
<div>
<ul>
<li><a title="SopCast Download URL" href="http://www.sopcast.com/download/" target="_blank">SopCast Client for Windows</a></li>
<li><a title="WineBottler Download" href="http://winebottler.kronenberg.org/" target="_blank">WineBottler</a></li>
<li><a title="VLC Homepage" href="http://www.videolan.org/" target="_blank">VLC</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.postblog.me/2012/02/sopcast-for-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Zucchini Pitfalls</title>
		<link>http://www.postblog.me/2012/02/zucchini-pitfalls/</link>
		<comments>http://www.postblog.me/2012/02/zucchini-pitfalls/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 12:54:25 +0000</pubDate>
		<dc:creator>tpost</dc:creator>
				<category><![CDATA[how-to]]></category>
		<category><![CDATA[CI]]></category>
		<category><![CDATA[CoffeeScript]]></category>
		<category><![CDATA[Instruments]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[Pitfalls]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[UIAutomation]]></category>
		<category><![CDATA[Zucchini]]></category>

		<guid isPermaLink="false">http://www.postblog.me/?p=33</guid>
		<description><![CDATA[Since I&#8217;ve been playing around with the Zucchini Framework. I discovered a few pitfalls. Maybe someone else stumbles upon the same problem. So I thought I make a short blogpost about it. 1. Weird “The operation could not be completed.” error: I&#8217;ve got this error message:  and the console says -[NSAlert alertWithError:] called with nil [...]]]></description>
			<content:encoded><![CDATA[<p>Since I&#8217;ve been <a title="Tasty Zucchini" href="http://www.postblog.me/2012/02/tasty-zucchini/" target="_blank">playing around</a> with the <a title="Zucchini Framework" href="http://www.zucchiniframework.org/" target="_blank">Zucchini Framework</a>. I discovered a few pitfalls. Maybe someone else stumbles upon the same problem. So I thought I make a short blogpost about it.</p>
<p><strong>1. Weird “The operation could not be completed.” error:</strong></p>
<p>I&#8217;ve got this error message: <a href="http://www.postblog.me/wp-content/uploads/2012/02/Screen-Shot-2012-02-16-at-8.51.18-PM.png"><img class="alignnone size-full wp-image-34" title="Zucchini Instruments Error" src="http://www.postblog.me/wp-content/uploads/2012/02/Screen-Shot-2012-02-16-at-8.51.18-PM.png" alt="The operation could not be completed, No other information's available about the problem." width="448" height="183" /></a></p>
<p>and the console says</p>
<p><code>-[NSAlert alertWithError:] called with nil NSError. A generic error message will be displayed, but the user deserves better.</code></p>
<p>In this case, most likely the path to your .app bundle in the <code>confing.yml</code> is wrong. Double check that that path is valid!</p>
<p><strong>2. You get a “doesn&#8217;t define a screen context” message in the log:</strong></p>
<p>The log sas something like</p>
<p><code>None: Script threw an uncaught JavaScript error: Line ' Type "Zucchini" in the username field' doesn't define a screen context.</code></p>
<p>Most likely you&#8217;ve added a new line in your <code>.zucchini</code> file where you shouldn&#8217;t. You should only add new lines before a “<code>Then on the</code>” line and nowhere else. But if you want to structure your code a bit better. You can use “#” for comment lines.</p>
<p><strong>3. When running in a CI environment the test hangs and instruments endlessly leaks memory.</strong></p>
<p>I described this problem before in <a title="Tasty Zucchini" href="http://www.postblog.me/2012/02/tasty-zucchini/">this post</a>. The only workaround I could find was executing zucchini from my Jenkins over ssh.</p>
<p><code>ssh user@server "cd /path/to/checked/out/repo/ &amp;&amp; rake"</code></p>
<p><strong>4. Unspecified “No such file or directory” message in the log</strong></p>
<p>The log shows something like <code>/Library/Ruby/Gems/1.8/gems/zucchini-ios-0.5.4/lib/feature.rb:49:in `initialize': No such file or directory -</code> with no useful further info. In my case it was always the missing empty folder “run_data”. When running zucchini it expects this folder to be there. But because you don&#8217;t want some run data in your repository you normally don&#8217;t add it to the repository at all. So you have to add an empty file like “.gitkeep” or “.hgkeep” so the empty folder is added to the repository created when cloning/updating.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postblog.me/2012/02/zucchini-pitfalls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tasty Zucchini</title>
		<link>http://www.postblog.me/2012/02/tasty-zucchini/</link>
		<comments>http://www.postblog.me/2012/02/tasty-zucchini/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 11:10:41 +0000</pubDate>
		<dc:creator>tpost</dc:creator>
				<category><![CDATA[Review]]></category>
		<category><![CDATA[CI]]></category>
		<category><![CDATA[CoffeeScript]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[UIAutomation]]></category>
		<category><![CDATA[Zucchini]]></category>

		<guid isPermaLink="false">http://www.postblog.me/?p=14</guid>
		<description><![CDATA[Wether you like to eat zucchini or not, you have to take a look at this tasty testing framework for iOS. Over time I&#8217;ve looked at a lot a testing frameworks for iOS. Now I came across this new framework for interface testing. It&#8217;s not some completely new fancy way to test, you still have [...]]]></description>
			<content:encoded><![CDATA[<p>Wether you like to eat zucchini or not, you have to take a look at this <a title="Zucchini iOS testing framework" href="http://www.zucchiniframework.org" target="_blank">tasty testing framework for iOS</a>. Over time I&#8217;ve looked at a lot a testing frameworks for iOS. Now I came across this new framework for interface testing.</p>
<p>It&#8217;s not some completely new fancy way to test, you still have to write tests and run them. But it splits the tests in two very useful parts. In a part where you write what you want to test in a more or less natural language. And in another part where you define <em>screens</em> and what features every screen has. So these <em>screens</em> are reusable for every test.</p>
<p><span id="more-14"></span></p>
<p>Technically it&#8217;s based on the UIAutomation framework from apple. UIAutomation is integrated in Instruments and runs interface automations from JavaScript&#8217;s. I used to write many tests with it but was never really happy with it. There was always a lot a bloat code you had to write that made the tests break easily. The contact point between zucchini and UIAutomation is in these <em>screens</em>. They&#8217;re written in <a title="Coffee Script" href="http://coffeescript.org/" target="_blank">Coffee Script</a> and map the features of a <em>screen </em>to UIAutomation. So the actual tests are decoupled from UIAutomation.</p>
<p>During the test you can take a screenshots. At the end of the test these taken screen shots are presented in an HTML report. There you can see the diff between the captured image and a reference image you provided previously. You can even define some masks which part of the screenshot should not be compared. E.g. the menu bar. So a change in the time does not break your test.</p>
<p>While I was setting zucchini up to run with my build server I stumbled up on some problems. First of all there was an issue with Instruments being run from within Java or Jenkins. It just hang forever and endlessly leaked memory. I didn&#8217;t figure out what the problem exactly was. I ended up with running the rake file from Jenkins over SSH. So the execution of Instruments is decoupled from the Jenkins thread.</p>
<p>Another problem is that the path to the binary that should be deployed and tested is not configurable on runtime. It&#8217;s configured in a configuration file but can&#8217;t be overridden when running zucchini. So before starting the test you have to copy the binary to the configured location. Maybe that feature will be integrated in a future release. The same problem exists with the generated report. The report is just opened in Safari. It would be nice if an output path for the report could be configured. So an archive of all reports for every run could be made.</p>
<p>Overall it looks like a very promising testing framework and maybe one ore another feature will be integrated in future releases.</p>
<ul>
<li><a title="Zucchini" href="http://www.zucchiniframework.org/" target="_blank">Zucchini</a></li>
<li><a title="CoffeeScript" href="http://coffeescript.org/" target="_blank">CoffeScript</a></li>
<li><a title="UI Automation Reference Collection" href="https://developer.apple.com/library/ios/#documentation/DeveloperTools/Reference/UIAutomationRef/_index.html#//apple_ref/doc/uid/TP40009771" target="_blank">UIAutomation</a></li>
<li><a title="Jenkins CI" href="http://jenkins-ci.org/" target="_blank">Jenkins</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.postblog.me/2012/02/tasty-zucchini/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Blog</title>
		<link>http://www.postblog.me/2012/02/new-blog/</link>
		<comments>http://www.postblog.me/2012/02/new-blog/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 08:48:05 +0000</pubDate>
		<dc:creator>tpost</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[equinux]]></category>
		<category><![CDATA[university]]></category>
		<category><![CDATA[v1ru8]]></category>

		<guid isPermaLink="false">http://www.postblog.me/?p=5</guid>
		<description><![CDATA[Hi Folks, This is my new blog and it will replace my old blog at blog.v1ru8.net. I won&#8217;t migrate the old posts over to this blog. Just look there if you miss something. It&#8217;s a long time since I&#8217;ve posted my last blogpost. Actually I haven&#8217;t blogged since I&#8217;ve started working at equinux. It&#8217;s not [...]]]></description>
			<content:encoded><![CDATA[<p>Hi Folks,</p>
<p>This is my new blog and it will replace my old blog at <a href="http://blog.v1ru8.net">blog.v1ru8.net</a>. I won&#8217;t migrate the old posts over to this blog. Just look there if you miss something.</p>
<p>It&#8217;s a long time since I&#8217;ve posted my last blogpost. Actually I haven&#8217;t blogged since I&#8217;ve started working at equinux. It&#8217;s not that I wasn&#8217;t allowed to blog. But all interesting stuff that was going on was too close to unreleased products etc. Which left me with nothing interesting to blog about. Now that I&#8217;ve quit my job at equinux and going back to university I&#8217;m back in “business”.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postblog.me/2012/02/new-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

