<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><description>The blog of a teenage programmer.</description><title>iKy1e | iOS Developer</title><generator>Tumblr (3.0; @iky1e)</generator><link>https://iky1e.tumblr.com/</link><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:subtitle>The blog of a teenage programmer.</itunes:subtitle><item><title>Jared Sinclair: Untouchable</title><description>&lt;a href="http://blog.jaredsinclair.com/post/64880801326/untouchable"&gt;Jared Sinclair: Untouchable&lt;/a&gt;: &lt;p&gt;&lt;a class="tumblr_blog" href="http://blog.jaredsinclair.com/post/64880801326/untouchable" target="_blank"&gt;jaredsinclair&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I dislike iOS 7 so strongly that I feel inclined to begin this post with a disclaimer about how much I admire Apple. Apple is my hero. They’ve always inspired me to be better at what I do, even when I was an ICU nurse. But they are not perfect. I can and should criticize their worst work when I…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This describes quite nicely some of the issues I have with iOS 7’s design principles.&lt;/p&gt;</description><link>https://iky1e.tumblr.com/post/65495636611</link><guid>https://iky1e.tumblr.com/post/65495636611</guid><pubDate>Wed, 30 Oct 2013 03:37:19 +0000</pubDate><category>design</category><category>ios7</category><category>ios</category></item><item><title>When the live demo works during a talk</title><description>&lt;p&gt;&lt;a class="tumblr_blog" href="http://securityreactions.tumblr.com/post/55262226152/when-the-live-demo-works-during-a-talk" target="_blank"&gt;securityreactions&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="image" height="250" src="http://i.imgur.com/DHAyoFc.gif" width="598"/&gt;&lt;/p&gt;
&lt;p&gt;by &lt;a href="https://twitter.com/f1nux" target="_blank"&gt;@f1nux&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description><link>https://iky1e.tumblr.com/post/56006510917</link><guid>https://iky1e.tumblr.com/post/56006510917</guid><pubDate>Sun, 21 Jul 2013 02:41:23 +0100</pubDate></item><item><title>How to put UISlider's in UIScrollView's</title><description>&lt;p&gt;It&amp;rsquo;s a fairly simple request you&amp;rsquo;d imagine. Simply put a slider inside some content which scrolls.&lt;/p&gt;
&lt;p&gt;As this is on iOS that content is obviously inside a UIScrollView.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The main problem with the above is that they don&amp;rsquo;t like each other. If you place a standard UISlider inside a normal UIScrollView the scroll view delays the touches for a fraction of a second to see if you are scrolling. Here is the big problem, you swipe sideways to scroll and you, want to, swipe sideways on the sliders thumb to quickly change it&amp;rsquo;s value.&lt;/p&gt;
&lt;p&gt;As a result you have to tap, pause and then drag the slider in order to use it. Manageable but hardly smooth or ideal to use.&lt;/p&gt;
&lt;p&gt;Of course there is a very simple way to avoid this.&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;scrollView.delaysContentTouches = NO;
&lt;/pre&gt;
&lt;p&gt;Simple? Well, at least for me on iOS 5, a little too simple. This caused almost all objects to prevent my scrollView from scrolling, buttons, sliders, even an image view seemed to block it. So we filter for the slider?&lt;/p&gt;
&lt;p&gt;If we look at the &lt;a href="http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html" target="_blank"&gt;UIScrollView documentation&lt;/a&gt; we see a few little things that allow us to control the delays and cancelling touches. Creating a custom subclass gives us a little more power, but still not enough.&lt;/p&gt;
&lt;p&gt;What do we do with our new subclass then? Well, we need to control when to allow touches to behave normally and when we should scroll.&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;@interface KHCustomScrollView : UIScrollView
@property (nonatomic, assign) BOOL ignoreSliders;
@end


@implementation KHCustomScrollView
@synthesize ignoreSliders = _ignoreSliders;

-(BOOL)touchesShouldCancelInContentView:(UIView *)view{
    if (self.ignoreSliders) {
		if ([view isKindOfClass:[UISlider class]]) {
			return NO;
		}
		else {
			return YES;
		}
	}
	
	return [super touchesShouldCancelInContentView:view];
}
@end


// Somewhere else...
scrollView.canCancelContentTouches = YES;
scrollView.delaysContentTouches = NO;
scrollView.ignoreSliders = YES;
&lt;/pre&gt;
&lt;p&gt;What we do here is tell it we want the scrollView to let all touches to start normally, but we want it to be able to cancel them if it wants to scroll. Instead of the normal behavour of delaying them until its decided whether or not to scroll it now cancels touches when it wants to. Then we have our scrollView say it can cancel touches and start scrolling for everything, other than sliders.&lt;/p&gt;
&lt;p&gt;Now can you guess the problem here?&lt;/p&gt;
&lt;p&gt;If we touch anywhere on the slider it will not scroll, however the slider only responds over the thumb image that indicates the value selected. But we can fix this too, however we have to work with the sliders themselves :(, although luckily we don&amp;rsquo;t &lt;em&gt;need&lt;/em&gt; to subclass them.&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;// Somewhere...

-(void)monitorSlider:(UISlider*)slider{
    [slider addTarget:self action:@selector(willSlide:) forControlEvents:UIControlEventTouchDown];
	[slider addTarget:self action:@selector(didSlide:) forControlEvents:UIControlEventTouchUpInside];
	[slider addTarget:self action:@selector(didSlide:) forControlEvents:UIControlEventTouchUpOutside];
	[slider addTarget:self action:@selector(didSlide:) forControlEvents:UIControlEventTouchCancel];
}
-(void)willSlide:(id)sender{
	scrollView.scrollEnabled = NO;
}
-(void)didSlide:(id)sender{
	scrollView.scrollEnabled = YES;
}


// Someone else...
[self monitorSlider:slider];



// In our scrollView subclass we made earilier
if ([view isKindOfClass:[UISlider class]] &amp;amp;&amp;amp; !self.scrollEnabled) {
    return NO;
}

&lt;/pre&gt;
&lt;p&gt;By the way that `scrollView.scrollEnabled` is only state storage. It could have been written scrollView.tag = 42, if (scrollView.tag == 42) &amp;hellip;&lt;/p&gt;
&lt;p&gt;So now we allow touches to reach things inside the scrollView, we know when the slider was touched on its thumb image, and we can control which touches are canceled and which are allowed to prevent us from scrolling.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;p&gt;And finially, &lt;a href="https://github.com/freerunnering/UIScrollViews-and-UISliders" target="_blank"&gt;here&amp;rsquo;s an example project on Github&lt;/a&gt; to show you an example for each stage of this article. Hope someone finds this useful as I couldn&amp;rsquo;t find anything on the subject.&lt;/p&gt;</description><link>https://iky1e.tumblr.com/post/55833422069</link><guid>https://iky1e.tumblr.com/post/55833422069</guid><pubDate>Fri, 19 Jul 2013 03:24:00 +0100</pubDate><category>ObjC</category><category>UIScrollView</category><category>iOS</category><category>Tutorial</category></item><item><title>The state of toggles on iOS</title><description>&lt;p&gt;Toggling things like wifi or bluetooth on and off quickly and conveniently is a feature that has been added to lots of apps and tweaks since very early on since iOS was first jailbroken.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In the past&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This trend started off with things like Bossprefs which managed various settings on the device but was a stand alone app and didn&amp;rsquo;t have much flexibility:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Bossprefs screenshot" height="360" src="http://i46.tinypic.com/s3zzok.jpg" width="240"/&gt;&lt;/p&gt;
&lt;p&gt;Then you have SBSettings. SBSettings got lots of attention and quickly became one of the default things people installed on their jailbroken devices once they finished jailbreaking. And of cause it has it&amp;rsquo;s own API so other developers could have it control their things, such as SSH or UserAgentFaker.&lt;/p&gt;
&lt;p&gt;&lt;img alt="SBSettings screenshot" height="200" src="http://www1.picturepush.com/photo/a/11854949/220/11854949.jpg" width="133"/&gt;&lt;/p&gt;
&lt;p&gt;The problem with SBSettings API is it was designed quite early in iOS&amp;rsquo;s history and so isn&amp;rsquo;t designed very natively and could be much better (more on that later). It has it&amp;rsquo;s advantages though, isn&amp;rsquo;t quite simple. Each toggle has a dylib with a few simple C functions. SBSettings opens them and calls the functions to make things happen or check it&amp;rsquo;s state. It also includes some more advanced options like presenting extra windows to show things like a list of processes running or a slider for the brightness. As a sign of it&amp;rsquo;s age it must respring to reload it&amp;rsquo;s settings. When it was designed that was the norm and having a tweak which could adapt to settings on the fly without resrpinging would be a killer feature.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;iOS and ObjectiveC has moved on quite a bit now and is much more advanced and more refined then it was. SBSettings was good but after iOS 4 I stopped using it. This was mostly down to notification centre taking over as the &amp;ldquo;above&amp;rdquo; window on my device. Having 2 windows that drop down form the top of the screen as a control centre for my device each activated under different circumstances just feels wrong, so I don&amp;rsquo;t us it anymore (and it although quite a few people still use it, it isn&amp;rsquo;t as popular as it once was).&lt;/p&gt;
&lt;p&gt;NCSettings has mostly replaced it for me. SBSettings has a mode to run inside notification centre but it just doesn&amp;rsquo;t fit well. It has been adapted quite well, but it and it&amp;rsquo;s toggles weren&amp;rsquo;t designed for that purpose. NCSettings by comparison was designed from the start to run in the notification centre and fits in very well with a minimal stripped back design.&lt;/p&gt;
&lt;p&gt;&lt;img alt="NCSettings screenshot" height="192" src="http://i46.tinypic.com/351fvyw.png" width="285"/&gt;&lt;/p&gt;
&lt;p&gt;And now everything offers some basic controls and toggles. Deck is an example of something like NCSettings designed to do just that. However, lots of tweaks now offer some sort of toggles, Auxo for example extends the simple mute/orientation lock toggle in the switcher to a more general control of the devices basic features. The problem with all these things is they are limited to what you can convince the developer to add support for and anything like SSH or your own add-on which is a separate package and my not be installed on everyones devices is going to be a hard sale to get added. In short none of them have an API and there&amp;rsquo;s defiantly not a unified API among them. The closest I&amp;rsquo;ve seen is a tweak using SBSettings API for itself.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Now that I&amp;rsquo;ve briefly outlined how toggles on iOS currently are I&amp;rsquo;m going to outline how I think they should, or rather could, be in another blog post.&lt;/p&gt;</description><link>https://iky1e.tumblr.com/post/39407222474</link><guid>https://iky1e.tumblr.com/post/39407222474</guid><pubDate>Tue, 01 Jan 2013 21:07:00 +0000</pubDate></item><item><title>Stream of Superior Consciousness: The Apple Haters' 7 Stages of Grief</title><description>&lt;a href="http://farley.tumblr.com/post/35132645118/the-apple-haters-7-stages-of-grief"&gt;Stream of Superior Consciousness: The Apple Haters' 7 Stages of Grief&lt;/a&gt;: &lt;p&gt;&lt;a class="tumblr_blog" href="http://farley.tumblr.com/post/35132645118/the-apple-haters-7-stages-of-grief" target="_blank"&gt;farley&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I wish I could take credit for this but I can’t. Got this from an arstechnica.com forum posting from way back in June of 2010.&lt;/p&gt;
&lt;p&gt;The forum poster’s moniker is &lt;strong&gt;The Real Blastdoor&lt;/strong&gt;. Please join me in thanking him for this, because it is absolutely pure gold. Additionally, each and every word is true.&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;The Apple haters’ stages of grief go something like this:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Predict failure of new Apple product&lt;/li&gt;
&lt;li&gt;Attribute early success of new Apple product to rabid fanbois affected by the reality distortion field&lt;/li&gt;
&lt;li&gt;Attribute longer term success of product to stupidity of consumers&lt;/li&gt;
&lt;li&gt;Purchase previously scorned product for stupid relatives so they stop bothering you to help support the open source version of Apple product sold by Super Lucky Technology Extreme Inc. that you convinced them to buy&lt;/li&gt;
&lt;li&gt;Purchase previously scorned product for yourself just to see what all the fuss is about&lt;/li&gt;
&lt;li&gt;Admit that you now own and use the product, but complain about the product’s lack of SD card slot on random Internet forum&lt;/li&gt;
&lt;li&gt;Forget prior criticism of product, claim that it was revolutionary and an example of how Apple used to be really innovative, but has now lost its edge&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Rinse and repeat&lt;br/&gt;&lt;em&gt;Author: The Real Blastdoor on Tue Jun 01, 2010 8:05 am&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So true!&lt;/p&gt;</description><link>https://iky1e.tumblr.com/post/36179564535</link><guid>https://iky1e.tumblr.com/post/36179564535</guid><pubDate>Wed, 21 Nov 2012 01:52:27 +0000</pubDate><category>Apple haters</category></item><item><title>Recreating iOS6's remote views for iOS 5</title><description>&lt;p&gt;&lt;a href="http://olebegemann" target="_blank"&gt;If you haven&amp;rsquo;t already read &lt;/a&gt;&lt;a href="http://twitter.com/olebegemann" target="_blank"&gt;@olebegemann&amp;rsquo;s&lt;/a&gt;&lt;a href="http://olebegemann" target="_blank"&gt; blog post about _UIRemoteView&amp;rsquo;s and remote view controllers new in iOS 6 then please do so now and come back to this after you have finished it.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/" target="_blank"&gt;http://oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I first read &lt;a href="http://oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/" target="_blank"&gt;this post about iOS 6 and _UIRemoteView&amp;rsquo;s&lt;/a&gt; which allowed apple to move things like email into different processes and still display them as if they where in the app there was one point I that caught my attention more then it would most peoples.&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;
&lt;p&gt;&amp;lt;_UIRemoteView: 0x1e05c300; frame = (0 0; 320 480); transform = [0.5, -0, 0, 0.5, -0, 0]; userInteractionEnabled = NO; layer = &amp;lt;&lt;strong&gt;CALayerHost&lt;/strong&gt;: 0x1e05c460&amp;gt;&amp;gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;CALayerHost, the instant I sure that I thought, &amp;ldquo;wow, Apple finally put it to good use&amp;rsquo;. From my experiments with CardSwitcher I have come across CALayerHost&amp;rsquo;s before. They are actually how CardSwitcher&amp;rsquo;s live views work. More then displaying part of an app, however, they also allow interaction through to that app (although that is buggy iOS 5, haven&amp;rsquo;t tested 6 yet). For CardSwitcher to use them as live views into apps it actually has to block interaction, if you remove that you get this &lt;a href="http://www.youtube.com/watch?v=1D1NyXITjI0" target="_blank"&gt;http://www.youtube.com/watch?v=1D1NyXITjI0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;!-- more --&gt;&lt;/p&gt;
&lt;p&gt;An individual CALayerHost will display 1 UIWindow so to display an entire app you need to have multiple CALayerHost objects and keep them in track with the apps windows, if it creates one so do you. This is a lot of, very simple, but, effectively all, boiler plate code. And so, in SpringBoard there is a class called SBAppContextHostView which houses them all as sublayers and lets you just deal with one object. (actually tracking the contexts used to be done by it itself but is now done by a separate SBAppContextHostManager object in iOS 5+). This is used for things such as the zoom effect when you close an app, and the when you open the app switcher and it slides the &amp;quot;app&amp;rdquo; up (in reality the context view is activated and moved instead).&lt;/p&gt;
&lt;p&gt;But, despite the the fact it is only used by SpringBoard it is actually part of QuartzCore, which all apps link against. From my experiments I believe they have changed it's behaviour slightly in iOS 6 (to get this working well) but it should still be possible to replicate on iOS 5.&lt;/p&gt;
&lt;p&gt;iOS 5 does have XPC I believe (it has a private XPCObjects.framework) but I haven&amp;rsquo;t used it before and as I was trying to hack this together quickly didn&amp;rsquo;t use it. Another thing I would do if writing this properly is what apple has done, create a proper UIRemoteViewController to handle it all and create a few protocols and helper objects either side.&lt;/p&gt;
&lt;p&gt;To build my example app I used CPDistributedMessagingCenter to communicate between different processes. The different parts involved in my test setup are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a library which houses my KHRemoteView (so multiple apps potentially link against it); &lt;/li&gt;
&lt;li&gt;the client app, this displays the remote view after 5 seconds (so you see a change);&lt;/li&gt;
&lt;li&gt;the server app, this is what is displayed inside the other app;&lt;/li&gt;
&lt;li&gt;a tweak running inside SpringBoard, to launch the app;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A few more notes on CALayerHost, it doesn&amp;rsquo;t respect&amp;hellip;. most things. If you set it&amp;rsquo;s frame it&amp;rsquo;ll take into account it&amp;rsquo;s position but ignore the set size. It will always display full size. It ignores contentSize and displays 1 pixel per point (massive version of the target app). One of the few things it does respect though is it&amp;rsquo;s transform, so you can use this to scale it done by the devices contentScale.&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;self.layerHost = [[objc_getClass("CALayerHost") alloc] init];
self.layerHost.anchorPoint = CGPointMake(0,0);
self.layerHost.transform = CATransform3DMakeScale(1/[UIScreen mainScreen].scale, 1/[UIScreen mainScreen].scale, 1);
self.layerHost.bounds = self.bounds;
&lt;/pre&gt;
&lt;p&gt;Another annoying thing is that it seems to fight with SpringBoard. All windows have a corresponding SBContext and CALayerHost in SpringBoard. What I think is happening is that when we set the contextId for the layerHost it becomes &lt;em&gt;the&lt;/em&gt; host layer for that context. However the SpringBoard one then takes back control of the context the next render, possibly because SB is the render server (below iOS 6) and it is automatically given priority or it updates each pump of the runloop. Even though it loses the link with the context very quickly it still sends it touch events, you just don&amp;rsquo;t see the results. To get around this I set the contextId to 0 and then instantly back to what it was 60 times a second (the devices screen refresh rate).&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;//... KHRemoteView.m

-(void)updateDisplay{
    if (update) {
        unsigned int contextID = self.layerHost.contextId;
        self.layerHost.contextId = 0;
        self.layerHost.contextId = contextID;
        [self performSelector:@selector(updateDisplay) withObject:nil afterDelay:(1/60)];
    }
}

//...
&lt;/pre&gt;
&lt;p&gt;In my demo server (Service?) app I have it display an MFMailComposeViewController (as a reference back to the original article). A few odd things with this are due to my using only one CALayerHost (I should use 2, or possible 3 for you not to notice anything. 1 for the app, one for the UITextEffectsWindow (keyboard) and another for alerts/action sheets). The copy &amp;amp; paste menu is in a separate UIWindow and so is not shown when you select text, but the text range selection blue bars are. The keyboard, alerts and action sheets and not that but you can still type and interact with them. The layers send touch events through not to the window but to the app itself, so if you can type without looking on iOS you should still be able to write an email with this app.&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;// Send messages to launch the server app and get the servers contextId...
[[objc_getClass("CPDistributedMessagingCenter") centerNamed:@"com.iky1e.remoteView.sb.messaging.center"] sendMessageAndReceiveReplyName:@"kh_launch_remote_app" userInfo:nil];

// Lazy loading the library (makefiles aren't my strong point)...
dlopen("/usr/lib/LibRemoteView.dylib", RTLD_NOW);
&lt;/pre&gt;
&lt;p&gt;The server itself is very basic, it just displays an MFMailComposeViewController. The original one had a UIButton and a view that animated up and down, but I switched to this to show a more interactive example.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a video of the basic demo application. You can see some of the weird effects, typing without a keyboard for example.&lt;/p&gt;
&lt;p&gt;&lt;iframe frameborder="0" height="360" src="https://www.youtube.com/embed/SbyvGurJicA" width="480"&gt;&lt;/iframe&gt;&lt;/p&gt;

&lt;p&gt;Finally here is the code: it includes the tweak running in SpringBoard, the client app, the server app, and the library that the client links against to access the KHRemoteView class. Have a look and tell me what you think, here on &lt;a href="http://news.ycombinator.com/item?id=4624408" target="_blank"&gt;HackerNews&lt;/a&gt; or on &lt;a href="http://twitter.com/freerunnering" title="@freerunnering" target="_blank"&gt;twitter&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/freerunnering/libremoteview" target="_blank"&gt;https://github.com/freerunnering/libremoteview&lt;/a&gt;&lt;/p&gt;</description><link>https://iky1e.tumblr.com/post/33109276151</link><guid>https://iky1e.tumblr.com/post/33109276151</guid><pubDate>Sun, 07 Oct 2012 21:48:00 +0100</pubDate><category>iOS</category><category>Tweak</category><category>ObjC</category><category>MobileSubstrate</category><category>SpringBoard</category><category>UIRemoteView</category></item><item><title>JPL Institutional Coding Standard for the C Programming Language</title><description>&lt;a href="http://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf"&gt;JPL Institutional Coding Standard for the C Programming Language&lt;/a&gt;: &lt;p&gt;&lt;a class="tumblr_blog" href="http://boredzo.tumblr.com/post/28860339641/jpl-c-coding-standard" target="_blank"&gt;boredzo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Not all of this is applicable to Cocoa and Cocoa Touch development (good luck not using the heap), but so much of it is. I recommend reading the whole thing, but here are some highlights translated to Objective-C and its environs:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3&gt;Rule 2 (routine checking)&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;All code shall always be compiled with all compiler warnings enabled at the highest warning level available, with no errors or warnings resulting.&lt;/li&gt;
&lt;li&gt;All code shall further be verified with a JPL approved state-of-the-art static source code analyzer, with no errors or warnings resulting. …&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;… The rule of zero warnings applies even in cases where the compiler or the static analyzer gives an erroneous warning. If the compiler or the static analyzer gets confused, the code causing the confusion should be rewritten so that it becomes more clearly valid. Many developers have been caught in the assumption that a tool warning was false, only to realize much later that the message was in fact valid for less obvious reasons. …&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Raise your hand if you’ve heard the sentence “it’s a false positive, ignore it” before.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3&gt;Rule 7 (thread safety)&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;Task synchronization shall not be performed through the use of task delays.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Specifically the use of task delays has been the cause of race conditions that have jeopardized the safety of spacecraft. The use of a task delay for task synchronization requires a guess of how long certain actions will take. If the guess is wrong, havoc, including deadlock, can be the result.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In Cocoa/Cocoa Touch, this means that you should avoid using &lt;code&gt;performSelector:withObject:afterDelay:&lt;/code&gt; (or &lt;code&gt;sleep&lt;/code&gt;, &lt;code&gt;usleep&lt;/code&gt;, &lt;code&gt;nanosleep&lt;/code&gt;, &lt;code&gt;+[NSThread sleepForTimeInterval:]&lt;/code&gt;, &lt;code&gt;-[NSRunLoop runUntilDate:]&lt;/code&gt;, etc.) to try to “fix” a bug. Occasionally it fixes something. Often it breaks something else. And often it &lt;em&gt;doesn’t&lt;/em&gt; fix the original problem.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For instance, an area of memory above the stack limit allocated to each task should be reserved as a safety margin, and filled with a fixed and uncommon bit-pattern.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On the Mac, you can do this with the &lt;a href="http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/malloc.3.html" target="_blank"&gt;malloc environment variables&lt;/a&gt; and/or &lt;a href="http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/guardmalloc.3.html" target="_blank"&gt;GuardMalloc&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3&gt;Rule 15 (checking parameter values)&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;The validity of function parameters shall be checked at the start of each public function.&lt;/li&gt;
&lt;li&gt;The validity of function parameters to other functions shall be checked by either the function called or by the calling function.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;p&gt;Foundation provides &lt;code&gt;NSParameterAssert&lt;/code&gt; for this purpose. In Objective-C, what this document calls a “public function” will generally be a method you’ve declared in the &lt;code&gt;@interface&lt;/code&gt; in your class’s header file, whereas other functions are methods that you haven’t declared there. In other words, the class should trust itself to give itself good input, but not other classes.&lt;/p&gt;
&lt;p&gt;Test cases are a good way to exercise these assertions: Intentionally send messages to the class, or instances of it, with bad input, knowing that if the assertion fails (an exception is thrown), the test will fail. If that doesn’t happen, it may indicate that the bad input would spread deeper into the class/object in a real run, which could be causing a problem your users are seeing (or will see).&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3&gt;Rule 25&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;Functions should be no longer than 60 lines of text and define no more than 6 parameters.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;p&gt;This is especially true of C functions, since there’s nothing to label the parameters at the call site, but it’s a good rule for Objective-C, as well. If a single message contains more than, let’s say, 4 arguments, I recommend building an object around that message instead. Turn the arguments, particularly any that are optional, into properties.&lt;/p&gt;
&lt;p&gt;Such objects will probably help you clarify other aspects of your design while you’re at it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;How to code to space craft levels of safety.&lt;/p&gt;</description><link>https://iky1e.tumblr.com/post/28936059409</link><guid>https://iky1e.tumblr.com/post/28936059409</guid><pubDate>Tue, 07 Aug 2012 23:24:44 +0100</pubDate></item><item><title>Check</title><description>&lt;p&gt;If you are a heavy email user you will likely have noticed in iOS&amp;rsquo;s default mail app you have to select each and every email separately, so if you want to select lots, say 30 emails, you have to scroll through the list selecting each and every one. Check allows you to just tap and hold on an email and then scroll as far as you like before tapping another. Everything between those 2 emails will be selected (or deselected) automatically.&lt;/p&gt;
&lt;p&gt;The idea was originally &lt;a href="https://twitter.com/joshmtucker" target="_blank"&gt;Joshua Tucker&amp;rsquo;s&lt;/a&gt; and he planned out the details, like the flashing animation to show which is the start point, and then I worked out how to implement them. &lt;/p&gt;

&lt;p&gt;&lt;img src="http://i49.tinypic.com/23l47o.png"/&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.idownloadblog.com/2012/07/09/check/" target="_blank"&gt;http://www.idownloadblog.com/2012/07/09/check/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.addictivetips.com/ios/check-batch-select-multiple-items-in-ios-mail-with-a-single-touch/" target="_blank"&gt;http://www.addictivetips.com/ios/check-batch-select-multiple-items-in-ios-mail-with-a-single-touch/&lt;/a&gt;&lt;/p&gt;</description><link>https://iky1e.tumblr.com/post/27124471796</link><guid>https://iky1e.tumblr.com/post/27124471796</guid><pubDate>Fri, 13 Jul 2012 15:44:57 +0100</pubDate><category>iOS</category><category>Tweak</category><category>Release</category><category>Annoucements</category></item><item><title>MountainCenter</title><description>&lt;p&gt;I recently released a joint project with &lt;a href="https://twitter.com/_Maxner_" rel="nofollow" target="_blank" data-bitly-type="bitly_hover_card"&gt;Jonas Gessner&lt;/a&gt; called MountainCenter, it was inspired by MountainLion&amp;rsquo;s implementation of NotificationCenter which has the notification center appear from under the right hand side of the screen.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://i47.tinypic.com/iy0h3q.png"/&gt;&lt;/p&gt;
&lt;p&gt;It also has a smooth dragging gesture from the edge of the screen to drag it over and reveal the notification center underneath.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.idownloadblog.com/2012/06/23/mountain-center-cydia/" target="_blank"&gt;http://www.idownloadblog.com/2012/06/23/mountain-center-cydia/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://modmyi.com/content/8045-mountaincenter-makes-notification-center-ios-react-like-os-x-mountain-lion.html" target="_blank"&gt;http://modmyi.com/content/8045-mountaincenter-makes-notification-center-ios-react-like-os-x-mountain-lion.html&lt;/a&gt;&lt;/p&gt;</description><link>https://iky1e.tumblr.com/post/27123073620</link><guid>https://iky1e.tumblr.com/post/27123073620</guid><pubDate>Fri, 13 Jul 2012 15:10:00 +0100</pubDate><category>iOS</category><category>Tweak</category><category>Annoucements</category><category>Release</category></item><item><title>danielhooper:

I’ve been working on a way to make text editing...</title><description>&lt;iframe width="400" height="225"  id="youtube_iframe" src="https://www.youtube.com/embed/RGQTaHGQ04Q?feature=oembed&amp;enablejsapi=1&amp;origin=https://safe.txmblr.com&amp;wmode=opaque" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="iPad Keyboard Prototype"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a class="tumblr_blog" href="http://danielhooper.tumblr.com/post/22267651085/ive-been-working-on-a-way-to-make-text-editing-on" target="_blank"&gt;danielhooper&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I’ve been working on a way to make text editing on iPad better. I’ll fill out more of my thoughts on the subject later, but for now you can get the gist from the video! Make sure you follow the directions in the youtube video description if you want these features for yourself.&lt;/p&gt;
&lt;/blockquote&gt;</description><link>https://iky1e.tumblr.com/post/22443087882</link><guid>https://iky1e.tumblr.com/post/22443087882</guid><pubDate>Sat, 05 May 2012 14:15:48 +0100</pubDate></item><item><title>Sliding UITableView Header Views</title><description>&lt;p&gt;&lt;a href="http://blog.chpwn.com/post/6378544658" target="_blank"&gt;chpwn&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The “dickbar” (as &lt;a href="http://daringfireball.net/lined/2011/03/06/dickbar" target="_blank"&gt;Gruber&lt;/a&gt; puts it) may be the big news item lately, from my “Twizzler” to remove it to the &lt;a href="http://dickbar.org/" target="_blank"&gt;various&lt;/a&gt; &lt;a href="http://encodedrecords.com/dickbar/" target="_blank"&gt;websites&lt;/a&gt; springing up about it. But, this post is about something much more mundane and technical in Twitter for iPhone: sliding headers for UITableView.&lt;/p&gt;
&lt;p&gt;When you first open Twitter for iPhone, you get &lt;a href="http://chpwn.com/dropbox/twitter-signup.jpg" target="_blank"&gt;this&lt;/a&gt; screen. Looks like just a standard UITableView and a custom &lt;code&gt;-tableHeaderView&lt;/code&gt; set, yeah? Not quite. There’s actually an interesting effect here: when you scroll, the header actually slides &lt;em&gt;under&lt;/em&gt; the table view. If that didn’t make sense (and it’s not a good explanation, sorry) I’ve uploaded a video that demonstrates the effect:&lt;/p&gt;
&lt;object height="390" width="480"&gt;
&lt;param value="http://www.youtube-nocookie.com/v/oEodNBkJWAY?fs=1&amp;amp;hl=en_US&amp;amp;rel=0&amp;amp;hd=1" name="movie"&gt;&lt;param value="true" name="allowFullScreen"&gt;&lt;param value="always" name="allowscriptaccess"&gt;&lt;embed height="390" width="480" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash" src="http://www.youtube-nocookie.com/v/oEodNBkJWAY?fs=1&amp;amp;hl=en_US&amp;amp;rel=0&amp;amp;hd=1"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;&lt;a href="http://blog.chpwn.com/post/6378544658" target="_blank"&gt;Read More&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Very nice, &lt;/p&gt;</description><link>https://iky1e.tumblr.com/post/20465508273</link><guid>https://iky1e.tumblr.com/post/20465508273</guid><pubDate>Wed, 04 Apr 2012 14:39:27 +0100</pubDate></item><item><title>Current Projects: Understanding iOS' App Rendering</title><description>&lt;div&gt;For the last 2 months almost all my work has been on reversing how iOS displays apps on screen. There are a few ways to get the display information and pass touch events down to the application. Currently I&amp;rsquo;d like to think I understand about 80-90% of how SpringBoard manages and displays apps.&lt;/div&gt;
&lt;div&gt;For instance, when the App Switcher launches it doesn&amp;rsquo;t move the applications window &amp;lsquo;up&amp;rsquo; as it looks like visually but rather displays a view that is rendering the applications SBContext&amp;rsquo;s instead of it. That is then moved up so the application itself is not involved (why if you check the window&amp;rsquo;s frame of an application it doesn&amp;rsquo;t change with the app switcher&amp;rsquo;s opening and closing.&lt;/div&gt;
&lt;p&gt;&lt;iframe frameborder="0" height="360" src="http://www.youtube.com/embed/CcDQVQC9g50" width="480"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;&lt;iframe frameborder="0" height="360" src="http://www.youtube.com/embed/ufcl6GLxF7o" width="480"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe frameborder="0" height="360" src="http://www.youtube.com/embed/d1R8QmmSFVM" width="480"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Once the iPad is jailbroken I&amp;rsquo;ll start writing this up into an actual tweak, mostly for iPhone apps on iPad (but it&amp;rsquo;s big enough for multiple iPad apps on screen too). Also once I&amp;rsquo;m confident I understand iOS&amp;rsquo;s app rendering fully I plan to release my notes on it all.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;CardSwitcher&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;I&amp;rsquo;ve also been rewriting CardSwitcher and to put more thought into the API&amp;rsquo;s design, the first one wasn&amp;rsquo;t designed to do more then the WebOS style interface mode and the UI &amp;amp; data stuff where horrible interlinked.&lt;/p&gt;
&lt;p&gt;My work on understanding how iOS displays things also means I have a new faster, better &amp;amp; just generally much improved way to get screenshots of the apps (unlike multifl0w which uses UIGetScreenImage() this method won&amp;rsquo;t capture the app switcher if it&amp;rsquo;s open, for example). And I can also now have a live view of any currently running apps (open or backgrounded with backgrounder) rather then a static image. Another small improvement is pausing the application when entering CardSwitcher, like the app switcher does. By pausing I don&amp;rsquo;t mean suspending but informing the app that the appswitcher is open and so games should open the pause menu, ext.&lt;/p&gt;
&lt;p&gt;&lt;iframe frameborder="0" height="360" src="http://www.youtube.com/embed/tQQa6XlR4RY" width="480"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;I hope to have these projects finished and released soon(-ish). (though this likely means longer then I think, as is always the case when a developer says they are almost done)&lt;/p&gt;</description><link>https://iky1e.tumblr.com/post/14886675036</link><guid>https://iky1e.tumblr.com/post/14886675036</guid><pubDate>Tue, 27 Dec 2011 23:53:00 +0000</pubDate><category>Annoucements</category><category>SpringBoard</category><category>Tweak</category><category>iOS</category><category>screenshot</category><category>SBDisplay</category></item><item><title>Code Snippet: Launch apps on iOS5</title><description>&lt;p&gt;I&amp;rsquo;ve been working with the SBDisplayStack&amp;rsquo;s lately and trying to control how apps launch and finally got it working, much more simply then a was trying originally.&lt;/p&gt;
&lt;p&gt;The finished code has been put together into an opensource library on GitHub called &lt;a href="https://github.com/freerunnering/LibDisplay" target="_blank"&gt;LibDisplay&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One odd thing that caught me out, for ages, is you have to start launching the next app before getting rid of the current one.&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;/* References:
 * &lt;a href="http://iky1e.tumblr.com/post/13985531616/raw-log-sbdisplay-settings" target="_blank"&gt;http://iky1e.tumblr.com/post/13985531616/raw-log-sbdisplay-settings&lt;/a&gt;
 * &lt;a href="http://iphonedevwiki.net/index.php/SBDisplay" target="_blank"&gt;http://iphonedevwiki.net/index.php/SBDisplay&lt;/a&gt;
 * &lt;a href="http://iphonedevwiki.net/index.php/SBDisplayStack" target="_blank"&gt;http://iphonedevwiki.net/index.php/SBDisplayStack&lt;/a&gt;
 * &lt;a href="http://code.google.com/p/iphone-tweaks/wiki/DevelopmentNotes" target="_blank"&gt;http://code.google.com/p/iphone-tweaks/wiki/DevelopmentNotes&lt;/a&gt;
 */



-(void)activateApplication:(SBApplication *)toApp animated:(BOOL)animated{
    // Get the currently open application.
    SBApplication *fromApp = [self topApplication];

    // Check if it's the same as the currently open application, if it is there's nothing todo.
	if ([[toApp displayIdentifier] isEqualToString:[fromApp displayIdentifier]])
        return;

    // If animated they want the system default (app to app transition, or zoom on homescreen).
    if (animated &amp;amp;&amp;amp; toApp) {
        [(SBUIController*)[objc_getClass("SBUIController") sharedInstance] activateApplicationFromSwitcher:toApp];
        return; // Done, wasn't that easy.
    }

    // Now, if we were asked to, open the other app.
    if (toApp) {
        [toApp clearDisplaySettings];
        [toApp clearActivationSettings];
        [toApp clearDeactivationSettings];

        // 20 = appToApp
        [toApp setActivationSetting:20 flag:YES];

        // Note if it's a large application the user might see a brief flash of the homescreen.
        [[self SBWPreActivateDisplayStack] pushDisplay:toApp];
    }
    

    // If another app is open then close it
    if (fromApp) {
        // Clear any animation settings the app may have
        [fromApp clearDisplaySettings];
        [fromApp clearActivationSettings];
        [fromApp clearDeactivationSettings];

        // Now pop is from the Active displayStack
        [[self SBWActiveDisplayStack] popDisplay:fromApp];
        // And push it onto the Suspending displayStack
        [[self SBWSuspendingDisplayStack] pushDisplay:fromApp];
    }

    if (!toApp) {
        // The user should now be on the homescreen.
        // There's a bug above 4.? (4.1 or 4.2 I think) where the status bar won't be there.

        SBUIController *uiController = (SBUIController*)[objc_getClass("SBUIController") sharedInstance];
        if ([uiController respondsToSelector:@selector(createFakeSpringBoardStatusBar)]) {
            [uiController createFakeSpringBoardStatusBar];
        }
    }
}
&lt;/pre&gt;
&lt;p&gt;A few notes about this:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;This info is &amp;ldquo;as of&amp;rdquo; iOS 5.0.1 and I can only confirm that it works on iOS 5.x.&lt;/li&gt;
&lt;li&gt;although, Multifl0w pushes the displaystacks around itself and worked without modification (to the best of my knowledge) when iOS 5 was released (so it might not break very often).&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;When closing an app without an animation SpringBoard will still animate the icons unscattered (there&amp;rsquo;s almost certainly a work around but I haven&amp;rsquo;t needed to look for it).&lt;/li&gt;
&lt;/ul&gt;</description><link>https://iky1e.tumblr.com/post/14082089156</link><guid>https://iky1e.tumblr.com/post/14082089156</guid><pubDate>Sun, 11 Dec 2011 21:12:00 +0000</pubDate><category>iOS</category><category>code snippet</category><category>SpringBoard</category><category>Tweak</category><category>ObjC</category></item><item><title>raw log: SBDisplay Settings</title><description>&lt;p&gt;This is how SpringBoard describes it&amp;rsquo;s activation settings (there might be more but I stopped when it stopped telling me things).&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;&lt;strong&gt;Activation Setting&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;&lt;pre class="lang-c prettyprint"&gt;cy# [app descriptionForActivationSetting:1]
"asPanel "
cy# [app descriptionForActivationSetting:2]
"suspended "
cy# [app descriptionForActivationSetting:3]
"URL "
cy# [app descriptionForActivationSetting:4]
"remoteNotification "
cy# [app descriptionForActivationSetting:5]
"localNotification "
cy# [app descriptionForActivationSetting:6]
"eventOnly "
cy# [app descriptionForActivationSetting:7]
"safe "
cy# [app descriptionForActivationSetting:8]
"animateOthersSuspension "
cy# [app descriptionForActivationSetting:9]
"didAnimateOthersSuspension "
cy# [app descriptionForActivationSetting:10]
"slideOthersSuspension "
cy# [app descriptionForActivationSetting:11]
"flipOthersSuspension "
cy# [app descriptionForActivationSetting:12]
"contextInfoForOthersSuspension "
cy# [app descriptionForActivationSetting:13]
"animateScaleForOthersSuspension "
cy# [app descriptionForActivationSetting:14]
"animationStartForOthersSuspension "
cy# [app descriptionForActivationSetting:15]
"animationStart "
cy# [app descriptionForActivationSetting:16]
"flip "
cy# [app descriptionForActivationSetting:17]
"animationDuration "
cy# [app descriptionForActivationSetting:18]
"animationDurationForOthersSuspension "
cy# [app descriptionForActivationSetting:19]
"firstLaunchAfterBoot "
cy# [app descriptionForActivationSetting:20]
"appToApp "
cy# [app descriptionForActivationSetting:21]
"activateFromLocked "
cy# [app descriptionForActivationSetting:22]
"originatingURLDisplayIdentifier "
cy# [app descriptionForActivationSetting:23]
"annotation "
cy# [app descriptionForActivationSetting:24]
"noAnimate "
cy# [app descriptionForActivationSetting:25]
"launchOptions "
cy# [app descriptionForActivationSetting:26]
"withNoZoomLayerSetting "
cy# [app descriptionForActivationSetting:27]
"launchImageName "
cy# [app descriptionForActivationSetting:28]
"fromSwitcher "
cy# [app descriptionForActivationSetting:29]
"shouldUnlockOrientationForSwitcherSetting "
cy# [app descriptionForActivationSetting:30]
"viaSlideTopAppToReveal "
cy# [app descriptionForActivationSetting:31]
"fromBanner "
cy# [app descriptionForActivationSetting:32]
"fromBulletinList "
cy# [app descriptionForActivationSetting:33]
"fromAssistant "
&lt;/pre&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deactivation Setting&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;&lt;pre class="lang-c prettyprint"&gt;cy# [app descriptionForDeactivationSetting:1]
"eventOnly "
cy# [app descriptionForDeactivationSetting:2]
"animate "
cy# [app descriptionForDeactivationSetting:3]
"slide "
cy# [app descriptionForDeactivationSetting:4]
"animationStart "
cy# [app descriptionForDeactivationSetting:5]
"forceExit "
cy# [app descriptionForDeactivationSetting:6]
"afterNextLaunch "
cy# [app descriptionForDeactivationSetting:7]
"flip "
cy# [app descriptionForDeactivationSetting:8]
"contextInfo "
cy# [app descriptionForDeactivationSetting:9]
"animationScale "
cy# [app descriptionForDeactivationSetting:10]
"returnToLastApp "
cy# [app descriptionForDeactivationSetting:11]
"startForOthersActivation "
cy# [app descriptionForDeactivationSetting:12]
"killed "
cy# [app descriptionForDeactivationSetting:13]
"underLock "
cy# [app descriptionForDeactivationSetting:14]
"animationDuration "
cy# [app descriptionForDeactivationSetting:15]
"durationForOthersSuspension "
cy# [app descriptionForDeactivationSetting:16]
"deactivateAnimateOthersResumption "
cy# [app descriptionForDeactivationSetting:17]
"suspensionAnimationDelay "
cy# [app descriptionForDeactivationSetting:18]
"disableIconUnscatterAnimation "
cy# [app descriptionForDeactivationSetting:19]
"slideStatusBarStyleSetting "
cy# [app descriptionForDeactivationSetting:20]
"deactivateFromSwitcherSetting "
cy# [app descriptionForDeactivationSetting:21]
"zoomAnimateOtherOnResume "
cy# [app descriptionForDeactivationSetting:22]
"displayFenceTeardown "
cy# [app descriptionForDeactivationSetting:23]
"orderOutOnlyIfOnTop "
cy# [app descriptionForDeactivationSetting:24]
"viaSystemGesture "
cy# [app descriptionForDeactivationSetting:25]
"crossfade "
&lt;/pre&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Display Setting&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;&lt;pre class="lang-c prettyprint"&gt;cy# [app descriptionForDisplaySetting:1]
"finishedLaunchingFrontmost "
cy# [app descriptionForDisplaySetting:2]
"resume "
cy# [app descriptionForDisplaySetting:3]
"animate "
cy# [app descriptionForDisplaySetting:4]
"animateNoPNG "
cy# [app descriptionForDisplaySetting:5]
"statusBarStyle "
cy# [app descriptionForDisplaySetting:6]
"statusBarOrientation "
cy# [app descriptionForDisplaySetting:7]
"statusBarHidden "
cy# [app descriptionForDisplaySetting:8]
"statusBarWindowContextId "
cy# [app descriptionForDisplaySetting:9]
"arguments "
cy# [app descriptionForDisplaySetting:10]
"environment "
cy# [app descriptionForDisplaySetting:11]
"standardOut "
cy# [app descriptionForDisplaySetting:12]
"standardError "
cy# [app descriptionForDisplaySetting:13]
"waitForDebugger "
cy# [app descriptionForDisplaySetting:14]
"userLaunch "
cy# [app descriptionForDisplaySetting:15]
"disableASLR "
cy# [app descriptionForDisplaySetting:16]
"launchOverSEOAppSetting "
cy# [app descriptionForDisplaySetting:17]
"launchedViaSystemGesture "
&lt;/pre&gt;</description><link>https://iky1e.tumblr.com/post/13985531616</link><guid>https://iky1e.tumblr.com/post/13985531616</guid><pubDate>Fri, 09 Dec 2011 22:54:00 +0000</pubDate><category>ObjC</category><category>Theos</category><category>code snippet</category><category>iOS</category><category>Tweak</category></item><item><title>raw log: SpringBoard closing an app (in a hurry)</title><description>&lt;p&gt;I had written a little method to open and close apps for me so I could do quicker then just 0.5 second animations (the app switchers speed). I wrote it from a mixture of logging the description of different SBDisplay methods (the &amp;ldquo;-(NSString*)descriptionFor*****Setting:(unsigned)number&amp;rdquo; one&amp;rsquo;s) and &lt;a href="https://github.com/Zimm/libdisplaystack/blob/master/Tweak.xm#L206" target="_blank"&gt;this&lt;/a&gt; (though it doesn&amp;rsquo;t work on iOS 4+5). &lt;/p&gt;
&lt;p&gt;I wanted to know how iOS closes an app without an animation as that&amp;rsquo;s the only thing I had left not working and this is what I got when I &lt;a href="http://iphonedevwiki.net/index.php/Logify" target="_blank"&gt;logified&lt;/a&gt; the interesting methods in SBDisplay and &amp;ldquo;-(void)kill&amp;quot;ed and app.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;pre class="lang-c prettyprint"&gt;Dec  9 22:07:30 Kyles-iPod SpringBoard[15]: -[ setDeactivationSetting:12 flag:1]
Dec  9 22:07:30 Kyles-iPod SpringBoard[15]: -[ accelerometerDeviceOrientationChangedEventsEnabled]
Dec  9 22:07:30 Kyles-iPod SpringBoard[15]: -[ accelerometerSampleInterval]
Dec  9 22:07:30 Kyles-iPod com.apple.launchd[1] (UIKitApplication:com.apple.weather[0x7dca][210]): (UIKitApplication:com.apple.weather[0x7dca]) Exited: Killed: 9
Dec  9 22:07:30 Kyles-iPod SpringBoard[15]: Application 'Weather' exited abnormally with signal 9: Killed: 9
Dec  9 22:07:30 Kyles-iPod SpringBoard[15]: -[ setActivationSetting:2 flag:0]
Dec  9 22:07:30 Kyles-iPod SpringBoard[15]: -[ clearDisplaySettings]
Dec  9 22:07:30 Kyles-iPod SpringBoard[15]: -[ exitedAbnormally]
Dec  9 22:07:30 Kyles-iPod SpringBoard[15]: -[ _exitedCommon]
Dec  9 22:07:30 Kyles-iPod SpringBoard[15]: -[ clearActivationSettings]
Dec  9 22:07:30 Kyles-iPod SpringBoard[15]: -[ clearDeactivationSettings]
&lt;/pre&gt;</description><link>https://iky1e.tumblr.com/post/13984804502</link><guid>https://iky1e.tumblr.com/post/13984804502</guid><pubDate>Fri, 09 Dec 2011 22:38:00 +0000</pubDate><category>ObjC</category><category>SpringBoard</category><category>Theos</category><category>code snippet</category><category>iOS</category><category>Tweak</category></item><item><title>SpringBoard Icon Layouts - IconState.plist</title><description>&lt;p&gt;I was looking for a way to get a list of all applications, that aren&amp;rsquo;t hidden (so excluding things like Web.app). And although I found it ((NSArray*)[[SBIconModel sharedInstance] visibleIconIdentifiers]). I also found a dictionary SpringBoard keeps of the Icon layout.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;pre class="lang-xml prettyprint"&gt;&lt;code&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&amp;gt;
&amp;lt;plist version="1.0"&amp;gt;
&amp;lt;dict&amp;gt;
	&amp;lt;key&amp;gt;buttonBar&amp;lt;/key&amp;gt;
	&amp;lt;array&amp;gt;
		&amp;lt;string&amp;gt;com.apple.MobileSMS&amp;lt;/string&amp;gt;
		&amp;lt;string&amp;gt;com.apple.mobilemail&amp;lt;/string&amp;gt;
		&amp;lt;string&amp;gt;com.apple.mobilesafari&amp;lt;/string&amp;gt;
	&amp;lt;/array&amp;gt;
	&amp;lt;key&amp;gt;iconLists&amp;lt;/key&amp;gt;
	&amp;lt;array&amp;gt;
		&amp;lt;array&amp;gt;
			&amp;lt;string&amp;gt;com.apple.mobilephone&amp;lt;/string&amp;gt;
			&amp;lt;string&amp;gt;com.apple.mobilecal&amp;lt;/string&amp;gt;
			&amp;lt;string&amp;gt;com.apple.mobileslideshow&amp;lt;/string&amp;gt;
			&amp;lt;string&amp;gt;com.apple.camera&amp;lt;/string&amp;gt;
			&amp;lt;string&amp;gt;com.apple.videos&amp;lt;/string&amp;gt;
			&amp;lt;string&amp;gt;com.apple.youtube&amp;lt;/string&amp;gt;
			&amp;lt;string&amp;gt;com.apple.Maps&amp;lt;/string&amp;gt;
			&amp;lt;string&amp;gt;com.apple.weather&amp;lt;/string&amp;gt;
			&amp;lt;string&amp;gt;com.apple.mobilenotes&amp;lt;/string&amp;gt;
			&amp;lt;string&amp;gt;com.apple.reminders&amp;lt;/string&amp;gt;
			&amp;lt;string&amp;gt;com.apple.mobiletimer&amp;lt;/string&amp;gt;
			&amp;lt;string&amp;gt;com.apple.gamecenter&amp;lt;/string&amp;gt;
			&amp;lt;dict&amp;gt;
				&amp;lt;key&amp;gt;displayName&amp;lt;/key&amp;gt;
				&amp;lt;string&amp;gt;Apple&amp;lt;/string&amp;gt;
				&amp;lt;key&amp;gt;iconLists&amp;lt;/key&amp;gt;
				&amp;lt;array&amp;gt;
					&amp;lt;array&amp;gt;
						&amp;lt;string&amp;gt;com.apple.mobileme.fmf1&amp;lt;/string&amp;gt;
						&amp;lt;string&amp;gt;com.apple.Cards&amp;lt;/string&amp;gt;
						&amp;lt;string&amp;gt;com.apple.iBooks&amp;lt;/string&amp;gt;
					&amp;lt;/array&amp;gt;
				&amp;lt;/array&amp;gt;
				&amp;lt;key&amp;gt;listType&amp;lt;/key&amp;gt;
				&amp;lt;string&amp;gt;folder&amp;lt;/string&amp;gt;
			&amp;lt;/dict&amp;gt;
			&amp;lt;string&amp;gt;com.apple.MobileStore&amp;lt;/string&amp;gt;
			&amp;lt;string&amp;gt;com.apple.AppStore&amp;lt;/string&amp;gt;
			&amp;lt;string&amp;gt;com.apple.Preferences&amp;lt;/string&amp;gt;
		&amp;lt;/array&amp;gt;
		&amp;lt;array&amp;gt;
			&amp;lt;dict&amp;gt;
				&amp;lt;key&amp;gt;displayName&amp;lt;/key&amp;gt;
				&amp;lt;string&amp;gt;Utilities&amp;lt;/string&amp;gt;
				&amp;lt;key&amp;gt;iconLists&amp;lt;/key&amp;gt;
				&amp;lt;array&amp;gt;
					&amp;lt;array&amp;gt;
						&amp;lt;string&amp;gt;com.apple.MobileAddressBook&amp;lt;/string&amp;gt;
						&amp;lt;string&amp;gt;com.apple.calculator&amp;lt;/string&amp;gt;
						&amp;lt;string&amp;gt;com.apple.VoiceMemos&amp;lt;/string&amp;gt;
					&amp;lt;/array&amp;gt;
				&amp;lt;/array&amp;gt;
				&amp;lt;key&amp;gt;listType&amp;lt;/key&amp;gt;
				&amp;lt;string&amp;gt;folder&amp;lt;/string&amp;gt;
			&amp;lt;/dict&amp;gt;
			&amp;lt;dict&amp;gt;
				&amp;lt;key&amp;gt;displayName&amp;lt;/key&amp;gt;
				&amp;lt;string&amp;gt;Jailbreak&amp;lt;/string&amp;gt;
				&amp;lt;key&amp;gt;iconLists&amp;lt;/key&amp;gt;
				&amp;lt;array&amp;gt;
					&amp;lt;array&amp;gt;
						&amp;lt;string&amp;gt;com.saurik.Cydia&amp;lt;/string&amp;gt;
						&amp;lt;string&amp;gt;libactivator&amp;lt;/string&amp;gt;
						&amp;lt;string&amp;gt;eu.heinelt.ifile&amp;lt;/string&amp;gt;
						&amp;lt;string&amp;gt;crash-reporter&amp;lt;/string&amp;gt;
						&amp;lt;string&amp;gt;com.googlecode.mobileterminal.Terminal&amp;lt;/string&amp;gt;
					&amp;lt;/array&amp;gt;
				&amp;lt;/array&amp;gt;
				&amp;lt;key&amp;gt;listType&amp;lt;/key&amp;gt;
				&amp;lt;string&amp;gt;folder&amp;lt;/string&amp;gt;
			&amp;lt;/dict&amp;gt;
			&amp;lt;dict&amp;gt;
				&amp;lt;key&amp;gt;displayName&amp;lt;/key&amp;gt;
				&amp;lt;string&amp;gt;Social&amp;lt;/string&amp;gt;
				&amp;lt;key&amp;gt;iconLists&amp;lt;/key&amp;gt;
				&amp;lt;array&amp;gt;
					&amp;lt;array&amp;gt;
						&amp;lt;string&amp;gt;com.atebits.Tweetie2&amp;lt;/string&amp;gt;
						&amp;lt;string&amp;gt;info.colloquy.mobile&amp;lt;/string&amp;gt;
						&amp;lt;string&amp;gt;com.tapbots.Tweetbot&amp;lt;/string&amp;gt;
					&amp;lt;/array&amp;gt;
				&amp;lt;/array&amp;gt;
				&amp;lt;key&amp;gt;listType&amp;lt;/key&amp;gt;
				&amp;lt;string&amp;gt;folder&amp;lt;/string&amp;gt;
			&amp;lt;/dict&amp;gt;
			&amp;lt;dict&amp;gt;
				&amp;lt;key&amp;gt;displayName&amp;lt;/key&amp;gt;
				&amp;lt;string&amp;gt;Other&amp;lt;/string&amp;gt;
				&amp;lt;key&amp;gt;iconLists&amp;lt;/key&amp;gt;
				&amp;lt;array&amp;gt;
					&amp;lt;array&amp;gt;
						&amp;lt;string&amp;gt;com.apple.stocks&amp;lt;/string&amp;gt;
						&amp;lt;dict&amp;gt;
							&amp;lt;key&amp;gt;displayName&amp;lt;/key&amp;gt;
							&amp;lt;string&amp;gt;Newsstand&amp;lt;/string&amp;gt;
							&amp;lt;key&amp;gt;iconLists&amp;lt;/key&amp;gt;
							&amp;lt;array/&amp;gt;
							&amp;lt;key&amp;gt;listType&amp;lt;/key&amp;gt;
							&amp;lt;string&amp;gt;newsstand&amp;lt;/string&amp;gt;
						&amp;lt;/dict&amp;gt;
					&amp;lt;/array&amp;gt;
				&amp;lt;/array&amp;gt;
				&amp;lt;key&amp;gt;listType&amp;lt;/key&amp;gt;
				&amp;lt;string&amp;gt;folder&amp;lt;/string&amp;gt;
			&amp;lt;/dict&amp;gt;
			&amp;lt;string&amp;gt;com.clickgamer.AngryBirds&amp;lt;/string&amp;gt;
            &amp;lt;string&amp;gt;com.apple.mobileipod&amp;lt;/string&amp;gt;
		&amp;lt;/array&amp;gt;
	&amp;lt;/array&amp;gt;
&amp;lt;/dict&amp;gt;
&amp;lt;/plist&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Lets take a closer look at this:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;the dock icons are in a separate array for key &amp;lsquo;buttonBar&amp;rsquo;;&lt;/li&gt;
&lt;li&gt;the pages are in the array for key 'iconLists&amp;rsquo;;&lt;/li&gt;
&lt;li&gt;each page is a separate array in the iconLists array;&lt;/li&gt;
&lt;li&gt;in the array for each page the icons are string;&lt;/li&gt;
&lt;li&gt;the icons string is the apps displayId;&lt;/li&gt;
&lt;li&gt;a folder is an NSDictionary;&lt;/li&gt;
&lt;li&gt;each folder has these keys;&lt;br/&gt;&lt;ul&gt;&lt;li&gt;a displayName key which is a string, it&amp;rsquo;s name;&lt;/li&gt;
&lt;li&gt;iconLists which is an array of icons like each pages (displayId strings);&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;To make a change to the icon-state do:&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;[[SBIconModel sharedInstance] _writeIconState:modifiedIconState toPath:[[SBIconModel sharedInstance] iconStatePath]];
// And then to actually have it update the icons
[[SBIconModel sharedInstance] noteIconStateChangedExternally];
&lt;/pre&gt;
&lt;p&gt;All the relevant methods are in the &lt;a href="https://github.com/MarcoSero/SpringBoard-iOS-5.0/blob/master/SBIconModel.h" target="_blank"&gt;SBIconModel.h&lt;/a&gt; file. (warning though you can mess up your layout by playing with this.)&lt;/p&gt;</description><link>https://iky1e.tumblr.com/post/11704062690</link><guid>https://iky1e.tumblr.com/post/11704062690</guid><pubDate>Thu, 20 Oct 2011 21:45:00 +0100</pubDate><category>Icons</category><category>ObjC</category><category>SpringBoard</category><category>Tweak</category><category>iOS</category><category>MobileSubstrate</category></item><item><title>Tutorial: Cool UIScrollView Effects</title><description>&lt;p&gt;While I was working on the &amp;ldquo;Cardflow&amp;rdquo; interface mode for &lt;a href="http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=cardswitcherData" target="_blank"&gt;CardSwitcher&lt;/a&gt; I had to work out get custom page widths and custom effects as you scroll through the cards, this is actually quite simple but I haven&amp;rsquo;t seen many posts on customising a UIScrollView. Most of the tips are spread across lots of different stackoverflow questions.&lt;/p&gt;
&lt;p&gt;
&lt;object width="480" height="360"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/HFRHn8rwHK8?version=3&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/HFRHn8rwHK8?version=3&amp;amp;hl=en_US" type="application/x-shockwave-flash" width="480" height="360" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;
&lt;h2&gt;&lt;strong&gt;&lt;u&gt;Problems with custom scrollview&amp;rsquo;s&lt;/u&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;To start with (actually while I was working on the first version of CardSwitcher) I looked into &lt;a href="https://github.com/nicklockwood/iCarousel/issues" target="_blank"&gt;iCarousel&lt;/a&gt;, which has quite a lot of cool effects and a tableView style data source and delegate protocols. However as the first version of CardSwitcher was actually just a standard WebOS, or Safari tab&amp;rsquo;s style, linear layout that highlighted a problem with iCarousel (which &lt;a href="http://joehewitt.com/2011/10/05/fast-animation-with-ios-webkit" target="_blank"&gt;joehewitt&lt;/a&gt; also noticed with &lt;a href="http://cubiq.org/iscroll-4" target="_blank"&gt;iScroll&lt;/a&gt;), caused by the fact it doesn&amp;rsquo;t customize a UIScrollView but instead uses UIGestureRecognizers to do the scrolling itself (like UIScrollView itself).&lt;/p&gt;
&lt;p&gt;However because of this the scrolling just feel &lt;em&gt;wrong,&lt;/em&gt; the physics are off by a little bit. The bounce as you scroll of the edge, flicking and then how many pages it scrolls past before stopping and the paging effect all just feels off slightly.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;When using iCarousel for the purpose it was designed for, the coverflow or other custom modes, and you might not notice. However as CardSwitcher would have used the linear mode only, at least for the initial release, that would annoy me. For instance &lt;a href="http://www.multifl0w.com" target="_blank"&gt;Multifl0w&lt;/a&gt;&amp;rsquo;s &amp;lsquo;cards&amp;rsquo; style has a custom scrolling too, it feels &lt;em&gt;very&lt;/em&gt; smooth but isn&amp;rsquo;t quite right still.&lt;/p&gt;
&lt;p&gt;So after explaining why I didn&amp;rsquo;t like using a custom methods I&amp;rsquo;ll now point out why people feel a need to develop these custom methods rather then using a UIScrollView.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The most obvious problem is &amp;ldquo;&lt;strong&gt;paging&lt;/strong&gt;&amp;rdquo;. To activate paging on a UIScrollView you just set it&amp;rsquo;s pagingEnabled property to YES. However it defaults to each page being the same width as the scrollview itself, meaning if you want to achieve a preview effect like in Safari (screenshot below) you can&amp;rsquo;t do it by simply specifing a custom page width.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://i51.tinypic.com/2enrp08.png" border="0"/&gt;&lt;/p&gt;
&lt;p&gt;Also the custom scrollview&amp;rsquo;s all have built in ways to create custom effects whereas UIScrollView provides no built in way to achieve cool effects, so you&amp;rsquo;ll have to work it out yourself.&lt;/p&gt;
&lt;p&gt;Despite the need to subclass and customize the UIScrollView yourself it&amp;rsquo;s is a &lt;em&gt;very&lt;/em&gt; refined and very well built UIKit class and over all I think it&amp;rsquo;s best to just deal with the one or 2 limitations then throw it all away and start again from scratch or use a custom scrollview library. The difficulty of matching the refinement of a UIScrollView is highlighted well by the numerous JavaScript libraries which try to mimic it for web apps and the native attempts at making custom scrollviews (none of which get the physics quite right).&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;u&gt;Customizing UIScrollView &amp;amp; Adding Effects&lt;/u&gt;&lt;/h2&gt;
&lt;p&gt;So now to the fun bit (the code). Customizing the page width of a UIScrollView is actually quite simple, set the width to whatever you want and then set the 'clipsToBounds&amp;rsquo; property to NO, very simple. Except it&amp;rsquo;s not quite that simple as there&amp;rsquo;s a little problem with that (how big a problem depends on how small you want to the page widths to be). The problem is that touches will only be received inside the view&amp;rsquo;s bounds. So if your use for this is a scrolling menu (like a UITableView) that&amp;rsquo;s page width is the width of one cell only the center one will receive touches. To fix that you need to subclass UIScrollView and override the -(BOOL)pointInside: withEvent: method.&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;@interface CustomScrollView : UIScrollView
@property (nonatomic, assign) UIEdgeInsets responseInsets;
@end

@implementation CustomScrollView
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    CGPoint parentLocation = [self convertPoint:point toView:self.superview];
    CGRect responseRect = self.frame;
    responseRect.origin.x -= self.responseInsets.left;
    responseRect.origin.y -= self.responseInsets.top;
    responseRect.size.width += (self.responseInsets.left + self.responseInsets.right);
    responseRect.size.height += (self.responseInsets.top + self.responseInsets.bottom);
    return CGRectContainsPoint(responseRect, parentLocation);
}
@end
&lt;/pre&gt;
&lt;p&gt;Though for CardSwitcher I use a less flexible implementation because it does what I want.&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;@implementation CustomScrollView
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    CGPoint parentLocation = [self convertPoint:point toView:self.superview];
    return [self.superview pointInside:parentLocation withEvent:event];
}
@end
&lt;/pre&gt;
&lt;p&gt;This now means that no matter how small the scrollview (in Cardflow mode it&amp;rsquo;s only 30px wide) you&amp;rsquo;ll still be able to scroll by dragging anywhere on it&amp;rsquo;s parent view.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;u&gt;Cool Effects&lt;/u&gt;&lt;/h3&gt;
&lt;p&gt;Now we&amp;rsquo;re going to go through and create a few cool scrolling effects.&lt;/p&gt;
&lt;p&gt;Now I actually have each card keep track of it&amp;rsquo;s offset and set it&amp;rsquo;s own transform but you can easily do this in a for loop in the scrollViewDidScroll delegate method if you want. Note though that you&amp;rsquo;ll need a way to track the index of each card (hopefully besides just using it&amp;rsquo;s position in the UIView&amp;rsquo;s subviews).&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;// Method that get's called every time the scrollView scrolls.
-(void)setTransform{
/// setting up zoom effect!!!!!!
    UIScrollView *scrollView = //get the scrollView (most likely either self.scrollView or self.superView);
    // Set the layers transform back to normal so it's frame wouldn't be effected while we do the calculations
    self.layer.transform = CATransform3DIdentity;

    // Easier reference to these
    CGFloat scrollViewWidth = scrollView.bounds.size.width;
    CGFloat offset = scrollView.contentOffset.x;
    // Do some initial calculations to see how far off it is from being the center card
    CGFloat pageIndex = ([/* an array (hopefully not self.superviews.subviews)*/ indexOfObject:self]);
    CGFloat currentPage = (offset/scrollViewWidth);
    CGFloat pageDifference = (pageIndex-currentPage);
    // And the default values
    CGFloat scale = 1.0f;
    CGFloat alpha = 1.0f;


    /*** NOW FOR THE EFFECTS ***/
    // Scale it based on how far it is from being centered
    scale += (pageDifference*0.2);

    // If it's meant to have faded into the screen fade it out
    if (pageDifference &amp;gt; 0.0f) {
            alpha = 1 - pageDifference;
    }

    // Don't let it get below nothing (like reversed is -1)
    if (scale &amp;lt; 0.0f) {
        scale = 0.0f;
    }

    // If you can't see it disable userInteraction so as to stop it preventing touches on the one bellow.
    if (alpha &amp;lt;= 0.0f) {
        alpha = 0.0f;
        self.userInteractionEnabled = NO;
    }
    else{
        self.userInteractionEnabled = YES;
    }

    /*** Set our effects ***/
    self.alpha = alpha;
    // We could do just self.transform = but it comes by default with an animation.
    [CATransaction begin];
    [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
    self.layer.transform = CATransform3DMakeScale(scale, scale, 1.0f);
    [CATransaction commit];
}
&lt;/pre&gt;
&lt;p&gt;This will create the same effect as the 'Cardflow&amp;rsquo; mode in CardSwitcher. However the important bit&amp;rsquo;s are those initial variables and then the end bit where you set it&amp;rsquo;s transform. In between you can fiddle with those values to create the cool effects.&lt;/p&gt;
&lt;p&gt;If you want some examples of cool scrollView effects have a look at the &lt;a href="https://github.com/nicklockwood/iCarousel/tree/master/iCarousel%20iOS%20Demo" target="_blank"&gt;iCarousel Demo&lt;/a&gt; project, which includes these effects: Linear, Rotary, Inverted Rotary, Cylinder, Inverted Cylinder, CoverFlow, CoverFlow2 and a Custom one similar to this one.&lt;/p&gt;
&lt;p&gt;If you have any questions or comments please post them below.&lt;/p&gt;</description><link>https://iky1e.tumblr.com/post/11284574668</link><guid>https://iky1e.tumblr.com/post/11284574668</guid><pubDate>Mon, 10 Oct 2011 20:59:00 +0100</pubDate><category>idevblogaday</category><category>iOS</category><category>Tutorial</category><category>UIScrollView</category><category>ObjC</category><category>CATransform3D</category><category>CGAffineTransform</category></item><item><title>Rotate a UIImage by 90 degree angles</title><description>&lt;p&gt;I was looking for an easy way to rotate an image by 90 degrees and all the methods I used lots of code &amp;amp; required redrawing the image, normally with a transform, then getting the image from that. All I wanted was to quickly and easily rotate a UIImage by 90 degree angles so didn&amp;rsquo;t care about being able to precisely rotate by any angle.&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;UIImage *image = //... create an image
image = [UIImage imageWithCGImage:image.CGImage scale:image.scale orientation:UIImageOrientationRight];&lt;/pre&gt;
&lt;ul&gt;&lt;li&gt;UIImageOrientationUp : 0°/360°&lt;/li&gt;
&lt;li&gt;UIImageOrientationRight : 90°&lt;/li&gt;
&lt;li&gt;UIImageOrientationLeft : 270°&lt;/li&gt;
&lt;li&gt;UIImageOrientationDown : 180°&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIImage_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006890-CH3-SW1" target="_blank"&gt;UIImageOrientation Reference&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A note though if you then rotate that image it&amp;rsquo;ll rotate relative to it&amp;rsquo;s current rotation. &amp;ldquo;image.imageOrientation&amp;rdquo;&lt;/p&gt;</description><link>https://iky1e.tumblr.com/post/10610078995</link><guid>https://iky1e.tumblr.com/post/10610078995</guid><pubDate>Sat, 24 Sep 2011 21:12:00 +0100</pubDate><category>ObjC</category><category>UIImage</category><category>code snippet</category><category>iOS</category></item><item><title>Jailbroken Development : Making a Basic Tweak</title><description>&lt;p&gt;Now, if you have gone through &lt;a href="http://iky1e.tumblr.com/post/9561218739/jailbroken-development-starter-pack" target="_blank"&gt;my previous post&lt;/a&gt; you should have Theos setup and know the basic&amp;rsquo;s of how to hook into iOS.&lt;/p&gt;
&lt;p&gt;Making tweaks is different in several respects to writing AppStore apps. When writing AppStore apps, &lt;strong&gt;if&lt;/strong&gt; you manage to use any private API&amp;rsquo;s, and get them past apple, then you know they could break with any iOS update. With tweaks that is most of your code base (could break in any update).&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;So this time we&amp;rsquo;re going to try and create a basic tweak that will display how many unread emails the user has on the lock screen that when tapped will unlock the device and open the mail app.&lt;/p&gt;
&lt;p&gt;This will show you how to: lock/unlock the device, get an SBApplication, get a SBIcon for an app and get a UIImage of the apps icon (as well as displaying things on the screen).&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;Well need:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/Zimm/SpringBoard4.0" target="_blank"&gt;SpringBoard headers&lt;/a&gt; (for 4.0+);&lt;/li&gt;
&lt;li&gt;&lt;a href="http://brandontreb.com/beginning-jailbroken-ios-development-getting-the-tools/" target="_blank"&gt;Theos Setup&lt;/a&gt;;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The first thing we need to do, after we download or class-dump a set of headers, is find which class controls the lock screen. The controller class for the lockscreen is SBAwayController (which like most &lt;em&gt;really&lt;/em&gt; important classes in SpringBoard is a singleton &amp;ldquo;+sharedInstance&amp;rdquo;).&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll need to create a new project with NIC (one of the tools that comes with Theos).&lt;/p&gt;
&lt;pre class="lang-bash prettyprint"&gt;$THEOS/bin/nic.pl
NIC 1.0 - New Instance Creator
------------------------------
  [1.] iphone/application
  [2.] iphone/library
  [3.] iphone/preference_bundle
  [4.] iphone/tool
  [5.] iphone/tweak
Choose a Template (required): 5
#...... (fill in name, your name etc...)
&lt;/pre&gt;
&lt;p&gt;Now open up the Tweak.xm file and start coding! I&amp;rsquo;m not that good at explaining things in little chunks of code, then explanation, then code, etc&amp;hellip; &lt;/p&gt;
&lt;p&gt;So instead I&amp;rsquo;ve written &lt;em&gt;lots &lt;/em&gt;of comments through out the code explaining it as you go through it.&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;/************* This is equivalent to declaring instance variables in the .h file ***************/
// So we can see if there's an app open
static NSMutableArray *displayStacks;
// To add everything to on screen
static UIWindow *contentWindow = nil;

// List of the display stacks
#define SBWPreActivateDisplayStack        [displayStacks objectAtIndex:0]
#define SBWActiveDisplayStack             [displayStacks objectAtIndex:1]
#define SBWSuspendingDisplayStack         [displayStacks objectAtIndex:2]
#define SBWSuspendedEventOnlyDisplayStack [displayStacks objectAtIndex:3]

// Hook into the lockscreen's controller
%hook SBAwayController

-(void)lock{
    %orig;  // Make sure it actually locks


    // Setup our interface,
    // we don't want to really on the lockscreen existing well the screen is off,
    // so well create our own UIWindow to house it.
    if (!contentWindow) {
        // Create our window
        contentWindow = [[UIWindow alloc] initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height*0.4, [UIScreen mainScreen].bounds.size.width, 70)];
        contentWindow.backgroundColor = [UIColor colorWithRed:0.000 green:0.000 blue:0.000 alpha:0.8];
        contentWindow.hidden = NO;
        // Make sure it's high enough to be seen on the lock screen
        contentWindow.windowLevel = UIWindowLevelStatusBar;
        contentWindow.layer.borderColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.5].CGColor;
        contentWindow.layer.borderWidth = 1.0f;
        contentWindow.layer.cornerRadius = 8;

        // Add a gesture recognizer (could be a UIButton but this is simplier).
        UITapGestureRecognizer *singleTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_openEmail:)] autorelease];
        [contentWindow addGestureRecognizer:singleTap];


        // Get the SBApplication for the mail app
        SBApplication *app = [[%c(SBApplicationController) sharedInstance] applicationWithDisplayIdentifier:@"com.apple.mobilemail"];
        // Get the SBApplicationIcon for the mail app
        SBApplicationIcon *appIcon = [[objc_getClass("SBIconModel") sharedInstance] applicationIconForDisplayIdentifier:[app displayIdentifier]];
        // Get the UIIcon from the app icon
        UIImage *icon = [appIcon getIconImage:2];
        // Create a UIImageView from that image
        UIImageView *iconView = [[[UIImageView alloc] initWithImage:icon] autorelease];
        iconView.center = CGPointMake(contentWindow.center.y-contentWindow.frame.origin.y, contentWindow.center.y-contentWindow.frame.origin.y);
        [contentWindow addSubview:iconView]; // Add it to the window

        CGRect labelRect;
        labelRect.origin.y = iconView.frame.origin.y;
        labelRect.origin.x = iconView.frame.origin.x+iconView.frame.size.width;
        labelRect.size.height = contentWindow.frame.size.height-(iconView.frame.origin.y*2);
        labelRect.size.width = (contentWindow.frame.size.width-(iconView.frame.origin.x+iconView.frame.size.width))-10;

        // Create the label
        UILabel *unreadEmailLabel = [[[UILabel alloc] initWithFrame:labelRect] autorelease];
        // Setup the label
        unreadEmailLabel.font = [UIFont boldSystemFontOfSize:16];
        unreadEmailLabel.backgroundColor = [UIColor clearColor];
        unreadEmailLabel.textColor = [UIColor whiteColor];
        unreadEmailLabel.textAlignment = UITextAlignmentRight;
        unreadEmailLabel.numberOfLines = 1;
        // If the icon has a badge number
        if ([appIcon badgeValue] != 0) {
            if ([appIcon badgeValue] == 1) {
                unreadEmailLabel.text = @"1 unread email";
            }
            else {
                unreadEmailLabel.text = [NSString stringWithFormat:@"%d unread emails", [appIcon badgeValue]];
            }
        }
        else {
            unreadEmailLabel.text = @"No unread emails";
        }
        // Add it to the window
        [contentWindow addSubview:unreadEmailLabel];
    }
}
-(void)_unlockWithSound:(BOOL)sound isAutoUnlock:(BOOL)unlock{
    %orig; // Call the original method first

    // Remove our window
    contentWindow.hidden = YES;
    [contentWindow release];
    contentWindow = nil;
}

%new
-(void)_openEmail:(UIGestureRecognizer*)gesture{
    if (gesture.state != UIGestureRecognizerStateEnded)
        return;

    // Unlock the device
    [self unlockWithSound:YES];

    // Get the SBApplication for the mail app
    SBApplication *APP = [[%c(SBApplicationController) sharedInstance] applicationWithDisplayIdentifier:@"com.apple.mobilemail"];


    // Active the Mail app
    if ([SBWActiveDisplayStack topApplication] != nil) {
        // An app is already open, so use the switcher animation, but first check if this is the same app.
        if (![[[SBWActiveDisplayStack topApplication] bundleIdentifier] isEqualToString:@"com.apple.mobilemail"]) {
            [(SBUIController*)[objc_getClass("SBUIController") sharedInstance] activateApplicationFromSwitcher:APP];
        }
    }
    else {
        //Else we are on SpringBoard
        [(SBUIController*)[objc_getClass("SBUIController") sharedInstance] activateApplicationAnimated:APP];
    }
}

%end



// This is needed to get the current app
// &lt;a href="http://code.google.com/p/iphone-tweaks/wiki/DevelopmentNotes" target="_blank"&gt;http://code.google.com/p/iphone-tweaks/wiki/DevelopmentNotes&lt;/a&gt;

// An easier (for us) way would be to use libDisplayStack (which can also activate apps)
// &lt;a href="https://github.com/Zimm/libdisplaystack/blob/master/Tweak.xm" target="_blank"&gt;https://github.com/Zimm/libdisplaystack/blob/master/Tweak.xm&lt;/a&gt;
%hook SBDisplayStack
- (id)init{
	if ((self = %orig))
		[displayStacks addObject:self];
	return self;
}
- (void)dealloc {
    [displayStacks removeObject:self];
    %orig;
}
%end
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Notes:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Jailbroken development is very much like normal iOS development. Though as a general rule you&amp;rsquo;ll need a set of headers for any iOS version you plan to support &amp;amp; preferably a tester running that device to test it actually works.&lt;/p&gt;
&lt;p&gt;Method names, always check they still exist in new iOS versions. You can see which look more likely to be changed though, I don&amp;rsquo;t know if it&amp;rsquo;s true (haven&amp;rsquo;t been doing Jailbroken development for long enough, but), I usually try avoiding methods with long lists of arguments or &amp;ldquo;_&amp;rdquo; at the start of it&amp;rsquo;s name.&lt;/p&gt;
&lt;p&gt;Also I normally rename any .xm file too .mm and then use &amp;ldquo;./Make.sh package install&amp;rdquo; rather then &amp;ldquo;make package install&amp;rdquo; to compile it. Make.sh is a little bash script that copies the Tweak.mm file to Tweak.xm and then deletes it after it&amp;rsquo;s built so it can be compiled and I still get to use Xcode to write my code (though without code auto completion).&lt;/p&gt;
&lt;pre class="lang-bash prettyprint"&gt;#!/bin/bash

ARGS=$*

# Rename the files
cp ./Tweak.mm ./Tweak.xm
echo "Copied Tweak"

# Build
echo ""
echo "||---- Building..."
echo ""
make $ARGS
echo ""
echo "||---- Built!"
echo ""


# Rename the files
rm ./Tweak.xm
echo "Deleted Tweak.xm"


exit 0
&lt;/pre&gt;</description><link>https://iky1e.tumblr.com/post/10096812242</link><guid>https://iky1e.tumblr.com/post/10096812242</guid><pubDate>Sun, 11 Sep 2011 21:52:00 +0100</pubDate><category>Lockscreen</category><category>Logos</category><category>SpringBoard</category><category>Theos</category><category>iOS</category><category>idevblogaday</category><category>Tweak</category></item><item><title>Jailbroken Development : Starter Pack</title><description>&lt;p&gt;For me first blog post on iDevBlogADay, I thought I&amp;rsquo;d talk about a part of iOS development that rarely gets mentioned on blogs, Tweak development (or mobilesubstrate development).&lt;/p&gt;
&lt;p&gt;To start you&amp;rsquo;ll need:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;A Jailbroken iOS device&lt;/li&gt;
&lt;li&gt;OSX 10.6+ (or iOS 3.x+)&lt;/li&gt;
&lt;li&gt;&lt;a title="Theos - iPhoneDevWiki" target="_self" href="http://iphonedevwiki.net/index.php/Theos/Getting_Started"&gt;Theos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A good knowledge of Objective-C&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Getting Theos&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can get &lt;a title="Theos - Github" href="https://github.com/DHowett/theos" target="_blank"&gt;Theos&lt;/a&gt; from &lt;a title="Github profile" href="https://github.com/DHowett" target="_blank"&gt;DHowett&amp;rsquo;s&lt;/a&gt; official Github profile, although &lt;a title="rpetrich - Github" href="https://github.com/rpetrich" target="_blank"&gt;rpetrich&lt;/a&gt; has a &lt;a title="Theos - rpetrich - Github" href="https://github.com/rpetrich/theos" target="_blank"&gt;fork&lt;/a&gt; which includes a set of private headers and is kept quite up to date (however the headers are from 3.x).  Theos also needs &lt;a title="Ldid" href="http://dl.dropbox.com/u/3157793/ldid" target="_blank"&gt;ldid&lt;/a&gt; THEOS/bin/ldid&lt;/p&gt;
&lt;p&gt;You can find a more complete guide &lt;a title="Beginning Jailbroken iOS Development - Getting The Tools" href="http://brandontreb.com/beginning-jailbroken-ios-development-getting-the-tools/" target="_blank"&gt;here&lt;/a&gt;. If you need to install Theos on your device rather then on OSX you can find a &lt;a href="http://iphonedevwiki.net/index.php/Theos/Getting_Started#For_iOS" target="_blank"&gt;guide&lt;/a&gt; on the &lt;a href="http://iphonedevwiki.net/index.php/Special:AllPages" target="_blank"&gt;iPhoneDevWiki&lt;/a&gt;.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On Your Device&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On your device you should install a few tools first:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;BigBoss Recommended Tools&lt;/li&gt;
&lt;li&gt;syslogd (saves NSLog statements to file)&lt;/li&gt;
&lt;li&gt;MobileSubstrate (obviously)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cycript.org" target="_blank"&gt;Cycript&lt;/a&gt; Javascript/Objc mix, &lt;a href="http://www.cycript.org/debs/" target="_blank"&gt;install yourself&lt;/a&gt; (useful for testing the output of SpringBoard methods)&lt;/li&gt;
&lt;li&gt;gdb (if something goes wrong we can&amp;rsquo;t use xcodes debugger)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/mobileterminal/downloads/list" target="_blank"&gt;Mobileterminal&lt;/a&gt;, allows you to run commands from the device itself (same as cycript)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/networkpx/wiki/class_dump_z" target="_blank"&gt;Class-dump-z&lt;/a&gt; (gets the method names &amp;amp; classes from an iOS binary file)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Using Theos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Theos comes with a group of tools, the most obvious of which is &lt;a href="http://iphonedevwiki.net/index.php/Logos" target="_blank"&gt;Logos&lt;/a&gt;. Theos itself is a build system (make files and build scripts) which can build you code straight to a .deb file (the format cydia installs).&lt;/p&gt;
&lt;p&gt;Logos is a preprocessor-based library to make developing with mobilesubstrate easier by providing an ObjectiveC style syntax.&lt;/p&gt;
&lt;p&gt;MobileSubstrate Example (from &lt;a href="http://www.ifans.com/forums/showthread.php?t=103558" target="_blank"&gt;iFans&lt;/a&gt;)&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;static void __$ExampleHook_AppIcon_Launch(SBApplicationIcon *_SBApplicationIcon) {
	
	UIAlertView* __launchView = [[UIAlertView alloc] init];
	__launchView.title = @"No way muchacho";
	__launchView.message = @"You can't touch dis!";
	[__launchView addButtonWithTitle:@"Dismiss"];
	[__launchView show];
	
	// If at any point we wanted to have it actually launch we should do:
	// [_SBApplicationIcon __OriginalMethodPrefix_launch];
}

extern "C" void ExampleHookInitialize() {
	NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
	
	// Get the SBApplicationIcon class
	Class _$SBAppIcon = objc_getClass("SBApplicationIcon");
	
	// MSHookMessage is what we use to redirect the methods to our own
	MSHookMessage(_$SBAppIcon, @selector(launch), (IMP) &amp;amp;__$ExampleHook_AppIcon_Launch, "__OriginalMethodPrefix_");
	
	// We just redirected SBApplicationIcon's "launch" to our custom method, and now we are done.
	
	[pool release];
}
&lt;/pre&gt;
&lt;p&gt;Theos/Logos Example&lt;/p&gt;
&lt;pre class="lang-c prettyprint"&gt;%hook SBApplicationIcon

-(void)launch{
	UIAlertView* __launchView = [[[UIAlertView alloc] init] autorelease];
	__launchView.title = @"No way muchacho";
	__launchView.message = @"You can't touch dis!";
	[__launchView addButtonWithTitle:@"Dismiss"];
	[__launchView show];
}

%end
&lt;/pre&gt;
&lt;p&gt;Much less code, much simpler and much easier to understand!&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Useful Stuff&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is a collection of useful links &amp;amp; info to help you get started:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://iphonedevwiki.net/index.php/Special:AllPages" target="_blank"&gt;iPhoneDevWiki&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;StackOverflow is the most useful site for iOS development and for jailbroken development the iPhoneDevWiki is by far the most useful sites for a developer.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;irc.saurik.com&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;If you have a problem you can&amp;rsquo;t solve while making your AppStore app you ask on StackOverflow for a solution. If while making your tweak you can&amp;rsquo;t fix a certain bug/problem you ask on the #theos or #iphonedev channels on Saurik&amp;rsquo;s (creator of cydia) IRC.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://tweakweek.com/" target="_blank"&gt;TweakWeek&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;em&gt;Lots&lt;/em&gt; of simple example tweaks from top Cydia developers. It&amp;rsquo;s now finished but there are still over 60 example tweaks to study.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s it hopefully that&amp;rsquo;s enough to get you started developing tweaks. Enjoy!&lt;/p&gt;</description><link>https://iky1e.tumblr.com/post/9561218739</link><guid>https://iky1e.tumblr.com/post/9561218739</guid><pubDate>Mon, 29 Aug 2011 23:32:00 +0100</pubDate><category>MobileSubstrate</category><category>Theos</category><category>Tweak</category><category>iOS</category><category>idevblogaday</category><category>jailbreak</category></item></channel></rss>