Archive for the ‘iPhone’ Category

Preparing for iOS7 by doing a full iOS backup to an attached drive

Posted on September 24th, 2013 in iOS, iPhone | No Comments »

I rarely do full backups of my iPhone because I don’t usually have 64GB free on my drive but in preparation for iOS7 I knew I needed to do it.

Unfortunately there is no way in iTunes to specify an alternative drive to backup. Luckily I found this post stating you can symlink another folder on a remote drive in the place of your regular backup folder. The OS knows no difference:

 # You may need to move or delete your old Backup folder first.
 ln -s /Volumes/drivename/iBackup/ ~/Library/Application\ Support/MobileSync/Backup

iOS6 HTML5 updates.

Posted on September 26th, 2012 in iOS, iPhone | No Comments »

Here’s a great writeup on the new HTML5 improvements that rolled out for iOS6:

The biggest improvements is native file upload support for web apps (no more need for Phonegap?) as well as remote webkit debugging.

Setting up remote JavaScript debugging for mobile devices in minutes with Weinre

Posted on April 1st, 2011 in android, iOS, iPhone, mobile apps | No Comments »

Let’s face it. Mobile web development today sucks. You don’t get the fancy console and debugging tools you have in modern desktop browsers like Firebug or Webkit’s Inspector. At most, you can enable a simple debug tab that reports the number of JS errors and allows you to console.log one variable at a time—and if you’re using embedded web views you don’t even get that much. For anything else you pretty much have to revert to the old days of javascript popup alerts or tailing your server logs.

Enter Weinre. Weinre is a beta project written in Java that allows you to have a remote Webkit inspector-style debugging console on your desktop that can communicate with your mobile device. You can send alerts, do full console logging—even inspect the remote DOM tree. It’s in beta and occasionally a little buggy but totally useable.

To use it, run the java server on your local machine and add a single script tag to your project. You can also just download the Mac executable here. The full documentation is here – (its not very straightforward so post here if you have questions.)

At work, we use Charles to redirect production apps to our local dev server. My local file looks like this:

~/.weinre]$ cat 
boundHost -all-
httpPort: 8081
reuseAddr: true
readTimeout: 1

Thanks goes to coworker Jim for being the first Guinea Pig to try it out.

Darndest CSS3 bug in iOS 3.1.3

Posted on March 17th, 2011 in iOS, iPhone | No Comments »

We were experiencing consistent bootup crashes for a game with embedded web views. Took us a while to track it down but if you use

display: table-cell;


-webkit-transform: translate3d(0,0,0);


-webkit-transform: translateZ(0);

in the same CSS declaration, it will trigger a bug in Mobile Safari and the game will crash.

Expires header doesn’t work on the iPhone / iPad

Posted on December 17th, 2010 in Apache, iOS, iPhone | No Comments »

I’m optimizing the web views of an iPhone app in preparation for Christmas traffic and one of the ideas I had was to use small increments of Expires header to cache files client-side. I assumed this would be no problem as all my work with Safari on the iPhone has shown it a very capable browser—as good as any desktop one.

Turns out after some testing that using Expires Header isn’t possible— not because of cache size limitations as one would assume. It looks like the guys in Cupertino wanted to limit this ability on the iOS as every HTTP request made by an iOS device issues a pragma: no-cache directive. I’ve yet to understand why. Better fire up more memcache servers.

Here’s the raw headers if interested:

GET /expires/ HTTP/1.1
User-Agent: Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Cookie: __utma=244034822.428964265.1285289496.1290546798.1290723961.13; __utmz=244034822.1285289496.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utma=1.1229958817.1285277083.1288920090.1292540519.14; __utmc=1; __utmz=1.1285277083.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
Pragma: no-cache
Connection: keep-alive