Deployment Target in xcode - objective-c

Im using xcode4.6 for retina display screen size. When i use Deployment target 5 i didn't get any warnings. When i use Deployment target 6.1 i get warnings shouldAutoRotation is deprecated. But i used both shouldAutorotateToInterfaceOrientation, willAnimateRotationToInterfaceOrientation in same viewcontroller.m file for iphone4 &5. I have plan to upload my app. Which Deployment target i use for app works in both iphone4 &5. If i use Deployment target 6.1, my app will work in iphone4? or it will work on only iphone5?. (or) app store reject my app or not for getting warnings?

It's "deployment target", not "development target". The deployment target defines the minimum version of iOS your app supports. If you set it to iOS 6.1 then your app will only work on devices that have iOS 6.1 or later installed. If you set it to iOS 5.0 then your app will run on any device with iOS 5.0 or later.
If you set the deployment target to 5.0 or 5.1 then your app must properly deal with the change in APIs. View controller rotation changed a lot in iOS 6.0. Therefore all of your view controllers must implement the older and the new rotation related methods. If your deployment target is 6.0 or later then you don't need to add any of the older 5.x rotation related methods.

Related

How to test my app on ios 7 using Xcode 6 simulator

I'm trying to test my app with ios7 using Xcode 6's simulator but I can't find the option to change it. Currently it only loads ios8 while my deployment target is set to 7.
Also according to this message from Apple:
Starting February 1, 2015, new iOS apps uploaded to the App Store must include 64-bit support and be built with the iOS 8 SDK, included in Xcode 6 or later. To enable 64-bit in your project, we recommend using the default Xcode build setting of “Standard architectures” to build a single binary with both 32-bit and 64-bit code.
Does this mean that new apps cannot run on ios7 anymore?
Thank you for your help.
First, Change Deployment Target to 7.You can change Deployment target from target under Deployment Info.
Go to Xcode Preferences, Select Downloads tab and download iOS7 Simulator.
Now go to Xcode, you can find iOS7 Simulator on target device list, if not than quit and restart Xcode.
Hope it will help.
The deployment target is the minimum version of iOS that your application will be expected to run on. It effects how your app is BUILT and not where you run it. You need to choose an iOS 7 device from the run destinations menu and then do a Build&Run to build, install, and run the app on the iOS 7 device.
If you don't have an iOS 7 simulator device in the run destinations menu, go download the iOS 7 runtime from Xcode -> Preferences -> Downloads
Yes you can, go to xcode(7) preferences>select Components here you can download Simulater and Documents also.

Static Library and deployment target issue

I am working on iphone app with deployment target 5.1.1 and now i am adding google ios sdk in my project. I am not giving this functionality to user who has iOS 5.1.1 in device.
But google iOS Sdk needs to set Other Linker flag (-ObjC) in build setting and it creates problem in iOS 5.1.1.
is there any way to set Other Linker flag conditionally? i need to give support for iOS 5.1.1.
I tried below steps but not able to run app in iOS 5.1.1.
At the end compiler will generate single binary. Whether you provide certain feature in iOS 5.1.1 or not does not matter to compiler. So if you need to set deployment target to iOS 5.1.1 then all the static libraries you link must also support that particular deployment target.
More details on ObjC flag

iOS 4.2 with XCode 4.2 - Catch 22?

I want to keep Deployment Target to 4.2, to support iPhone 3G/S, as that device cannot upgrade it's iOS to any higher. I kept my XCode in version 4.2 and the Base SDK as iOS 5.0, as the newer versions do not support older iOS's.
My app gets rejected with the message:
iPhone 5 Optimization Requirement - Your binary is not optimized for
iPhone 5. New iPhone apps and app updates submitted targeting iOS 6
and above must support the 4-inch display on iPhone 5 and must include
a launch image with the -568h size modifier [...]
So I add the launch image Default-568h#2x.png. But then I get rejected with the following message instead:
Invalid Launch Image - Your app contains a launch image with a size
modifier that is only supported for apps built with the iOS 6.0 SDK or
later.
It seems like a catch 22. Do I have to change my SDK, and to what? Am I doing something wrong, or can I simply not deliver to iOS 4.2 any longer?

iOS App Distribution and Deployment Target

I need to build app for distribution via app store.
Application is tested and working on iOS 5.0, 5.1 and 6.0.
Do I need to build different archives for each iOS version (change iOS Deployment Target setting for each build)?
Is there any difference to compiled output when I change iOS Deployment Target setting?
You just need to do one build with the lowest iOS version you want to support, and then you go through all the upload process.
Basically the SDK version you are using is highest iOS version it will run and Deployment Target is the lowest.
So set your Deployment Target to 5.0, compile using iOS SDK 6.0 (you don't have any other option, though) and that's it. Submit to the App Store.
I don't know if there are some differences in binary when changing Deployment Target, but there are some during compilation for sure. For example when you set it to iOS 6, you may get deprecation warnings from the latest API changes.

Support of iPhone 3G

I have submitted one iPhone app 6 times, and in the requirement of the last/ current version, iPhone 3G is not supported anymore.
My question: Why do I lose this model?
I have some remarks:
Now, apps don't support the iPhone 3G anymore.
I made some searches, and I didn't find any news about it.
Before I submitted this version, I updated my XCode from version 4.0.2 (iOS SDK 4.3) to version 4.2 (iOS SDK 5).
Maybe during the submission, "Apple" checked the binary in order to check the version of my tools (which I built my app with).
And as the iOS 5 cannot be installed on iPhone 3G, I have lost this support.
I own an iPhone 3G in order to make compatibility tests.
And with XCode 4.2, I had trouble to debug my App with my iPhone 3G.
But, i found the solution: Add the architecture armv6 is not enough I need to put some weak links.
If I submit my app with these options "special 3G", will these options be take into account and the support will be back?
(see the edit)
"What's new" is I changed my Apple Account: I submitted my app with another account.
Maybe there are some options somewhere that I didn't see.
Edit: I forget a part maybe important: the version of iOS.
The minimum version of iOS for running my app is iOS 3.1.
And my iPhone 3G runs on iOS 3.X
And all troubles I had with XCode 4.2 and my iPhone 3G seem to be the version of iOS (3.X).
Maybe my app lost the support of iPhone 3G to be sure there is no problem with iOS SDK 5 and iOS 3.X
But, there are users with an iPhone 3GS running on iOS 3.X.
I made some tests with one iPhone 3GS running on iOS 4.0: I had no issues and no options to add in my project settings.
Thanks for your answer. The problem may be the version of my XCode.
Like I said, I have already added the architecture armv6. But with my iPhone 3G iOS 3.X, this is not enough.
Did you test only this setting with one iPhone 3G with success?
I should do:
Add the architecture arm6
Set the Base SDK with "Latest iOS" (iOS 5.0)
Set the iOS Deployment Target with the minimum value
--- It's what you advice ----
Remove into the info.plist the parameter "Required device capabilities" (armv6 and armv7)
Add SystemConfiguration.framework as Optional (to make a weak link)
With this settings, my app crashes: "dyld: Symbol not found: __NSConcreteGlobalBlock"
So I should also add in the flag "Other Linker Flags", - weak_library /usr/lib/libSystem.B.dylib
This is one of my questions:
If I submit my app with these options "special 3G", will these options be take into account and the support will be back?
By default, Xcode 4.2 does not include support for the iPhone 3G, but you can add it back. Just select your app target and select "Build Settings". At the top, change the Architectures listed from "Standard (armv7)" to "Other". In the pop-up box, select the existing option and click the minus button, then click the plus button and add "armv7", then again click plus and add "armv6". armv7 will support the newer chips, while armv6 will add back in support for the iPhone 3G... providing you set your iOS Deployment Target to iOS 4.2 or earlier... your setting at 3.x should be just fine—that merely limits you to not using newer features of iOS obviously.
You may also need to add "-mno-thumb" under "Other C Flags" in the Build Settings, though if my memory serves me correctly that may only have been if you are wanting to use Automatic Reference Counting on the old architecture—and even then only because this is a work-around for a known bug.