Category Archives: iphone

Building a Great Mobile Team – Personal Thoughts

A while back I read a great blog post by Elad Gil who kick started Google’s Mobile efforts (see link for the full post).

not-a-smartphone.jpg

In the past 1.5 years we built our own mobile group in SHC Israel, and while I can definitely relate to much of what the blog post describes, I will list here a few points where I view things differently.

  • Hire great athletes; mobile “experts” will be useless in 6 months.

This is a very general saying, I’d even go further and say that if you find a ‘great athlete’ – hire him. However, I believe we are now in a different environment than even 2-3 years ago, mostly because today there ARE mobile experts. As iPhone and Android are no more than 3 years young, obviously that time ago you couldn’t find any subject experts, and when you looked for ‘mobile people’ your applicants usually had a not really relevant WAP experience at best or low-level cellular networks level in other cases. These days, if you can find people with 1-2 years of real iPhone experience or even better – who actually released something meaningful to the App Store, this could really help you boost your team level.

  • Don’t hire mobile Product Managers.

Pretty much the same as above, a great Product Manager is hard to find – if you find an all-around great PM, chances are he’ll do a great job in the mobile area as well. Here’s the thing – I believe PMs need to ‘live’ their product. If your PM is not an iPhone experienced user, the chances of him defining a great product are not promising. The relevance of real Product experience become more relevant as the mobile development industry matures, obviously.

  • You must build for all platforms from day one.

I definitely agree that you shouldn’t spread yourself thin and develop on all platforms, especially if you have limited resources. There are ‘magic solutions’ which supposedly let you build once and run on any device – I’m yet to see a good solution for that (it may run, but usability will be questionable in most cases. I’m not saying it’s not possible, I just didn’t see any). Choosing eitherAndroid or iPhone is, as the post says, a good bet. Personally, I think iPhone is a better bet as a start, if only because of Android’s fragmentation, both in the device types and deployed OSes. This may change (the starting point) in the future, though.

iPhone development – continued..

So, last time I wrote about what you need to get started with iPhone development. I thought now would be a good time to talk about stuff I encountered along the way, which I guess almost anyone developing for iPhone would encounter eventually.

This time, let me focus on memory management. Objective-C uses reference counting for its memory management, and the version running on the iPhone does not have garbage collection (yes, this is so 90s..). Anyway, this forces the developer to actually think about what is being allocated, when and where. Apple has a guide about Objective-C memory management in its developers’ resources, begin by reading it.. Assuming it’s clear enough, the next thing to do is to actually check your program for leaks (if you’re a beginner, there are leaks – trust me..). Luckily, Apple provides a tool along with its SDK called Leaks (here’s one place where they didn’t think they need to be original..), which tracks your program in runtime (on the actual device, actually, which is pretty cool and also recommended, as the device behaves differently than the simulator in some aspects, and memory is one of those..) and marks places with leaks. The tool is very nice, but in my opinion not the friendliest tool for beginners. One downside is – it can only detect flows you actually went through (obviously), and it’s sometimes hard to determine what’s the actual source of the leak. Still, if there’s a leak during runtime and yo u passed through the leaking flow, this is your best chance to catch it.

One downside I didn’t mention about the Leaks tool and which is not that obvious, is that even when you find a leak, it’s not always obvious why are things behaving the way they are. It so happens that I found a great tool which does static analysis for Objective-C code, and the best thing about it is that when it finds bugs (memory leaks are bugs, duh..), it also explains why is that a bug. The tool is called Clang Static Analyzer and it’s pretty straight forward to use – you download it, extract it, and then use two simple commands:

/path/to/clang/installation/scan-build xcodebuild

(This should be executed in your program’s home directory).

Then, once this is done, a report will be generated and the last line in the verbose output of the build will have the report name, then simply execute>

/path/to/clang/installation/scan-view <report name>

Which will open a browser window with your report, links to the source files and cool embedded explanations. Once you do the fixes, execute the scan again and check there are no more errors.. note that the default behavior if there are no errors is not to generate a report at all..

So, that’s it for now. More on the fun in iPhone development next time..

iPhone development – the beginning

A while back, I assumed responsibility for an initiative which includes iPhone development. Having had to bootstrap the project, I went through the various stages of learning, technology choices, getting the right material and establishing the basic methodologies for developing mobile applications, specifically on iPhone, in a company. I will try to describe in this post some of the more interesting issues I encountered during the beginning of the development, hopefully it would save someone some time.

Let’s begin – just to make it clear, you better have a Mac to develop for iPhone. There are Hackintosh solutions with questionable legality, there are Terminal Server solutions (like Aqua Connect), and if your iPhone is jail-broken, you can even use it as the development platform (again, not an Apple legitimate method), but the best experience for the developer and probably the only Apple approved way of doing iPhone development.

So, after having a Mac around, the first thing someone beginning to develop on the iPhone platform should probably do is to register with the Apple Developer Connection. In addition to the basic resources you need, and assuming you plan to publish your stuff on the App Store (there are other, at the moment not ‘legitimate’, options to publish your application, I will not discuss them here), this is where you’ll get you certificates and keys to test your application on your device. Developing using the iPhone simulator is free, but deploying on an actual device will require you to pay, currently it’s $99 yearly subscription. If you plan to have a team of developers, choose the Team option (costs the same..), and if you’re a company, note that you’ll have to prove it (by sending Apple the relevant documents), this, too, will cost $99 per developer. The Enterprise registration is for development of Enterprise applications (not to be published on the App Store).

Once you’re done with that, you can start reading the relevant manuals, there’s a pretty good Objective-C (the language you use to develop on iPhone..) guide there, there are some other guides online (line here), and I personally recommend having a physical book around (Programming in Objective-C 2.0 is the one we’re using, and I think it’s very good). Having done most of my programming in other languages, I found some ‘weird’ aspects in Objective-C, but that’ll probably have to wait for another post.

Now that the basics are established, I found a great way to get acquainted with iPhone development is the Stanford online course. Although it doesn’t cover iPhone OS 3.0, in my opinion it’s a great starting point. I think it’s important to get to know the tools and the environment, maybe create a simple app (or try to) before going through the course (it’s probably the equivalent of doing the exercises given throughout the semester), but it really allows the beginner developer to close some holes which are hard to close when you’re just going through documents and online tutorials which, in many cases, have varying levels of assumptions on the knowledge of the reader. This course aims for beginners and tries to makes sure everyone knows their stuff by the end of it, regardless of their original background.

In addition to the Stanford course, again I found a physical book very helpful, and the best one I found is Beginning iPhone 3 Development, which both includes changes from iPhone OS 3.0 (complementing the Stanford stuff), and has some very common and good examples for iPhone applications.

Ok.. That’s the beginning. Right after that comes the part where you actually do stuff and hit some walls. I’ll try to describe some of the walls I hit and how I got around, over, under or through them in future posts (promises, promises..).

Update: I found this list of online resources from StackOverflow which looks very helpful..