I wonder, since LLVM 3.0 is readily available and officially released, is there a way to compile with LLVM 3 when using Xcode 4.1. It would help alot since I used ARC and my app development turned out to be finished sooner than planned. So I don't have to wait until next Xcode 4.2 is released to upload my app to Apple review. Thanks
You can easily compile with any compiler you want with Xcode; see http://mattrajca.com/post/8749868513/llvm-code-coverage-and-xcode-4 , for example. IIRC, you aren't allowed to submit an app that isn't using a compiler bundled with an official Xcode release, though.
Related
I have an iPhone app which was developed with 4.0 as the base SDK and a deployment target of 3.0. Everything was working fine.
Last week I upgraded to Xcode 4.2. Now when I open the existing project, I can't compile with a deployment target of 3.0. It compiles successfully and runs only when the deployment target is 4.0.
I get the following error when I set the target to 3.0:
Unsupported compiler 'GCC 4.2' selected for architecture 'armv7'
The compiler which I use is LLVM 3.0. I am not using ARC.
Should I go back to the 3.x SDK? Is there a way that I can support 3.x using Xcode 4.2?
Uhhh, don't?
That might sound flip but iOS 4 has achieved pretty good penetration. Looking at Intstapaper's data says it really isn't worth it. And the "accepted" answer at this stackover flow answer even suggests just supporting 4.2!
Now, of course, you may have really good reasons for wanting to support 3, perhaps you are working with an Enterprise client who needs 3. In which case, just completely disregard what I've said.
I am creating an iPhone project for iOS 5. I need to know if i can run the program in iPhone 4.3.3 and higher ?
Are you using anything in your code that was introduced with iOS 5.0 & newer? (such as storyboards)
If your answer is yes, then you can't run it on 4.3.3.
If no, then you can set the minimum required version to 4.3.X (and here's a tutorial you can use).
Here is a related question (and another one) that may help you out a bit more.
IIRC, you can configure the simulator in xCode to emulate an earlier version of iOS so you can confirm whether or not it will work on 4.3.3. Have a look at the build settings for your project, you can change the target O/S. I'm not sure all versions are available by default though. You might need to download other versions to test.
You said you are using ARC. ARC will work with iOS 4.x, but not iOS 3.x. So ARC will not be a problem. Based on everything else you said about not using storyboards and everything being coded, you should be okay. If you click on a method in Xcode it should allow you to bring up the documentation, and in the documentation it will provide the iOS version that it was released for. Make sure that this it iOS 4.3.3 or lower.
May be this will be silliest question but users are facing such problems.
Sorry for same.
I have made build on xcode 3.2 which has maximum IOS 4.3 and uploaded on itunes.
Now users which are downloading application having IOS 5.0 says that application is getting crashed or vanished.
So, just want to ask that build made on xcode 3.2 runs on IOS 5.0
Please help.....
Thanks a lot....
The short answer is that you have a bug in your app.
An app compiled for iOS 4.3 should work just fine. However, as with any update to the operating system, ambiguities in API calls are tightened, undocumented behaviours vanish and some APIs become deprecated. Deprecations won't cause problems (yet), though both of the others might.
For this reason you should be testing with new versions as they become available.
I am writing an iPhone app in which I want to support the largest user base possible at this point in time (with minimal pain), so I decided that targeting IOS 4.3+ would be a good subset of users for my audience.
I started working in XCode 4.2, but reverted back to XCode 4.1 when I realized that the project templates had changed and everything seemed very intertwined with storyboarding, ARC, etc.
I have built out my application to the point I actually want to test on my device, which has iOS5 installed. When I attempt to use it though, I get this message as soon as I click 'use for development' in Organizer/XCode:
The project's build settings look like this:
My Question Is This: How do I get this application, built in XCode 4.1, to run on both iOS 4.3 and iOS 5 phones?
Are iOS SDKs not backward compatible? I come from Android development in which a less than current SDK will generally work on a newer SDK - is this different in the iOS world? And if so, how is this handled typically?
Any direction on how I should proceed would be greatly appreciated.
You can go ahead and open your app in Xcode 4.2 and it should still work. I've been working on a particular app since Xcode 3.x days and I'm nearly done, chugging along in Xcode 4.2 right now. It shouldn't be a problem. If you want to work with Xcode 4.1 you will be fine, but you won't be ale to use new features introduced in iOS 5.
There are several aspects of "cross-version" development to note.
Testing: You can only test on version of iOS that are included with your SDK, or that are installed on physical devices that you may have. The SDK generally comes only with the latest iOS, sometimes the previous one is included as well, but since Xcode 4 was released, the older SDKs have been progressively deprecated with each release. This is not to say that your app which is linked against the iOS 5 SDK won't run on older versions of iOS. It just depends on how you implement new features.
Features: In order to support older versions of iOS properly, you want to make sure that you don't implement new features without properly checking for the existence of classes, methods, and properties that were introduced in the newer versions of the OS. Unlike Android, you don't have to worry about a million hardware configurations. ;-)
Weak Linking: To support a new feature and still be compatible with older versions of iOS, you need to weak link against frameworks that you are using to implement new features. You can read more about that in the Apple Documentation on Weak Linking.
Deployment Target: The setting that prevents the app from loading on older devices is called the "Deployment Target". If you set this to 3.1.3, then your app will run on iOS 3.1.3 and higher. Remember that if you don't code the the proper version checking, your app may break.
ARC: You can choose to enable or disable Automatic Reference Counting when you create the project. ARC scans your program at compile time only, not at runtime, it doesn't break the app on older versions of the OS.
You need the latest version of XCode and the iOS SDK to install your apps onto your iOS 5.0 phone. That doesn't mean the inverse is true -- you don't need the same version of iOS on your device that you have installed on your computer.
Hope this helps!
You can use the latest SDK and simply set the "IOS Deployment Target" version to 4.3 in the project build settings.
XCode 4.1 doesn't support iOS5 in the sense that Xcode package doesn't contain the iOS5 SDK. So you must return to Xcode 4.2 and target your project for iOS 4.3 (you can also target it for iOS 4.0 with this Xcode version, but you will not be able to simulate it; you can even download older iOS 4.x package versions from the Xcode preferences menu if you really need to simulate them in your device).
You can opt-out of ARC if you want, this choice is given to you when you create the project, so don't worry; but consider that ARC does its magic at compile time only, not at runtime, so your backward compatibility will be kept if you decide to use this technology. Finally if you don't want Storyboard just pick the Empty app template and it will simply put in your project only the basic files. From this template you can create any iOS app, this is the approach I normally follow.
I am dealing with an old code designed for iPhone OS 2.0. In this code I have some instructions that we deprecated on iPhone 3.0.
I am not willing to change the version because I have many customers, specially on iPod Touch, that are still using 2.0. If I update the instructions they will be unable to continue receiving the updates.
The application is compiled for 2.0 and always have been like that.
I have submitted a new version for Apple, where some bugs were corrected and new functionality was added. I have always sent this app to apple and they never complained. Now they rejected the application telling me that it is crashing under OS 3.1.3.
I've followed their instructions but I don't see any crash and the part of the code that uses the "deprecated" function works perfectly on 3.1.3.
Compiling the project for 3.1.3, I see a yellow warning on Xcode telling me that one instruction was deprecated on 3.1.3.
The big question is: will this instruction work on 3.1.3 and should I ignore this warning?
Can this make the iPhone crash?
In my mind, all new versions of the iPhone OS keeps back compatibility with older versions, so, as I think, any application compiled for 2.0 will run on 3.1.3 and all versions up.
As you see, I have tested this on 3.1.3 and the application works perfectly.
How can that be? Any ideas?
thanks for any help.
Deprecated calls are designed to work in the OS release that they became deprecated in, but stop working in some (undefined) future OS. The deprecation is a warning to developers: Hey, you should change your code, this WILL break in the future. It's a way to update the API-base without breaking everyone.
In summary, you're okay to use these calls now, but you'll want to edit the code should you ever decide to ditch 2.x operability.