Xcode version and iPhone app submission - iphone

I am new to iPhone app development. I have an app created in XCode 3.1.3 and need to do 2 things;
1. Test it on my iPod touch (Latest OS: 4.1)
2. Submit it to the app store.
My question is, can I do both these things given that I have XCode 3.1.3 OR do I have to upgrade?
Also in case I need to upgrade, is it possible to download XCode separately (I mean without the huge 3GB SDK)

You must have the latest version to develop iOS 4.1 apps (as required by Apple for App Store submission.) As well, you must pay $99 per year for a developer account in order to gain access to on-device testing and to actually make submissions to Apple.

You need to download the whole XCode + SDK installer dmg to develop for iOS 4.1. You can not download, or update them separately. You can not submit to the App store using an SDK older than 3.0. And you should use a recent XCode/SDK combo (as in the current 4.1 release) to submit to the App store.

Related

Can I still upload an iOS 3.2 SDK compiled app to iTunesConnect

I would like to update an iPad app, that is already existing in the app store. I have compiled that app about a year ago with XCode 3.2.4 and iOS 3.2 SDK.
Is it possible/permitted to upload an adjusted version of the app, that has been compiled with iOS 3.2 SDK again? I would like to avoid compiling the app with iOS 4.3 SDK or iOS 5 SDK (if available in a few weeks), as I would have to adjust several implementation files to optimize the app for a build with the newer SDK versions.
There seems to be no clear information related to that topic in apples docs or guideslines...
No. Apple requires apps that are uploaded to the App Store to be compiled with the latest release SDK that is available at the time.
I was finally able to successfully bring 2 apps into the App Store, that have been compiled with a iOS 3.2 SDK without any rejection by the Apple reviewers. Apple didn't require me to use the latest Build SDK (iOS 5.0 at this time).

Upgrade iOS application to newer OS?

I am a little curious what happens in the following situation. You have an existing app on the iTunes store (with customers) that uses iOS4, you then release an update to the app that uses a newer iOS.
folks that have upgraded to the "newer iOS" will get the update.
What will happen to those that have not updated, will they still be able to use their old iOS4 version?
Your "deployment target" is what matters. Setting the deployment target allows your app to set it's minimum required OS version. Many developers like to set that as far back as possible, unless your app depends on a features only available in a new iOS version.
Lets say you have an app compiled with the iOS 4 SDK and set 3.0 as the deployment target.
Users with iOS 3 or iOS 4 (and iOS 5) can download your app and use it.
Now you release an update compiled with the iOS 5 SDK and set 4.0 as your deployment target.
Users with iOS 4 or iOS 5 can download or upgrade your app and use it.
Users with iOS 3 that have purchased your app already cannot upgrade, but they can continue to use their existing installed version.
Users with iOS 3 that have not purchased your app yet will now have no way to do so.
Apple will only keep exactly one version of your app on the app store.
Unless they download the newer version, they will of course still be able to use the old one. It's possible however that they download the update unintentionally via iTunes on the desktop. The App Store on the device itself would check if the device's OS version is compatible with the app being downloaded, but iTunes does not, so it would replace the old version in the iTunes library, leading to the app being removed from the device when the user syncs it (because the downloaded version cannot be installed).
So, for existing apps, you should keep your deployment target as low as possible and decide at runtime which additional features of a new OS version you can use. This way, you can keep compatibility with older OS versions, but still provide additional features to those who have upgraded.
Usually (although not always), new OSes are the same as the previous ones but with new features. Older versions of apps often work with the latest OS but don't take advantage of the new features. The only problem users usually have is crash problems but it all depends on which APIs you use in your app.
Additionally, updates are never 'forced' upon a user - they are always optional. When it is a case that the app only works on a version of iOS which is higher than what the user has, then the update will not be offered to the user at all. They will still be able to use the older version that they have installed on their device. Apps have no expiry date.
If you want to retain compatibility for as many iOS versions as possible, you can set your iOS deployment target to the minimum OS you want your app to be compatible on. The SDK version number should not matter, but to support the latest iOS features, you would need the latest iOS SDK.
You will still have to check your APIs compatibility with the version you are targeting as a minimum OS. Look here and search for "API Diffs". Each document lists changes to the API for that iOS version. This will lists new and removed APIs as of that version. For example, UIPrintPaper, which is listed in the iOS 4.1 to 4.2 API diffs document, is a new API to iOS 4.2. So, when running on iOS 4.1 or earlier, the app will crash when calling that API. Using #if __IPHONE_OS_VERSION_MAX_ALLOWED <= __IPHONE_4_1 around your UIPrintPaper snipper will fix that problem.

iPhone App Version - which one to keep?

I just finished my first app developed in XCode 3.2.1 in iPhone Device 3.1.2. I know that there is iPhone 4 now, does that mean that I have to upgrade to iOS 4 before I submit my app to App Store? Or do I keep two versions of my app, one is the 3.1.2 version and the other iOS 4 to cover all iphone market (old and the latest one)?
You should download and install the iOS 4.2 SDK.
You should then compile and link against the iOS 4.2 SDK.
It is likely that Apple will end support for 3.x in the near future.
Also, sort out your acceptance rate problem...

will an iphone app built with Base SDK 3.2 be rejected by apple?

I've recently updated xcode to 3.2 and to the iPhone SDK 4.0. I've submuitted the binary and my app is "waiting for review". However, my base SDK was set to iPhone Device 3.2 and I have been reading rumours that apps not submitted with iPhone SDK4.0 wont be approved. Is this correct? My deployment target is 3.0, but BASE SDK is iPHone Device 3.2. Thanks in advance.
If you see https://developer.apple.com/iphone/checklist/ Apple says:
All new applications and updates to existing applications submitted to the App Store must be built with iPhone SDK 4.
However I do know of people who have had 3.2-built apps accepted in the past week so it doesn't look like Apple is rejecting apps based on the SDK at the moment.
So if you have already submitted your app, I would wait and see what happens. Otherwise you should compile with the 4.0 SDK.
That should be fine, I submitted an app like this a week ago.
Base SDK 3.2 should be correct if you want you app to be compatible with iPads (they require 3.2). If I am correct I think you will find that the iPhone will be compiled 4.0.
John.

How can I develop production iPhone apps and iPad apps on the same machine?

It seems that in the future, we can just use the non-beta iPhone SDK to develop for both at once.
But for now, the only way to develop for iPad seems to be to use the SDK 3.2 beta. However, if I install that, Apple clearly states I should not submit apps to the app store with it.
I'm an independent, one-machine developer. Is there a way I can continue to upgrade my existing iPhone apps while still developing for iPad?
The Best way to do this is to install the 3.2 SDK beta in a location other than '/Developer'. On the 'Custom Install on Macintosh HD', select 'Other' from the Popup button, and point the installation to somewhere like: '/Developer-Beta'.
You can then run Xcode from /Developer/Applications for your iPhone apps, and Xcode from /Developer-Beta/Applications for your iPad apps.
If I'm reading the agreement correctly, the ban on submitting apps with the 3.2 beta applies only to the SDK, not the tools. If you set your app's base SDK to an SDK earlier than 3.2 (which it probably already is anyway), you can then build with the 3.1 and earlier SDKs by selecting them from the "Overview" menu in Xcode.
I've submitted updates to my iPhone apps built with the 3.0 SDK by the 3.2 beta tools, and they were accepted with no issue. As long as you aren't building on the actual new SDK, you should be fine.
EDIT: I don't work for Apple, I am not a lawyer, blah-blah. But it's worked for me, and the warning only specifies the "iPhone SDK 3.2". The Xcode tools aren't mentioned.
If you install 3.2 the Active SDK menu looks like
Xcode http://img.skitch.com/20100310-xkbqnbr6h4f2q55wk2wppjx3h2.preview.jpg
However, under Project settings you can change the SDK as follows:
Xcode http://img.skitch.com/20100310-xqkuracw73jb5y7uwtt7yurjs1.preview.jpg
So you can developed for any OS version using the same machine, etc.