I tried to install the SDK with CocoaPods in an Objective-C App. The pod install is working, but when I open the workspace, xcode wants to convert the SDK to a newer swift version (which fails).
Is it possible to use the SDK with Objective-C based Apps?
We can't reproduce this behavior (e.g. XCode does not ask to convert to the new Swift version), but anyway App ID SDK does not support Objective-C, because its classes are not derived from NSObject and are not visible from Objective-C.
Related
I have a mac with OSX version 10.5.6 and I'm wondering about the limits of developing iPhone apps with it.
Since I need to install an old SDK, will the apps I make still be possible to use on new iPhones? What kind of features will I miss out on, by using an old SDK? Are there any major changes in the new version of Xcode that will make it reduntant or unprogressive for me to learn an old SDK?
You will not be able to submit an app to the App Store unless it has been compiled against the latest iOS SDK (iOS 5.1 at this time, iOS 6 soon.) This does not mean it needs to use the features in the latest SDK, but you must have used that SDK when compiling. Apple will automatically reject apps compiled against an older SDK.
If you don't care about the App Store and just want to play around, you can do so with an old SDK but it might not allow you to attach the debugger to a device running a newer version of iOS.
Since I need to install an old SDK, will the apps I make still be
possible to use on new iPhones?
The code is for the most part is still the same. Your apps will work on all iPhones, iPads, and iPod touches.
What kind of features will I miss out on, by using an old SDK?
Faster Compiling, Code suggestions, and a few other things that won't prevent you from making iOS apps in the future.
Are there any major changes in the new version of Xcode that will make it reduntant or unprogressive for me to learn an old SDK?
No
Good luck!
I am very new to iPhone app development.I haven't find good article about compiler usage in Xcode. Which compiler do I use for app compilation and what APP store will accept.
The preferred method to build apps is using Apple's Xcode. Older versions of Xcode used gcc. The current version of Xcode supports either llvm or llvm-gcc. Apple currently seems to allow the use of any compiler that emits legal static ARM code with calls to only Apple's public APIs (including one such tool from Adobe's Flash suite).
Xcode uses the LLVM compiler. You do not need to worry about which compiler to use though. Simply install Xcode and develop your application in it. Xcode takes care of the compiling and other build steps for you.
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.
Should I be developing my app for 4.2?
Always use the latest SDK. Apple won't approve any apps built against 3.x anymore.
Edit:
There's a difference between the base SDK and the iOS you plan to support. You need to use the latest SDK as I stated before, however you may still create an app that runs on older versions of iOS by not using classes and methods that have been introduced in newer releases and setting the target OS appropriately.
Unless you have the need to support older iOS devices with older iOS versions, you should develop using 4.2 as it has a lot of features that are missing in 3.x. Most importantly: 3.x doesn't support multitasking.
Also, it's important to understand the relationship between Base SDK version and deployment target. In a nutshell: you can (and should) compile against the latest SDK version but if done correctly, you can still run the app on older iOS versions.
The base SDK should always be the latest version available (4.2 as of right now). Then you can use the deployment target to specify the minimum OS that your application will support, so a good rule of the thumb would be to use 3.0 for that.
Personally, I use some of new iOS 4.0 stuff (ie. GCD) a lot in my applications. I've heard that 90% of ios users are on 4.x. That should be a good middle ground.
With iOS 4 coming out soon, I have already planned to include an iAd in a future update of an app of mine. I assume that this will make my app unusable for anyone on a firmware lower than 4.0. Is there a way to change those variables and the .xib file based on the user's firmware?
Yes, you can build with the latest SDK (ie: 5.1) and still run on devices with earlier versions of the firmware (SDK).
Set your Deployment Target to the earliest version you want to be able to run with, ie: 3.0.
You set your Base SDK to the latest version that you are compiling with, ie: 5.0. This way you can reference the newer definitions and symbols in your code. This article "SDK and Deployment Targets" discusses Deployment vs Base SDK in detail.
Weak link to the libraries/frameworks with symbols that are only available in the newer iOS. This is so your app will run on a device that doesn't have the newer symbols.
You must check to see that a newer method is available before calling it. You have to make sure not to call a method that is 5.0 or 4.X only when your app is on a < 4.0 device. Of course you have to gracefully handle working on older versions by either using older methods or not supporting particular features that need newer SDK support.
NEW w/XCode 4.2: To support older devices you need to add armv6 to the build architectures and remove armv7 from the plist of required device capabilities.
See these SO questions and answers for more details:
deployment target vs base/active sdk
recommended way to support backward compatibility
How do you optionally use iPhone 3.0 features in a 2.0 compatible app
iPhone dev weak link framework
weak linking with IB
universal iphone/ipad app compilation error
iphone apps should include armv6