<?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>Notes of a Developer &#187; Apple</title>
	<atom:link href="http://www.developers-life.com/tag/apple/feed" rel="self" type="application/rss+xml" />
	<link>http://www.developers-life.com</link>
	<description>Develop on Objective-C, UIKit, C, OpenGL for  iPhone, iPad, Mac OS X</description>
	<lastBuildDate>Fri, 03 Feb 2012 11:49:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>NSTableView with custom header</title>
		<link>http://www.developers-life.com/nstableview-with-custom-header.html</link>
		<comments>http://www.developers-life.com/nstableview-with-custom-header.html#comments</comments>
		<pubDate>Sun, 22 Jan 2012 12:04:16 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[NSCell]]></category>
		<category><![CDATA[NSTableHeaderCell]]></category>
		<category><![CDATA[NSTableView]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1378</guid>
		<description><![CDATA[Default header looks like this First we want change height of header: 12NSTableHeaderView *tableHeaderView = &#91;&#91;NSTableHeaderView alloc&#93; initWithFrame:NSMakeRect&#40;0, 0, 120, 60&#41;&#93;; &#160; &#160; &#91;_tableView setHeaderView:tableHeaderView&#93;; Next step we want change NSTableHeaderCell, can make category for this class or make subclass. So, I wrote subclass. Empty category Rewrite method for change style 123456789101112131415161718192021@implementation NSTableHeaderCell &#40;VBNSTableHeaderCell&#41; - [...]]]></description>
			<content:encoded><![CDATA[<p>Default header looks like this<br />
<a href="http://www.developers-life.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-22-at-1.25.57-PM.png"><img src="http://www.developers-life.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-22-at-1.25.57-PM-300x227.png" alt="" title="Default header NSTableView" width="300" height="227" class="alignnone size-medium wp-image-1379" /></a></p>
<p>First we want change height of header:</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableHeaderView_Class/"><span style="color: #400080;">NSTableHeaderView</span></a> <span style="color: #002200;">*</span>tableHeaderView <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableHeaderView_Class/"><span style="color: #400080;">NSTableHeaderView</span></a> alloc<span style="color: #002200;">&#93;</span> initWithFrame<span style="color: #002200;">:</span>NSMakeRect<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">120</span>, <span style="color: #2400d9;">60</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>_tableView setHeaderView<span style="color: #002200;">:</span>tableHeaderView<span style="color: #002200;">&#93;</span>;</div></td></tr></tbody></table></div>
<p>Next step we want change NSTableHeaderCell, can make category for this class or make subclass. So, I wrote subclass.</p>
<p>Empty category<br />
<a href="http://www.developers-life.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-22-at-1.40.27-PM.png"><img src="http://www.developers-life.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-22-at-1.40.27-PM-273x300.png" alt="" title="NSTableView with custom header" width="273" height="300" class="alignnone size-medium wp-image-1381" /></a><br />
<span id="more-1378"></span><br />
Rewrite method for change style</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #a61390;">@implementation</span> <a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableHeaderCell_Class/"><span style="color: #400080;">NSTableHeaderCell</span></a> <span style="color: #002200;">&#40;</span>VBNSTableHeaderCell<span style="color: #002200;">&#41;</span><br />
<br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>drawWithFrame<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">NSRect</span><span style="color: #002200;">&#41;</span>cellFrame inView<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/"><span style="color: #400080;">NSView</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>controlView <span style="color: #002200;">&#123;</span><br />
<br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSMutableParagraphStyle_Class/"><span style="color: #400080;">NSMutableParagraphStyle</span></a> <span style="color: #002200;">*</span> aParagraphStyle <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSMutableParagraphStyle_Class/"><span style="color: #400080;">NSMutableParagraphStyle</span></a> alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>aParagraphStyle setLineBreakMode<span style="color: #002200;">:</span>NSLineBreakByWordWrapping<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>aParagraphStyle setAlignment<span style="color: #002200;">:</span>NSCenterTextAlignment<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/"><span style="color: #400080;">NSMutableDictionary</span></a> <span style="color: #002200;">*</span>attrs <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/"><span style="color: #400080;">NSMutableDictionary</span></a> dictionaryWithDictionary<span style="color: #002200;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self attributedStringValue<span style="color: #002200;">&#93;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;attributesAtIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;effectiveRange<span style="color: #002200;">:</span><span style="color: #a61390;">NULL</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mutableCopy<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>attrs setObject<span style="color: #002200;">:</span>aParagraphStyle forKey<span style="color: #002200;">:</span>NSParagraphStyleAttributeName<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSGradient_Class/"><span style="color: #400080;">NSGradient</span></a> <span style="color: #002200;">*</span>grayGradient <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSGradient_Class/"><span style="color: #400080;">NSGradient</span></a> alloc<span style="color: #002200;">&#93;</span> initWithColorsAndLocations<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSColor_Class/"><span style="color: #400080;">NSColor</span></a> colorWithDeviceWhite<span style="color: #002200;">:</span><span style="color: #2400d9;">0.95</span> alpha<span style="color: #002200;">:</span><span style="color: #2400d9;">1</span><span style="color: #002200;">&#93;</span>, <span style="color: #2400d9;">0.1</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSColor_Class/"><span style="color: #400080;">NSColor</span></a> colorWithDeviceWhite<span style="color: #002200;">:</span><span style="color: #2400d9;">0.5</span> alpha<span style="color: #002200;">:</span><span style="color: #2400d9;">1</span><span style="color: #002200;">&#93;</span>, <span style="color: #2400d9;">0.9</span>, <span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>grayGradient drawInRect<span style="color: #002200;">:</span>cellFrame angle<span style="color: #002200;">:</span><span style="color: #2400d9;">90</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self stringValue<span style="color: #002200;">&#93;</span> drawInRect<span style="color: #002200;">:</span>cellFrame withAttributes<span style="color: #002200;">:</span>attrs<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span><br />
<span style="color: #a61390;">@end</span></div></td></tr></tbody></table></div>
<p><a href="http://www.developers-life.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-22-at-2.00.52-PM.png"><img src="http://www.developers-life.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-22-at-2.00.52-PM-300x196.png" alt="" title="NSTableView with custom header, result" width="300" height="196" class="alignnone size-medium wp-image-1383" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/nstableview-with-custom-header.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DDProgressView &#8211; Custom Progress View</title>
		<link>http://www.developers-life.com/ddprogressview-custom-progress-view.html</link>
		<comments>http://www.developers-life.com/ddprogressview-custom-progress-view.html#comments</comments>
		<pubDate>Sat, 05 Nov 2011 15:47:23 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[others]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1310</guid>
		<description><![CDATA[DDProgressView is a custom progress view à la Twitter for iPhone. DDProgressView works on both iOS and Mac OS. You must also compile the AppKitCompatibility.m file when targeting Mac OS. Thanks, Damien DeVille!]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>DDProgressView</strong> is a custom progress view à la Twitter for iPhone.</p>
<p>DDProgressView works on both iOS and Mac OS. You must also compile the AppKitCompatibility.m file when targeting Mac OS.</p>
<p><img class="alignnone" title="DDProgressView" src="https://github.com/ddeville/DDProgressView/raw/master/Screenshot2.png" alt="" width="303" height="154" /></p>
<p><img class="alignnone" src="https://github.com/0xced/DDProgressView/raw/master/Screenshot.png" alt="" width="320" height="65" /></p>
<p><a href="https://github.com/ddeville/DDProgressView"><img class="alignnone size-full wp-image-1257" title="github-logo-80px" src="http://www.developers-life.com/wp-content/uploads/2011/08/github-logo-80px.png" alt="" width="130" height="80" /></a></p></blockquote>
<p>Thanks, <noindex><a href="http://www.ddeville.me/" target="_blank">Damien DeVille</a></noindex>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/ddprogressview-custom-progress-view.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Custom UITextView with syntax highlighting</title>
		<link>http://www.developers-life.com/my-custom-uitextview.html</link>
		<comments>http://www.developers-life.com/my-custom-uitextview.html#comments</comments>
		<pubDate>Sat, 05 Nov 2011 00:51:21 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[others]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[UIFont]]></category>
		<category><![CDATA[UIKit]]></category>
		<category><![CDATA[UITextView]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1306</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://goo.gl/nqOjM"><img class="alignnone size-full wp-image-1307" title="custom UITextView with Highlighting syntax " src="http://www.developers-life.com/wp-content/uploads/2011/11/photo.png" alt="" width="614" height="819" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/my-custom-uitextview.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tweeting &#8211; example of Apple</title>
		<link>http://www.developers-life.com/tweeting-example-of-apple.html</link>
		<comments>http://www.developers-life.com/tweeting-example-of-apple.html#comments</comments>
		<pubDate>Wed, 05 Oct 2011 11:51:43 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Example]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[Sample]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[UIKit]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1289</guid>
		<description><![CDATA[Tweeting]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="timeline" src="http://gyazo.com/db662f5eefda0745e7ee77bdaed9c5e0.png" alt="" width="238" height="446" /></p>
<p><img class="alignnone" title="simple twet" src="http://gyazo.com/440631f54c9cfec93eae9d2bd3dd216b.png" alt="" width="247" height="48" /></p>
<p><img class="alignnone" title="easy tweet" src="http://gyazo.com/9ff6e31593588cd1c351fbac9b05c25f.png" alt="" width="246" height="369" /></p>
<p><a href="http://www.developers-life.com/wp-content/uploads/2011/10/Tweeting.zip">Tweeting</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/tweeting-example-of-apple.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Get Geo tags from image</title>
		<link>http://www.developers-life.com/get-geo-tags-from-image.html</link>
		<comments>http://www.developers-life.com/get-geo-tags-from-image.html#comments</comments>
		<pubDate>Wed, 17 Aug 2011 22:22:44 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Geo]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Map]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Position]]></category>
		<category><![CDATA[Tag]]></category>
		<category><![CDATA[Ukraine]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1274</guid>
		<description><![CDATA[Little application for getting geo location from photo Download Application]]></description>
			<content:encoded><![CDATA[<p>Little application for getting geo location from photo</p>
<p><a href="http://www.developers-life.com/wp-content/uploads/2011/08/Screen-Shot-2011-08-18-at-1.04.33-AM.png"><img class="alignnone size-full wp-image-1277" title="Screen Shot 2011-08-18 at 1.04.33 AM" src="http://www.developers-life.com/wp-content/uploads/2011/08/Screen-Shot-2011-08-18-at-1.04.33-AM.png" alt="" width="247" height="331" /></a></p>
<p><span id="more-1274"></span><br />
<strong><a href="http://goo.gl/ewF3q" target="_blank"><span style="color: #ff0000;">Download Application</span></a></strong></p>
<p><a href="http://www.developers-life.com/wp-content/uploads/2011/08/Screen-Shot-2011-08-18-at-1.04.27-AM.png"><img class="alignnone size-full wp-image-1276" title="Screen Shot 2011-08-18 at 1.04.27 AM" src="http://www.developers-life.com/wp-content/uploads/2011/08/Screen-Shot-2011-08-18-at-1.04.27-AM.png" alt="" width="383" height="324" /></a></p>
<p><a href="http://www.developers-life.com/wp-content/uploads/2011/08/Screen-Shot-2011-08-18-at-1.04.19-AM.png"><img class="alignnone size-full wp-image-1275" title="Screen Shot 2011-08-18 at 1.04.19 AM" src="http://www.developers-life.com/wp-content/uploads/2011/08/Screen-Shot-2011-08-18-at-1.04.19-AM.png" alt="" width="357" height="248" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/get-geo-tags-from-image.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding SVN revision to Xcode project</title>
		<link>http://www.developers-life.com/adding-svn-revision-to-xcode-project.html</link>
		<comments>http://www.developers-life.com/adding-svn-revision-to-xcode-project.html#comments</comments>
		<pubDate>Wed, 23 Feb 2011 12:43:01 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[RegExp]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Xcode]]></category>
		<category><![CDATA[Кодинг]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1193</guid>
		<description><![CDATA[Просмотр ревизии в самом приложении предотвращает путаницу и всякие проблемы с отслеживанием текущей версии. Чтоб отслеживать версию репозитория нам нужно добавить слдеющий код bash скрипта. 12345678910REVISION=`svnversion -nc &#124; /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'` APPVERSION=`/usr/libexec/PlistBuddy -c &#34;Print CFBundleVersion&#34; &#34;${TARGET_BUILD_DIR}&#34;/${INFOPLIST_PATH}` xported=&#34;xported&#34; if &#91; $APPVERSION != $xported &#93;; then &#160; &#160; &#160;/usr/libexec/PlistBuddy -c &#34;Delete :CFBundleDisplayVersion&#34; &#34;${TARGET_BUILD_DIR}&#34;/${INFOPLIST_PATH} &#160; &#160; &#160;/usr/libexec/PlistBuddy -c [...]]]></description>
			<content:encoded><![CDATA[<p>Просмотр ревизии в самом приложении предотвращает путаницу и всякие проблемы с отслеживанием текущей версии.</p>
<p>Чтоб отслеживать версию репозитория нам нужно добавить слдеющий код bash скрипта.</p>
<div class="codecolorer-container bash geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">REVISION</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">svnversion</span> <span style="color: #660033;">-nc</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/^[^:]*://;s/[A-Za-z]//'</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #007800;">APPVERSION</span>=<span style="color: #000000; font-weight: bold;">`/</span>usr<span style="color: #000000; font-weight: bold;">/</span>libexec<span style="color: #000000; font-weight: bold;">/</span>PlistBuddy <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;Print CFBundleVersion&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${TARGET_BUILD_DIR}</span>&quot;</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${INFOPLIST_PATH}</span><span style="color: #000000; font-weight: bold;">`</span><br />
<br />
<span style="color: #007800;">xported</span>=<span style="color: #ff0000;">&quot;xported&quot;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$APPVERSION</span> <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #007800;">$xported</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>libexec<span style="color: #000000; font-weight: bold;">/</span>PlistBuddy <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;Delete :CFBundleDisplayVersion&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${TARGET_BUILD_DIR}</span>&quot;</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${INFOPLIST_PATH}</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>libexec<span style="color: #000000; font-weight: bold;">/</span>PlistBuddy <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;Add :CFBundleDisplayVersion string&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${TARGET_BUILD_DIR}</span>&quot;</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${INFOPLIST_PATH}</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>libexec<span style="color: #000000; font-weight: bold;">/</span>PlistBuddy <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;Set :CFBundleDisplayVersion <span style="color: #007800;">$APPVERSION</span>.<span style="color: #007800;">$REVISION</span>&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${TARGET_BUILD_DIR}</span>&quot;</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${INFOPLIST_PATH}</span><br />
<span style="color: #000000; font-weight: bold;">fi</span></div></td></tr></tbody></table></div>
<p>Чтоб добавить скрипт, необходимо выполнить следующие действия:<br />
1. Зажать Ctrl+клик на фаил проекта в дереве проекта<br />
2. Add->New Build Phase -> New Run Script Build Phase<br />
3. Откроется окно в которое нужно вставить скрипт.</p>
<p><span id="more-1193"></span></p>
<p>В самом проекте, пример на сплеш скрине, создаем лейбл и читаем версию программы к примеру как-то так.</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>version <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Version &quot;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/"><span style="color: #400080;">NSBundle</span></a> mainBundle<span style="color: #002200;">&#93;</span> objectForInfoDictionaryKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;CFBundleDisplayVersion&quot;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">!=</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; version <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>version stringByAppendingString<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/"><span style="color: #400080;">NSBundle</span></a> mainBundle<span style="color: #002200;">&#93;</span> objectForInfoDictionaryKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;CFBundleDisplayVersion&quot;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; version <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;&quot;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p><img src="http://gyazo.com/150e15a5c21dbae21bcb6d5026220da2.png" alt="Adding SVN revision to Xcode project" /></p>
<p>Существует и второй вариант, более простой. (На самом деле можно придумать еще много разных способов.) Добавляем следующий bash скрипт в проект и добавляем фаил revision.h.</p>
<div class="codecolorer-container bash geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">REV</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">svnversion</span> -n<span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;#define kRevisionNumber @<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #007800;">$REV</span><span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #800000;">${PROJECT_DIR}</span><span style="color: #000000; font-weight: bold;">/</span>revision.h</div></td></tr></tbody></table></div>
<p>Желательно фаил вставить в один какой-то дальний хидер, чтоб при компилировании не пересобирался весь проект. </p>
<p>Для этого варианта можно написать что-то типа этого:</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>version <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Version &quot;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/"><span style="color: #400080;">NSBundle</span></a> mainBundle<span style="color: #002200;">&#93;</span> objectForInfoDictionaryKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;CFBundleVersion&quot;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">!=</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; version <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>version stringByAppendingString<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/"><span style="color: #400080;">NSBundle</span></a> mainBundle<span style="color: #002200;">&#93;</span> objectForInfoDictionaryKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;CFBundleVersion&quot;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; version <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>version stringByAppendingString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;.&quot;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; version <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>version stringByAppendingString<span style="color: #002200;">:</span>kRevisionNumber<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; version <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;&quot;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/adding-svn-revision-to-xcode-project.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Keychain</title>
		<link>http://www.developers-life.com/keychain.html</link>
		<comments>http://www.developers-life.com/keychain.html#comments</comments>
		<pubDate>Fri, 28 Jan 2011 13:32:41 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[Keychain]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[Кодинг]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1188</guid>
		<description><![CDATA[Это только часть статьи, скопировал с habrahabr.ru. Добавил для себя, но может кому-то пригодится тоже. Спасибо автору youROCK. Функции для работы с Keychain достаточно низкоуровневые (в отличие от большинства фреймворков, которые работают с пользовательским интерфейсом), и используют API на языке C. В документации от Apple есть очень объемное руководство по всем вызовам, которые поддерживаются подсистемой [...]]]></description>
			<content:encoded><![CDATA[<p>Это только часть статьи, скопировал с habrahabr.ru. Добавил для себя, но может кому-то пригодится тоже. Спасибо автору youROCK.</p>
<p><a href="http://gyazo.com/5fa5c7952c1956c38f62a18964c30388.png"><img class="alignnone" src="http://gyazo.com/5fa5c7952c1956c38f62a18964c30388.png" alt="" width="368" height="256" /></a></p>
<p>Функции для работы с Keychain достаточно низкоуровневые (в отличие от большинства фреймворков, которые работают с пользовательским интерфейсом), и используют API на языке C. В документации от Apple есть очень объемное руководство по всем вызовам, которые поддерживаются подсистемой Keychain Services, но я бы хотел показать, насколько просто можно делать базовые вещи.</p>
<p>При работе с вызовами на языке C, Apple в основном использует CoreFoundation. CoreFoundation использует и поддерживает практически те же самые типы данных, которые используются в Objective C с фреймворком Cocoa, и даже поддерживает прозрачное приведение типов CoreFoundation <-> Cocoa. Все вызовы CoreFoundation имеют префикс CF (ср. с NS), а имена типов получаются с помощью замены NS на CF и звездочки [*] на суффикс Ref (reference, ссылка) в конец (к примеру, NSString* <-> CFStringRef, NSArray* <-> CFArrayRef). Для работы с памятью используются CFRelease(CFTypeRef) / CFRetain(CFTypeRef), о назначении и способе использования которых можете догадаться сами.<br />
<span id="more-1188"></span><br />
Итак, чтобы начать работу с Keychain, нужно добавить пару заголовков и подключить фреймворк Security.framework:</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #6e371a;">#import &lt;CoreFoundation/CoreFoundation.h&gt;</span><br />
<span style="color: #6e371a;">#import &lt;Security/Security.h&gt;</span></div></td></tr></tbody></table></div>
<p>Чтобы добавить интернет-пароль для вашего приложения в связку ключей по умолчанию, используйте вызов SecKeychainAddInternetPassword. У него очень много аргументов, большАя из которых не является обязательной. Пример использования находится ниже:</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #a61390;">const</span> <span style="color: #a61390;">char</span> <span style="color: #002200;">*</span>serverName <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">&quot;habrahabr.ru&quot;</span>;<br />
<span style="color: #a61390;">int</span> serverNameLength <span style="color: #002200;">=</span> <a href="http://www.opengroup.org/onlinepubs/009695399/functions/strlen.html"><span style="color: #a61390;">strlen</span></a><span style="color: #002200;">&#40;</span>serverName<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #a61390;">const</span> <span style="color: #a61390;">char</span> <span style="color: #002200;">*</span>accountName <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">&quot;youROCK&quot;</span>;<br />
<span style="color: #a61390;">int</span> accountNameLength <span style="color: #002200;">=</span> <a href="http://www.opengroup.org/onlinepubs/009695399/functions/strlen.html"><span style="color: #a61390;">strlen</span></a><span style="color: #002200;">&#40;</span>accountName<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #a61390;">char</span> <span style="color: #002200;">*</span>path <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">&quot;/&quot;</span>;<br />
<span style="color: #a61390;">int</span> pathLength <span style="color: #002200;">=</span> <a href="http://www.opengroup.org/onlinepubs/009695399/functions/strlen.html"><span style="color: #a61390;">strlen</span></a><span style="color: #002200;">&#40;</span>path<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #a61390;">int</span> port <span style="color: #002200;">=</span> <span style="color: #2400d9;">22</span>;<br />
<br />
<span style="color: #a61390;">const</span> <span style="color: #a61390;">char</span> <span style="color: #002200;">*</span>passwordData <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">&quot;myExtremelySecretPassword&quot;</span>;<br />
<span style="color: #a61390;">int</span> passwordLength <span style="color: #002200;">=</span> <a href="http://www.opengroup.org/onlinepubs/009695399/functions/strlen.html"><span style="color: #a61390;">strlen</span></a><span style="color: #002200;">&#40;</span>passwordData<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">/* конечно, протокол может быть другим (не SSH :)), см. описании этой функции в руководстве, в нем можно найти ссылку на список всех поддерживаемых протоколов */</span><br />
<br />
SecKeychainAddInternetPassword<span style="color: #002200;">&#40;</span><span style="color: #a61390;">NULL</span>, serverNameLength, serverName, <span style="color: #2400d9;">0</span>, <span style="color: #a61390;">NULL</span>, accountNameLength, accountName, pathLength, path, port, kSecProtocolTypeSSH, kSecAuthenticationTypeDefault, passwordLength, passwordData, <span style="color: #a61390;">NULL</span><span style="color: #002200;">&#41;</span>;</div></td></tr></tbody></table></div>
<p>Для получения интернет-пароля из Keychain, мы используем вызов SecKeychainFindInternetPassword, пример работы с которым можно увидеть ниже:</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #a61390;">const</span> <span style="color: #a61390;">char</span> <span style="color: #002200;">*</span>serverName <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">&quot;habrahabr.ru&quot;</span>;<br />
<span style="color: #a61390;">int</span> serverNameLength <span style="color: #002200;">=</span> <a href="http://www.opengroup.org/onlinepubs/009695399/functions/strlen.html"><span style="color: #a61390;">strlen</span></a><span style="color: #002200;">&#40;</span>serverName<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #a61390;">const</span> <span style="color: #a61390;">char</span> <span style="color: #002200;">*</span>accountName <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">&quot;youROCK&quot;</span>;<br />
<span style="color: #a61390;">int</span> accountNameLength <span style="color: #002200;">=</span> <a href="http://www.opengroup.org/onlinepubs/009695399/functions/strlen.html"><span style="color: #a61390;">strlen</span></a><span style="color: #002200;">&#40;</span>accountName<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #a61390;">char</span> <span style="color: #002200;">*</span>path <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">&quot;/&quot;</span>;<br />
<span style="color: #a61390;">int</span> pathLength <span style="color: #002200;">=</span> <a href="http://www.opengroup.org/onlinepubs/009695399/functions/strlen.html"><span style="color: #a61390;">strlen</span></a><span style="color: #002200;">&#40;</span>path<span style="color: #002200;">&#41;</span>;<br />
<br />
<span style="color: #a61390;">int</span> port <span style="color: #002200;">=</span> <span style="color: #2400d9;">22</span>;<br />
<br />
UInt32 passwordLength;<br />
<span style="color: #a61390;">void</span> <span style="color: #002200;">*</span>passwordData;<br />
<br />
OSStatus retVal;<br />
<br />
<span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#40;</span>retVal <span style="color: #002200;">=</span> SecKeychainFindInternetPassword<span style="color: #002200;">&#40;</span><span style="color: #a61390;">NULL</span>, serverNameLength, serverName, <span style="color: #2400d9;">0</span>, <span style="color: #a61390;">NULL</span>, accountNameLength, accountName, pathLength, path, port, kSecProtocolTypeSSH, kSecAuthenticationTypeDefault, <span style="color: #002200;">&amp;</span>passwordLength, <span style="color: #002200;">&amp;</span>passwordData, <span style="color: #a61390;">NULL</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">==</span> <span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span><br />
<span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// дело в том, что passwordData является (void *) и НЕ СОДЕРЖИТ нулевого символа в конце,</span><br />
&nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// поэтому мы используем следующий код, чтобы получить пригодную для использования строку с паролем</span><br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>passValue <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> alloc<span style="color: #002200;">&#93;</span> initWithBytes<span style="color: #002200;">:</span>passwordData length<span style="color: #002200;">:</span>passwordLength encoding<span style="color: #002200;">:</span>NSUTF8StringEncoding<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// делаем, что хотим с полученным паролем</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; SecKeychainItemFreeContent<span style="color: #002200;">&#40;</span><span style="color: #a61390;">NULL</span>, passwordData<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>passValue release<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span><span style="color: #a61390;">else</span><br />
<span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// обратите внимание на 2 вещи — во-первых, в названии функции есть copy, а значит нам нужно освободить память самим</span><br />
&nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// вторая вещь — мы используем обычное приведение типов (NSString*), чтобы получить указатель на NSString из CFStringRef</span><br />
<br />
&nbsp; &nbsp; CFStringRef reason <span style="color: #002200;">=</span> SecCopyErrorMessageString<span style="color: #002200;">&#40;</span>retVal, <span style="color: #a61390;">NULL</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Could not fetch info from KeyChain, recieved code %d with following explanation: %@&quot;</span>, retVal, <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> reason<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; CFRelease<span style="color: #002200;">&#40;</span>reason<span style="color: #002200;">&#41;</span>;<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p>Заметьте, что мы нигде не предполагали, на какой ОС этот код будет запущен, так что он будет работать и в Mac OS X и в iPhoneOS (причём в iPhoneOS для доступа к Keychain из приложения не требуется подтверждение пользователя).</p>
<p><noindex><a href="http://habrahabr.ru/blogs/macosxdev/83688/">Resource</a></noindex></p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/keychain.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iPad TV ad</title>
		<link>http://www.developers-life.com/ipad-tv-ad.html</link>
		<comments>http://www.developers-life.com/ipad-tv-ad.html#comments</comments>
		<pubDate>Fri, 21 Jan 2011 08:43:45 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[ad]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1184</guid>
		<description><![CDATA[Новая реклама iPad. В рекламе есть приложение созданное нашей командой :)]]></description>
			<content:encoded><![CDATA[<p><iframe title="YouTube video player" class="youtube-player" type="text/html" width="560" height="345" src="http://www.youtube.com/embed/9PCPpyH4qGQ" frameborder="0" allowFullScreen></iframe></p>
<p>Новая реклама iPad. В рекламе есть приложение созданное нашей командой :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/ipad-tv-ad.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Small feature with UIlabel</title>
		<link>http://www.developers-life.com/small-feature-with-uilabel.html</link>
		<comments>http://www.developers-life.com/small-feature-with-uilabel.html#comments</comments>
		<pubDate>Fri, 14 Jan 2011 22:24:44 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[QuartzCore]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[UIImage]]></category>
		<category><![CDATA[UIKit]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1180</guid>
		<description><![CDATA[Add framework QuartzCore 12345678910111213141516#import &#60;QuartzCore/QuartzCore.h&#62; UILabel *label = &#91;&#91;UILabel alloc&#93; init&#93;; &#160; &#160; &#160;&#91;label setTextColor:&#91;UIColor whiteColor&#93;&#93;; &#160; &#160; &#160;&#91;label setBackgroundColor:&#91;UIColor darkGrayColor&#93;&#93;; &#160; &#160; &#160; &#160; &#160; &#160;&#91;&#91;label layer&#93; setBorderWidth:2&#93;; &#160; &#160; &#160;&#91;&#91;label layer&#93; setCornerRadius:15&#93;; &#160; &#160; &#160;&#91;&#91;label layer&#93; setBorderColor:&#91;UIColor whiteColor&#93;.CGColor&#93;; &#160; &#160; &#160; &#160; &#160; &#160;&#91;label setAlpha:0.8&#93;; &#160; &#160; &#160;&#91;label setTextAlignment:UITextAlignmentCenter&#93;; &#160; &#160; &#160;&#91;label setFrame:CGRectMake&#40;0, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://gyazo.com/f25ca1777ec11e66c2ed2324d8365cdf.png"><img class="alignnone" title="label without QuartzCore" src="http://gyazo.com/f25ca1777ec11e66c2ed2324d8365cdf.png" alt="" width="323" height="182" /></a></p>
<p>Add framework QuartzCore</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #6e371a;">#import &lt;QuartzCore/QuartzCore.h&gt;</span><br />
<br />
UILabel <span style="color: #002200;">*</span>label <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UILabel alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>label setTextColor<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>UIColor whiteColor<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>label setBackgroundColor<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>UIColor darkGrayColor<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>label layer<span style="color: #002200;">&#93;</span> setBorderWidth<span style="color: #002200;">:</span><span style="color: #2400d9;">2</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>label layer<span style="color: #002200;">&#93;</span> setCornerRadius<span style="color: #002200;">:</span><span style="color: #2400d9;">15</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>label layer<span style="color: #002200;">&#93;</span> setBorderColor<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>UIColor whiteColor<span style="color: #002200;">&#93;</span>.CGColor<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>label setAlpha<span style="color: #002200;">:</span><span style="color: #2400d9;">0.8</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>label setTextAlignment<span style="color: #002200;">:</span>UITextAlignmentCenter<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>label setFrame<span style="color: #002200;">:</span>CGRectMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">220</span>, <span style="color: #2400d9;">50</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>label setText<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Loading...&quot;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>label setCenter<span style="color: #002200;">:</span>window.center<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>window addSubview<span style="color: #002200;">:</span>label<span style="color: #002200;">&#93;</span>;</div></td></tr></tbody></table></div>
<p>Result:<br />
<a href="http://gyazo.com/efb2a31120577402cc82f51b9a3f395c.png"><img class="alignnone" title="label with QuartzCore" src="http://gyazo.com/efb2a31120577402cc82f51b9a3f395c.png" alt="" width="323" height="183" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/small-feature-with-uilabel.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrate Apple Game Center to BeerTender iPhone Game</title>
		<link>http://www.developers-life.com/integrate-apple-game-center-to-beertender-iphone-game.html</link>
		<comments>http://www.developers-life.com/integrate-apple-game-center-to-beertender-iphone-game.html#comments</comments>
		<pubDate>Wed, 03 Nov 2010 17:18:49 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[Game Center]]></category>
		<category><![CDATA[GameKit]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Mob1serv]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1124</guid>
		<description><![CDATA[Hello English version comming soon&#8230; Предварительно: В игре BeerTender интегрированны дополнительно онлайн скоры от mob1serv, что позволяет отображать результат игры и на других версия iOS и даже на других платформах что бывает не мало важно! Прочитав документацию от apple принялся за дело. Большинство блоков кода взято из примеров приведенных в документации. Перед началом работы непосредственно [...]]]></description>
			<content:encoded><![CDATA[<p>Hello</p>
<p>English version comming soon&#8230;</p>
<p>Предварительно:<br />
В игре BeerTender интегрированны дополнительно онлайн скоры от <a href="http://www.mob1serv.com/" target="blank">mob1serv</a>, что позволяет отображать результат игры и на других версия  iOS и даже на <strong>других платформах</strong> что бывает не мало важно!</p>
<p>Прочитав документацию от apple принялся за дело. Большинство блоков кода взято из примеров приведенных в документации. </p>
<p>Перед началом работы непосредственно с кодом в среде xCode, необходимо войти в itunesconnect и проделать следующие действия:<br />
 &#8211; включить в приложении  Game Cente;<br />
 &#8211; добавить и настроить Leaderboard;<br />
 &#8211; добавить локализацию;<br />
 &#8211; по желанию добавить Achievements.</p>
<p>Для начала необходимо добавить фреймворк <strong>GameKit</strong> и проверить наличие Game Center на девайсе и версию iOS.</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #6e371a;">#import &lt; GameKit/GameKit.h&gt;</span><br />
<br />
<span style="color: #a61390;">BOOL</span> isGameCenterAvailable<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span><br />
<span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// Check for presence of GKLocalPlayer API.</span><br />
&nbsp; &nbsp; <span style="color: #a61390;">Class</span> gcClass <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>NSClassFromString<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;GKLocalPlayer&quot;</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// The device must be running running iOS 4.1 or later.</span><br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>reqSysVer <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;4.1&quot;</span>;<br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>currSysVer <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UIDevice currentDevice<span style="color: #002200;">&#93;</span> systemVersion<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #a61390;">BOOL</span> osVersionSupported <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>currSysVer compare<span style="color: #002200;">:</span>reqSysVer options<span style="color: #002200;">:</span>NSNumericSearch<span style="color: #002200;">&#93;</span> <span style="color: #002200;">!=</span> NSOrderedAscending<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; <span style="color: #a61390;">return</span> <span style="color: #002200;">&#40;</span>gcClass <span style="color: #002200;">&amp;&amp;</span> osVersionSupported<span style="color: #002200;">&#41;</span>;<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p>Создаем метод в котором запускается прослушивание уведомлений/нотификаций аутерефикации пользователя и метод собственно запускающего аутерификацию.<br />
<span id="more-1124"></span></p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> registerForAuthenticationNotification<br />
<span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> <span style="color: #002200;">*</span>nc <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>nc addObserver<span style="color: #002200;">:</span> self<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;selector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>authenticationChanged<span style="color: #002200;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;name<span style="color: #002200;">:</span>GKPlayerAuthenticationDidChangeNotificationName<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> authenticateLocalPlayer<br />
<span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>GKLocalPlayer localPlayer<span style="color: #002200;">&#93;</span> authenticateWithCompletionHandler<span style="color: #002200;">:^</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSError_Class/"><span style="color: #400080;">NSError</span></a> <span style="color: #002200;">*</span>error<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>error <span style="color: #002200;">==</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #11740a; font-style: italic;">// Insert code here to handle a successful authentication.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #11740a; font-style: italic;">// Your application can process the error parameter to report the error to the player.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#125;</span><span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p>После выполнения метода <strong>authenticateLocalPlayer</strong> на экране будет представлена следующая картина:<br />
<a href="http://gyazo.com/4275c590fd245edd5e79181f4f9e99ea.png" target="blank"><img class="alignnone" title="snadbox game center beertender" src="http://gyazo.com/4275c590fd245edd5e79181f4f9e99ea.png" alt="" width="133" height="250" /></a></p>
<p>Войдя в систему, приложение получет уведомление в метод <strong>authenticationChanged</strong>, которым мы слушаем нотификации с именем GKPlayerAuthenticationDidChangeNotificationName:</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> authenticationChanged<br />
<span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span>GKLocalPlayer localPlayer<span style="color: #002200;">&#93;</span>.isAuthenticated<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;isAuthenticated %@&quot;</span>, <span style="color: #002200;">&#91;</span>GKLocalPlayer localPlayer<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// Insert code here to handle a successful authentication.</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// Insert code here to clean up any outstanding Game Center-related classes.</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#125;</span><br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p>Добавить результат в Leaderboard и просмотреть результаты достаточно просто:</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> reportScore<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span>int64_t<span style="color: #002200;">&#41;</span> score forCategory<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> category<br />
<span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; GKScore <span style="color: #002200;">*</span>scoreReporter <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>GKScore alloc<span style="color: #002200;">&#93;</span> initWithCategory<span style="color: #002200;">:</span>category<span style="color: #002200;">&#93;</span> autorelease<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; scoreReporter.value <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>int64_t<span style="color: #002200;">&#41;</span>score;<br />
<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>scoreReporter reportScoreWithCompletionHandler<span style="color: #002200;">:^</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSError_Class/"><span style="color: #400080;">NSError</span></a> <span style="color: #002200;">*</span>error<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>error <span style="color: #002200;">!=</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// handle the reporting error</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #002200;">&#125;</span><span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #11740a; font-style: italic;">// get scores </span><br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> reloadHighScoresForCategory<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> category<br />
<span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;GKLeaderboard<span style="color: #002200;">*</span> leaderBoard<span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>GKLeaderboard alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span> autorelease<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;leaderBoard.category<span style="color: #002200;">=</span> category;<br />
&nbsp; &nbsp; &nbsp;leaderBoard.timeScope<span style="color: #002200;">=</span> GKLeaderboardTimeScopeAllTime;<br />
&nbsp; &nbsp; &nbsp;leaderBoard.range<span style="color: #002200;">=</span> NSMakeRange<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">1</span>, <span style="color: #2400d9;">1</span><span style="color: #002200;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>leaderBoard loadScoresWithCompletionHandler<span style="color: #002200;">:</span> &nbsp;<span style="color: #002200;">^</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span style="color: #400080;">NSArray</span></a> <span style="color: #002200;">*</span>scoress, <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSError_Class/"><span style="color: #400080;">NSError</span></a> <span style="color: #002200;">*</span>error<span style="color: #002200;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot; scores %@&quot;</span>,scoress<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#125;</span><span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p>category &#8211; имя Leaderboard;<br />
score &#8211; результат игры.</p>
<p>Выполнив метод <strong>reloadHighScoresForCategory</strong> можно получить результаты игроков для указанного Leaderboard.</p>
<p>Просмотреть результаты игры можно приложив минимум усилий с помощью существующего стандартного контроллера GKLeaderboardViewController и с дизайном Game Center :)</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> showLeaderboard<br />
<span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; GKLeaderboardViewController <span style="color: #002200;">*</span>leaderboardController <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>GKLeaderboardViewController alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>leaderboardController <span style="color: #002200;">!=</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; leaderboardController.leaderboardDelegate <span style="color: #002200;">=</span> self;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span>navController presentModalViewController<span style="color: #002200;">:</span> leaderboardController animated<span style="color: #002200;">:</span> <span style="color: #a61390;">YES</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>leaderboardViewControllerDidFinish<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>GKLeaderboardViewController <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>viewController<br />
<span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>navController dismissModalViewControllerAnimated<span style="color: #002200;">:</span><span style="color: #a61390;">YES</span><span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p><a href="http://gyazo.com/ecbc5c66058168f7f9274c5d161e9f78.png"><img class="alignnone" title="snadbox game center beertender" src="http://gyazo.com/ecbc5c66058168f7f9274c5d161e9f78.png" alt="" width="133" height="250" /></a></p>
<p>И не забудьте, в вашем таргете, на закладке General, в списке библеотек, указать Weak напротив GameKit.framework! Вот такая вот фигня :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/integrate-apple-game-center-to-beertender-iphone-game.html/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

