I created a new project from SDK 3.1 and OpenGL ES template. As you know this new template has ES 1.1 and ES 2.0 implementations. I wanna deal with ES 1.1 part first :) so I changed Base SDK in project settings to Simulator 3.0 and then I changed Active SDK in upper left corner of Xcode to "Simulator 3.0 - Debug". But when I start this sample project from template - it successfully initialize OpenGL ES 2.0 renderer in code and go to ES 2.0 part. I want to simulate old devices without OpenGL ES 2.0 and test 1.1 part. How can I do that without changing code?
Thx!
Answers recieved from different sources are:
"The Simulator is not appropriate (nor has it ever been) for this kind of old-OS regression testing. Remember, the Simulator is not an emulator, has no OS, and doesn't accurately reflect the environment that your code will be running in"
and "The simulator can provide some behavioral differences based on OS. However, that is absolutely not a substitute for device testing. Additionally, iPhone OS 3.0 still supports OpenGL ES 2.0, and there is no way to disable that support in the simulator."
Make sure you select "iPhone Simulator (3.0)" in "Active Executable" as well.
Also, you can change the firmware version of the simulator in Hardware -> Version.
Related
I've released an app but forgot to set the compatibility to iOS 3.0+, can I make an update to support 3.0+ and how?
Should I just change the deployment target to 3.0 and is there a way to test it in simulator for 3.0?
I only have 4.2 and 4.3 for debug...
Change your deployment target to iPhone OS 3.0 and test on device with iPhone OS 3.0.
Not only is it bad practice to even consider deploying to App Store before testing on device. If version compatibility is your concern it is doubly so, since the Simulator is far from perfect when in comes to testing all version incompatibilities.
Also ask yourself if you really need to support iPhone OS 3.0 users? All studies made tells us that around 95% of all users are running on iOS 4.0 and later.
A user who can not be bothered to update to the latest OS version for free, is not likely to pay for your app.
change your deployment target to 3.0 and test it in the simulator. If all goes well, submit it as an update - exactly as you described.
When you change deployment targets to 3.0, you should be able to select the 3.0 simulator in the schemes.
I have a universal app for ipad and iphone. What I'm trying to determine is what OS version do my users need to have in order for my app to work?
In Xcode, in the top left hand corner I see:
"Device - 4.0 | Release | MyAppName"
Does this mean they need to have ios 4.0? Also, the weird thing is that my ipad is running ios version 3.2.2 but for some reason it works when I build&run the program on the device...
Can anyone help me out on how this all works?
Thanks in advance
No, this doen't restrict the minimum OS. In the build settings, you should set the base SDK as high as possibile (otherwise the newest devices may not be able to run it), but set the iOS deployment target to as low as possibile (the lowest for an universal app is 3.0 - but check if all your classes that you are using are available in 3.0), because this tells the min. iOS it can run on.
Is it possible to test my app in the iPhone Simulator w/ the 3.0 SDK. The only options that I currently have available are 3.2 (iPad) & 4.0 (iphone). I know I could buy a iPod Touch w/ 3.0 off eBay or something but I'd really like to avoid spending money if it's possible to get this working in the simulator.
http://developer.apple.com/iphone/library/documentation/xcode/conceptual/iphone_development/125-Using_iPhone_Simulator/iphone_simulator_application.html
Important: iOS 4.0 uses the same Objective-C runtime as Mac OS X v10.6. iOS 3.2 and earlier use the Mac OS X v10.5 Objective-C runtime. Because of this change, binaries generated with an iPhone SDK distribution earlier than 4.0 do not run in the simulator that’s part of the iPhone SDK 4.0 and later distributions. After moving from iPhone SDK 3.2 and earlier distributions to a 4.0 or later distribution, you must rebuild your iPhone Simulator binaries to run them in the simulator. If you use licensed static libraries in your application, you must obtain versions of them generated with an iPhone SDK 4.0 or later distribution. For more information about the Objective-C runtime, see Objective-C Runtime Reference.
One other option is to maintain an older copy of the SDK/Xcode on another Mac, and run the old SDK and Simulator there for regression testing. But testing on a older device is the only way to test that an app can actually perform reasonably on such older devices. Neither a new device nor the Simulator can do that.
I wrote iPhone application. Very simple! It use Cocos2D only, and all other features is very basic, no accelerometer, no camera, nothing. Just buttons and sounds.
I think every iPhone can run this app (there is no limits on Cocos2D right?), but my XCode only let me use 3.0 and upwards. I want to confirm 1 thing and ask one thing:
If I put "iPhone OS 2.0" in my iPhone OS Deployment Target in XCode, but my "Active SDK" in XCode still says 3.0, if I compile using this and submit to App Store, when it goes up, people who use 2.0 can still download and use the game yes?
Is there way I can test in a 2.0 simulator to make sure it works? My XCode only have 3.0 and higher simulation.
Set your Deployment Target for iPhone OS 2.0 and Base SDK for whatever version of the SDK you have (3.0, 3.1.2, 3.1.3, 3.2, etc.). Active SDK is just a compile-time override of the Base SDK. You should set your Base SDK to the latest STABLE version of the SDK and the Deployment to the oldest device you intend to support.
If you open up the iPhone Simulator and select from the menu bar Hardware > Version, you should see an option for SDK version 2.x. If you don't see this, you don't have any 2.0 SDK versions installed. 2.2.1 was included up to version 3.1.3, but you might not see it in the Simulator. You'll have to find an older version of the SDK to install. They can be found online by Googling. Don't have a link off-hand, but shouldn't be hard.
Edit
This is out-of-date for the newest version of Xcode (currently 3.2.5).
I know that parts of this question was asked in several variation but I want to make sure I got it right.
Here are my assumptions and understandings which I want to know if they are correct before submitting.
My application assumes features supported by all OS, and so I should:
Set the Active SDK to be the latest (currently SDK 3.0).
Set the Deployment Target to be the lower I want to be supported - iPhone 2.0 and higher?
What exactly is the Base SDK for? should I ignore it if I chose Active SDK to be different and where do I see the Active SDK in the Projects settings?
One final question - is apple allowing to choose iPhone OS 2.0 as the Deployment Target?
Thanks in advance,
BTW - one of my main reason for this question is because when compiling with earlier SDKs apple seems to have a problem releasing the memory for UIImageView animation array when this animation was saved for multiple time usage. This is a known problem that was fixed with SDK 3.0 (by simply setting the UIImageView animation array to nil)
The difference between the Base and Active SDK is that the former is the default SDK set for the project and the latter is the SDK you are currently building against. So it is possible for your Active SDK to be the Base SDK, at which point XCode will use the SDK you specified for the project.
In order to build your app for the widest set of devices possible, you are correct:
Set the Base SDK to the lastest SDK possible (3.0, 3.0.1)
Set the Deployment Target to the earliest SDK possible (2.0)
Apple does allow you to specify iPhone 2.0 as the Deployment Target, but keep in mind any API or framework released after iPhone 2.0 you will not have available to you for use by default. There are techniques to use features from later SDKs, however they are nontrivial.
You should set the Base SDK build setting to the latest SDK that contains all of the features that you intend to use (usually, the latest available SDK), and set the "iPhone Deployment Target" build setting to the earliest version of the OS on which you want to run.
You then need to make sure that you check, at runtime, for any features that may not exist on the earlier OSes.
"Base SDK" is the Maximum SDK you application can support. There's a hard limit here - you can't select a future, unreleased SDK.
"Deployment Target" is the Minimum SDK you are willing to support. It how far back in time you are willing to go.
Xcode appear to create a spurious dependency on "Deployment Target." For example, I can't develop on my iOS 5.1.1 iPod with Xcode 4.5.2 (Xcode 4.5.2 is paired with iOS 6.0), even though the 4.3, 5.0, and 5.1 APIs and Simulators are installed on this installation. I need to use the simulator or jack in my iOS 6.0 iPhone.
The games Apple is playing appears to be causing problems with apps, too. My purchased copy of Elements will not sync via iTunes to the iPod because Elements needs a newer version of iOS to run (it syncs and runs fine on my iOS 6.0 iPhone).
I've got two iPads and one is 4.3. I shudder to think what a mess it will cause.
In general;
Set the BASE SDK to the very latest SDK you are willing to support and test.
Set the Deployment Target to the lowest version of iOS you are willing to support and test.
If you happen to use Base SDK features not available on the deployment target SDK, the app will crash at runtime on older devices, so testing is vital.
An alternative / complementary process would be to use Deploymate http://www.deploymateapp.com/ which does static code analysis to identify problems.
If you are from the android world the analogies are such;
TargetSDK -> Base SDK
MinSDK -> Deployment Target
Lint -> Deploymate