Which iPhone SDK should I use? - iphone

I have little knowledge about how to make application to compatible to a device.
I have iPhone SDK 4.0 and want my app to run on iOS 2.0 or later.
I have read that set only the iPhone OS Deployment Target to 2.0 and use only those API methods which are common after 2.0.
Is it enough?
or do I have to use another (lower) SDK?
or do I have to do something more...?

You should always be developing with the latest SDK. You can set this in your project's properties under "Base SDK" in the "Architectures" section of your project's settings (right click on the project in the organizer, and go to "Get Info").
However, to make sure that your app runs on older devices, you would do this by setting the "iOS Deployment Target" to iOS 3.0 under the "Deployment" section of the project's settings.
For the record, I said version 3.0 above because that's the lowest possible supported version that I see in my Xcode. I don't think it's possible to target 2.0 devices anymore.

The newest Sdk. Apple may not accept the Sdk create by old Sdk.
You can target your min required version os for your App even you are using latest version Sdk.

Related

Is it possible to compile an iPhone App for IOS 4.0 using Xcode 4

Does anyone know how to compile an iPhone app targeting iOS 4.0 using Xcode 4?
It seems that it is only possible to select iOS 4.2 as target.
Thanks in advance
Peter
There's a "Deployment Target" setting and a "Base SDK" setting. You can set the deployment target by clicking on the project name at the top of the tree, then bring up the "Summary" page. Deployment Target is the 4th item, and can be set to 4.0.
"Base SDK" is on the "Build Settings" page and is usually the latest SDK you have installed, but can be set to older SDKs if you go to the trouble to keep them around. Normally you shouldn't need to though, because apps built with newer SDKs should run on older iOS versions as long as you restrict your coding to the older API.
So an app built with the 4.2 SDK should run fine on iOS 4.0 if you set the deployment target to 4.0 or earlier and don't use any methods introduced after 4.0.
See also:
How to target previous version of iOS in XCode4?
What's the real difference between Base SDK and Deployment Target or Deployment OS Version?
How to target 4.2 version with XCode 4
iOS deployment target set to iOS 4.2. Will the app run on devices running earlier versions of iOS?

How can I build an application for iPhone OS 3.1.2 using the current Xcode?

I have an iPhone running the 3.1.2 firmware and would like to build applications for it. However, I can't find Xcode 3.2.1 with the iPhone OS 3.1.2 SDK at Apple's developer site.
How can I build an application using the current SDK and Xcode versions that will run on this older OS version?
Use the current tools and SDK. Set the "Base SDK" build setting to "Latest iOS" and set the "iOS Deployment Target" to whatever version you want to target, such as iOS 3.1.2.
The only gotcha here is that the compiler won't warn you if you use something from the SDK that was introduced after iOS 3.1.2, and if you do your app will likely crash. So, you'll want to check the docs for each method you use that you don't already know for certain is available in 3.1.2, and you should test your app thoroughly.
Unless there is some unmentioned reason you need the older version, you can use the latest Xcode and just target the build for the old iOS.
If you are a member of the Apple Developer Program (which you need to be in order to download any version of the Xcode and iOS SDK), you can download Xcode 3.2.6 w/ iOS SDK from the main 4.3 from the iOS Dev Center home page. Under the section for Xcode 4, there's a small line saying "Looking for Xcode 3? Download", which takes you to this download page.
Of course, that still requires you to develop using the 4.3 SDK, so you have to be carefull when targeting 3.1.2 devices.
You can purchase Xcode using the Mac-App-Store or by subscribing to the iPhone Developer Program ($99 per year).
Get the latest one (XCode with iOS SDK 4.3) and select 3.1.2 for the deployment iOS Version (under build-settings).

Base-SDK of v4.0 means it won't install on 4.1 or 4.2 devices?

I was using xCode v3.2.3 and SDK 4.0 to write iPhone apps that worked on my iOS v3.1.3 device... as well as v4.0. (Deployment target set to 3.1.3. Base SDK set to v4.0)
Does that mean everyone that uses my app will need a minimum of iOS 3.1.3 and a maximum of v4.0? Or will they also run on v4.1 and v4.2?
Second part of my question:
I now upgrade my iOS v3.1.3 to v4.2.1.
Xcode now says my v4.2.1 device is now no longer provisioned.
Doesn't a Base-SDK setting of v4.0 mean apps will also run (or at least install) on v4.x?
No. Base SDK just means that your app will be built against the iOS 4.0 libraries. Any 4.x device will be able to run a release build of your app, but for debugging, Base SDK and the iOS version on your device must match. In the end, you need to build your app with the newest available Base SDK anyway, because Apple won't accept apps built for older SDKs into the App Store.
No, they will. iOS has Backward compatibility.
I agree with Irene. I found the solution:
The hint came from here: Can't make Xcode 4 run a barely empty project using SDK 4.2 (runs fine in 4.3)
And this is how i resolve: my xcode 4.0 my SDK 4.3 and my Ipod touch device is 4.2.1 - You see it is backward compatible. There are 2 things you must do in order to resolve. 1) In your xcode 4.0, You click on your project name under Target to ensure you change the target not the Project setting. Find the row >IOS deployment target to the version of your device in my case it was back to 4.2.1 ipodtouch so i set 4.2 (do not worry about basesdk it is for your application not the same as your application's target. 4.3 basesdk requires you provide codesign so you have to select code sign if do not have one apply for one looking up in Apple website or google)
After setting your target to compatible version with your device you now can go to "set the active scheme" that is where you select which device to install and run on including the simulator. So you will find you device there select it and you are good to go.
And if you still can not get it going. You can try to select your project under Project this time adn set the ios deployment target to your version mine was 4.2 ipodtouch ios. Then go select "set the active scheme" that is where you select which device to install and run on including the simulator. So you will find you device there select it and you are good to go.

Upgrading iOS SDK

I've XCode 3.2.3 with iOS SDK 4 installed in my iMac. I bought an iPhone 4 with OS version 4.0.2 and I would like to use that device for development. However the Organizer shows the message below when the device is connected.
The version of iPhone OS on “iPhone 4G” does not match any of the versions of iPhone OS supported for development with this installation of the iPhone SDK. Please restore the device to a version of the OS listed below, or update to the latest version of the iPhone SDK.
Currently my XCode supports Base SDK from 3.0 to 4.0.1.
So if I download the latest XCode 3.2.4 with iOS SDk 4.1, will I still have Base SDK support from 3.0 ?
Cheers
Jugs
No, XCode 3.2.4 does not come with SDK 3.0, it comes with SDK 3.2 and 4.1. But you don't need the 3.0 SDK to write apps that will run on 3.0.
There are two versions that are important to you as an iOS developer, and you need to understand them: first, there's SDK version that you link to, this is the Base SDK. It should normally be set to the newest SDK available.
And then, there's the Deployment Target. That is the earliest version your app needs to run on. This is the one you are actually caring about, this one ensures that your app will still run on earlier iOS devices.
To set that, go to "Project -> Edit Active Target". In the dialog, select the "Build" tab, make sure "Show" is set to "All Settings" and the type "deploy" in the search field. Scroll down to the "Deployment" section, the last entry should be "iOS Deployment Target". You need to set this to "iOS 3.0" or whatever suits you. You should now get warnings if you use methods or classes that are not available on 3.0.

iPhone: Minimum OS, Deployment Target & Base/Active SDK

I'm a little confused about building an app for the app store and for the correct SDK & OS version. I have submitted my app to the app store, and in the app details screen of iTunes connection it says:
"Minimum OS Requirements : 3.1.2"
I haven't seen any apps on the app store that have 3.1.2 as the min OS, they all say 3.0. I read several things on here before I built it and I thought I understood everything!
Basically, my app doesn't use any code that only exists in > 3.0 so I would like the minimum OS to be 3.0. My build settings were:
Target Info
Base SDK: iPhone Device 3.0
iPhone OS Deployment Target: iPhone OS 3.0
Xcode Main Window
Active SDK: iPhone Device 3.1.2
I've heard about a minimum OS version being put in the Info.plist but I haven't got anything like that in mine.
I build the app exactly like that and submitted it. Are my app settings correct? Will my app display 3.0 in the app store or 3.1.2? I'm a little unsure as to why you set the Active SDK to the latest (3.1.2) when you want to target 3.0 , 3.1 & 3.12 devices, but it's what I read!
Any help advice be greatly appreciated!
Okay I've managed to figure it out after much reading!
Basically, the Active SDK is just a build time override of the Base SDK. By default, when the Base SDK changes it automatically changes the Deployment Target to the same OS as the SDK. So when I wanted to build the app under the 3.1.2 SDK but have it run on 3.0 OS, I changed the Active SDK to 3.1.2, but that had automatically changed the minimum OS (deployment target). I saw this by looking at the Info.plist file in the package contents in my .app file.
So the best thing to do is to set the Base SDK to the latest SDK (currently 3.1.2) and then manually set the Deployment Target to 3.0 OS. Once the 2 are different then it will no longer automatically change.
However, this means that your app can install on a 3.0 device that may have 3.0, 3.1, or 3.1.2 SDKs. Therefore, any frameworks, methods or properties you use that are only available in SDKs greater than 3.0 you will have to use conditionally.
When you get around to building the app, ensure that that Active Target is set as the same as your Base SDK, e.g. Device 3.1.2. But remember to compile your app under Device 3.0, Device 3.1, and Device 3.1.2 just to check for compiler warnings. This will ensure that you don't have any code accessing methods/frameworks that don't exist in any SDKs down to your Deployment Target.
I hope this helps anyone who is in my position and couldn't find a simple explanation of how it all works.
The SDK Compatibility Guide was very useful and informative. However it took just a little extra figuring out for me to be comfortable with the concept and how everything works. This image from the guide is useful:
(source: apple.com)
Go to the Project Info->Build and look at IPHONEOS_DEPLOYMENT_TARGET property
Actually I use 3.1.2 SDK and building an app that work nice on every OS higher than 2.2.1