<?xml version="1.0" encoding="UTF-8"?>
<rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>restoroot.com</title>
	
	<link>http://www.restoroot.com/Blog</link>
	<description />
	<lastBuildDate>Fri, 04 Sep 2009 13:18:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/restoroot" /><feedburner:info uri="restoroot" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Letter Opener 3 compatibly with Mac OS X 10.6 Snow Leopard</title>
		<link>http://feedproxy.google.com/~r/restoroot/~3/oOHAmxN71Wc/</link>
		<comments>http://www.restoroot.com/Blog/2009/09/03/letter-opener-3-compatibly-with-mac-os-x-106-snow-leopard/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 19:09:48 +0000</pubDate>
		<dc:creator>Christopher Atlan</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.restoroot.com/Blog/?p=135</guid>
		<description><![CDATA[

I&#8217;m happy to announce Letter Opener Version 3 for Mac OS X 10.6 Snow Leopard.


Snow Leopard required a complete rewrite of Letter Opener. A big thx here to Scott Morrison of Indev Software for figuring out how to get Mail Plug-ins working in 64-bit mode!


The upgrade is free for everybody who bought Letter Opener after [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 10px;"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2009/09/4c24f8bd-1375-47ab-bc2e-07ce30eb599b.jpg" alt="Snow Leopard" border="0" width="107" height="127" /></div>
<p>
I&#8217;m happy to announce Letter Opener Version 3 for Mac OS X 10.6 Snow Leopard.
</p>
<p>
Snow Leopard required a complete rewrite of Letter Opener. A big thx here to Scott Morrison of <a href="http://www.indev.ca/" target="_blank">Indev Software</a> for figuring out how to get Mail Plug-ins working in 64-bit mode!
</p>
<p>
The upgrade is free for everybody who bought Letter Opener after June 8, 2009. For all other users an upgrade is <a href="http://www.restoroot.com/Store/">available</a>.
</p>
<p>
You can download the upgrade from <a href="http://www.restoroot.com/OMiC/en/download.php">here</a>.
</p>
<p><br/></p>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/oOHAmxN71Wc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2009/09/03/letter-opener-3-compatibly-with-mac-os-x-106-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.restoroot.com/Blog/2009/09/03/letter-opener-3-compatibly-with-mac-os-x-106-snow-leopard/</feedburner:origLink></item>
		<item>
		<title>Five Star Rating from Macworld</title>
		<link>http://feedproxy.google.com/~r/restoroot/~3/3rDgbT-ePaI/</link>
		<comments>http://www.restoroot.com/Blog/2009/05/31/five-star-rating-from-macworld/#comments</comments>
		<pubDate>Sun, 31 May 2009 18:52:37 +0000</pubDate>
		<dc:creator>Christopher Atlan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[letter opener]]></category>
		<category><![CDATA[macworld]]></category>
		<category><![CDATA[winmail.dat]]></category>

		<guid isPermaLink="false">http://www.restoroot.com/Blog/?p=130</guid>
		<description><![CDATA[

Just to get your product mentioned in Macworld is a great bless, but to get a five star rating is a real tribute. Deborah Shadovitz did the review, here&#8217;s a quote from it:

With Letter Opener in Apple Mail, the worry is gone. Letter Opener converts winmail.dat files on the fly, so you can actually see [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 10px;"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2009/05/macworld1.png" alt="Macworld" border="0" width="96" height="82" /></div>
<p>
Just to get your product mentioned in Macworld is a great bless, but to get a five star rating is a real tribute. <a href="https://twitter.com/DebShadovitz" target="_blank">Deborah Shadovitz</a> did the review, here&#8217;s a quote from it:
</p>
<p><cite style="color: #777;">With Letter Opener in Apple Mail, the worry is gone. Letter Opener converts winmail.dat files on the fly, so you can actually see and use what the sender intended you to have. There’s no fuss with Letter Opener, no need to drag the winmail.dat file onto another application or call upon several programs to help you. Once Letter Opener is installed, you can forget about it.</cite></p>
<p>
The pricing is always a tricky thing, so I was especially happy to read this:
</p>
<p><cite style="color: #777;">If you regularly receive winmail.dat files from business associates, Letter Opener is well worth the investment.</cite></p>
<p>
You can read the <a href="http://www.macworld.com/article/140429/2009/05/letteropener.html" target="_blank">full article here</a>.</p>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/3rDgbT-ePaI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2009/05/31/five-star-rating-from-macworld/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.restoroot.com/Blog/2009/05/31/five-star-rating-from-macworld/</feedburner:origLink></item>
		<item>
		<title>AudioSessionInitialize Workarounds</title>
		<link>http://feedproxy.google.com/~r/restoroot/~3/U0Eip1HGufo/</link>
		<comments>http://www.restoroot.com/Blog/2008/12/25/audiosessioninitialize-workarounds/#comments</comments>
		<pubDate>Thu, 25 Dec 2008 19:17:44 +0000</pubDate>
		<dc:creator>Christopher Atlan</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.restoroot.com/Blog/?p=118</guid>
		<description><![CDATA[

Yesterday I decided to go after one of my audio bugs by take a look how AVAudioPlayer does it right, and I discovered a little thing about Audio Session.


Here are two workarounds for AudioSessionInitialize.



I never liked AudioSessionInitialize because you can set the InterruptionListener and it&#8217;s ClientData just once:

/*
&#160;* Discussion
&#160;* Your application must call this function [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 20px;"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2008/12/7bbf2217-d3fc-4c96-8948-8b7e1b16c17b.jpg" alt="Core Audio" border="0" width="96" height="96" /></div>
<p>
Yesterday I decided to go after one of my audio bugs by take a look how <a href="http://developer.apple.com/iphone/library/documentation/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html" target="_blank">AVAudioPlayer</a> does it right, and I discovered a little thing about Audio Session.
</p>
<p>
Here are two workarounds for <a href="http://developer.apple.com/iphone/library/documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html#//apple_ref/c/func/AudioSessionInitialize" target="_blank">AudioSessionInitialize</a>.
</p>
<p><span id="more-118"></span>
<p>
I never liked AudioSessionInitialize because you can set the InterruptionListener and it&#8217;s ClientData just once:
</p>
<div style="text-align:left;color:#000000; background-color:#ffffff; border:solid black 1px; padding:0.5em 1em 0.5em 1em; overflow:auto;font-size:small; font-family:monospace; "><span style="color:#236e25;">/*<br />
&nbsp;* Discussion<br />
&nbsp;* Your application must call this function before making any other Audio<br />
&nbsp;* Session Services calls. You may activate and deactivate your audio session<br />
&nbsp;* as needed (see AudioSessionSetActive), but should initialize it only once.<br />
&nbsp;*/</span><br />
OSStatus <span style="color:#003369;">AudioSessionInitialize </span>(<br />
&nbsp;&nbsp;&nbsp;CFRunLoopRef &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inRunLoop,<br />
&nbsp;&nbsp;&nbsp;CFStringRef &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inRunLoopMode,<br />
&nbsp;&nbsp;&nbsp;AudioSessionInterruptionListener &nbsp;&nbsp;&nbsp;inInterruptionListener,<br />
&nbsp;&nbsp;&nbsp;<span style="color:#881350;">void</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*inClientData<br />
);</div>
<p>So you need a helper class like this where you have to set the active AudioPlayer:</p>
<div style="text-align:left;color:#000000; background-color:#ffffff; border:solid black 1px; padding:0.5em 1em 0.5em 1em; overflow:auto;font-size:small; font-family:monospace; ">
<span style="color:#683821;">#import &quot;AudioInterruptionListener.h&quot;<br />
</span><br />
<span style="color:#881350;">void</span> <span style="color:#003369;">interruptionListenerCallback </span>(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">void</span> *inUserData,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">UInt32</span> &nbsp;&nbsp;interruptionState<br />
) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;AudioInterruptionListener *listener = (AudioInterruptionListener *) <span style="color:#6c0540;">inUserData</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DoItYourselfPlayer *player = listener.doItYourselfPlayer;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">if</span><span style="color:#003369;"> </span>(!player)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">return</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">if</span><span style="color:#003369;"> </span>(interruptionState == kAudioSessionBeginInterruption) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[player <span style="color:#6c0540;">performSelectorOnMainThread:</span><span style="color:#881350;">@selector</span>(audioStreamPlayerBeginInterruption)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#6c0540;">withObject:</span><span style="color:#881350;">nil</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#6c0540;">waitUntilDone:</span><span style="color:#881350;">YES</span>]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <span style="color:#881350;">else</span> <span style="color:#881350;">if</span><span style="color:#003369;"> </span>((interruptionState == kAudioSessionEndInterruption)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[player <span style="color:#6c0540;">performSelectorOnMainThread:</span><span style="color:#881350;">@selector</span>(audioStreamPlayerEndInterruption)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#6c0540;">withObject:</span><span style="color:#881350;">nil</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#6c0540;">waitUntilDone:</span><span style="color:#881350;">YES</span>]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</p>
<p><span style="color:#881350;">@implementation</span> AudioInterruptionListener</p>
<p><span style="color:#881350;">static</span> AudioInterruptionListener *sharedAudioInterruptionListener;</p>
<p><span style="color:#881350;">@synthesize</span> doItYourselfPlayer;</p>
<p>+ (<span style="color:#881350;">void</span>)<span style="color:#6c0540;">initialize</span> {<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">if</span><span style="color:#003369;"> </span>(!sharedAudioInterruptionListener) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sharedAudioInterruptionListener = [[AudioInterruptionListener <span style="color:#ff0000;">alloc</span>] <span style="color:#6c0540;">init</span>];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#003369;">AudioSessionInitialize </span>(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">NULL</span>,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">NULL</span>,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interruptionListenerCallback,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sharedAudioInterruptionListener<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</p>
<p>+ (AudioInterruptionListener *)sharedAudioInterruptionListener <br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">return</span> sharedAudioInterruptionListener;<br />
}</p>
<p><span style="color:#881350;">@end</span>
</div>
<p>This is fine, but I was no big fan of this helper class when I wrote it.</p>
<p><a href="http://developer.apple.com/iphone/library/documentation/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html" target="_blank">AVAudioPlayer</a> works without such helper class, but how? Well don&#8217;t do this at home, because &#8216;intr&#8217; is not documented in <a href="http://developer.apple.com/iphone/library/documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html#//apple_ref/doc/constant_group/Audio_Session_Services_Property_Identifiers" target="_blank">“Audio Session Services Property Identifiers.”</a>, but you can also add an InterruptionListener with <a href="http://developer.apple.com/iphone/library/documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html#//apple_ref/c/func/AudioSessionAddPropertyListener" target="_blank">AudioSessionAddPropertyListener</a>, the code should look something along this lines:</p>
<div style="text-align:left;color:#000000; background-color:#ffffff; border:solid black 1px; padding:0.5em 1em 0.5em 1em; overflow:auto;font-size:small; font-family:monospace; ">
- (<span style="color:#881350;">BOOL</span>)<span style="color:#6c0540;">prepareToPlay</span> {<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#003369;">pthread_once</span>(&amp;interruptionListenerOneTimeInit, interruptionListenerInit);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#8230;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#003369;">AudioSessionAddPropertyListener</span>(&#8217;intr&#8217;, interruptionListenerCallback, <span style="color:#881350;">self</span>);<br />
}</p>
<p>- (<span style="color:#881350;">void</span>)<span style="color:#6c0540;">stop</span> {<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#003369;">AudioSessionRemovePropertyListenerWithUserData</span>(&#8217;intr&#8217;, interruptionListenerCallback, <span style="color:#881350;">self</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#8230;<br />
}</p>
<p><span style="color:#683821;">#pragma mark -<br />
#pragma mark Audio Session Implementations<br />
</span><br />
pthread_once_t &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interruptionListenerOneTimeInit = PTHREAD_ONCE_INIT;</p>
<p><span style="color:#881350;">void</span> <span style="color:#003369;">interruptionListenerInit</span>(<span style="color:#881350;">void</span>)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#003369;">AudioSessionInitialize</span>(<span style="color:#881350;">NULL</span>, <span style="color:#881350;">NULL</span>, <span style="color:#881350;">NULL</span>, <span style="color:#881350;">NULL</span>);<br />
}</p>
<p><span style="color:#881350;">void</span> <span style="color:#003369;">interruptionListenerCallback </span>(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">void</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*inClientData,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AudioSessionPropertyID &nbsp;&nbsp;&nbsp;inID,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">UInt32</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inDataSize,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">const</span> <span style="color:#881350;">void</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*inData<br />
) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;DoItYourselfPlayer *player = inClientData;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">if</span><span style="color:#003369;"> </span>(inID == &#8216;intr&#8217;) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">UInt32</span> *interruptionState = (<span style="color:#881350;">UInt32</span> *)<span style="color:#6c0540;">inData</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">if</span><span style="color:#003369;"> </span>(*interruptionState == kAudioSessionBeginInterruption) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[player <span style="color:#6c0540;">performSelectorOnMainThread:</span><span style="color:#881350;">@selector</span>(audioStreamPlayerBeginInterruption)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#6c0540;">withObject:</span><span style="color:#881350;">nil</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#6c0540;">waitUntilDone:</span><span style="color:#881350;">YES</span>]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <span style="color:#881350;">else</span> <span style="color:#881350;">if</span><span style="color:#003369;"> </span>(*interruptionState == kAudioSessionEndInterruption) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[player <span style="color:#6c0540;">performSelectorOnMainThread:</span><span style="color:#881350;">@selector</span>(audioStreamPlayerEndInterruption)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#6c0540;">withObject:</span><span style="color:#881350;">nil</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#6c0540;">waitUntilDone:</span><span style="color:#881350;">YES</span>]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</div>
<p>If you agree that Apple should expose this functionality to third parties, please submit a duplicate for Radar ID# <a href="rdar://problem/6467253">6467253</a>.</p>
<p>Happy Holidays hacking!</p>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/U0Eip1HGufo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/12/25/audiosessioninitialize-workarounds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.restoroot.com/Blog/2008/12/25/audiosessioninitialize-workarounds/</feedburner:origLink></item>
		<item>
		<title>Letter Opener 2.0.7 compatible with Mac OS X 10.5.6</title>
		<link>http://feedproxy.google.com/~r/restoroot/~3/LA91QX6Ok_s/</link>
		<comments>http://www.restoroot.com/Blog/2008/12/15/letter-opener-207-compatible-with-mac-os-x-1056/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 19:45:19 +0000</pubDate>
		<dc:creator>Christopher Atlan</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.restoroot.com/Blog/?p=113</guid>
		<description><![CDATA[

Apple has changed Mail in the today released Mac OS X 10.5.6 which results in a crash if you have Letter Opener installed. An updated version is already available.


Please use the build-in update function (Mail Menu -> Letter Opener  -> Check for updates…), or download Letter Opener 2.0.7 here.


Troubleshooting Document: Mac OS X 10.5.6: [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 20px;"><img src="http://www.restoroot.com/images/LetterOpener128.png" alt="bundle.png" border="0" width="96" height="96" /></div>
<p>
Apple has changed Mail in the today released Mac OS X 10.5.6 which results in a crash if you have Letter Opener installed. An updated version is already available.
</p>
<p>
Please use the build-in update function (Mail Menu -> Letter Opener  -> Check for updates…), or download Letter Opener 2.0.7 <a href="http://www.restoroot.com/OMiC/de/download.php">here</a>.
</p>
<p>
Troubleshooting Document: <a href="http://support.apple.com/kb/ts2486" target="_blank">Mac OS X 10.5.6: Mail unexpectedly quits (TS2486)</a>.
</p>
<p><br/></p>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/LA91QX6Ok_s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/12/15/letter-opener-207-compatible-with-mac-os-x-1056/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.restoroot.com/Blog/2008/12/15/letter-opener-207-compatible-with-mac-os-x-1056/</feedburner:origLink></item>
		<item>
		<title>Apple Mail Plugins Developer Group</title>
		<link>http://feedproxy.google.com/~r/restoroot/~3/I7Opp7Mbd6I/</link>
		<comments>http://www.restoroot.com/Blog/2008/12/12/apple-mail-plugins-developer-group/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 18:39:14 +0000</pubDate>
		<dc:creator>Christopher Atlan</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.restoroot.com/Blog/?p=109</guid>
		<description><![CDATA[

After talking with Scott Morrison of Indev Software at C4[2] about a mail list for Mail Plugin developers we finally started one.


If you are interested in this topic you are welcome to join us: Google Groups &#8211; Apple Mail Dev



]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 20px;"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2007/12/bundle.png" alt="bundle.png" border="0" width="96" height="96" /></div>
<p>
After talking with Scott Morrison of <a href="http://www.indev.ca/" target="_blank">Indev Software</a> at <a href="http://rentzsch.com/c4/twoOpen" target="_blank">C4[2]</a> about a mail list for Mail Plugin developers we finally started one.
</p>
<p>
If you are interested in this topic you are welcome to join us: <a href="http://groups.google.com/group/apple-mail-dev" target="_blank">Google Groups &#8211; Apple Mail Dev</a>
</p>
<p><br/><br />
<br/></p>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/I7Opp7Mbd6I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/12/12/apple-mail-plugins-developer-group/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.restoroot.com/Blog/2008/12/12/apple-mail-plugins-developer-group/</feedburner:origLink></item>
		<item>
		<title>Crash Reporter for iPhone Applications (Part 2)</title>
		<link>http://feedproxy.google.com/~r/restoroot/~3/18GxLUoSXdE/</link>
		<comments>http://www.restoroot.com/Blog/2008/10/20/crash-reporter-for-iphone-applications-part-2/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 22:07:43 +0000</pubDate>
		<dc:creator>Christopher Atlan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[crash reporter]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.restoroot.com/Blog/?p=83</guid>
		<description><![CDATA[

In part one I describe how to set up an Exception Handler, Uli discovered as first one that this handles not all cases. The missing part is a signal handler to get information of SIGSEGV, SIGBUS, &#8230; signals.


I thought the hard part of this is getting the backtrace inside a signal handler. I already found [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 15px;"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2008/10/crashduck.png" alt="crashDuck.png" border="0" width="96" height="96" /></div>
<p>
In <a href="http://www.restoroot.com/Blog/2008/10/18/crash-reporter-for-iphone-applications/">part one</a> I describe how to set up an Exception Handler, <a href="http://www.zathras.de/angelweb/blog-crash-reporting-on-iphone.htm" target="_blank">Uli</a> discovered as first one that this handles not all cases. The missing part is a signal handler to get information of SIGSEGV, SIGBUS, &#8230; signals.
</p>
<p>
I thought the hard part of this is getting the backtrace inside a signal handler. I already found code for this, but I couldn&#8217;t use it because it was GPL. I tried the easy way, offering the author money to release it under public domain, oh boy this was a waste of time. But now that I found my own solution for this I&#8217;m happy that I didn&#8217;t spend money on this. (1 line versus 20 lines of code)
</p>
<p><span id="more-83"></span>
<p>
Let&#8217;s start with setting up a signal handler, the good old <a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man2/sigaction.2.html" target="_blank">man page</a> helps. </p>
<style type="text/css">/* GeSHi (C) 2004 - 2007 Nigel McNie (http://qbnz.com/highlighter) */
.objc .de1, .objc .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal; font-size: 11px; }
.objc  {font-family: monospace;}
.objc .imp {font-weight: bold; color: red;}
.objc li {background: #f8f8f8;}
.objc li.li2 {background: #f8f8f8;}
.objc .kw1 {color: #0000ff;}
.objc .kw2 {color: #0000ff;}
.objc .kw3 {color: #0000dd;}
.objc .kw4 {color: #0000ff;}
.objc .kw5 {color: #0000ff;}
.objc .kw6 {color: #0000ff;}
.objc .co1 {color: #ff0000;}
.objc .co2 {color: #339900;}
.objc .coMULTI {color: #ff0000; font-style: italic;}
.objc .es0 {color: #666666; font-weight: bold;}
.objc .br0 {color: #002200;}
.objc .st0 {color: #666666;}
.objc .nu0 {color: #0000dd;}
html>body .entry .objc ol li { margin: 0 0 0 0; }
.syntax { padding-left: 15px; background-color: #E8E8E8; text-align:left; }
</style>
<div class="syntax">
<div class="objc" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc, <span class="kw4">char</span> *argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">struct</span> sigaction mySigAction;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; mySigAction.sa_sigaction = mysighandler;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; mySigAction.sa_flags = SA_SIGINFO;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sigemptyset<span class="br0">&#40;</span>&amp;mySigAction.sa_mask<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; sigaction<span class="br0">&#40;</span>SIGQUIT, &amp;mySigAction, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sigaction<span class="br0">&#40;</span><span class="kw2">SIGILL</span>, &amp;mySigAction, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; sigaction<span class="br0">&#40;</span>SIGTRAP, &amp;mySigAction, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sigaction<span class="br0">&#40;</span><span class="kw2">SIGABRT</span>, &amp;mySigAction, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; sigaction<span class="br0">&#40;</span>SIGEMT, &amp;mySigAction, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sigaction<span class="br0">&#40;</span><span class="kw2">SIGFPE</span>, &amp;mySigAction, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; sigaction<span class="br0">&#40;</span>SIGBUS, &amp;mySigAction, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sigaction<span class="br0">&#40;</span><span class="kw2">SIGSEGV</span>, &amp;mySigAction, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; sigaction<span class="br0">&#40;</span>SIGSYS, &amp;mySigAction, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sigaction<span class="br0">&#40;</span>SIGPIPE, &amp;mySigAction, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; sigaction<span class="br0">&#40;</span>SIGALRM, &amp;mySigAction, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sigaction<span class="br0">&#40;</span>SIGXCPU, &amp;mySigAction, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; sigaction<span class="br0">&#40;</span>SIGXFSZ, &amp;mySigAction, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSAutoreleasePool.html"><span class="kw5">NSAutoreleasePool</span></a> * pool = <span class="br0">&#91;</span><span class="br0">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSAutoreleasePool.html"><span class="kw5">NSAutoreleasePool</span></a> alloc<span class="br0">&#93;</span> init<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> retVal = UIApplicationMain<span class="br0">&#40;</span>argc, argv, <span class="kw2">nil</span>, <span class="kw2">nil</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>pool release<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> retVal;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</div>
<p>
And here the line of code I was searching for over two days: <a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man3/backtrace.3.html" target="_blank">backtrace(3)</a>. You don&#8217;t find this little bastard if you search in Xcode Help with iPhone OS Library selected (there goes my two days)
</p>
<div class="syntax">
<div class="objc" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="kw4">void</span> mysighandler<span class="br0">&#40;</span><span class="kw4">int</span> sig, siginfo_t *info, <span class="kw4">void</span> *context<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">void</span> *backtraceFrames<span class="br0">&#91;</span><span class="nu0">128</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> frameCount = backtrace<span class="br0">&#40;</span>backtraceFrames, <span class="nu0">128</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// report the error</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</div>
<p>
Like in the Exception Handler you now just use <a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man3/backtrace_symbols.3.html" target="_blank">backtrace_symbols(3)</a>. (<a href="http://www.cocoadev.com/index.pl?StackTraces" target="_blank">Example</a>)
</p>
<p>
Good luck with working down the crash reports you will get now <img src='http://www.restoroot.com/Blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</p>
<p align="center">
<a href="http://www.restoroot.com/Blog/2008/10/18/crash-reporter-for-iphone-applications/">Crash Reporter for iPhone Applications (Part 1)</a><br />
Crash Reporter for iPhone Applications (Part 2)
</p>
<p><br/></p>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/18GxLUoSXdE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/10/20/crash-reporter-for-iphone-applications-part-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.restoroot.com/Blog/2008/10/20/crash-reporter-for-iphone-applications-part-2/</feedburner:origLink></item>
		<item>
		<title>Crash Reporter for iPhone Applications (Part 1)</title>
		<link>http://feedproxy.google.com/~r/restoroot/~3/8wSeJJ1Kmz0/</link>
		<comments>http://www.restoroot.com/Blog/2008/10/18/crash-reporter-for-iphone-applications/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 18:58:14 +0000</pubDate>
		<dc:creator>Christopher Atlan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[crash reporter]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.restoroot.com/Blog/?p=59</guid>
		<description><![CDATA[

I&#8217;m getting ready to send my iPhone Application to the first beta testers and so I started thinking about crash reports.


On the Mac you have two options to get the crash report of your application. The first one is to check on startup if there is a new crash report file in ~/Library/Logs/CrashReporter for your [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 15px;"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2008/10/crashduck.png" alt="crashDuck.png" border="0" width="96" height="96" /></div>
<p>
I&#8217;m getting ready to send my iPhone Application to the first beta testers and so I started thinking about crash reports.
</p>
<p>
On the Mac you have two options to get the crash report of your application. The first one is to check on startup if there is a new crash report file in ~/Library/Logs/CrashReporter for your application and simply send it. (Example: <a href="http://www.profcast.com/developers/HDCrashReporter.php" target="_blank"> HDCrashReporter </a>, <a href="http://www.zathras.de/angelweb/sourcecode.htm" target="_blank">UKCrashReporter</a>)
</p>
<p><span id="more-59"></span>
<p>
The other option is to use NSExceptionHandler, which let you report the problem as it happens. (Example: <a href="http://www.mactech.com/articles/mactech/Vol.19/19.12/CocoaDebug/" target="_blank">A simple debugging tool for Cocoa</a>)
</p>
<p>
On the iPhone you can&#8217;t access the crash report file form your application because it&#8217;s running in a sandbox (rdar://problem/6296554). iTunes synchronizes the crash reports of all applications, so although a user could in theory  send it to you, this seems rather complicated to me (<a href="http://www.anoshkin.net/blog/2008/09/09/iphone-crash-logs/" target="_blank">Locations of Crash Logs</a>).
</p>
<p>
So what about NSExceptionHandler? Well, there isn&#8217;t a NSExceptionHandler in the iPhone SDK. But wait, there is a <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSSetUncaughtExceptionHandler" target="_blank">NSUncaughtExceptionHandler</a>!
</p>
<style type="text/css">/* GeSHi (C) 2004 - 2007 Nigel McNie (http://qbnz.com/highlighter) */
.objc .de1, .objc .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal; font-size: 11px; }
.objc  {font-family: monospace;}
.objc .imp {font-weight: bold; color: red;}
.objc li {background: #f8f8f8;}
.objc li.li2 {background: #f8f8f8;}
.objc .kw1 {color: #0000ff;}
.objc .kw2 {color: #0000ff;}
.objc .kw3 {color: #0000dd;}
.objc .kw4 {color: #0000ff;}
.objc .kw5 {color: #0000ff;}
.objc .kw6 {color: #0000ff;}
.objc .co1 {color: #ff0000;}
.objc .co2 {color: #339900;}
.objc .coMULTI {color: #ff0000; font-style: italic;}
.objc .es0 {color: #666666; font-weight: bold;}
.objc .br0 {color: #002200;}
.objc .st0 {color: #666666;}
.objc .nu0 {color: #0000dd;}
html>body .entry .objc ol li { margin: 0 0 0 0; }
.syntax { padding-left: 15px; background-color: #E8E8E8; text-align:left; }
</style>
<div class="syntax">
<div class="objc" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="kw4">void</span> MyUncaughtExceptionHandler<span class="br0">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSException.html"><span class="kw5">NSException</span></a> *exception<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSArray.html"><span class="kw5">NSArray</span></a> *callStackArray = <span class="br0">&#91;</span>exception callStackReturnAddresses<span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw4">int</span> frameCount = <span class="br0">&#91;</span>callStackArray count<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">void</span> *backtraceFrames<span class="br0">&#91;</span>frameCount<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i=<span class="nu0">0</span>; i&lt;frameCount; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; backtraceFrames<span class="br0">&#91;</span>i<span class="br0">&#93;</span> = <span class="br0">&#40;</span><span class="kw4">void</span> *<span class="br0">&#41;</span><span class="br0">&#91;</span><span class="br0">&#91;</span>callStackArray objectAtIndex:i<span class="br0">&#93;</span> unsignedIntegerValue<span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="co1">// report the exception</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@implementation</span> AppDelegate</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>applicationDidFinishLaunching:<span class="br0">&#40;</span>UIApplication *<span class="br0">&#41;</span>application <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; NSSetUncaughtExceptionHandler<span class="br0">&#40;</span>&amp;MyUncaughtExceptionHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@end</span></div>
</li>
</ol>
</div>
</div>
<p>
Now you can get the backtrace in MyUncaughtExceptionHandler with <a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man3/backtrace_symbols.3.html" target="_blank">backtrace_symbols(3)</a>. (<a href="http://www.cocoadev.com/index.pl?StackTraces" target="_blank">Example</a>)<br />
You still have to <a href="http://furbo.org/2008/08/08/symbolicatifination/" target="_blank">symbolicate</a> the crash reports.
</p>
<p>
As a big fan of Fogbugz, I also wanted to use <a href="http://www.fogcreek.com/FogBugz/docs/60/topics/customers/BugzScout.html" target="_blank">BugzScout</a>. It&#8217;s just a HTTP POST, but here is the code:
</p>
<div class="syntax">
<div class="objc" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="kw4">void</span> bugzScout<span class="br0">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSString.html"><span class="kw5">NSString</span></a> *description, <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSString.html"><span class="kw5">NSString</span></a> *extra<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSMutableString.html"><span class="kw5">NSMutableString</span></a> *post = <span class="br0">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSMutableString.html"><span class="kw5">NSMutableString</span></a> <span class="kw4">string</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>post appendString:@<span class="st0">&quot;ScoutUserName=&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>post appendString:urlEncodeValue<span class="br0">&#40;</span>@<span class="st0">&quot;Your BugzScout User&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>post appendString:@<span class="st0">&quot;&amp;ScoutProject=&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>post appendString:urlEncodeValue<span class="br0">&#40;</span>@<span class="st0">&quot;Your Project&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>post appendString:@<span class="st0">&quot;&amp;ScoutArea=&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>post appendString:urlEncodeValue<span class="br0">&#40;</span>@<span class="st0">&quot;Your Area&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>post appendString:@<span class="st0">&quot;&amp;Description=&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>post appendString:urlEncodeValue<span class="br0">&#40;</span>description<span class="br0">&#41;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>post appendString:@<span class="st0">&quot;&amp;Extra=&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>post appendString:urlEncodeValue<span class="br0">&#40;</span>extra<span class="br0">&#41;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>post appendString:@<span class="st0">&quot;&amp;ScoutDefaultMessage=&amp;FriendlyResponse=0&amp;ForceNewBug=0&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//NSLog(post);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSData.html"><span class="kw5">NSData</span></a> *postData = <span class="br0">&#91;</span>post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSString.html"><span class="kw5">NSString</span></a> *postLength = <span class="br0">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSString.html"><span class="kw5">NSString</span></a> stringWithFormat:@<span class="st0">&quot;%d&quot;</span>, <span class="br0">&#91;</span>postData length<span class="br0">&#93;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSURL.html"><span class="kw5">NSURL</span></a> *webServiceURL = <span class="br0">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSURL.html"><span class="kw5">NSURL</span></a> URLWithString:@<span class="st0">&quot;https://yourcompany.fogbugz.com/ScoutSubmit.asp&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSMutableURLRequest.html"><span class="kw5">NSMutableURLRequest</span></a> *req = <span class="br0">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSMutableURLRequest.html"><span class="kw5">NSMutableURLRequest</span></a> requestWithURL:webServiceURL<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>req setHTTPMethod:@<span class="st0">&quot;POST&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>req addValue:@<span class="st0">&quot;application/x-www-form-urlencoded&quot;</span> forHTTPHeaderField: @<span class="st0">&quot;Content-Type&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>req addValue:postLength forHTTPHeaderField: @<span class="st0">&quot;Content-Length&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>req setHTTPBody:postData<span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSURLConnection.html"><span class="kw5">NSURLConnection</span></a> sendSynchronousRequest:req returningResponse:<span class="kw2">nil</span> error:<span class="kw2">nil</span><span class="br0">&#93;</span>;&nbsp; &nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSString.html"><span class="kw5">NSString</span></a> *urlEncodeValue<span class="br0">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSString.html"><span class="kw5">NSString</span></a> *str<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; CFStringRef urlString = CFURLCreateStringByAddingPercentEscapes<span class="br0">&#40;</span>kCFAllocatorDefault,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>CFStringRef<span class="br0">&#41;</span>str, <span class="kw2">NULL</span>, CFSTR<span class="br0">&#40;</span><span class="st0">&quot;;/?:@&amp;=+$,&quot;</span><span class="br0">&#41;</span>, kCFStringEncodingUTF8<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#91;</span><span class="br0">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSString.html"><span class="kw5">NSString</span></a> *<span class="br0">&#41;</span>urlString autorelease<span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</div>
<p align="center">
Crash Reporter for iPhone Applications (Part 1)<br />
<a href="http://www.restoroot.com/Blog/2008/10/20/crash-reporter-for-iphone-applications-part-2/">Crash Reporter for iPhone Applications (Part 2)</a></p>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/8wSeJJ1Kmz0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/10/18/crash-reporter-for-iphone-applications/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://www.restoroot.com/Blog/2008/10/18/crash-reporter-for-iphone-applications/</feedburner:origLink></item>
		<item>
		<title>OMiC Version 2.0 Beta 6 (Leopard ready)</title>
		<link>http://feedproxy.google.com/~r/restoroot/~3/wC-MfWSty1A/</link>
		<comments>http://www.restoroot.com/Blog/2008/07/31/omic-version-20-beta-6-leopard-ready/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 13:06:21 +0000</pubDate>
		<dc:creator>Christopher Atlan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Mail Plug-in]]></category>
		<category><![CDATA[OMiC]]></category>
		<category><![CDATA[winmail.dat]]></category>

		<guid isPermaLink="false">http://www.restoroot.com/Blog/?p=54</guid>
		<description><![CDATA[

Beta 6 support winmail.dat files in encrypted messages, improved winmail.dat file recognition, and as always bug fixes.


Note: The last two betas include sparkle 1.5b4 and there are still some problems with that.


If you already using the beta, please use the build-in update function (Mail Menu -> OMiC -> Check for updates&#8230;), else just write me [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 20px;"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2007/12/bundle.png" alt="bundle.png" border="0" width="96" height="96" /></div>
<p>
Beta 6 support winmail.dat files in encrypted messages, improved winmail.dat file recognition, and as always bug fixes.
</p>
<p>
Note: The last two betas include sparkle 1.5b4 and there are still some problems with that.
</p>
<p>
If you already using the beta, please use the build-in update function (<i>Mail Menu -> OMiC -> Check for updates&#8230;</i>), else just <a href="mailto:support@restoroot.com?subject=OMiC Version 2.0 Beta 6&#038;body=Please send me the beta version.">write me a line</a>.
</p>
<p>
By the way, I&#8217;m try to get into this twitter thing, so if you like you can <a href="http://twitter.com/catlan" target="_blank">follow me</a>.</p>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/wC-MfWSty1A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/07/31/omic-version-20-beta-6-leopard-ready/feed/</wfw:commentRss>
		<slash:comments>129</slash:comments>
		<feedburner:origLink>http://www.restoroot.com/Blog/2008/07/31/omic-version-20-beta-6-leopard-ready/</feedburner:origLink></item>
		<item>
		<title>OMiC Version 2.0 Beta 5 (Leopard ready)</title>
		<link>http://feedproxy.google.com/~r/restoroot/~3/qGs6zr3eI2s/</link>
		<comments>http://www.restoroot.com/Blog/2008/07/09/omic-version-20-beta-5-leopard-ready/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 17:38:30 +0000</pubDate>
		<dc:creator>Christopher Atlan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Mail Plug-in]]></category>
		<category><![CDATA[OMiC]]></category>
		<category><![CDATA[winmail.dat]]></category>

		<guid isPermaLink="false">http://www.restoroot.com/Blog/index.php/2008/07/09/omic-version-20-beta-5-leopard-ready/</guid>
		<description><![CDATA[

This beta version fine tune the new integration into Mail. Also the winmail.dat converter itself got lot of bug fixes.


It took again a long time to release this beta, one of the main show stopper is the still existing GMail IMAP issue.


If you already using the beta, please use the build-in update function (Mail Menu [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 20px;"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2007/12/bundle.png" alt="bundle.png" border="0" width="96" height="96" /></div>
<p>
This beta version fine tune the new integration into Mail. Also the winmail.dat converter itself got lot of bug fixes.
</p>
<p>
It took again a long time to release this beta, one of the main show stopper is the still existing <a href="http://www.restoroot.com/Blog/index.php/2008/06/28/google-gmail-and-winmaildat-files/">GMail IMAP</a> issue.
</p>
<p>
If you already using the beta, please use the build-in update function (<i>Mail Menu -> OMiC -> Check for updates&#8230;</i>), else just <a href="mailto:support@restoroot.com?subject=OMiC Version 2.0 Beta 5&#038;body=Please send me the beta version.">write me a line</a>.</p>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/qGs6zr3eI2s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/07/09/omic-version-20-beta-5-leopard-ready/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://www.restoroot.com/Blog/2008/07/09/omic-version-20-beta-5-leopard-ready/</feedburner:origLink></item>
		<item>
		<title>Google GMail and winmail.dat files</title>
		<link>http://feedproxy.google.com/~r/restoroot/~3/6Ct5lePNVMU/</link>
		<comments>http://www.restoroot.com/Blog/2008/06/28/google-gmail-and-winmaildat-files/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 20:29:02 +0000</pubDate>
		<dc:creator>Christopher Atlan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[GMail]]></category>
		<category><![CDATA[IMAP]]></category>
		<category><![CDATA[OMiC]]></category>
		<category><![CDATA[winmail.dat]]></category>

		<guid isPermaLink="false">http://www.restoroot.com/Blog/index.php/2008/06/28/google-gmail-and-winmaildat-files/</guid>
		<description><![CDATA[

If you are using googles popular mail services GMail over IMAP and demand on winmail.dat files you will run into a problem.


GMail IMAP doesn&#8217;t return the senders original winmail.dat file, it return a home-cooked file which have only the name in common. In this case, not even Microsoft Outlook can handle the winmail.dat file.


I tried [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 10px;padding-bottom: 10px;"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2008/06/googlemail.gif" alt="googlemail.gif" border="0" width="143" height="59" /></div>
<p>
If you are using googles popular mail services GMail over IMAP and demand on winmail.dat files you will run into a problem.
</p>
<p>
GMail IMAP doesn&#8217;t return the senders original winmail.dat file, it return a home-cooked file which have only the name in common. In this case, not even Microsoft Outlook can handle the winmail.dat file.
</p>
<p>
I tried to contact google about this issue over many different ways, but didn&#8217;t get a answer.
</p>
<p>
There are two workarounds: Switch back to GMail POP3 or use GMail web interface to access mails with winmail.dat attachment.</p>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/6Ct5lePNVMU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/06/28/google-gmail-and-winmaildat-files/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.restoroot.com/Blog/2008/06/28/google-gmail-and-winmaildat-files/</feedburner:origLink></item>
	</channel>
</rss>
