Make iphone app ipad compatible - iphone

I have an iPhone/iPod app that I hired a contractor to make. Now I am asking same contractor to support iPad, and the contractor is quoting a ridiculously high price (the BD guy is). I think they know that since they have developed the app, they have some leverage and want to maximize their profit.
Some questions:
Is adding support for iPad mostly a UI job?
Is any coding needed except detecting device type?
Looking at their images/ folder, I can see that for every graphic, they have already made a "2x" version which is double in size. Could it be that they have already created the necessary artwork, as I have told them from the start that iPad support will likely follow the iPhone version?
If I were to use a different contractor now, as it is likely we will not come to a middle ground since we are so far apart in price, what are the things a different contractor would need to do the port?
In particular, I'm wondering if I need to fight to get the raw Photoshop files which contain the graphics, so they can be recreated for iPad, or will going by the eye be good enough? I personally don't mind if the artwork is slightly different.
This certainly makes me think twice about using contractors in the future.

Well here are some answer from my experience:
Yes mostly it just about changing the look of your app. But people are expecting a different user experience on the iPad, so not all view should be full screen for instance.
No most iPhone code will run fine on the iPad, if you are using stuff like UIImagePickerViewController then you need to change the way it is displayed.
NO the #x2 are for retina device NOT for iPad.
Source code and design would do I for me.
Having the original PSD would be nice, but you can do with out.
Just keep in mind that you just can scale up most applications and expect them to become fully excepted by users.

This really depends on the app but there are some differences for iphone and ipad.
Yes, it is mostly an UI job, and depending on screen content, porting one screen can be trivial (just checking if the autoresize functions do their job right), or though - making one from scratch. If your application has lots of complicated screens, I get why the price may be high.
Also - there are some differences in what controllers are available on each device, mostly the popovers or action sheets - that may require different code for each device.
As for the graphics - the 2x resources are actually for the retina capable devices (4th and 5th gen) - most people use them for the iPad too, but as the screen dimensions are not exactly the same, they get warped slightly. In most cases thats ok, but for really high quality, a separate set of graphics may be required.

Take these as generic answers, the complexity of the actual app may affect these answers quite a bit;
1) If the app isn't using any specific functionality on the iPhone that isn't always available on the iPad (GPS for example, or specific camera resolutions for image processing), then yes, it's mostly a UI job. That doesn't mean it's necessarily quick and easy, you may want to change the layout radically for the iPad (that, of course, is up to you though)
2) Most code except UI possibly related code mentioned above should not need much change. Exceptions if any are mostly related to different hardware on different models and depends on the complexity of the application.
3) 2x images are not for iPad, they're for the retina display on iPhone4 and later.
4) Almost impossible to answer without seeing the code or even the app, sorry. If it's a fairly simple application, everything needed should be contained in the XCode project.
5) Up to you, if you want a quick "fix" you may want to resize the 2x images from retina resolution to iPad resolution in Photoshop and use anti aliasing to make them look ok. Your judgement call though. Just check that your deal with the contractor does not give him all the rights to the artwork or you may get into trouble changing/reusing it.

It is. You'll require separate nibs for iPad UI, if you don't want different UI logic, so it's possible to use same view controllers.
View controllers will require logic branches if UI is different. It's mostly checks for user interface idiom though.
#2x versions are for retina display. They will be useful when iPad 3 with retina hits the shelves. Right now, low-res images will be enough for iPad UI.
Different contractor will require the complete code of your project along with all resources...
...so yes, get all the PSDs as well.

First off, I have well over a decade as a professional software engineer working for many clients both small and blue-chip, with broad experience of a variety languages/devices. With that said:
Please remember that the ipad version will need testing on ipad 1, ipad 2 and in a couple of weeks time on an ipad3. Testing takes time. The new version will also need to be tested again on all iphones too.
Also, you mention that this app is a game. The original code might have been coded in such a way as assuming certain screen resolution, and maybe even have hard-coded values throughout the code relating to screen positions etc. Particularly if the coder was not aware of a future ipad requirement. Also supporting ipad 3 might not be an insignificant task if it has x2 graphics depending upon original code and the game engine used (if there is one).
Some apps will cost the same to create an ipad version as the original iphone app.
If your original agreement didn't include IPR over the source you might have difficulty getting it. Some agencies and contractors default to providing source to clients, others charge extra for provision of the source.
Lastly, the contractor might have originally coded the iphone app at a loss, i.e. they might have quoted you and been paid for 3 days work when they actually spent 10 days on it. In which case they might be assuming the worst for the ipad version too.
There are a lot of questions to ask and be answered before you can say they are "trying to rob".

Related

Stop using retina-only images

What will happen if I do the following:
I substitute all non-retina assets with the retina assets
I delete all retina assets in my project ( All the ...#2x.pngs etc.)
Why do I want to do this:
There will be less and less non-retina iPhones in the future (also due to minimal OS requirements etc.)
I get a lighter binary
I don't have so many "quasi-duplicate" files in my project which I have to maintain separately.
Now:
Will the iPhone 3GS scale down the image and display it properly (with a little bit of processing overhead of course)
Will a "retina-enabled" Phone be able to display the image properly even though it does no longer have the #2x suffix in the filename.
In 99% of cases this will work fine. However there are cases where images won't scale correctly (usually depending on the contentMode).
I worked with someone who did this exact thing and never noticed a problem, although I think it is terrible practice.
You will get a lighter binary, but you are asking the older devices (with less memory) to do more work. If you don't want to support these devices then don't, I think this is better than giving users a potentially broken app.
There are better ways to reduce the size of images in your app, reusing them wherever possible, stretching, tiling etc.
3GS and iPhone 4 will both display the image improperly.
The fact is 3GS won't scale down the image. So it won't display the image properly. iPhone 4 will scale the non-#2x image (scale it twice) so it won't display the image properly too.
Nothing will happen if you decide to do this. Older devices will try, but if you allow the device to even run your app, you will have quite a bit of work just to deal with the scaling issues. If you allow older devices to install your app, you will have to be prepared to get approved from Apple on older devices too. If the images don't work right on older devices, you won't get approved. You are also right that there are fewer and fewer retina displayed devices in service.
But... there are still quite a few non-retina devices still in service. Maintaining both is good for your users. Yes it adds a little extra heft to your binary, but with today's speeds on a variety of networks, that isn't the issue like it used to be.
While it is your right to choose which users to support, and there are many developers that share your sentiment, it is still up to you to decide which group of users you ultimately want to support. If you are fine drawing the line with retina displays, so be it.
I could finger-wag at you and tell you that you should support every single user, but I'm sure you've thought of that. If you are fine supporting retina devices only, go for it. If you are prepared to answer questions on why this one device is supported and another isn't, go for it. The good news is, no matter what you decide, you'll be right...eventually. Good luck.

When and how can we start forgetting about non-retina display iPhones and iPod Touches?

Now more than one year passed since a retina display device appeared. Does anyone know some numbers how many users still suffer under the low-resolution devices? How long do they use their iPhones or iPods until they realize that a retina display is so much better?
I'm sick of having to create every graphic two times, trashing the binary with all these low-resolution files. I wonder if anyone has stopped supporting low resolution hardware without a big loss.
And: If I wanted to stop supporting low resolution devices, what kind of settings in the info.plist must I make? And what would happen if a low-res device still installs my retina-only app?
Why do people still use IE 6? or why do some people still have Windows XP? Simply b/c they can't afford new ones. Money is to blame. There is no simple answer as to when should you stop supporting certain technology. In the technology world you should usually wait for a big company (like Facebook) to stop supporting certain devices. Only those big sharks can force people to switch.
If you want your users to be happy and want your software to be great you should always support all available devices/versions if possible. Little work for you is a big benefit for your users.
In the end you don't have to do anything you don't want to. But your software will resemble it.
You can at least wait for Apple to stop providing iOS updates to low-resolution devices (i.e. iPhone 3G S) since it is capable of running iOS 5
Maybe its not possible right now as it isnt yet supported here.
But releasing your app with a iOS deployment target of iOS 4.2 may reduce the number of non-retina display users to a great extent.
And the main reason for users not switching to new devices is explained perfectly in the previous answer. :)

Typically, how much does it increase development time to target both iPhone and iPad?

As opposed to targeting just iPhone? I need to make a decision on whether to target both, but I've only done iPhone development, so I can't really estimate how much longer it would take to do both an iPhone and an iPad app. Some information about what I'm trying to do:
Uses a navigation controller on iPhone, would use a split view controller on iPad
Has three separate views in a view controller in the iPhone version that I would display all in one view on the iPad version.
So I'm wondering, in general, by how much does it increase development time to target both? How rough is the answer? And also, how is the learning curve for an iPhone developer to learn to develop for iPad? This might be difficult to answer, but even rough estimates are better than none.
Well, I'll answer your questions and hope that helps.
How much does it increase development time to target both?
It really depends on what you are doing. If you design your classes well, all the data would be abstracted from the UI. In which case, all you have to do is redesign the UI for the iPad and it still all hooks into the same functions and back end data. This could increase development time by 1%-100%, it really depends on your scope.
Think about how long it took to design the UI for the iPhone implementation, and add that time for another design for iPad, and you'll probably be in the ball park.
How rough is the answer?
Very, its all scope dependent.
And also, how is the learning curve for an iPhone developer to learn to develop for iPad?
Barely any learning curve at all. They both use the iOS APIs, besides a few minor differences (popovers, split views, etc) they are pretty much exactly the same.

What should I consider to ensure seamless port of my iPhone apps to iPad?

Following iPad's announcement and its SDK (iPhone SDK 3.2), porting apps to iPad becomes an important issue. What guidelines I should follow in my iPhone apps to ensure I can port it to iPad as seamlessly as possible?
The different resolution is particularly an important issue. While the iPad runs iPhone apps unmodified, it's not really the desirable behavior for a native app. How can we make our iPhone apps resolution-independent so that they can run gracefully on all resolutions like most desktop apps?
If you've been using IB and setting the resize behaviors of elements properly, and also coding frame coordinates all relative to each other you are half-way to having a UI that can potentially scale to a larger screen.
From the screen shots there are new kinds of action-sheets as well, potentially attached to UI elements instead of floating - if you use overlays today they will probably work about the same but you may want to consider changing placement from the center on larger display.
UPDATE:
Now the event is over, and registered developers can download the SDK - although we cannot talk about specific features here just yet, read through ALL of the documents related to the new OS version as there are a number of things aimed at helping you transition to supporting both platforms. Also before you start using custom libraries for things take a look through the API changes to see what new abilities might be supported that are not today.
Generally speaking, what I said above about IB holds true, and also you should start thinking about how your apps today could use more space to present more information at once instead of being split out over multiple screens. Also if you are doing any projects right now that use images, make sure to initially design the images large enough that you can also use them for higher resolution tablet applications.
It is far more reasonable to expect users to input text (and larger amounts of it) than with a non-iPad device.
Nothing, it appears. Although we don't have the SDK quite yet. It will all existing run iPhone app without an issue, albeit at reduced resolution.
It remains to be seen how much of the existing iPhone SDK is shared with the iPad SDK UI wise.
Judging by what has been said, absolutely nothing. You will have to adapt to the new screen size and better hardware all together, if you want to take advantage of the features that the improved device offers. The lack of a 3g module is also something to consider if your app(s) rely on that functionality.

Is it possible to develop for the iPhone without an iPhone?

I know there are emulators, but is this good enough? If someone is serious about iPhone development, do they absolutely need an iPhone?
Just my personal opinion: if you're serious it means that you're committed to quality of your product. If you're committed to quality there is no way to deliver a product without actually launching it on the target platform :)
As noted in other posts you'll have tough time testing the multi-touch screen and other aspects of the hardware on your emulator.
Don't forget that most types of iPhone apps also work on the iPod Touch, which is a one time cost and no monthly fees. Even network apps work if the iPod Touch is connected to WiFi.
During development of my first iPhone app, I wrote code that worked fine on the iPhone Simulator, but which did not work on the device. So I would say "Yes, you definitely need to test on an actual device."
The simulator is not an emulator. It is not running the actual iPhone OS; it is running a set of Mac OS X libraries that are very similar, but not identical, to iPhone OS. The simulator is great for debugging and saving time during the code-and-test cycle, so you will use it a lot more than the device, but a device is indispensible.
You really do need to touch-and-feel your app on a real device. A UI that works great while pointing and clicking with a mouse might be terrible when used with thumbs and fingers. If there is any text entry, you need to feel how painful it is to type using the onscreen keyboard, to determine whether it makes sense to provide alternative data-entry methods.
There are also significant performance differences between the simulator and actual devices. You need to test with the oldest (slowest) device you want to support to verify it is not too slow, doesn't run out of memory, etc.
As others have suggested, an iPod Touch is also sufficient, so the cost of a device isn't huge. Also, try to find beta testers with a variety of different models.
Necessary: How the app handles in your hands is critical to something like the iPhone. you cannot tell how it will feel to use when plastered straight in front of you in the emulator on a big screen.
If you cannot hold it you won't be getting the true user experience.
If you need to learn Obj-C, go with the emulator for a while until you learn the ropes and save the expense for later. But yes, eventually you will need an iPhone for final testing. How long you can wait will depend on the features that your app uses, If all you are doing is button presses, you can wait a long time. If you are dragging, using location services, etc., you'll need a device earlier in the development cycle.
Are you trying to convince yourself or your boss? ;-)
I'd say you need one. Emulation of such a new device can only go wrong. Plus don't forget the tactile aspects.
The iPod touch is a reasonable substitute provided you are not using:
GPS, BlueTouch or Camera - the iPod touch doesn't have these
Cellular network - although the iPod touch has WiFi, the latency of a cellular network is way way higher than that of a wifi network. If you are doing anything like designing a custom protocol for your application, you will want to check real-world performance - and if you do this too late in the development cycle, you will be in for an unpleasant surprise.
Whether you develop on the iPod touch or on the iPhone, you absolutely must have a device. This is not optional! The simulator is good, but it is not perfect, and there is no substitute for having a device which correctly indicates performance, screen resolution, brightness, form factor and all the other factors that you will need to consider in your application.
If you buy an iPod touch, you will probably end up getting an iPhone too. I'd just go straight for the iPhone. That way you can use it as your main phone, and get a real feel for how the platform behaves and what an application needs to do to make it great.
Kind-of "yes".
Just download iPhone SDK (it's easy and free) and check out the emulator that is in there. You'll see whether that suits your needs or not. The emulator is not indicative of real hardware performance, there's no touch input, some quirks might be different, some things can not work, etc.
The iPhone Simulator makes it easy to test your applications using the power and convenience of your desktop or laptop computer. Although, your development computer may not simulate complicated touch events, such as multifinger touches, the Simulator lets you perform pinches. To perform a pinch, hold Option while tapping on the Simulator screen.
I'd say it depends on the kind of application you are developing. For a successful iPhone app, one which is properly integrated on the system, you are going to need to be able to test your tactile interface. That's hardly accomplished with the Emulator.
So, my answer is Yes, you do need an iPhone to develop iPhone apps. Fortunately, if you cannot afford one, an iPod Touch (200 bucks) is a very competent replacement. The underlying hardware is pretty much the same.
Necessary. If you plan to develop a successful product it needs to be one the end users (not just the developers) find easy to use.
The best way to do that would be to load your app on an iPhone then take it to various people and ask them to use it while you watch them to see if they experience any issues.
Users can get mighty creative in trying to do things a developer never intended - just ask any support tech.
Unless you're app is going to sell for less then $500 total it's a relatively small investment to build a quality app.
If you are serious about development, an iPhone (or iPod touch) is a must. However, the official SDK comes with a very complete "iPhone simulator". This will allow you getting a feel for Objective C and the entire development workflow. The SDK requires Leopard.
You don't need a Mac for this. You can use OSX86 on your PC, either installed on and booted from disk or through VmWare.
It works. In fact, you can even synch the iPhone through Leopard running in vmWare.
Now, testing on a real iPhone is a necessity because of performance, memory usage etc. Also you need it for the entire authentification procedure, getting the keys etc. (if you want to sell your stuff on the Appstore), testing this really requires an iPhone.
If you buy an iPod touch, you will
probably end up getting an iPhone too.
I'd just go straight for the iPhone.
That way you can use it as your main
phone, and get a real feel for how the
platform behaves and what an
application needs to do to make it
great.
I absolutely agree with this.
If you are seriously developing an iPhone application - for fun or for profit - you will have to run it on a real iPhone to test out compatibility and usability at some point. Since you going to have to get one at some point, you may as well get one now. Don't go for half measures. An iPod Touch may be [significantly] cheaper to start with, but will be money wasted when you go and get your iPhone. (Of course, if you are planning an app that runs on the iPhone as well as the iPod Touch, then you MUST test it on both. You cannot assume that if it is good on one it must be good on the other).
Also, by having an iPhone from day one, you can familiarize yourself with its user interface, its norms and the common metaphors the apps use. That will heavily feed into your own application design process, and make sure that your app looks, feels, and works like a first class iPhone citizen.
From experience developing on other mobile platforms, once you get to a certain point, it really is best to have a physical device to test on. If this is something that you would also be using yourself, if it much easier to get some real world type of testing by using the application out and about.
I also think it helps one to understand the platform better by having the device or devices you are targeting with your app,
if you are going to develop native apps for the iphone, I would say get an iphone or ipod touch to target. emulators are good, but eventually you will need to target the real thing. if you are developing web specific content there are lots of things you can do without it (there are some great dev videos free from apples dev site which will only cost you a sign up) but eventually I would think you would still want to test with the real deal
Get a cheap used iPod touch, develop, get money, buy an iPhone 5.
I'm a nokia dev now, I'm thinking of going to iPhone, Actually I have the Mac to work, just the device itself ;)
I've tried iPhoney and compared to my iPhone (Mark 1) it's not the same, it's close - but not close enough to rely on if the interface is of importance to you.
You absolutely need the real device. The performance difference between the simulator and the actual iPhone/iPod Touch hardware is huge. Code that will run nice and fast in the simulator can easily turn out to be too slow to be usable on the real thing. Also the API provided by the simulator is not 100% identical to the real thing, so code that works fine in the sim, may not work on the device. The only way to know for sure is to test often on the actual device.
As others have mentioned, the iPod touch works well as a development device. So if you don't need any of the features of the iPhone, it's a good, cheaper, alternative.