I have just submit my app to the App store, and received many comments that the application crashes on startup on older iphones. The deployment target was set to 3.1.3 and base sdk to 4.0. I thought I didn't use any api from 4.0 so the only problem could be three20 library.
Now I have two xcodes installed on my computer. After some changes my project can be build both in the newest one (3.2.3), and in the 3.2.1 with the base sdk set to 3.1.3 and deployment target to 3.0. My app works in iphone simulator in both xcodes and all versions (ranging from 3.0 to 4.0).
Now my question - if my project can be built with base sdk set to 3.1.3, will it run on the real device if I build it with 4.0 and choose deployment target to 3.0? I have only access to real device with iOS 4.0 and no other way to check whether everything is ok.
with the 4.0 sdk you can set the deployment target to 3.0 and the base sdk to 4.0 and it should be fine. If you have the old simulator installed still you could then run this build (don't rebuild from the 3.1.3 base sdk!) on the simulator to test it there, although having an old device would be ideal.
Related
I'm unable to run simulator for testing iPhone3GS below version of 4.0. I have built my app with xcode4 and now, I want to test it how it works in iPhone3GS. I have read that I should install previous version of xcode, so I have installed xcode3. My IPHONEOS_DEPLOYMENT_TARGET is set to 3.1 in projects settings (xcode3). But still I can't see any iphone versions below 4.0 in simulator select list. What am I missing?
Well first of, the latest version of Xcode 3 only comes with the iOS 4.* SDK so there is no iOS 3 simulator.
You will need to installe a version of Xcode 3 with iOS 3.* SDK to get the 3.* simulator, but you can only get them in de bundle version of Xcode.
What I do is test my apps on a device running iOS 3.1.2 with Xcode 4 and dropping support for iOS 3.* in new projects (94% of my user have switch to iOS 4).
in this case you have to click the target section of the xcode and thre you have to chage the setting >build>latest ios.
You can make and add hoc build and install it on an real device that run the desired os version.
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?
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).
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.
i have xcode 3.1.3 and xcode 3.2.1 installed
For sure now I use 3.2.1 with Sdk 4 to develop new apps.
But what if I like to test a App compiled with sdk 4 on a
simulated iphone that would just have 3.0??
As BaseSDk i use 4.0 and as target 3.0
In xcode 3.1.3 i could select a simulator down to 2.x but with sdk 4.0
i only have the option 4.0 iphone or 3.2 ipad
Example> i know iAd is not supported before 4.0 so I set the
framework to weak. But just to be sure all works fine I really
would like to test my app in a simulator that simulates an iphone with 3.0
thx
chris
The new simulator does not seem to be able to run the old simulator OSs (3.2 being the oldest it'll run). I tried moving them over from old SDK installs and several variations and "no go".
You can check that you aren't using methods defined in the new SDK, when you set the base SDK to 4.0 but set the Deployment to to 3.1.3, for example. For a blog post on how to do this see this blog post, and note my comment on an easier way to do the last two steps (no need to edit the project file as a text file).
inside the iphone sdk dmg file, there should be a folder called packages. in it, you'll find packages like iPhoneSDK3_0 and iPhoneSimulator3_0. Install them to be able to use them in xcode.
Correct me if I'm wrong, but I think a device with 3.0 installed can't even run apps compiled with 3.2 or 4.0. Furthermore, Apple now only accepts iPhone apps (including updates of existing apps) linked against the 4.0 libraries, which won't run on OS version 3.0 devices.
So why do you want to test your app on a 3.0 device?
Try setting the architecture you want to build for in the Xcode project preferences and rebuilding.
If this doesn't work, completely uninstall Xcode and downgrade. You have to completely uninstall because your system must have updated the frameworks for 4.0.
Hope this helps