Thursday, December 19, 2013

Interesting Wording

Saw Intel's ad for convertible laptops.  (Guy breaking his old laptop with a cup of coffee so his employer would have to buy him a new computer.)

The tag line at the end is "A Laptop when you need it, a Tablet when you WANT it."

Even right there in the ad saying that a tablet is what people really WANT ("want" was very emphasized by Mr. Lipton doing the voiceover).

Yes, many people still need a laptop for work...but that's not what they want.  Given the choice, people are going to buy what they WANT.

(And I've seen more and more iPads out for work too.  At the grocery store yesterday and a manager was using one to track something.  Before, he might have had some specialized device or even a paper printed report to check off; I don't remember ever seeing someone with a laptop walking around doing inventory.  Now it's an iPad.  People who say tablets aren't for work are only thinking about their one specific job type.)

Wednesday, December 4, 2013

Rich Corinthian Leather

I'd read the reviews when the new iPhone 5S came out, how the leather case quickly got marked and scuffed.  I bought the light cream colored one, knowing it would get distressed and stained the most.

Month One.  
Not much on the back, but nice polished sheen along all the edges.  Even more polished sheen on the corners.

Month Two.  
Still not much on the back, getting a really nice sheen around the edges and on the corners.  (It's a shadow from the iPad taking the picture on the bottom).

Getting quite dark on the front edge.

Even the buttons for volume showing some wear.

Sunday, November 10, 2013

Dropbox Core API with blocks

I've been adding support for Dropbox to FTP On The Go!  Because it needs full access so you can upload any file from your Dropbox, or download a file to any folder, it has to use the low level "Core"API.

The code from Dropbox is good, but uses delegates for everything.  I didn't want to have lots of checks for "file download complete" to see what to do with it next--edit/view, email it, upload it to an FTP server, or any of the other things.  With several operations potentially happening at the same time, that could get confusing :)

So I made a little wrapper for the DBRestClient to do Blocks.  The code for getting the metadata, like a folder's contents or details about a file, is below.  There are similar functions for all the other things, uploading or downloading files, etc.  I'll post all that once the new version of FTP is out.  (But as you can see it's a dozen or so lines of code for each one you'd want to do so pretty easy to add yourself.)

The .h
@interface DBRestClientBlock : DBRestClient 

@property (nonatomic, copy)  void (^loadedMetadata)(DBMetadata *metadata, NSError *error);

+ (DBRestClientBlock*)dbClient;


The .m
@implementation DBRestClientBlock //DBRestClientDelegate

+ (DBRestClientBlock*)dbClient {
    DBRestClientBlock    *dbBlock = [[[DBRestClientBlock alloc] initWithSession:[DBSession sharedSession]] autorelease];
    dbBlock.delegate = dbBlock;
    return dbBlock;

//Metadata Downloading...
- (void)restClient:(DBRestClient *)client loadedMetadata:(DBMetadata *)metadata {
    if (self.loadedMetadata) {
        self.loadedMetadata(metadata, nil);
- (void)restClient:(DBRestClient*)client loadMetadataFailedWithError:(NSError*)error {
    if (self.loadedMetadata) {
        self.loadedMetadata(nil, error);

Then you get to do nice bits like:

DBRestClientBlock   *dbClient = [[DBRestClientBlock dbClient] retain];
dbClient.loadedMetadata = ^(DBMetadata *metadata, NSError *error) {
        if (metadata) {   
     //Do something with the results
        if (error) {
            NSLog(@"loadedMetadataError: %@", error);
        [dbClient release];
[dbClient loadMetadata:pathToLoad];

(I've also got a manager class, that caches these DBRestClientBlock objects too.)

Wednesday, November 6, 2013

iPad Pro...

If you make an iPad Pro, with a bigger screen, what does that really mean to the pixels?

You can either keep the same 2048x1536 size of the current iPads and make bigger pixels or do a new screen resolution.

Keeping the same 2048x1536 pixels lets you make anything you'd want and every app works as-is. Just like the non-transition from iPad to iPad mini where everything just worked, the pixels would simply be bigger rather than smaller.  But bigger pixels will start to get below Apple's magic Retina numbers.

Instead you could also increase the resolution. The next nice "computer" numbers up that keep the same aspect ratio would be 2560x1920.

You could again make those pixels any size you want.  If you use exactly the same size pixels as the iPad Air, you go from a screen rectangle of 7.76" high by 5.82"wide up to about 9.7" by 7.28" which gets you a diagonal of around 12.13".  That seems a little big, but again you could make new LCD panels whatever size you want.  But it's in the ballpark for the screen size from various rumor websites.

Existing apps would run as-is, with a black border, much like iPhone-only apps on an iPad, or "short" apps on an iPhone 5 with the taller screen.  Apps that were boxed in wouldn't look as good, but they would work fine.  The pixels (so buttons and such) are the about/exactly same size as the iPad Air, so it would all be usable as apps get updated.

Where it gets even more interesting is if you make an iPad with the pixel size of the iPad mini, but make it that new 2560x1920 pixel count. By my math, you'd end up with a screen that is 7.85" x 5.89" which is within fractions of an inch of the size of the current iPad Air screen (7.76" x 5.82"). That seems like the iPad Air 2 next year.

So if you do an iPad Pro spring 2014, with a bigger screen and higher pixel count, apps will get updated. With the bigger device, apps would be usable at the old size as they're getting updated.  Then you can roll that new pixel count back into the iPad Air2 in fall 2014.  iPad Air2 gets an even sharper screen, and a nice new differentiator from the iPad mini if it stayed 2048x1536 (which I think it would).

Developers will jump on the Pro so all apps that matter would have been updated by the fall 2014 time.  (Many would even get updated in the week or two between the announcement and its release.)

This also gives more choices for updating the models later.  Air and Mini updated in the fall in time for the holidays, Pro which would be more a business iPad and gets updated in the spring.  Pro could even get a few goodies from current and future iPhones that the fall iPad Air/Mini didn't I'd be very surprised if it didn't have TouchID.

*Assuming I've not screwed up the math too much.

Monday, November 4, 2013


I went to my first Hackathon this weekend.  A bunch of people, in teams of up to 5, trying to build something cool that could be the foundation for a company in just 24 hours (or just trying to build something cool or fun in the 24 hour time too.)

I'd brought an idea, for an NSA-proof messaging app.  We now know that between spying, hacking, and court orders, just about any connection over the Internet is susceptible to "man in the middle" attacks or all sorts of other monitoring techniques.

My idea, Funsa (or F.U.NSA) was that if you treat the whole Internet as compromised, then the way to communicate securely is to exchange the keys for your messages off the Internet.

I sat down at a table, and happened to get the right people there.  An Android developer and web services guy both from Amazon.  A woman joined us later who did IT security and was a great researcher and presenter for the team.

(Team website here)

We got a working demo for iOS to show.   Each device would make a new 2048 bit RSA public/private key pair for a new connection.  Then they would exchange the public keys between the two iPhones over Bluetooth.  From then on, they could use those keys to send secure messages using a server over the Internet, using the keys they'd exchanged offline.

A real app might use 4096 bit keys (but that could take several minutes to generate on an older iPhone--so we did 2048 for the demo since it "only" takes a few seconds on the new iPhone 5S.)

We talked about all sorts of next steps and other ideas.  
  • Sending the keys using QR codes on the phone screens and front cameras, even sound and squawking like a modem from the 90s.
  • Lots of features for enterprise like having full source code so they could audit and setup their own controlled messaging servers.
We got to the finals (top 6 out of about 30), but didn't get in the top 3.  But many people said that if it was on the name alone, we'd win :)

Pete, Shawn and I talked about finishing it up as a Headlight app.  Pete had some great ideas; since he's in London, the bluetooth way of exchanging keys wouldn't work :)  The craziest would be to each print out QR codes for the public keys and send them by regular snail-mail to scan on each of our devices across the world!

Offline key exchange wouldn't be new--that's one of the reasons why they invented handcuff briefcases you see in movies :)  We didn't find any apps or message systems that used it as the security method for mobile devices.

Sunday, October 27, 2013

iPad TouchID

I'm sure one of the reasons the new iPads this year didn't get the fingerprint TouchID is simply it would be hard to make enough for all the iPhones and iPads they're going to sell.  (And I've not looked into how thick the part is compared to the thickness of the devices, that could be an issue too.)

But another reason...

iPhones are very personal, you might let your kids borrow it, but they aren't really shared within a family, much less to a guest.

But iPads are much more often shared.  One of the things that iOS has lacked, and hopefully will come in 8, is some sort of user accounts.  So when the parents use it, they get Safari with their own bookmarks; their own email, Facebook, and other accounts; their own apps.  When a kid uses it their apps are restricted to PG ones, Safari or email might not be there at all, and they can't install new apps or other restrictions. All settings the iPad can do, but right now it's globally, not per user.

Without something like that, TouchID that only unlocks the device is nice but a missed opportunity for instant and easy personalization.  Kid's fingerprint--gets kids account.  Mom or Dad--they get their own accounts.

All that together seems a worthy upgrade for iOS 8 and the 2014 iPads.

Even do a nice setup when making an account.  A few choices that set the basics for what is restricted that you could customize.  "Adult"=All  "Teen"=R  "Pre-Teen"=PG  "Toddler"=G

Wednesday, October 23, 2013

iPad 2

I thought it was odd that the iPad 2 was kept around for sale.  Why not do the iPad 4 as the older model?  The new Air is a big enough step forward, especially over that even thicker and heavier model.

Then I thought of a reason:  Lightning.  The iPad 2 is the model that still had the old style 30 pin connector, which is used for a variety of devices like Point of Sale terminals.  And who knows what industrial uses it might have.

Rather than bring back the iPad 3 with the old connector (which would be weird since it's been off the market for a year) keeping the iPad 2 makes a little more sense.  And give its older technology, the profit margins on that one must be huge.

Wednesday, October 16, 2013

Older Models

Historically, when Apple released a new iPad, iPhone, or iPod touch, it has very often kept around last years model at a reduced price.

And most of the time it's one model, with the same or less storage compared to the low end of the "new" model, and $100 cheaper.

Does that mean next week we'll see a 16GB model of the current iPad mini stay on sale...for $229?  Interesting if they do, that's the same price as the low end 16GB iPod touch.  I'd guess they'd either drop the iPod touch price a little to $199, or make that model iPad mini be $249.

They've never increased the price of iPads, but this might be the time to do the Retina mini at $349 and the current non-retina at $249.  Keeps that $100 price separation.

Thursday, October 10, 2013

iOS7 parallax shadows

It looks cool enough, we're doing it anyway, even though "floating above" is more normal in iOS7 than "shadowed behind".

To my eyes it is a more subtle and less jumpy depth effect.  The content you're looking at isn't moving, but the shadows it casts are.

@implementation UIView (Giffish)

- (void)addShadowing {
    [self.layer setShadowColor:[UIColor blackColor].CGColor];
    [self.layer setShadowOpacity:0.4];
    [self.layer setShadowRadius:3.0];
    [self.layer setShadowOffset:CGSizeMake(0, 2)];

- (void)addShadowParallaxMotionEffect:(float)amountAndDirection {
    float       amount = 10.0*amountAndDirection;
    UIInterpolatingMotionEffect *motionX = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"layer.shadowOffset.width" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
    [motionX setMaximumRelativeValue:@(amount)];
    [motionX setMinimumRelativeValue:@(-amount)];
    UIInterpolatingMotionEffect *motionY = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"layer.shadowOffset.height" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
    [motionY setMaximumRelativeValue:@(amount)];
    [motionY setMinimumRelativeValue:@(-amount)];
    UIMotionEffectGroup *group = [[UIMotionEffectGroup alloc] init];
    group.motionEffects = @[motionX, motionY];
    [self addMotionEffect:group];


//You'd want -1.0 to start.  See how that looks and adjust.  
[button addShadowing];
[button addShadowParallaxMotionEffect:-1.0];  

//This type of thing works too.
[button.titleLabel addShadowing];
[button.titleLabel addShadowParallaxMotionEffect:-1.0];  

Tuesday, October 1, 2013


The first time after you restart an iPhone 5S you have to enter your PIN and can't use the fingerprint scanner.  Seems like a good security protection.  The same thing happens with App Store purchases, the first time after a restart you have to enter the password.

What if that's not just a second security check.  It would be super smart if the PIN and password were only ever stored in the "secure enclave" part of the CPU, so in memory and never written to disk.  Even if someone got the iPhone and took it apart to get at the memory chips, they couldn't get the PIN or password.

You'd have to somehow tear the CPU apart while the iPhone never turned off.

Monday, September 30, 2013

Screenshots Album

I'm in Seattle, Pete's in London, and Shawn is in Los Angeles.

In the afternoons, Shawn and I are working while Pete is asleep.  I got the idea for Screenshots Album one afternoon...

Screenshots Album was a very quick app to make.  I did a "test" app to see if it was possible and how fast it would be, and that turned into it.  Using stuff from FTP to make the one button much prettier and added better messages at the end with the animated help (using one of the next upcoming apps!)

Shawn and I were tempted to submit so Pete would wake up in the morning not just to a new app idea, but one that was done and submitted!  But he makes the best icons, so we waited so he could see and do up a cool one for it.

A nice video of it in action, finding all 477 screenshots on my iPhone from years of app development and photos following along between phones.

Get it in the App Store Now!

Friday, September 27, 2013

GeekWire Article!

Blair Hanley Frank at asked some excellent questions for the article about our upgrade scheme, Pete, Shawn & I worked together on some answers...  I'm better at writing code, but they're better at writing words!

1. It seems like your method creates a number of apps with similar names and the same functionality. Are you concerned about fragmenting your user base?

There is no system in place to do anything other than to fragment.  If a developer wants to charge a different price for their app for iPhone and iPad the only way to do that is to release two versions which fragments the user base.  There's no way to set version 4.0 as a paid upgrade with the option to tell your users ahead of time or give them the option not to upgrade if they don't want to pay again.  Removing the older version from the App Store cuts off your existing user base and prevents any bug fixes.

So while we are worried about fragmenting our user base, there is no alternative way of doing the things we want to do.

It would be so much better if Apple did this so all the app variations (iPhone, iPad, iOS6, iOS7, free upgrade, paid upgrade)  aren't needed.  Once the iOS7 versions are going, we may do some changes to the keywords for the earlier versions so they aren't very easy to find, and we've already added descriptions to go get the iOS7 version.  

The need to maintain a sustainable business--and free upgrades forever is not sustainable--had to override our concerns with fragmenting the user base or releasing multiple variations of one core app.  Ongoing development of an app or any piece of software takes time and money.  If an app isn't going to be a 1-off 'disposable' piece of software then developers (ourselves and everyone else) need the resources to keep going.  Any app that ceases to be profitable will cease to be worked on.  Whether that means the developer abandons the app and moves on to the next thing or goes of business entirely. And if that happens then there won't be any more fixes or improvements ever.

2. I know that apps that are free with an in-app purchase to upgrade to the full version have occasionally garnered a significant number of one-star reviews because users thought they were getting the full app for free. How concerned about that are you?

I'm sure we'll get a few 1star reviews, but over the years, people have become more accustomed to free apps having things to upgrade, so hopefully not too many.  A note about the purchase required is the first part of the app's description in the App Store, so we are trying to be as up front as we can be.  

Our FTP apps are more specialized tools, so even people seeing it for free wouldn't pick it up the same way they would a game.

3. I know you noted in your post that you think this method has a greater chance of long-term success than the program that the Omni Group tried for their App Store upgrades, but are you at all concerned that Apple could still pull the plug on what you're doing?

Omni Group's system let you get upgrades from their website of an app you had purchased from the Mac App Store.  I believe getting something anywhere outside the App Store for something you'd purchased within the App Store was the problem.  Our way is all within the App Store, so as far as I can tell from reading all the information, that is OK.  We were as explicit about what it does in the review notes to Apple as we could be, even saying we hoped for a higher level review to make sure it is allowed.  

We are absolutely concerned that Apple could pull the plug.  And if they do, we will revert to what Omni Group did for their iOS7 updates--release new apps for iOS7 and charge full price.  We were and are willing to take the risk and be kind of a test-case because we believe that this is a necessary evolution of the AppStore if business tools, utilities and other long-term and non-disposable apps are to remain viable.

Let's say a developer writes a great app and sells 1 million copies then works for a year on version-2.  If version-2 is released as a free upgrade then the 1 million people most-likely-to-buy-it end up getting it for free.  The developer gets a lot of happy customers, but no financial compensation for all the hard work.  That needs to change.  If version 2 is released as a new app, even if only a fraction of those million people will buy it, the developer comes out ahead.  

Thursday, September 26, 2013

How to do discount pricing for App Upgrades in the App Store

Or as my brother Pete called it "Smurfberries for Business Apps".

We spent the better part of the summer working on iOS 7 updates.  We'd originally planned a different approach for updating our main apps for iOS 7. (An FTP Client and code editor.)  But in the end, a week before iOS 7 was scheduled to come out, we decided people would have to pay to get the upgrade.

One reason overruled everything:
If we go out of business, nobody would get any upgrades at all. *

Along with most other developers, we have wanted a way to charge an upgrade price to get a new major version of an app.  And we wanted to be nice to our existing customers and give them a discount. We're not just competing with other apps, the iOS7 update is competing with our previous version which is pretty damn good.  If asked to pay full price again, many people (including myself) might stick to the older version which already works great.

Apple hasn't added that option, so we had to figure out how to do it ourselves, while sticking within the published iOS SDK and App Store system.  (OmniGroup tried going outside the App Store so updates were from their website which I believe is why their way wasn't allowed.  Our method should work fine for Mac Apps too.)

It isn't as perfect as Apple could do it, all within a single app and not losing our thousands of 5 star ratings, but it works now.

Our particular apps are bit more complicated since we have both Regular and Pro versions of the app to deal with.  But the simple approach:

  1. You have MyTool in the App Store now, for $9.99.
  2. Create a new version of the app in the App Store, MyTool2, also for $9.99, and submit it.  Optional**
  3. Create a separate "MyTool2Upgrade" for free but with 2 or more In-App Purchases.  Everything in MyTool2 , but have some new features behind an In-App purchase.  (Exactly how to do new features depends on your app.  In our FTP Upgrade app, you can browse and view files, but can't edit.)
  4. In the 2Upgrade app, when they tap the locked feature, check if they have MyTool installed, if they do show an In-App purchase to unlock with the price $4.99; if they don't then show a 2nd In-App purchase item to unlock with the price $9.99.  All the In-App purchases unlock exactly the same things in the app, but with differing prices. 
  5. Once the 2Upgrade app is approved, you can decide what to do with the original MyTool.   Remove it for sale, drop the price, or even simply leave it full price (especially if the MyTool2  is iOS7 only and MyTool works on iOS6).***

Get our apps and see it in action (and support our continued staying-in-business-ness)!  

1st get the FTP On The Go Pro Upgrader for iOS7 mouthful app.  A quick way to get the Activate prompt is to switch to the Saved Files tab, tap the "About" file, then tap the up-arrow-in-a-circle in the bottom toolbar.  Tap to Activate and you'll get the full-price In-App purchase for $9.99.

Then on the same device, get FTP On The Go or FTP On The Go PRO, they've been discounted so are $3.99 and $6.99.  Once one of them is installed, go back to the Upgrader and do the Activate again.  You'll get the discounted prices; $6.99 if you have the standard, or $4.99 if you got the PRO (you'll save $1 if you get the Standard and upgrade that one.)  Buy the upgrade to help keep us in business!

* Not an idle threat about going out of business, if this doesn't do it we've got maybe 6 months before having to either have something work, start doing contacting, or downsize to just me full time.  Having to do that after nearly 17 years in business, and working with my brother Pete and friend Shawn for the past 15 years would be horrible and would greatly impact what sort of updates our apps would get in the future.

** You wouldn't even have to have the paid MyTool2, all the magic happens in the MyTool2Upgrade.

*** We are leaving the existing apps in the store with lower prices, so we can do bug fixes or security updates.  At the least you'd be smart to do an update that detected if they were using MyTool on iOS7 and showed a message about upgrading!

**** For the developers...
There are a variety of ways how 2Upgrade can detect if you have MyTool installed. 
  • Custom URL Schemes and detecting if an app handles a particular scheme are easy, but not very secure.  A developer making a simple demo app could get around this one--but only could get to the discounted price so not too bad.  (It could be made pretty safe if you pass data back and forth between the 2 apps, doing some sort of signing between them.)
  • iCloud key-values.  An excellent way since it can detect they had MyTool even if it isn't currently installed on the device.
  • Keychain.  Also a good way, nice and secure.
We started with the Custom URL scheme one; simple and works even with quite old existing versions of our apps.  We'll add better checks now that we know Apple is going to allow this whole system.

***** More for the developers...
App discoverability is really tough in the App Store anyway.  If you don't want people searching to stumble on the 2Upgrade app and want them to find the new MyTool2 Paid app, it should be pretty easy by giving few or no keywords to the 2Upgrade.  That won't help people searching using Google, but Apple seems to just use the name and keywords for their search results.

Monday, September 23, 2013

9 Million

That's a lot of iPhones.  Going by the unlocked prices, if they were all the cheapest 16GB iPhone 5C for $549, that's a hair under $5 Billion in sales.  The most expensive 64GB iPhone 5S is $849, and if every iPhone sold was one of those, that's over $7.5 Billion.

It's of course a mix, so somewhere between those two numbers.  Not a bad 3 days.

Saturday, September 21, 2013

iPhone blue screen of death?

I got a new iPhone 5S, and got it all setup.  It had to run overnight to download the mass of photos.

In the morning I tried to have it upgrade to the 7.0.1 update.  In the middle, the screen flashed blue (in I'm assuming a nod to Microsoft) and went into Restore mode.

I had to plug into the computer with iTunes and setup everything again.  Weird.  Hopefully it doesn't happen again, I'll have to remember to only apply updates at home.

Wednesday, September 18, 2013

Macbook vs iPhone

Stats are coming in now that reviews for the iPhone 5S are appearing.  I ran the same browser benchmarks on my "Late 2010 Macbook Air".

Sunspider: Macbook=324, iPhone5S=408 (Smaller is better, Macbook wins.)
465 average on my iPhone5S

Octane: Macbook=4514, iPhone5S=5576 (Bigger is better, iPhone wins by a lot.)
5008 average on my iPhone5S, closer but still iPhone win

Kraken: Macbook=5207, iPhone5S=5948 (Smaller is better, Macbook wins.)
6213 average on my iPhone5S

I didn't reboot the iPhone or anything, just started the tests so they may be better if I'd restarted first.

My big 2009 iMac still beats the iPhone, its numbers are better but not twice as good.

All the iPhone numbers are using little cell phone batteries.  Apple in the past has run the iPhone CPU at a slower speed to keep battery life up.  Running the same chip in a Laptop type device, the CPU speed could be higher with a laptop's bigger battery, as well as the CPU cooling that's built into laptops too--fans.  Fans aren't something you'd put in a phone or tablet (oh, unless...).  My Macbook gets pretty warm, and the iMac gets pretty hot on top.

The Retina iPads are already higher resolution than my laptop and desktop, so they've figured out that part too.

If I was Intel or other computer companies, I'd be worried.  Bump up the speed a little, and it could easily get comparable to the current Macbook Airs, and likely with similar or far better battery life.  Intel doesn't make billions by giving its chips away.  I'm sure Apple gets as good a deal as anyone, but making their own chips, they'd not be paying anything more than what it costs them to manufacture--and they're already building these chips by the millions.

Saturday, September 14, 2013

UIAlertView with Blocks

For the Programmers...

I'm not sure why Apple didn't do this one when adding blocks to everything.  A bit of code to do an UIAlertView with passing in a block to handle the button tapped. (It also uses a NSArray rather than a null-terminated list.)

I've not done it yet, but would be simple to do a similar thing with UIActionSheet too.

//.H file...
//Helper to store the block

@interface UIAlertViewBlock : UIAlertView
@property (nonatomic, copy)  void (^clickBlock)(NSInteger buttonIndex);

@interface UIAlertView (MichaelBurfordBlocks)
+ (void)alertWithTitle:(NSString *)title
               message:(NSString *)message
     cancelButtonTitle:(NSString *)cancelButtonTitle
     otherButtonTitles:(NSArray *)otherButtonTitles
         clickedButton:(void (^)(NSInteger buttonIndex))block;

//.M file...
@implementation UIAlertViewBlock
- (void)alertView:(UIAlertView *)alertView 
             clickedButtonAtIndex:(NSInteger)buttonIndex {

- (void)dealloc {
 self.clickBlock = nil;
 [super dealloc];

@implementation UIAlertView (MichaelBurfordBlocks)

+ (void)alertWithTitle:(NSString *)title
               message:(NSString *)message
     cancelButtonTitle:(NSString *)cancelButtonTitle
     otherButtonTitles:(NSArray *)otherButtonTitles
         clickedButton:(void (^)(NSInteger buttonIndex))block {
 UIAlertViewBlock *alert = [[UIAlertViewBlock alloc] 
        alert.clickBlock = block;
 alert.delegate = alert;
 for (NSString* otherTitle in otherButtonTitles) {
  [alert addButtonWithTitle:otherTitle];
 [alert show];
        [alert autorelease];

//Then you get to use it like this!
[UIAlertView alertWithTitle:NSLocalizedString(@"Buy My App", nil) 
                    message:NSLocalizedString(@"Please Buy My App", nil)
          cancelButtonTitle:NSLocalizedString(@"Cancel", nil)
          otherButtonTitles:@[NSLocalizedString(@"Buy Now", nil)]
              clickedButton:^(NSInteger buttonIndex) {
                  if (buttonIndex==1) {
                      if ([SKPaymentQueue canMakePayments] && buyItem) {
                          SKPayment *payment = [SKPayment paymentWithProduct:buyItem];
                          [[SKPaymentQueue defaultQueue] addPayment:payment];

Friday, September 6, 2013

App Upgrades

iPhone apps are cheap.  Our GetRight Pro for Windows is $39.95.  FTP On The Go Pro is $9.99.

We did make a break when the iPad first came out, dropping FTP On The Go to a lower price (without optimized iPad support) and adding the PRO version with the iPad designed UI.  That worked well.

There have been many updates since then, and everybody has gotten them for free.  It makes us work our asses off trying to get new buyers, without any real way to get more money from many people who had bought 3+ years ago and are getting updated versions.

It's putting a strain on the business, competition is fierce.  Serious developers with decent success in the App Store struggling is NOT good for Apple.  Apple's deal so far has been "Free upgrades for life" however the "life" isn't your life, it's the life of the developer or business making the app.  If we fail, you don't get any updates anymore.

We put in a lot of work for iOS7 style UI, as well as cool new features that iOS7 allows like the line numbering in the text editor.

(Other apps of ours aren't so lucky--there are a number that just don't sell well enough to justify updating them for thew few new buyers they'll get, no matter how many people might still be using it.)

UPDATED ALL THIS.  We're doing it for iOS 7.  
If we go out of business nobody's getting upgrades anyway.

What We're Doing for iOS 7

We're going to roll our own upgrade pricing....
  • We are going to leave "FTP On The Go" and "FTP On The Go PRO" in the store, they'll get some updates, but won't be optimized for iOS 7, and won't get some of the new features (line numbers and color schemes in the text editor are some main ones, but it'll also look like iOS 6 on your new iOS 7 device too.)
  • We will release 3 new apps(!) "FTP On The Go for iOS 7" @ $5.99, "FTP On The Go PRO for iOS 7" @ $9.99, and the key one "FTPOnTheGoPRO Upgrade for iOS 7" that is free.  
  • The new paid ones are regular apps, optimized for iOS7 and with all the latest features.
  • The "Upgrade"version is the secret sauce.  You can browse and view files to see the cool new look and all the great stuff in the editor; but can't make changes or do the file management features.  (No upload/download/rename/delete/etc.)
  • When you tap one of the PRO features, it prompts that you need to Activate.  It checks which (if any) of the older iOS 6 versions of the apps are installed, and presents one of 3 In-App Purchases to Activate--each with a different price.  Voila!  Variable priced app upgrades.
  • !!!There's a big question mark about whether Apple will allow the Upgrader app.  I don't see any reason why not, it's doing everything within the App Store and SDK, but who knows.  If they don't allow the Upgrader, then it will just be the 2 new versions for iOS 7 at full price.  We had a big note in the Reviewer comments about what we're doing.  Apple approved it!  
  • After all the 3 new apps are approved we'll drop the prices on the iOS 6 ones a bit and do new versions of those.  We'll add to detect if they have iOS 7 and recommend the Upgrader app. With big notices in the description to look for the newer version if have iOS7.  But this keeps around apps that will work on older devices too.  
  • It can already do nice transitioning of bookmarks using the new Cloud Bookmarks feature; we'll add so it can export and send over all the Saved Files too.  All in some nice directions on a webpage we'll show them.  
If Apple allows it, the Upgrader will be great.  Existing customers get the upgrade for a discounted price.

If Apple doesn't allow it, we at least tried. Everybody who wants it for iOS7 would then have to buy at full price.

It would be so much easier if Apple would add some system of paid upgrades.  This is all going to be a pain, tracking and updating 5 versions of the app.  Not to mention when we get the language translations in; likely 30 from which did ContactClean.  Times 5 apps, times 3 localized screenshots per app (one for each screen size).  A boring couple days for Pete and Shawn, but Shawn said each click for new languages also clicked money which made it all good :)

Tim Ekl from the OmniGroup was at the NSCoder Night in Seattle and said that Omni was just making it OmniPlanner 2 and charging full price.  That's what got us talking today and totally switching up what we were going to do for iOS 7.

Thursday, September 5, 2013

Smartwatch, do this

Samsung's new smartwatch thing looks too big and bulky.  I haven't worn a watch in years, so I'm not going to jump back by wearing a giant thing that barely lasts a day.

So first, be small and unobtrusive.

Our home phone (wow, we still have one of those!) is thru Xfinity/Comcast.  One great feature is if someone leaves a voice mail, it uses voice recognition to trans-scribes it and sends and email with the message as text.  Very nice.

First, the iPhone should simply do that for any voicemail.  Then a notification on a watch (in addition to the notification on the phone itself) can show the text of the voicemail without listening.

Monday, August 26, 2013

You call that piracy? HERE'S some Piracy

Saw this, so went and looked at our stats...

We released the first version of our iPhone "strip poker" app, Poker vs Girls in June of 2009 (really based on the App Store limitations, it would have been better described as bikini poker, but strip poker sounded better! Improved marketing for our poker games was the whole idea.) After a lot of tries, the 2.0 version was accepted in early December 2009.

Version 1.0 had an little banner ad spot at the top, so we could promote our other apps. Version 2.0 needed more space, so we removed the ad. No legitimate purchasers have gotten that version 1.0 since December 2009.  In fact the entire app was removed from the App Store in February 2010 as part of Apple's big sexy-app-purge.  Nobody has gotten it legally since then.

That's now over 3 1/2 years's the Google analytics for that 1.0 ad page, which nobody who did purchase the app would have seen in that whole time.

1.6 Million unique page views.  Every single one of them would be from a pirated version of the app.  (We of course show ads for our other apps on the page that's being shown.)  I'd hope some percent of those people do like the game and keep playing it, so one person could be several of those views, coming from different devices, etc.  But still.

To compare, it did pretty well before it got removed--the total number of copies sold the entire time it was in the App Store was 22,935.

Monday, August 19, 2013

Not so anonymous, that was ME!

Cool, my question got answered

Some of the best companies have had this because of influential founders.  There are plenty of stories about Steve Jobs saying no to stupid ideas.  I'd bet there are lots for Jeff Bezos too.

Microsoft kinda used to with Bill Gates--as long as it didn't go against some sacred products.  Windows & Office trumped everything to the expense of being early but wrong to tablets.   Not so much these days.

Watching everything Google has released or bought, then killed over the years, I don't think they have this either.

Tuesday, August 13, 2013

The difference an Icon makes

We had done the first versions of WORLD 1-1 with a very cartoony icon.

It never really got any traction and never got many downloads.  We wondered about changing the icon to more reflect the 8-bit graphics in the game, and that you're running and jumping.  We submitted an update, the only visible change was to give it the new icon.

Update: A gameplay screenshot to compare...

Before June 28th, it had been free, and getting 1 sale a day (on a good day.)  When it appears in the chart is when the 1.1 update came out and switched to free.  A little bump, but only lasted a day or so. July 25th is when the version with the new icon came out.  A much bigger increase, and it has lasted more than a few days (Update: as of Sept 9, it's still at that higher rate, breaking 2000 on a number of days)--so it's looking good, and has made a huge difference!

Now we have to figure how to get that ~1% conversion rate for upgrading to a higher number.  Even a small bump to the ~2% conversion that Knife Dancing does would be great :)

Now, go get WORLD 1-1 !

Testing iPhone translation coverage...

We are updating one of our apps to include translations.  Since I didn't do the NSLocalizableString() things from the beginning (5 years ago!) there is now some searching and updating.

We wanted to be able to test if everything had been covered, and figured out a very cool trick to do it. (Shawn, Pete and I; and a big part thanks to Pete being in England!)

I setup a British English translation for the project, and set my iPhone to use British English in the settings.  That way my iPhone still works in the language I know best, I'll live with it if it says "Colour" somewhere.

I made a very quick and dirty Mac program that took the regular Localizable.strings and changed so the British version is simply an uppercase copy of the regular text.

(Forgive the crappy formatting, Blogger doesn't do code and indents that well...)

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
NSString *text = [NSString stringWithContentsOfFile:@"/pathTo/English/Localizable.strings" encoding:NSUTF16StringEncoding error:nil]; 
NSMutableString *newText = [NSMutableString string];
NSArray *lines = [text componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];for (int i=0; i<[lines count]; i++) {
NSArray *halves = [[lines objectAtIndex:i] componentsSeparatedByString:@"\" = \""]; 
if ([halves count]>1) {
//Does NOT take into account %f to %F format things...
         //But do fix some newline types...
         NSString    *rightHalf = [[halves objectAtIndex:1] uppercaseString];
         rightHalf = [rightHalf stringByReplacingOccurrencesOfString:@"\\N" withString:@"\\n"];         rightHalf = [rightHalf stringByReplacingOccurrencesOfString:@"\\R" withString:@"\\r"];         rightHalf = [rightHalf stringByReplacingOccurrencesOfString:@"\\T" withString:@"\\t"]; 
[newText appendString:[halves objectAtIndex:0]];
[newText appendString:@"\" = \""];
[newText appendString: rightHalf]; 
[newText appendString:@"\n"];
} else {
[newText appendString:[lines objectAtIndex:i]];
[newText appendString:@"\n"];
[newText writeToFile:@"/pathTo/British/Localizable.strings" atomically:YES encoding:NSUTF16StringEncoding error:nil];


Now its easy for us to run the app and see any items I've missed, like the tabs across the bottom.

PS: As a pretty awesome bonus, switching to British English in the settings changes Siri to be guy with an English accent.

Wednesday, July 24, 2013


I'd seen some posts about iOS 7 and updating apps.  Insta-delete via daringfireball.  I think updating for the new iOS 7 look is a bit different than updating for the iPhone 5's screen.

We're of course updating ours.  While the designers and people who notice things like which variation and weight of Helvetica is used in the text may delete apps, I really doubt that applies to the other 99% of the iOS users.

Every time Facebook updates something, there's a petition that goes around to change it back.  Microsoft hasn't ever updated Windows without some level of backlash (especially Windows 8, but that's another story.)  Android gets around it by not having any one upgrade, people eventually just get a new phone--and nobody is surprised when their new phone looks a bit different than their old phone.

We've had years of learning about what is a tab in iOS, what's a button, what's a toolbar.  Now they look different.  For a decent percent of people, those un-updated apps, that still look like iOS 6, will be familiar.  There won't be that uncertainty about how the app will work.  That chunk of people will be sad and upset when those apps later get updated for iOS 7.

Tuesday, July 16, 2013

iOS versions & developers

Apple published a nice chart of what iOS version people are using.

As part of the WWDC keynote, Apple has also said they've sold 600 Million iOS devices.  1% of that is 6 Million.

But people have broken them (which knock-on-wood I've not done yet), replaced by a new device (which I've done a LOT.)   Lets say 2/3 of the devices that have been sold are still active.

So 1% of that 400 Million actives is 4 Million who are using an iOS 4.x or older version.

Apple posts there are 275,000 registered iOS developers in the US.  It's easy to project that between registered developers worldwide and support teams (testers, designers, etc) there would be well over 1 Million of them.  Maybe even 2 million.  [UPDATE: in the recent Q3 earnings, Apple said there are about 500,000 developers in China, so that should make way over a million developers worldwide--so could easily be 3 or 4 million developers + support teams.]

If they're like us, they each have an old device or two they keep around for testing apps...I've got an old iPod touch and a first generation iPad.

What if that the majority of that 1% using old iOS versions is all the developers testing their apps on old iOS versions!

We're going to require iOS 6 on the next update to our biggest app, FTP On The Go Pro.

Sunday, July 7, 2013


I'm sure other computer makers knew battery life would improve with the new chips, but I bet they didn't plan that Apple was going to make all-day-battery-life "the new thing" in laptops.  The new  MacBook Air's battery lasts something like twice as long as last year's.

My older laptop's 2 hour battery life is pretty sad by comparison.

The same applies to the iPhone and other cell phones.  Every 2 years or so they can double the speed for the same amount of power use.  Which is what they've all done so far.  But someday they can choose to keep the same speed and drop the power use in half.  (Or somewhere in the middle: a small amount faster and lots less power.)

As all the other cell phone makers are caught in the same "fastest processor" race that the old computer companies were, they'll get left behind by Apple.

Wednesday, July 3, 2013

Idea to App: Chainsaw Jugger.

May 20, 2013
We've worked hard on lots of other apps and games, but Knife Dancing continues to be one of our most successful apps, and definitely our most successful game.  Fun, silly, stupid, super easy gameplay.  If you're good you can get a lot of rounds of action in just 1 minute.

We just finished up a nice update to it.  The gameplay itself hasn't changed much from the version 1.0 using UIKit and CoreGraphics(!)  It worked, but the frame-rate wasn't as high as it needed to be for cooler effects.  And I've learned a lot and gotten much better at making cool animated effects and stuff using cocos2d.  There's a new shatter effect I did for this when you finish, as well as seeping red for when you fail.

While doing that, I thought maybe we could do a similar app, something that would appeal to the Knife Dancing crowd.  What's more dangerous than Knife Dancing?  Juggling Chainsaws.  (We'd talked long ago about some sort of juggling game.  Cool to drag up one of those old ideas!)

A very quick prototype after an hour or so, spinning saws and tapping handles (though that's impossible to see in this screenshot).  Yes, it both feels like a game, and feels like one we can do quickly.  We're excited to see the spinning severed fingers when you fail...going for the full gore rating on this one!

A temp chainsaw, likely one we'll get.  Smoke behind looks sweet.  [No, we didn't get this chainsaw, it was an illustration rather than photo.  Blurred out temp ones we didn't get.]

MAY 21.
We want people tapping low on the screen, since that makes it harder.  So a combo of ideas from Pete, Shawn, and I ended up with a bonus line.  Tapping a flying object below the line increases the bonus--but the higher the bonus, the lower the line gets.

Right now, we're talking about a few chainsaws, a circular saw, an axe, a bowling pin and ball, and a tennis ball as the items we can mix and match to make a dozen or 20 combinations.   Then like Knife Dancing, you get a few for free and upgrade to unlock all the rest.

MAY 26
Getting close, Pete is out of town so it's all temp graphics, but it's all looking great and many of the pieces are working.

The temporary menu, the basic layout probably will stay, but we'll do better big button squares and backgrounds.  You'll get the top 3 for free, everything else you'll have to buy to unlock.  And that's most of the cooler ones like the flaming bat, blowtorch, and more.

One of those happy accidents.  There's a tag value used in the tool for building the menus that I check to add fire to the torches when loading the menu in the app.  When adding a new page, I mixed them up so had the fire on a chainsaw.  YES.  Flaming Chainsaws.  A bit of work, and 10+ particle systems going per chainsaw and it ends up with a really great looking fire.  Looks even better in the app than the screenshot as they're flying and spinning.

We didn't want to skimp on the gore for this one.  It was mostly the strip in the middle at first, but Bec kept asking "where's the arterial spray".  All the streaks are for her :)

MAY 29

Looking great, sounds and graphics all working together.  Putting in things like GameCenter for high scores and buying.

Shawn did some cartoony drawings, to use for a splash/tutorial.  We'd thought about using them as the splash, then fading into the game so there wasn't a separate tutorial.

But we ended up using about half of the little bits (pointing hands, but not thumbs-up, etc.)  It became a nice little 10 second animated intro that gives the basics for playing.

MAY 31

Shawn and I had similar ideas, to use the other button on the 3rd page as a "Random" one.  Shawn thought of a slot machine, and it turned out great!  He did the slots and background for it.  Bec wanted it nice and Vegas-y :)

Not sure if the hand or something else will be a bonus thing that you can only juggle by winning it in the slot machine.


Pete got home, so all of the final graphics are in.  Probably submitting Monday :)

Pete (unless it was Shawn?) suggested switching from the set groupings of things to all random to use the slot machine for every game.  Lets it have much more variety, and 4 simple buttons on the main menu.  There's a 2nd page for some special sets: bowling ball and then pins, all big knives, all circular saws, and all flaming chainsaws.  Since all the regular games start with a chainsaw 3/4 of those are combos you could never get from the slot machine.

You get Easy for free, one purchase unlocks all the rest.

Different backgrounds for each of the difficulty levels in the slot machine.  And some nice flashy particles and sounds when the slots hit.  There's only ever chainsaws in the left spinner.

Same background I'd gotten for testing, but far better quality and Pete did much better black/white on it.  Also a better red line and spinning saw blade for the multiplier line and number.

Game over, uses the same buttons from Knife Dancing, with the font matched to the rest of the game.  I know I drew some button outlines and scanned them for the very first temporary Knife Dancing buttons.  I think these are still upgraded versions of the quick scrawled buttons from years ago.

JUNE 11.

A few final fixes, and then submitted to Apple!!


Delayed because of a bug and most of us being out of town and waiting until home before releasing...but it's now out!!

iOS 7

Is not really 100% flat with no drop shadows as everyone says.

Pulling a few images from Apple's public preview site:

The best example is the simple switch.  The button part is raised.

Same for the button on a slider control, which is easy to see in this screen.

There are others, type and hold on the onscreen keyboard on an iPhone, the popup letter that shows what you're typing is raised up as well.

Not sure why these particular things use a little shadow and nothing else does...

Monday, June 10, 2013

Apps, 80/20.

I'd done it in a post here, but thought I'd redo the math with the latest numbers Apple gave.

Announced at WWDC today, 900,000 apps, with $10 Billion paid to developers.  That works out to $11,111 per app.  But I can tell you that not every app gets that!  Using the 80/20 rule, 20% of the apps would get 80% of the money.  That seems more likely.

So 180,000 apps share 8 Billion, for an average of $44,444 per app.  (With the sad other 720,000 sharing $2 Billion and making $2,777 for their average.  That seems more like it.)

Applying the 80/20 rule over and over, so at each level 20% of the apps get 80% of the money...
900,000 share $10,000,000,000 for $11,111 each
180,000 share $8,000,000,000 for $44,444 each
36,000 share $6,400,000,000 for $177,778 each
7,200 share $5,120,000,000 for $711,111 each
1,440 share $4,096,000,000 for $2,844,444 each
288 share $3,276,800,000 for $11,377,778 each
58 share $2,621,440,000 for $45,511,111 each
12 share $2,097,152,000 for $182,044,444 each

So you've got to be in about the top 0.8% of apps to start getting close to $1 million.  And the very top apps make a lot!  The top ~0.16% sharing 40% of the total App Store profits.

(And applying just once more on the lower side, the bottom 80% sharing the bottom 20%: 576,000 sharing $400 million, for $695 per app.  Which seems about right.)

Friday, June 7, 2013


We watched one of the "now in theaters" movies they have thru Comcast's On Demand service.  They usually cost a bit more ($9.99) than renting those that are out on DVD ($5.99).  But they're all independent type movies that aren't in wide release, and not big release movies.

How much would we be willing to pay to watch a current big movie?  Iron Man 3 has been out in theaters a few weeks now.  How much might we pay to watch that tonight at home?  I'd easily pay $25 to watch it at home tonight.  Less than what it would cost for us to go out, maybe pay for parking, and pay the excessive price for movie snacks compared to what we have at home.

I think $25 is the sweet spot.  $35+ we'd maybe do it if friends were coming over, but almost never for the 2 of us to watch at home.

Wednesday, May 29, 2013

iPad mini 1 & 2

Not sure why I hadn't read about something like this before.

For many products, Apple keeps around last years model as a cheaper option.  iPhone 4/4S, iPad 2 is still for sale, even the last iPod touch.

Makes total sense they'll do the same with the iPad mini.

And for all of them, Apple keeps the price the same for the new device and the older models start at $100 cheaper than the newer model.  $229 seems low for the current iPad mini...I'd guess $249 with the updated retina one keeping the same $329 starting price.

Saturday, May 25, 2013


Watched the new Hangover 3 movie, and while it was nice to see the characters again, it wasn't nearly as good as the previous ones.

Spoilers, if you haven't seen it and plan to, stop now....

- - - - - - - - - - - - - - - - - - - - - -

They totally went away from the whole plot of the earlier ones, waking up from a night of crazy stuff and not remembering what happened.  The rediscovery of what they'd done was then lost.

(My Plot:  Why not do the same thing again, that's what the audience wants, but in a normal setting rather than Vegas/Thailand:  several of the guys are married, have something happen at one of their wife's baby shower and they had to find the dad and get to the hospital in time for the birth.  It's LA, wake up in the middle of the Pirates of the Caribbean ride or on top of the Hollywood sign.  So many celebrities to have fun with.)

One sequence summed up the problems in the whole movie.  In the first film, Heather Graham's character was a stripper & escort.  In this one she is no longer doing stripping or escorting, is now married and is ~8 months pregnant.  And all they did was go to her house and she made a couple phone calls for them.  The only real joke was Alan putting his hand on her belly to keep his balance when taking off his shoes.

I have to guess whole sequences were lost to editing or just missed opportunities when writing.  (Who's the husband?  Wouldn't it be funny to have the new husband meet Stu, who she married in the first movie?  Why isn't anything done with her being pregnant?)

There were some bits with Alan and the now older baby from the first movie, maybe that was why  they were there?  And if some of the stuff was supposed to be touching, part of it was also kinda creepy to me too.  (Alan, who they'd made jokes about his huge arrest record for public indecency was alone in a tent with the kid.  To go back to the Brick's line in the Anchorman preview before the film: "Always make sure the parent is present when hugging a child")

And I don't remember any murders in the first 2 movies.  Crazy ridiculous stuff, but not killing people.

The 30 seconds in the middle of the end credits?  That's how I wish this movie had started!

Sunday, May 19, 2013

Not A Superhero

Other than Iron Man with Robert Downey Jr. as Tony Stark, I can't think of any superhero movies where the character would still be interesting enough to make a movie about if they were just a regular person and not a superhero.

Friday, May 10, 2013

Windows 8

I occasionally have to use the PC with Windows 8 on it.  And I finally figured out what that's like:

Turn your mouse 90 sideways, or flip your keyboard around so it's upside down.  While things are kinda familiar, decades of muscle memory are suddenly thrown completely off.  That's how I feel whenever I try to use Windows 8.

Thursday, May 9, 2013

Idea to App: WORLD 1-1

FEB. 18, 2013
I'd seen a video, and got thinking Monday evening: "Damnit, we can make something like that."

FEB. 19
I sent to Skype to Pete and Shawn.
I saw this video, and thought it woudn't be that hard to do something like that.   
I'd bet with everything from other apps, it's the sort of thing I could do as a personal challenge: can I get this running in a weekend :)  And a really good name that seems to be available:  "WORLD 1-1" ( is available, no trademark results at all--but people will still get the reference.)   A little pixely character running and tap to jump.  Doesn't need much graphic variety--since it's just world 1.
The response was pretty much: Yes, get the .com, lets do it.

I started programming, Shawn started drawing, and Pete started grabbing bits from things we already had to Photoshop together.  Shawn had done a cute alien character when talking about another idea (XXXX); aliens and an alien invasion are a great theme.  Redoing it as a pixelated guy looks sweet.

A potion as the stand-in for the character, start at the ground (re-using the old ground Shawn had done for an unreleased game, but it got used in BounceBash; rescaled and pixelated.)  Ground scrolling and jumping working nicely.

FEB 20.
Actually working well as a game.  Early in the day, with better ground curves and edges that Pete did over night (he's in London, I'm in Seattle and Shawn is in LA.)

I asked Becci what sort of regular person to use for the hero instead of a police man or astronaut.  She said a Pizza Delivery Guy.  Bingo.  "The 30 minutes or less guarantee doesn't make exceptions for alien invasions!"

Late in the day.  Shawn did the awesome little pizza delivery character.  A few frames of animation are all that's needed to match the pixelated style.

I did simple gray rectangles and highlights to make some buildings in the background.

Saucer Shawn had done, small ones are in the background, big ones go past and zap down to destroy sections of the ground.  I adapted the shattering effect to do squares.  Lined up on the pixels, it looks great for breaking apart anything!

I did so both the saucers and buildings in the background could get destroyed--saucers spiraling down, buildings collapsing.  Becci vetoed the buildings collapsing :)

I'm going to say I did complete my "in a weekend" basic challenge.  It works well on the 2nd day after starting.  Still lots of polishing--but now we've got something worth polishing.

FEB 21.

Started working on data files to build obstacles and ground, to make it easier to build a variety of terrain.  And Pete did some blending blocks so the ground can have nice corners.

With pushing from Pete, I think we got the controls:  tap anywhere to jump, tilt to control the speed.  Walk, Run, Sprint for the speeds.  He also automatically slows down when you run into something to give time.  And moved much farther forward on the screen, less time to react, but more time to recover.

FEB 22.

At Pete's suggestion, some better things for the ground level data.  Adding curves automatically as needed, and a nice builder tool so we can make levels much faster.  This will let us build dozens or hundreds of ground sections, that it can append together on the fly to create the levels.

FEB 26.

Lots of work:  Getting the jump height just right, graphics, physics.

Way too busy in the background, we'll see how it gets pared down.  Skyscrapers and treetops are what we've been typing just now in a Skype window.

2 sections so far, the outside and warehouse.  It'll randomly switch so you run thru a warehouse.  All the level designs will work just the same, it just picks the graphics based on the section where you are.  And planning a "shopping mall" for another section to run through.

I adapted some more things from the shattering effect, so it can break the new ones in half, then it keeps breaking the squares into 4 smaller squares.  Turned out very cool for an effect as the big blocky saucer falls.  Though we may do a different alien ship that's more cartoony.

Pete did floating versions of the ground, so there can be sections up in the air.  Same for the bricks in the factory.

MARCH 3, 2013

More work, more graphics.  An in-game tutorial that's working well.

The houses are going to be places you deliver for bonuses.  Regular houses easier to reach; Mansions up high or something so that you'll have to do a series of jumps to reach--but they'll give bigger tips.  And a much improved builder to add all the stuff.

And both types of houses will be upgradeable to increase their tip amount.

So it's a bit more G rated most of the time, we're going to do Alien Invasion with the plain saucers, green trees, nothing getting shot down.  But an upgrade in the app for Alien Apocalypse that has the ominous black ships getting shot down, skyscrapers collapsing, dead trees, flaming barrels, and maybe a whole sepia-toned look to all the graphics.  (Plus a few surprises!)

We did a selection of cars and vehicles as obstacles to jump over;

And storage containers for the similar size things in the warehouse.

Aliens working, moving around and killing you if you bump into one; but as is traditional, you can land on them to squish them.  Put in some of the "strip mall" ones I'd done.  Not sure that's the right ground, it's what earlier ones had in the warehouse.

Working on some status up in the corners, not sure that's right yet...


Yeah, strip mall changed to "Downtown".  Uses the skyscraper images, stretched a lot, and very dark buildings so it's easier to see the foreground.  And a new nice tiled ground for here too, Shawn did the shape and Pete added all the rounding and floating angles.  You can see in this one I got the auto-desaturating to work, for the apocalypse.  I love that the code is filled with checks:
if (apocalypse) {

Watching a few people play, we needed things to keep from just running fast and jumping as high as they could.  Level design will help a lot with that, but some more dangerous flooring and stuff will help too.  So we added spikes and spinning blades :)  (Though we later removed the spikes and just have spinning blades.  The pulsing of the spikes in and out didn't fit as well.)

And fire, can't bump into these black blocks. Before they only burned from the top so you couldn't land on it, but could push against them.  Now flames all around and you can't touch fire blocks at all.  (It's the first easter egg you can see in these screenshots, very subtle upside down Space Invader aliens in the black blobs.)

Lots of fire.  The warehouse can be an inferno!  The red girder platforms in this picture will also move up and down, really hard to keep out of the flames.

And something when you die.  Bec said smoke (since I was showing the fire and dying over and over) but Pizza slices fit with any of the death types and not just fire.

Getting the powerups working nicely too.  And as in many of these type games, having a powerup and hitting the fire or other bad obstacles won't kill you instantly.  Lose the powerup and get a bounce as if you'd jumped.


Lots more stuff working, upgrading things, bank, some in-app purchases.

We needed more drama and danger, so added so things that move and fall.  And also bombs we can position around the levels to explode and give things a push.  Now we have lots of options for traps to avoid, such as blocks falling like dominos.

And the increasingly complex Builder.  We can set 3 screen positions for where the bomb blocks go off, to time things either blowing up ahead or behind the guy as needed.

Stuff falling, feels much more precarious if you're jumping off blocks that are falling away!

Littler change, but we can tell it to do "inside ground" things, so circles look right without green grass edges on the curves on the interior.

The bigger alien that you can't land on top of.  Also shows the physics edges in this: the little guy is built up from a lot of shapes to get all the detection needed.  And gravestone where you had died before.

I did a few Skype video chats, showing niece Hope (9) how to use the builder, and she's made a few levels.  Some crazy things the rest of us wouldn't have done, like a row of a bunch of red bouncy balls. And she obviously loves the fire!  We'll need to pare hers down, they're filled with fire and pizza slices, but some great ideas too.

Upgradeable powerups...

Upgrade to the Apocalypse!


More polishing.  The "Game Over" screen for resuming.  Maybe some more background, and bank info, but I think it's getting close.

We did a few big machine things for in the factory.  Equivalents of the big blocks of ground that can fall with gravity and explosions.

Should be very close.  The beginning screen, text fades and goes right into the game.

We decided you needed some more incentive to run, so added a clock.  Get there while it's in the white and you get tips.  Let it get into the red and no tips--and run out of time means only 1/2 price for delivering.

Maybe close to the final status UI at the top.

Getting SO close now.  Been using this site to make sound effects, the ones we've got all sound pretty great so that may be it.


Fun bugs sometimes become a real thing.  We had a slice doubler powerup, that just gave you x2 when you picked up a slice.  When adding so some random blocks you smash could shoot out a slice, it was doing it for every slice.  And it was cool and funny, so changing to have the slice doubler do that--every one you catch shoots out another two to chase.


Keep getting closer.  There are less visible changes in the game play itself, and many of the other pieces are working.

Updated intro screen, to use consistent colors and buttons.  (And easy to change from Invasion to Apocalypse if you've got that upgrade.)

The settings to let you adjust.  The Joystick is newer, it was surprising how many people were turned off when we posted about the game because of the tilt controls.  Too many games doing it badly I guess.  As Pete said, "Doodle Jump would suck with buttons."  So we tried doing a joystick and it turned out very good.  On the full size iPad it works even better than tilting since it's a big device to tip :)

The Joystick and jump button in-game.  Not pixelated to look cooler and different.  Also shows some extra particle effects when you have the magnet.

The Paused screen while playing.  Much the same as the settings...

And the store is looking done.  We did a "Ken Burns" background for the store and some other places where it shows terrain from the game, slowly panning and zooming.

We're working on a new set of Intro screens after the app is started, to tell our basic story and introduce the "hero" with a couple quick pages of animation/images.  In what is likely to be our oldest graphic re-use ever, the earth is from a GetRight splash screen from back in 1999.  We could do much better now; I didn't even tweak the obvious parts of the globe that could be improved.

The first page is working well, and uses the Pixel Coalesce effect that looks so good for the text.


The basic idea for page 2 of the intro looks really great too.  Pete did some background layers, and Shawn separated the foreground head and box, so the whole thing can do an interesting zoom...

Hope's level in the builder, before I cleaned it up and removed most of the fire...

And another, after a few tweaks to remove more fire and stuff.  She was the first one to do the single-block tunnel shapes.  We might have done them too, but after seeing hers, I copied the idea for quite a few!


Yesterday, we decided we needed some sort of real ending.  And it turned out really nice!  We had a couple ideas: one that gave some dark twist ending, one that added a serious depth to the game, but in the end picked a sillier and more mysterious end that also sets up a possible sequel.  Only have to get to the 33rd house to see it!   (No pictures, no spoilers, but the rejected ending ideas are at the end of the post.)

Winning will unlock the Apocalypse if you hadn't gotten it already.

Down to tiny little tweaks and improvements.  The very first game, and when doing the Help, it asks about your control preference.  With animated tilting and moving back and forth.

Moving around things on the Store and Settings.

Trying to look at every little thing to make sure it's as perfect as we can get it!  We took out a couple stages in the tutorial to get you into the game faster.


Submitted to Apple!  Just a bit over 2 months from start to finish.

The very last thing done was to add so the timer does the appearance at the end of the first tutorial to show itself in the center and then move to its spot in the status.  Lets you see that there is a clock, but quick and minimal.

Pete made some cool comparison shots between the original sketches Shawn did, and the final characters. They are in the iTunes screenshots at least in this first version, but here as well in case we change that.  I love the Standard vs Retina comparison!  (But look at the eye, there's more detail on Retina; and likely the retina iPad will be double again and may get an extra 1 pixel twinkle in his eye!)

Some "Posters"...

After a bit of a scare, getting the dreaded "Your app requires additional review time" email, we got the second "Approved" email about 3 hours later.

Everything is good for the May 9th release!

Available now in the App Store.


Our rejected ending ideas....

The dark twist ending:  You'd deliver to the aliens at the end, who'd berate you for having squished other aliens along the way.  "FML" was Becci's suggestion for the text.

And the serious depth:  You'd arrive at a refugee camp filled with kids.

We went for something more mysterious...  We may post a video eventually--if nobody completes it and posts it themselves.