<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alex Fajkowski &#187; iPhone</title>
	<atom:link href="http://fajkowski.com/blog/tag/iphone/feed/" rel="self" type="application/rss+xml" />
	<link>http://fajkowski.com/blog</link>
	<description>Software and other interesting stuff…</description>
	<lastBuildDate>Fri, 23 Jul 2010 20:20:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>&#8220;AFInformationView&#8221; Bubbles on the iPhone</title>
		<link>http://fajkowski.com/blog/2009/06/22/afinformationview-bubbles-on-the-iphone/</link>
		<comments>http://fajkowski.com/blog/2009/06/22/afinformationview-bubbles-on-the-iphone/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 20:17:29 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Cocoa]]></category>

		<guid isPermaLink="false">http://fajkowski.com/blog/?p=76</guid>
		<description><![CDATA[My iPhone application, Presenter, lets the user choose whether they want to swipe, tap, or use buttons to change slides. The Settings panel contains a 3 button segmented control to customize this behavior on the fly. Instead of including a help screen or inserting a large UILabel underneath the segmented control, I wrote a class [...]]]></description>
			<content:encoded><![CDATA[<p>My iPhone application, <a href="http://presenterapp.net">Presenter</a>, lets the user choose whether they want to swipe, tap, or use buttons to change slides. The Settings panel contains a 3 button segmented control to customize this behavior on the fly. Instead of including a help screen or inserting a large UILabel underneath the segmented control, I wrote a class that displays a floating UILabel on top of each button when selected.</p>
<p><a href="http://fajkowski.com/blog/wp-content/uploads/2009/06/settings.png"><img class="aligncenter size-full wp-image-79" title="Information View" src="http://fajkowski.com/blog/wp-content/uploads/2009/06/informationview.png" alt="AFInformationView in action" width="320" height="179" /></a></p>
<p>Calling this helper class is very simple. Pass in the target view, location, label text and a few other parameters.</p>
<p><code>- (void)displayInView:(UIView *)theView withText:(NSString *)displayText atLocation:(CGPoint)location width:(CGFloat)width isTriangleOnTop:(Boolean)isTriangleOnTop triangleHorizontalLocation:(CGFloat)triangleHorizontalLocation forDuration:(NSTimeInterval)duration;</code></p>
<p><code>AFInformationView</code> will fade in a multi-line, semi-transparent, black label with rounded corners &amp; a target triangle. The label&#8217;s text will wrap and grow vertically, depending on its width. After a specified amount of time, the label again fades out. If the user taps on the label, it fades out immediately.</p>
<p>I have included a sample Xcode project demonstrating its use.</p>
<p><a href="http://fajkowski.com/code/AFInformationView/AFInformationView.zip">http://fajkowski.com/code/AFInformationView/AFInformationView.zip</a></p>
<p><a title="AFInformationView sample movie" href="http://fajkowski.com/video/AFInformationView.mov">Click here to see a short video</a> of the Xcode project in use.</p>
<p>I have released the code with an MIT license. Feel free to reuse it in any project you&#8217;d like.</p>
]]></content:encoded>
			<wfw:commentRss>http://fajkowski.com/blog/2009/06/22/afinformationview-bubbles-on-the-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://fajkowski.com/video/AFInformationView.mov" length="476288" type="video/quicktime" />
		</item>
		<item>
		<title>Presenter, On Sale!</title>
		<link>http://fajkowski.com/blog/2009/06/01/presenter-on-sale/</link>
		<comments>http://fajkowski.com/blog/2009/06/01/presenter-on-sale/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 14:15:08 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Clicker]]></category>
		<category><![CDATA[Cocoa]]></category>

		<guid isPermaLink="false">http://fajkowski.com/blog/?p=43</guid>
		<description><![CDATA[I&#8217;m very happy to announce that my first application is finally available on the iPhone App Store today! You can check out a description of Presenter at: http://presenterapp.net/features Presenter pairs with your Mac over WiFi to let you control Keynote &#38; PowerPoint presentations from your iPhone. Upright, view your speaker notes in Georgia 38pt, white-on-black (a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m very happy to announce that my first application is finally available <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=314496788&amp;mt=8">on the iPhone App Store</a> today!</p>
<p style="text-align: center;"><img class="size-full wp-image-51  aligncenter" title="iTunes Connect" src="http://fajkowski.com/blog/wp-content/uploads/2009/05/itunes-connect1.jpg" alt="iTunes Connect" width="440" height="112" /></p>
<p>You can check out a description of Presenter at: <a href="http://presenterapp.net/features">http://presenterapp.net/features</a></p>
<p>Presenter pairs with your Mac over WiFi to let you control Keynote &amp; PowerPoint presentations from your iPhone. Upright, view your speaker notes in <a href="http://fajkowski.com/blog/wp-content/uploads/2009/05/presenter_notes.png">Georgia 38pt, white-on-black</a> (a bit more attractive &amp; easier to read than <a href="http://fajkowski.com/blog/wp-content/uploads/2009/05/keynote_remote_notes.png">Helvetica 16pt, brown-on-yellow</a>, no?).</p>
<p style="text-align: center;"><a title="Click to view a short video of how this works." href="http://s3.amazonaws.com/clickerapp/ClickerFlow.mov"><img class="size-full wp-image-58 aligncenter" title="Click to view a short video of how this works." src="http://fajkowski.com/blog/wp-content/uploads/2009/05/image1.png" alt="image1" width="480" height="300" /></a></p>
<p style="text-align: left;">Turn your phone sideways, and you get a <a href="http://fajkowski.com/blog/2009/05/21/clicker-app-rejected-for-coverflow-private-api-use/">&#8216;Not Cover Flow&#8217; interface</a>, displaying high quality previews of all the slides in your stack. Flick through them to see what&#8217;s coming up, or double tap a slide to navigate to that position in your show. Check out this <a href="http://s3.amazonaws.com/clickerapp/ClickerFlow.mov">short video to see how it works.</a></p>
<p>The Mac server portion of Presenter installs as a System Preference pane. The Presenter Server runs in the background as a launchd process. Pairing is very familiar—Enter a 4 digit code from your iPhone into the Mac System Preference pane. The Presenter Server communicates with your iPhone over an SSL encrypted channel, generates strong passwords, and stores them in your Mac&#8217;s &amp; iPhone&#8217;s keychains. Once you are paired, authentication happens seamlessly to the user (thank you, Bonjour), and all communication back &amp; forth is secure. Big thanks to <a href="http://deusty.blogspot.com/">Deusty Designs</a> for the robust <a href="http://code.google.com/p/cocoaasyncsocket/">CocoaAsyncSocket</a> CFSocket &amp; CFStream wrapper library. For the Mac OS X Keychain interaction, ExtendMac has a <a href="http://extendmac.com/EMKeychain/">terrific Cocoa wrapper, EMKeychain</a>. Finally, I&#8217;m also using Andy Matuschak&#8217;s <a href="http://sparkle.andymatuschak.org/">wonderful Sparkle engine</a> to keep the System Preference pane up to date.</p>
<p>The Presenter Server talks with PowerPoint and Keynote over AppleScript. Oddly enough, generating high quality previews of each slide was one of my biggest challenges. I&#8217;ll write up a post about how I did this later, but you might notice that neither Keynote nor PowerPoint&#8217;s AppleScript libraries expose any easy-to-use slide preview generator. Some other remotes out there take screenshots of what is visible on the Mac&#8217;s screen, shrink it down, then send it to the iPhone. This isn&#8217;t good enough; it requires the user to flip through every slide on his computer before being able to see the images on the iPhone. Also unhelpful, Keynote embeds teeny-tiny, low resolution previews of its slides inside the file format. PowerPoint&#8217;s file format is&#8230;well, kind of awful.</p>
<p>Today, I&#8217;m just happy and relieved to finally have an application available on the iPhone App Store. I&#8217;m not expecting to get rich from this venture&#8230;I&#8217;m just pleased to finally be able to say that I write commercial Mac OS X software—and not a farting, tip calculator, flashlight, either. (Sorry to disappoint, Presenter does not contain <a href="http://www.atebits.com/pee/">PEE</a>, yet).</p>
]]></content:encoded>
			<wfw:commentRss>http://fajkowski.com/blog/2009/06/01/presenter-on-sale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://s3.amazonaws.com/clickerapp/ClickerFlow.mov" length="1987246" type="video/quicktime" />
		</item>
		<item>
		<title>Clicker App Rejected for CoverFlow private API use!?</title>
		<link>http://fajkowski.com/blog/2009/05/21/clicker-app-rejected-for-coverflow-private-api-use/</link>
		<comments>http://fajkowski.com/blog/2009/05/21/clicker-app-rejected-for-coverflow-private-api-use/#comments</comments>
		<pubDate>Thu, 21 May 2009 22:14:38 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Clicker]]></category>

		<guid isPermaLink="false">http://fajkowski.com/blog/?p=18</guid>
		<description><![CDATA[UPDATE! Apple reversed their decision, and Presenter will be available on June 1st on the iPhone App Store! (Also: Jonas Salling, of &#8216;Salling Clicker&#8217; fame from 2003, kindly asked me to rename my app, Clicker, to avoid any possible confusion.) &#160; &#160; Twenty-four days after submission, I received this email today, stating that Apple has [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE!</strong> Apple reversed their decision, and <a href="http://presenterapp.net">Presenter</a> will be available on June 1st on the iPhone App Store!</p>
<p>(Also: Jonas Salling, of &#8216;Salling Clicker&#8217; fame from 2003, kindly asked me to rename my app, Clicker, to avoid any possible confusion.)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Twenty-four days after submission, I received this email today, stating that Apple has rejected <a href="http://clickerapp.com">Clicker</a> from the iPhone App Store.</p>
<blockquote><p>Hello Alex,</p>
<p>Upon review of your application, Clicker cannot be posted to the App Store due to the usage of a non-public API.  Usage of non-public APIs, as outlined in the iPhone SDK Agreement section 3.3.1, is prohibited:</p>
<p>&#8220;3.3.1 Applications may only use Published APIs in the manner prescribed by Apple and must not use or call any unpublished or private APIs. &#8221;</p>
<p>The non-public API that is included in your application comes from the CoverFlow API set.  A screenshot of this issue has been attached for your reference.</p>
<p>Regards,</p>
<p>iPhone Developer Program</p></blockquote>
<p style="text-align: center;"><img class="size-full wp-image-22 aligncenter" title="img_0142" src="http://fajkowski.com/blog/wp-content/uploads/2009/05/img_0142.png" alt="img_0142" width="480" height="320" /></p>
<p>I absolutely did not use any unpublished or private APIs. <a href="http://landonf.bikemonkey.org/code/iphone/Apple_Lesson_Huh.20081213.html">Just like</a> <a href="http://daringfireball.net/2008/12/private">several other people</a>, I wrote my own CoverFlow-like user interface completely from scratch using standard, public, Core Animation layer backed views. I was so paranoid with the approval process that I didn&#8217;t even use the Apple trademarked word, &#8220;CoverFlow&#8221;, in my app&#8217;s description.</p>
<p>Clicker controls PowerPoint or Keynote on your Mac. In Portrait mode, you can view speaker notes, change slides or control your computer&#8217;s mouse. Rotate your iPhone and in Landscape mode, you can flick through every slide in your presentation. Double tap to jump to that slide.</p>
<p>Check out this <a href="http://s3.amazonaws.com/clickerapp/ClickerFlow.mov">movie of the CoverFlow implementation in question.</a></p>
<p>I fully agree with Apple that third party iPhone apps should stick to only using Public API&#8217;s. Applications should not break because of an iPhone OS upgrade.</p>
<p style="text-align: center;"><img class="size-full wp-image-26 aligncenter" title="itunes-connect" src="http://fajkowski.com/blog/wp-content/uploads/2009/05/itunes-connect.jpg" alt="itunes-connect" width="403" height="114" /></p>
<p>I totally understand how easy it is to make a mistake like this, but I&#8217;m still frustrated Apple didn&#8217;t ask me about this earlier. (Sidenote: O&#8217;Reilley&#8217;s Safari Bookbag iPhone App was <a href="http://landonf.bikemonkey.org/code/iphone/iPhone_Private_API.20081206.html">allowed to use Apple&#8217;s private CoverFlow API</a>).</p>
<p>I&#8217;ve replied back to the iPhone Developer Program, waiting to hear what they say.</p>
]]></content:encoded>
			<wfw:commentRss>http://fajkowski.com/blog/2009/05/21/clicker-app-rejected-for-coverflow-private-api-use/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://s3.amazonaws.com/clickerapp/ClickerFlow.mov" length="1987246" type="video/quicktime" />
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: fajkowski.com @ 2012-02-04 01:07:35 -->
