<?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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>restoroot.com</title>
	<atom:link href="http://www.restoroot.com/Blog/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.restoroot.com/Blog</link>
	<description />
	<pubDate>Tue, 28 Oct 2008 20:41:31 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Crash Reporter for iPhone Applications (Part 2)</title>
		<link>http://feeds.feedburner.com/~r/restoroot/~3/426874681/</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/426874681" 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>
		<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://feeds.feedburner.com/~r/restoroot/~3/424848207/</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="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">void</span> *backtraceFrames<span class="br0">&#91;</span><span class="br0">&#91;</span>callStackArray count<span class="br0">&#93;</span><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; </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;<span class="br0">&#91;</span>callStackArray cout<span class="br0">&#93;</span>; 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/424848207" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/10/18/crash-reporter-for-iphone-applications/feed/</wfw:commentRss>
		<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://feeds.feedburner.com/~r/restoroot/~3/351543754/</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/351543754" 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>
		<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://feeds.feedburner.com/~r/restoroot/~3/351145610/</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/351145610" 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>
		<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://feeds.feedburner.com/~r/restoroot/~3/351145613/</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/351145613" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/06/28/google-gmail-and-winmaildat-files/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.restoroot.com/Blog/2008/06/28/google-gmail-and-winmaildat-files/</feedburner:origLink></item>
		<item>
		<title>Cocoa Dev House Munich</title>
		<link>http://feeds.feedburner.com/~r/restoroot/~3/351145614/</link>
		<comments>http://www.restoroot.com/Blog/2008/03/07/cocoa-dev-house-munich/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 22:59:55 +0000</pubDate>
		<dc:creator>Christopher Atlan</dc:creator>
		
		<category><![CDATA[On The Round]]></category>

		<category><![CDATA[CocoaDevHouse]]></category>

		<guid isPermaLink="false">http://www.restoroot.com/Blog/index.php/2008/03/07/cocoa-dev-house-munich/</guid>
		<description><![CDATA[

Something is in the air, and it&#8217;s no MacBook Air, it&#8217;s the Cocoa Dev House Munich! Tomorrow many cocoa developer (70 people on the list, last year 34, will we double every year?)  will meet at equinux. After the release of the iPhone SDK yesterday there should be a lot to talk about.

The train [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 10px;"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2008/01/cococadevhouse.png" alt="cococadevhouse.png" border="0" width="96" height="96" /></div>
<p>
Something is in the air, and it&#8217;s no MacBook Air, it&#8217;s the <a href="http://cocoadevhouse.org/wiki/index.php/Main/CocoaDevHouseMunich" target="_blank">Cocoa Dev House Munich</a>! Tomorrow many cocoa developer (70 people on the list, last year 34, will we double every year?)  will meet at <a href="http://www.equinux.com" target="_blank">equinux</a>. After the release of the iPhone SDK yesterday there should be a lot to talk about.</p>
<p>
The train connections get worser every year, so I will come a hour late, hope I don&#8217;t miss too much. </p>
<p/>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/351145614" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/03/07/cocoa-dev-house-munich/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.restoroot.com/Blog/2008/03/07/cocoa-dev-house-munich/</feedburner:origLink></item>
		<item>
		<title>OMiC Version 2.0 Beta 4</title>
		<link>http://feeds.feedburner.com/~r/restoroot/~3/351145615/</link>
		<comments>http://www.restoroot.com/Blog/2008/02/20/omic-version-20-beta-4/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 22:42:27 +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/02/20/omic-version-20-beta-4/</guid>
		<description><![CDATA[

Tiger and Panther support is back in this beta. This was in some cases a real nightmare, you fix on thing, but break another&#8230;  And I don&#8217;t want to start talk about time estimation, if I told you a total wrong date for this beta release, I&#8217;m sorry!


But let&#8217;s look at the good side: [...]]]></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>
Tiger and Panther support is back in this beta. This was in some cases a real nightmare, you fix on thing, but break another&#8230;  And I don&#8217;t want to start talk about time estimation, if I told you a total wrong date for this beta release, I&#8217;m sorry!
</p>
<p>
But let&#8217;s look at the good side: There are lot of bug fixes in it and it&#8217;s even better integrated into Mail than the last beta. Now you can over <i>View Menu -> Message -> Plain Text Alternative/Best Alternative</i> switch OMiC on/off. So a message with a winmail.dat attachment is now for Mail like a message with two alternatives like plain text and html.
</p>
<p>
If you already using the beta please use the build-in update function (<i>Mail Menu -> Plug-Ins -> OMiC -> Check for updates&#8230;</i>), else <a href="mailto:support@restoroot.com?subject=OMiC Version 2.0 Beta 4&#038;body=Please send me the beta version.">write me a line</a>.
</p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/351145615" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/02/20/omic-version-20-beta-4/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.restoroot.com/Blog/2008/02/20/omic-version-20-beta-4/</feedburner:origLink></item>
		<item>
		<title>Last try for an Entourage version of OMiC</title>
		<link>http://feeds.feedburner.com/~r/restoroot/~3/351145616/</link>
		<comments>http://www.restoroot.com/Blog/2008/01/21/last-try-for-an-entourage-version-of-omic/#comments</comments>
		<pubDate>Sun, 20 Jan 2008 23:33:30 +0000</pubDate>
		<dc:creator>Christopher Atlan</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Entourage]]></category>

		<category><![CDATA[OMiC]]></category>

		<guid isPermaLink="false">http://www.restoroot.com/Blog/index.php/2008/01/21/last-try-for-an-entourage-version-of-omic/</guid>
		<description><![CDATA[

Monday and Tuesday I needed to get away from OMiC because all my trials over the weekend fail and so I looked into Microsoft Entourage 2008 Plug-in development.


I got it, you want a Entourage version for OMiC. My last try is now to contact the General Manager of the Macintosh Business Unit, Craig Eisler. Hope [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 10px;"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2008/01/weekly-report.png" alt="weekly report icon" border="0" width="96" height="96" /></div>
<p>
Monday and Tuesday I needed to get away from OMiC because all my trials over the weekend fail and so I looked into Microsoft Entourage 2008 Plug-in development.
</p>
<p>
I got it, you want a Entourage version for OMiC. My last try is now to contact the General Manager of the Macintosh Business Unit, <a href="http://craig.theeislers.com/" target="_blank">Craig Eisler</a>. Hope he is kind enough to answer.
</p>
<p>
Wednesday I looked into the issue why Microsoft Outlook creates ATT000xx.txt attachments, I will blog about it soon.
</p>
<p>
Thursday finally located most Panther issues and start fixing them. I used for this 10.3 and the Xcode tools which comes with this, this was like a time machine. And I <a href="http://www.systemhelden.com/?p=77" target="_blank">won</a> an <a href="http://www. systemhelden.com" target="_blank">systemhelden</a>/<a href="http://www.systemheroes.co.uk" target="_blank">systemheroes</a> t-shirt, unexpectedly, for sending feedback ;).
</p>
<p>
Friday fixing Panther issues, and I found a Mac OS X Tiger Install DVD and was able to setup up my old PowerBook G4 as test and build systems for OMiC 2. It&#8217;s now running 10.3, 10.4 and 10.5, and now I can use it without the external drive.</p>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/351145616" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/01/21/last-try-for-an-entourage-version-of-omic/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.restoroot.com/Blog/2008/01/21/last-try-for-an-entourage-version-of-omic/</feedburner:origLink></item>
		<item>
		<title>Microsoft Entourage 2008 Plug-in development</title>
		<link>http://feeds.feedburner.com/~r/restoroot/~3/351145617/</link>
		<comments>http://www.restoroot.com/Blog/2008/01/15/microsoft-entourage-2008-plug-in-development/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 20:25:50 +0000</pubDate>
		<dc:creator>Christopher Atlan</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Entourage]]></category>

		<category><![CDATA[Plug-in]]></category>

		<guid isPermaLink="false">http://www.restoroot.com/Blog/index.php/2008/01/15/microsoft-entourage-2008-plug-in-development/</guid>
		<description><![CDATA[

Today is the release day of Microsoft Office for Mac 2008. Let&#8217;s take a look if it is possible to develop a Plug-in for Entourage 2008.


As far as I know, there was no way in Entourage 2004 for a Third Party Developer, and there is still no support from Microsoft. But after four years, things [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 10px;"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2008/01/entourage.png" alt="Entourage Icon" border="0" width="96" height="96" /></div>
<p>
Today is the release day of Microsoft Office for Mac 2008. Let&#8217;s take a look if it is possible to develop a Plug-in for Entourage 2008.
</p>
<p>
As far as I know, there was no way in Entourage 2004 for a Third Party Developer, and there is still no support from Microsoft. But after four years, things a little different now&#8230;
</p>
<p><span id="more-45"></span></p>
<p>In the Entourage application bundle I discovered a Plugins folder, which contain a Plug-in named EntouragePrintPDE. So what is EntouragePrintPDE? This is an <a href="http://developer.apple.com/DOCUMENTATION/Printing/Conceptual/ExtPrintingDialogs/Introduction/chapter_1_section_1.html" target="_blank">Extending Printing Dialogs</a> Plug-in, I found a example for such a Plug-in at <a href="http://lxr.mozilla.org/mozilla/source/embedding/components/printingui/src/mac/printpde/" target="_blank">mozilla</a>. </p>
<div style="text-align:center"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2008/01/bild-1.png" alt="Bild 1.png" border="0" width="600" /></div>
<p>
So here we go, lets learn more about <a href="http://developer.apple.com/documentation/CoreFoundation/Conceptual/CFPlugIns/CFPlugIns.html" target="_blank">CFPlugIn</a>, which is little uncommon for us Cocoa guys who use NSBundle. <a href="http://developer.apple.com/samplecode/BasicPlugIn/" target="_blank">BasicPlugIn</a> is a good example to start with.
</p>
<p>And yeah, after setting up a Xcode project with this I was able get the Plug-in loaded:</p>
<div style="text-align:center"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2008/01/bild-3.png" alt="Bild 3.png" border="0" width="646" height="399" /></div>
<p>
This is not all good news. Because it is based on a Extending Printing Dialogs Plug-in, it gets only loaded when you open the print dialog. The CFPlugInTypes UUID in the Info.plist is BCB07250-E57F-11D3-8CA6-0050E4603277 which described as &#8220;Application pane for the Print dialog&#8221; Interface type:
</p>
<div style="text-align:center"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2008/01/bild-4.png" alt="Bild 4.png" border="0" width="644" height="398" /></div>
<p>
Is this the end of the story? Almost, without Interface descriptions and the UUIDs we are out of luck here. I searched for standard UUIDs, but didn&#8217;t find any &#8220;load on start of host app&#8221; UUIDs.
</p>
<p>
But wait, I don&#8217;t like to close this with a &#8220;it&#8217;s impossible, don&#8217;t even dream of it&#8221;. Here the class-dump output of Entourage 2008. It is pretty short for such a big application because it is mostly a Carbon application, never mind, I like what it shows.
</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;}
.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; font-size: 12px;">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/*</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp;* &nbsp; &nbsp; Generated by class-dump 3.1.1.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp;* &nbsp; &nbsp; class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2006 by Steve Nygard.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">struct</span> CToolTip;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">struct</span> CURLToolTip <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw4">struct</span> CToolTip *_field1;</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">struct</span> OpaqueMenuRef;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">struct</span> _NSPoint <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw4">float</span> _field1;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">float</span> _field2;</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"><span class="kw4">struct</span> _NSZone;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw4">struct</span> __CFString;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">/*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* File: /Applications/Microsoft Office 2008/Microsoft Entourage.app/Contents/MacOS/Microsoft Entourage</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp;* Arch: Intel 80&#215;86 (i386)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@protocol</span> <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSObject.html"><span class="kw5">NSObject</span></a></div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">BOOL</span><span class="br0">&#41;</span>isEqual:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">unsigned</span> <span class="kw4">int</span><span class="br0">&#41;</span>hash;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">Class</span><span class="br0">&#41;</span>superclass;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">Class</span><span class="br0">&#41;</span><span class="kw4">class</span>;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>self;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">struct</span> _NSZone *<span class="br0">&#41;</span>zone;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>performSelector:<span class="br0">&#40;</span><span class="kw4">SEL</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>performSelector:<span class="br0">&#40;</span><span class="kw4">SEL</span><span class="br0">&#41;</span>fp8 withObject:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>performSelector:<span class="br0">&#40;</span><span class="kw4">SEL</span><span class="br0">&#41;</span>fp8 withObject:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12 withObject:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp16;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">BOOL</span><span class="br0">&#41;</span>isProxy;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">BOOL</span><span class="br0">&#41;</span>isKindOfClass:<span class="br0">&#40;</span><span class="kw4">Class</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">BOOL</span><span class="br0">&#41;</span>isMemberOfClass:<span class="br0">&#40;</span><span class="kw4">Class</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">BOOL</span><span class="br0">&#41;</span>conformsToProtocol:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">BOOL</span><span class="br0">&#41;</span>respondsToSelector:<span class="br0">&#40;</span><span class="kw4">SEL</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>retain;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span>oneway <span class="kw4">void</span><span class="br0">&#41;</span>release;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>autorelease;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">unsigned</span> <span class="kw4">int</span><span class="br0">&#41;</span>retainCount;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>description;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@protocol</span> WebDocumentText &lt;NSObject&gt;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">BOOL</span><span class="br0">&#41;</span>supportsTextEncoding;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span><span class="kw4">string</span>;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>attributedString;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>selectedString;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>selectedAttributedString;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>selectAll;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>deselectAll;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@interface</span> <a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/ObjC_classic/Classes/NSView.html"><span class="kw6">NSView</span></a> <span class="br0">&#40;</span>Undocumented<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>preparePageForPrinting:<span class="br0">&#40;</span><span class="kw4">float</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@interface</span> MessagePrintoutController : <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSObject.html"><span class="kw5">NSObject</span></a></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">BOOL</span> loading;</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">- <span class="br0">&#40;</span><span class="kw4">BOOL</span><span class="br0">&#41;</span>isLoading;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>setLoading:<span class="br0">&#40;</span><span class="kw4">BOOL</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>webView:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 didStartProvisionalLoadForFrame:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>webView:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 didFinishLoadForFrame:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>webView:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 didFailProvisionalLoadWithError:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12 forFrame:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp16;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>webView:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 didFailLoadWithError:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12 forFrame:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp16;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@interface</span> MessageViewController : <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSObject.html"><span class="kw5">NSObject</span></a></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; WebView *webView;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw4">void</span> *view;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">id</span> messageRecordID;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw4">BOOL</span> networkBlocked;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">BOOL</span> networkResources;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSURL.html"><span class="kw5">NSURL</span></a> *hrefURL;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSString.html"><span class="kw5">NSString</span></a> *currentURL;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSString.html"><span class="kw5">NSString</span></a> *currentHRef;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">struct</span> CURLToolTip *toolTip;</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">+ <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>initialize;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>dealloc;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>init;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>webView;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>setWebView:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span> *<span class="br0">&#41;</span>view;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>setView:<span class="br0">&#40;</span><span class="kw4">void</span> *<span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span> *<span class="br0">&#41;</span>message;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>setMessage:<span class="br0">&#40;</span><span class="kw4">void</span> *<span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">BOOL</span><span class="br0">&#41;</span>isNetworkBlocked;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>setNetworkBlocked:<span class="br0">&#40;</span><span class="kw4">BOOL</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">BOOL</span><span class="br0">&#41;</span>hasNetworkResources;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>buildExecuteScriptMenu:<span class="br0">&#40;</span><span class="kw4">struct</span> OpaqueMenuRef *<span class="br0">&#41;</span>fp8 withParent:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>openLink:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>copyImage:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>openImage:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>executeScriptCommand:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">struct</span> __CFString *<span class="br0">&#41;</span>getSelectedText;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>selectAllCommand:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>decreaseFontSizeCommand:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>increaseFontSizeCommand:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>translateCommand:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>dictionaryCommand:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>synonymCommand:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>encyclopediaCommand:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>webSearchCommand:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>helpCommand:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>download:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 decideDestinationWithSuggestedFilename:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>webView:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 didStartProvisionalLoadForFrame:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>webView:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 decidePolicyForNewWindowAction:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12 request:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp16 newFrameName:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp20 decisionListener:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp24;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>webView:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 decidePolicyForNavigationAction:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12 request:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp16 frame:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp20 decisionListener:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp24;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>webView:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 resource:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12 willSendRequest:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp16 redirectResponse:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp20 fromDataSource:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp24;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>webView:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 willPerformDragSourceAction:<span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span>fp12 fromPoint:<span class="br0">&#40;</span><span class="kw4">struct</span> _NSPoint<span class="br0">&#41;</span>fp16 withPasteboard:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp24;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>webView:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 mouseDidMoveOverElement:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12 modifierFlags:<span class="br0">&#40;</span><span class="kw4">unsigned</span> <span class="kw4">int</span><span class="br0">&#41;</span>fp16;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>webView:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 contextMenuItemsForElement:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12 defaultMenuItems:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp16;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw4">@end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw4">@interface</span> MessageViewController <span class="br0">&#40;</span>Private<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>decidePolicyForAction:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 request:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12 decisionListener:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp16;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">struct</span> _NSPoint<span class="br0">&#41;</span>mouseLocation;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@interface</span> MHTMLProtocol : <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSURLProtocol.html"><span class="kw5">NSURLProtocol</span></a></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#123;</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="br0">&#40;</span><span class="kw4">BOOL</span><span class="br0">&#41;</span>canInitWithRequest:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li2">
<div class="de2">+ <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>canonicalRequestForRequest:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>initWithRequest:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 cachedResponse:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12 client:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp16;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>startLoading;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>stopLoading;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">@interface</span> NetworkBlock : <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSURLProtocol.html"><span class="kw5">NSURLProtocol</span></a></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#123;</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="br0">&#40;</span><span class="kw4">BOOL</span><span class="br0">&#41;</span>canInitWithRequest:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li2">
<div class="de2">+ <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>canonicalRequestForRequest:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>initWithRequest:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp8 cachedResponse:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp12 client:<span class="br0">&#40;</span><span class="kw4">id</span><span class="br0">&#41;</span>fp16;</div>
</li>
<li class="li2">
<div class="de2">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>startLoading;</div>
</li>
<li class="li1">
<div class="de1">- <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>stopLoading;</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>
&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/351145617" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/01/15/microsoft-entourage-2008-plug-in-development/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.restoroot.com/Blog/2008/01/15/microsoft-entourage-2008-plug-in-development/</feedburner:origLink></item>
		<item>
		<title>The show must go on</title>
		<link>http://feeds.feedburner.com/~r/restoroot/~3/351145618/</link>
		<comments>http://www.restoroot.com/Blog/2008/01/08/the-show-must-go-on/#comments</comments>
		<pubDate>Tue, 08 Jan 2008 17:40:27 +0000</pubDate>
		<dc:creator>Christopher Atlan</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Hetzner]]></category>

		<category><![CDATA[SiteUptime]]></category>

		<guid isPermaLink="false">http://www.restoroot.com/Blog/index.php/2008/01/08/the-show-must-go-on/</guid>
		<description><![CDATA[

When running your own software business it is important that your website don&#8217;t go down, everything runs over your website. I current use a Hetzner dedicated server, and was unsure about the network availability after reading some blog posts.


Here comes SiteUptime into the game, which give you a free and simple way to monitor your [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; padding-right: 20px;"><img src="http://www.restoroot.com/Blog/wp-content/uploads/2008/01/availability-icon.png" alt="availability icon" border="0" width="96" height="96" /></div>
<p>
When running your own software business it is important that your website don&#8217;t go down, everything runs over your website. I current use a <a href="http://www.hetzner.de" target="_blank">Hetzner</a> dedicated server, and was unsure about the network availability after reading some blog posts.
</p>
<p>
Here comes <a href="http://www.siteuptime.com" target="_blank">SiteUptime</a> into the game, which give you a free and simple way to monitor your website. And a short time this night my site wasn&#8217;t available, so I will try to check this with Hetzner and keep a eye on it.
</p>
<p>
A short update to OMiC, the last beta version in running very well on Leopard, the problem is still supporting Mac OS X 10.3 Panther.</p>
<img src="http://feeds.feedburner.com/~r/restoroot/~4/351145618" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.restoroot.com/Blog/2008/01/08/the-show-must-go-on/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.restoroot.com/Blog/2008/01/08/the-show-must-go-on/</feedburner:origLink></item>
	</channel>
</rss>
