iPhone

Fragmented Capital - It Just Got Harder to Be an iOS Indie Developer

With Apple’s announcements yesterday, it just got a lot more expensive to develop for Apple’s ecosystem. I’ve written before about why it’s important to test your code on as many different devices as you can before you ship. That’s been getting harder and harder over time, but it just got a whole lot worse. Up until now, Apple pretty much only released one new iPhone a year. Yes, they released two last year, but the 5C wasn’t all that different from the 5 for programming purposes, so many of the devs I know skipped it.

 2 min read

Programming an iPad with an iPad: Putting the "Mobile" into Mobile App Development

This is a talk I gave on Thursday at the Austin CocoaCoder group (and here is the PDF if you don’t do Flash): Developing iOS apps on your iPad with XCAB View more presentations from Carl Brown The code is here on GitHub, and you’ll need this version of iOS-BetaBuilder and accounts with Boxcar and Dropbox.  It’s not perfect, yet. There’s no provision for managing XCode projects or xib files (you’ll still have to do all that on the Mac), no auto-complete or refactoring or debugging or instruments and the lag and long cycle time gets old.

 1 min read

Mobile Apps - Boom or Bust? Sherman, please set the Wayback Machine for 1994, and then 1853

In the last few days, I’ve seen reports that Mobile Apps are repeating the 1996 expansion, and reports that Mobile Apps don’t provide a viable business model. I think that there are elements of truth in both articles, but I don’t think either is an adequate depiction of what I’m seeing. Let me see if I can explain. Like others, I feel like I’ve been here before, but for me the year wasn’t 1996, but 1994.

 2 min read

Fixed Price iPhone App Proposals - One Contrary Consultant's View

I’ve seen a some traffic lately about billing and proposals for writing iPhone apps. Most of what I’ve seen revolves around hourly rates, but I think that’s not a helpful way to go, so I thought I’d chime in with my opinion. I’ve been a consultant off and on for the better part of my career, starting with EDS in 1993. I’ve worked for different consulting shops and independently and I’ve read extensively on the topic.

 4 min read

360iDev Impressions - Day 0

The first class I took was Kendall Gelner’s Advanced Debugging class. It was really, really good. I learned about using the Mac “User Interface” instrument to record and play back simulator events for debugging and how to create custom instruments with DTrace. It was a well organized, very useful talk. Sunday afternoon I took Saul Mora’s Unit Testing that Doesn’t Suck class. It didn’t go as well. The class was predicated on the attendees having GHUnit and MacRuby, and the hotel WiFi completely failed under the load (and not for the last time during the conference).

 1 min read

360iDev Impressions - Day 1

Monday morning, David Whatley did a great keynote that was based on this video. He talked about what happened at his company when he instituted a Results Only Work Environment. It was very interesting, and ended with this. Which is the coolest way to end a keynote, ever. I started with Tom Frauenhofer’s Cocos2D class, which is probably the class in which I learned the most the whole conference, but that’s largely because I had never touched cocos2d before, so I had a lot to learn.

 2 min read

360iDev Impressions - Day 2

Tuesday opened with a informative panel that covered a bunch of issues including the upcoming Mac App Store, and Android vs. iPhone development. Then on to Tim Burks' Get Your Head in the Clouds talk. I learned about a lot of really cool tools I hadn’t dealt with, especially ASIHTTPRequest, which I think I will find a lot of uses for. Tim was very prepared, but it was at times a difficult talk, as he got questions ranging from subtle differences between Heroku and AppEngine to “What is this Amazon S3 you keep mentioning?

 2 min read

360iDev Impressions - Day 3

Day 3 started an hour later (to give us time to recover from the party or the Game Jam or (for some crazed souls) both). We went through a review of the people that wanted to present their apps. Lots of very impressive accomplishments for such a short time. Next, I went to Brandon Alexander’s talk on Interface Builder. It was a rough talk (like Time Burk’s the previous day) because there were obviously some Interface Builder experts int he audience, as well as some people who don’t seem to have ever used it before.

 3 min read

360iDev Impressions - Overview

I got back last night from the latest 360iDev conference (my first time to attend). I had a great time and learned a lot, but most importantly, it provided a lot of motivation I really needed to keep working on my apps. I went through my notes to reinforce my memory while it’s reasonably fresh, so I figured I might as well post my notes. Pre-conference class notes start here, and continue to Monday, Tuesday and Yesterday.

 2 min read

Color Mixing with Multitouch

OK, It’s more fun and more challenging now, although I’m not sure anyone would buy it, even if I polished it. It was way too easy, so I took a cue from @ OwenGoss’s Dapple and put in a color mixing element. So now there are 6 colors of spaceships and 6 colors of shields but still only 3 buttons: So if you want to block the green aliens, you have to hit the Blue and Yellow buttons at the same time while the green spacecraft enters the atmosphere.

 2 min read

It's a Game! (Not sure if it's any fun, yet, though)

Movie code starts ! Movie code ends ! So it actually kind of looks like a game now. I need scoring, I guess, and some consequences, but the idea is there. From The List: Get a cocos2d hello world screen showing the big blue ball royalty-free NASA supplied image Get a quick sprite to be the bad guy on the screen. Cover the world in an opaque block when screen is touched and restore it when touches end

 1 min read

My plan for world (and self) deprecation

While I’m waiting of my wife and 4 year old to meet me for dinner, thought I’d jot down a quick list (it doesn’t count as starting until I open XCode, right)? Get a cocos2d hello world screen showing the big blue ball royalty-free NASA supplied image Get a quick sprite to be the bad guy on the screen. Cover the world in an opaque block when screen is touched and restore it when touches end

 1 min read

Quick concept art

Threw this together in DrawIt (scaled down to save bandwidth):

 1 min read

Status Update: Primary-Colored World

Movie code starts ! Movie code ends ! Really remedial, but something is actually happening. Only took 4 and a half hours to get colors to show up. But, as for my list: Get a cocos2d hello world screen showing the big blue ball royalty-free NASA supplied image Get a quick sprite to be the bad guy on the screen. Cover the world in an opaque block when screen is touched and restore it when touches end

 1 min read

Talking to Myself

I’m going to keep writing updates to RapidWeaver locally - Although I have no idea when I’ll have enough bandwidth to actually publish them. Kinda takes the fun out of it. In any case, I have the ship moving (until it hits the bottom of the screen). It’s at least looking more like a game now. Next up: Conveyor Belt

 1 min read

The Sky is falling!

Movie code starts ! Movie code ends ! Or at least the aliens are. Get a cocos2d hello world screen showing the big blue ball royalty-free NASA supplied image Get a quick sprite to be the bad guy on the screen. Cover the world in an opaque block when screen is touched and restore it when touches end Make the alien move.

 1 min read

My iPhone is dead. Long live my iPhone! Today I wonder, how did I ever make it through college?

My iPhone died. Well, not died necessarily, but it’s dead to me. I was upgrading it to the newly released 4.2 Gold Master, when it threw a fatal error. Can’t upgrade. Tried going back to 4.1 - same error. So that sucks. Made an appointment at the Genius bar at the apple store for this afternoon. I’m confident they’ll fix it. But here’s the problem - what do I do between now and then?

 3 min read

New iPhone Secured. I love the Apple Store. no more iTunes error 1013.

So, after my iPhone 4 bricked with a BaseBand update error, I made an appointment at the domain apple store here in Austin. I explained the situation, which was kind of hard for them because they don’t have access to the same set of tools that we developers do. Their setups don’t have the ability to deal with developer software images, so they were kind of at a loss as to what to do.

 3 min read

The Hard Stuff - iPhone App Design Edition

I was talking to my latest iPhone App customer today, and now that we’re both able to look at the prototype, we were talking about the features that we could add before the shipping version, or not. We talked about trade-offs, and I heard myself saying the same thing I’ve said many times before, so I thought I’d write it down. There are three really hard things about iPhone Apps (at least to me - I have a background Enterprise and Web Apps).

 2 min read

What a Difference 2 Years Makes - a Study in Contrasts With iPhone Ad-Hoc App Distribution

The first iPhone App that I worked on was submitted in October of 2008. The month before we submitted, there was a flurry of emails between me and my customer, a sample of which are reproduced below:  Begin forwarded message: From: Customer Date: September 16, 2008 12:58:19 PM CDT To: Carl Brown Subject: Re: iPhone project status  My Identifier is XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Emails omitted for brevity. Begin forwarded message:

 3 min read

Alternating accessoryView and accessoryType in UITableViewCell

Quick post about a problem I had today. I’m writing an app for a client that has a checklist component. So a UITableViewCell is in an unchecked state, and then when the user hits it, it becomes checked. I like the look of the UITableViewCellAccessoryCheckmark, so I’m using it, but I needed something when the cell is unchecked, so I’m using a png that has a circle. I was having a problem that when the cell was unchecked and I tapped on it, nothing appeared to happen, although if I went to another screen and came back to that one the check box would show up.

 2 min read

A Tale of Two Table Views - my UISearchBar Race Condition that I finally found

OK, so I finally found my race condition, I’d talked about here and here. So, in my KidChart app, I have a UITableView that has a list of all behaviors that people can pick from:   and in the search box above, people can start typing to narrow down existing behaviors and then click on one so they don’t have to scroll as much. As soon as the UISearchBar gets focus, it does this:

 2 min read

UI Automation App Input

So, I’ve been doing more UI Automation test work, and I’ve discovered a couple of things. I’m kind of trying to write them up as I run into them, although I’m putting together a helper library that I’ll announce at some point, hopefully soon. So, what I’m trying to work on is a race condition in my KidChart app. The issue (I think) has to do with notifications during input into an UISearchBar.

 2 min read

Apple iOS iPhone UI Automation Testing: What does Accessibility have to do with it?

Trying to do some UI Automation testing going on one of my Apps today. Have a race condition, so I want to have a script to run it over and over again to have a better chance of catching the problem (more on that in a later post). So, I just wasted 2 hours trying to test this structure: And the problem was that I had this set in Interface Builder:

 1 min read

Hidden VPN/DNS Gem in Apple's iOS4.1 announcement today

I’ve been on-again, off-again fighting with getting my iPhone 4 to talk to a Cisco VPN concentrator to connect to a company internal network. The iPhone would connect, but it couldn’t resolve any names, but my iPad worked with no issues.Turns out, the problem was with iOS 4.0.x’s implementation of Multicast DNS. According to this IETF draft, ‘…Any DNS query for a name ending with “.local.” MUST be sent to the mDNS multicast address…’, which Apple took literally for iOS 4.

 1 min read

Look, Ma, no laptop!

I implied earlier that when I use BlogPress to write a blog post with my iPhone or iPad, that I had to wait until I got to my laptop to publish it. That isn’t true. If I want to tweak it in RapidWeaver, then I have to wait for my laptop, but if I’m okay posting it without going through a proper preview step, I can just hit “Publish Now!” in BlogPress, and let RapidBlog handle the rest.

 1 min read

NSInMemoryStoreType is not a good substitute in unit tests

So I was writing some tests for my KidChart app, which uses core data, and I wasted a ton of time, so I thought I’d post to warn people. I wanted to avoid having to reset the state for each test, and I wanted the tests to run quickly, so I used NSInMemoryStoreType for my persistent store in my unit tests. This is a technique I’ve used before in other programming languages, and I was new to Core Data, so I was applying what I had done before to something I had insufficiently researched.

 3 min read

People Seem to Prefer Videos and other things I learned from trying to advertise my iPhone app.

I have a couple of apps of my own in the AppStore. Most of the sales of the apps I have worked on have been the apps I did for other people, because, well, they are better than I am at marketing.So, I’ve been trying to figure out how to do marketing with one of my apps, KidChart. It’s been out several months and sales have trailed way off. I like it (my wife and I use it every day), but I haven’t figured out how to market it.

 4 min read

Blogging workflow with Reeder

I’m a huge fan of Reeder for both the iPhone and iPad. It’s so much faster and more convenient than any other Google Reader client I’ve dealt with, I haven’t launched Socialite or NetNewsWire in weeks.So, when I decided I was going to start blogging regularly, I wanted to make it easy for me to do so. This is the workflow I worked out: I set up a blog on blogspot, and then linked it to my site (which I edit with RapidWeaver) with RapidBlog from Loghound.

 2 min read