Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

mousouchop

macrumors 6502a
Original poster
Oct 22, 2008
814
118
New York
(If you don't want to read my lengthy preamble, skip strait to the bolded questions below. Thanks!)

I am a Java programmer by day, writing mostly JSF-based web applications. With this, I do a fair bit of HTML, CSS and Javascript. I am looking to start some freelance programming on the side, with the ultimate end-goal of no longer needing a full-time job. I would love to be my own boss and not have to report to any one particular place every day/week/month/etc. However, that is far down the road.

Right now, I am looking into programming for iOS as my first step towards freelance programming. I don't need to create the next "Angry Birds" and become a millionaire. But as an iPhone owner, there are a couple of apps that I wish existed that I believe I am more than capable of creating if I were able to program for iOS. The application that I want to create is largely user-data driven, and mostly just relies on queries. For this first project, I am not looking to utilize any sensors/cameras/mics/etc on the iPhone. I simply want to capitalize on the mobility and convenience of an iPhone application. That being said I have been wondering a couple of things:

1A) Should I just make a web application (probably in PHP, perhaps with the Laravel framework), that would allow me to run my application on any system, wherever I am? Additionally, this would allow me to make my concept application a realization much quicker. I can program for the web with ease, whereas I know ZERO Cocoa/Objective-C (not that I'm averse to learning a new, useful programming language).
1B) If I were to go this route, and optimize it for mobile, I could theoretically make a shell iOS app that just pulls up the application in a browser module, right? Aren't these apps generally perceived as "lazy" and "sub-par"? Are there any majorly successful, responsive and elegant iOS applications that are a web application at their core?

2) If I were to go the route of making a native iOS app-- what are the challenges faced by iOS programmers in the wake of a new iOS release? I know that WWDC is around the corner, and that iOS 8 will undoubtedly be announced. If I were to begin learning to program for iOS 7 now-- will the syntax change much come iOS 8? What was the impact on on iOS programmers in the jump from iOS 6 to 7? Minimal?


Thanks in advance for any answers I may receive!
 
iOS developers are used to relearning some amount of stuff every year. But it's pretty much the same if you want to keep up with Android.

Java chops will give you a big head start with Android. Developers with both iOS and Android experience might be in higher demand in some areas than those who know only a single mobile platform.

But if you want to freelance in iOS development, learn Objective C. Portable HTML5 coding won't get you many consulting gigs or sellable apps. If you know Java well, plus a bit of C, the learning curve to a basic development skill level should only be a few months (e.g. the Stanford course takes 1 quarter).

Note that less than 15% of iOS freelancers make more than coffee/beer money from their own apps. Mobile app consulting might have better odds.
 
There are a lot of options.

Web apps are generally liked by managers at big companies who go for the write once run anywhere, lower costs, jive. They are generally disliked by users. Many of the larger companies like google started with web based apps and then went native.

There is a framework called PhoneGap which hosts a web app inside a native app on iOS/Android/other mobile. From what I've seen I don't like it. If your app is completely html5, js it probably can work. If you want to access the device hardware you can do so with third party plugins but my observation is that you get into a dependency nightmare with PG, third party libraries, Xcode, iOS etc. where each is revved periodically and it becomes problematic keeping all in sync. I think also that debugging a js/html5 production in phone gap can involve multiple development tools running at once.

In terms of jobs there all kinds. Load up Monster and do a search for mobile, iOS, Android, etc. There are certainly phone gap jobs.

I would recommend native development. Most Java guys go with Android. Mac guys go with iOS. But there's more money to be made in iOS development.
 
(If you don't want to read my lengthy preamble, skip strait to the bolded questions below. Thanks!)

I am a Java programmer by day, writing mostly JSF-based web applications. With this, I do a fair bit of HTML, CSS and Javascript.

Just for clarification, do use Java or Javascript (or both)? They are not the same.

Java is a C-like object oriented programming language. If you know Java, you should have no trouble learning Objective-C.

If by "Java" you meant Javascript, then that is something entirely different.

Warning, severe, radical opinions ahead expressed very bluntly!

1A) Should I just make a web application
No, and neither should anybody.

1B) If I were to go this route, and optimize it for mobile, I could theoretically make a shell iOS app that just pulls up the application in a browser module, right? Aren't these apps generally perceived as "lazy" and "sub-par"?
Lazy, not necessarily. I won't deny the work that goes into making the graphics and getting the formatting just right. But, sub-par compared with a native app? Yes. Very.

Are there any majorly successful, responsive and elegant iOS applications that are a web application at their core?
There is no such thing as an elegant, responsive web "app".

My bank's iOS "app" is a native app which serves only as a wrapper for their mobile website. It stinks.

AT&T used to have a decent, elegant, fast, easy-to-use native app for managing accounts; making payments; etc. But at some point they downgraded it to a crumby shell app that serves as a wrapper for for their website. And don't think it's even a mobile website. It consistently gets 1 star reviews and it deserves every one of them.

When Google first released their iOS Gmail app, downloaded it to check it out. I saw it was a web "app". I deleted it instantly.

Whether they are "successful" or not depends on your definition of successful.

And now back to our regularly scheduled temperament...

2) If I were to go the route of making a native iOS app-- what are the challenges faced by iOS programmers in the wake of a new iOS release? I know that WWDC is around the corner, and that iOS 8 will undoubtedly be announced. If I were to begin learning to program for iOS 7 now-- will the syntax change much come iOS 8? What was the impact on on iOS programmers in the jump from iOS 6 to 7? Minimal?[/B]

How that impacts you will depend on which APIs you use in comparison with which APIs get updated. Often new classes and methods will get added which won't affect you very much right away unless you want to take advantage of the improvements in functionality they offer. APIs get deprecated too. You'll want to stop using these as soon as possible though they give you plenty of time to switch to any replacement APIs.

iOS 6 to 7 was the biggest change I've seen. My app (not yet published) was designed for the iOS 6 user interface. I didn't have to change anything to make it work again. I did however choose to redesign some of it so it would look good running in iOS 7.

With iOS 6 came updates to MapKit. My app makes extensive use of maps, but I didn't have to do anything to make it work. I did choose to add some of the new compelling functionality from MapKit.

When iPhone 5 was released with the 4" screen, again i didn't have to do anything right away to make my app run. I did choose to update my app to make it take full advantage of the 4" screen.

Occasionally, there is a language update where new syntax is introduced, but that doesn't happen nearly as often as SDK updates and you won't have to rewrite a bunch of code, if any.
 
Just for clarification, do use Java or Javascript (or both)? They are not the same.

Java is a C-like object oriented programming language. If you know Java, you should have no trouble learning Objective-C.

I use both. Java for server-side code (though, unfortunately my employer still has us programming in Java 6), and minimal JavaScript for client-side actions, usually just interface handling stuff.

So you say this should be a decent start to learning Objective-C? Is there any book/blog/something else you specifically recommend for picking up Obj-C?

---

Also, I too have a couple banks/credit cards that do the whole "web app in a wrappper" thing, and they have never been very fun to use. On the flip side, there are websites that I use in Google Chrome (on my iPhone) all the time that function just fine-- perhaps they aren't the most feature rich, but they are pretty functional. I guess the only example I can think of off the top of my head is m.facebook.com.
 
Facebook's app used to be a wrapped web-app. They went native.

Facebook Abandoning HTML5 to Speed Up iOS App

Right-- I remember when they made that switch. However, I was specifically commenting on my general satisfaction with my experience of using their mobile site (m.facebook.com) on my iPhone through Chrome... was trying to throw an example of a decent mobile web app on the iPhone. Yes-- I realize their native app is far better than the mobile site; but their mobile site is certainly nothing to sneeze at as far as mobile sites go.
 
1A - I see no problems with making this if it's just for you. Play around with it for awhile and see if you'd want customers to associate you with it. You don't have to pay Apple a dime to make a web app that's compatible with iOS.

1B - You could do that, and it would require almost no effort on your part once you've done 1A. But I fail to see the point - all you'd gain from it is your app shows up in the app store. Your web app would run slower in your shell app than it would in Safari, since Safari is a preinstalled app and given fewer sandbox restriction. That allows it to do various tricks to speed itself up that your shell app wouldn't be able to do.

As others have said, your best bet is making a native app. It'll look better and run smoother. There might be a higher initial learning curve, but it opens you up to a lot more possibilities.

2 - Don't worry about WWDC. Apple is pretty slow to break old code. The only people who worry about it are people who want to strike when the iron is hot - they see a new API Apple is making available and they want to have one of the first apps on the store to be based around that new API.
 
Since you’re going to have some backend services, you might as well start there, build a nice RESTful API using whatever solution stack you’re comfortable with, while keeping mind things like licensing, ease-of-deployment, maintenance in addition to the common development concerns like MVC, performance, scaling, etc.

Once you’ve got a nice, abstracted way to deal with your backend (data access, authentication as needed), I see zero harm in using a web front end to develop the initial POC/prototype. I’ve had a number of cases where I wish we would’ve done that, it would’ve reduced effort, costs and got the business case for the app quickly to the customers.

Check out forecast.io on your iPhone for an absolutely amazing web based UI/UX.

If you wind up developing a native iOS application, those services you developed will be easily consumed from an app, *plus* you can still use it as a web backend, or even as a backend for another native mobile client (like Android).
 
I'll weigh in here too.

Web apps are ok, more or less. Meh. They get you a somewhat useable, almost-there-but-not-quite-right solution.

If rapid turn-around of cross-platform apps is important to you, you could go the HTML5/JavaScript route and get your apps out on Android, iOS, and probably Windows 8 all at once.

However, web apps fall short. Things don't work quite the way they should, in both large ways and small. You end up with rough edges, annoying half-measures, and controls that just don't feel right. The resulting product works, but just doesn't feel right.

You will get the best user experience on all platforms by writing native apps for those platforms. However, you will invest a LOT of time in learning the frameworks for those platforms.

If you have Java experience then Objective-C won't be a big leap for you. You should plan to learn vanilla C as well as Objective C. (Objective-C is a pure superset of C, so knowledge of vanilla C is totally applicable to Objective-C.) Learning C will force you to learn about pointers, and C's handling of pointers. That's something that Java programmers don't really learn, and that deficit reaches out and bites them sometimes. You can do 80% of the job muddling through with the vague "reference" ideas that you get from Java, but that remaining 20% will leave you lost, confused, and frustrated. And if you have to do any coding in Apple's lower-level "Core Foundation" frameworks, or OpenGL, or Core Graphics, you'll be lost. Objective-C memory management will also be harder without a good understanding of C pointers.

However, the language is the smallest part of your problem. As a programmer in a C-like language, you could be functional in Objective-C in 2 weeks, and fluent in 6 months.

For both iOS and Android, the much bigger issue is the OS frameworks. The application frameworks are huge and rich, and many person-months of effort to learn well. I would expect to take a couple of months to be functional, 6 months to be proficient, and 1 to 2 years to be fluent (full-time work). Even then, there will be large areas of the OS frameworks that you never use, or only touch on.

I've been doing iOS nearly full time since 2009, and there are still whole sections of the iOS SDK about which I only have a surface knowledge. However, I know the style and vocabulary of Apple's frameworks, and their documentation system, well enough that I can pick up a new API and be productive in it pretty much right away. I read about it, look for some example projects, and then roll up my sleeves and dive in.

(If you don't want to read my lengthy preamble, skip strait to the bolded questions below. Thanks!)

I am a Java programmer by day, writing mostly JSF-based web applications. With this, I do a fair bit of HTML, CSS and Javascript. I am looking to start some freelance programming on the side, with the ultimate end-goal of no longer needing a full-time job. I would love to be my own boss and not have to report to any one particular place every day/week/month/etc. However, that is far down the road.

Right now, I am looking into programming for iOS as my first step towards freelance programming. I don't need to create the next "Angry Birds" and become a millionaire. But as an iPhone owner, there are a couple of apps that I wish existed that I believe I am more than capable of creating if I were able to program for iOS. The application that I want to create is largely user-data driven, and mostly just relies on queries. For this first project, I am not looking to utilize any sensors/cameras/mics/etc on the iPhone. I simply want to capitalize on the mobility and convenience of an iPhone application. That being said I have been wondering a couple of things:

1A) Should I just make a web application (probably in PHP, perhaps with the Laravel framework), that would allow me to run my application on any system, wherever I am? Additionally, this would allow me to make my concept application a realization much quicker. I can program for the web with ease, whereas I know ZERO Cocoa/Objective-C (not that I'm averse to learning a new, useful programming language).
1B) If I were to go this route, and optimize it for mobile, I could theoretically make a shell iOS app that just pulls up the application in a browser module, right? Aren't these apps generally perceived as "lazy" and "sub-par"? Are there any majorly successful, responsive and elegant iOS applications that are a web application at their core?

2) If I were to go the route of making a native iOS app-- what are the challenges faced by iOS programmers in the wake of a new iOS release? I know that WWDC is around the corner, and that iOS 8 will undoubtedly be announced. If I were to begin learning to program for iOS 7 now-- will the syntax change much come iOS 8? What was the impact on on iOS programmers in the jump from iOS 6 to 7? Minimal?


Thanks in advance for any answers I may receive!
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.