3

Does the deployment target of an app need to be set to iOS 7 in order to get the iOS 7 appearance on and iOS 7 device?

It was that way during the beta and it still seems like it is right now due to my testing.

I am currently building using iOS 7 SDK and deployment target of - let just say < iOS 7. The app runs using the iOS 6 appearance on my iOS 7 device.

If I build with iOS 7 as the deployment target, the device gets the iOS 7 UI.

It would be great if someone could confirm. Thanks.

Other build settings: Architectures: $(ARCHS_STANDARD_32_BIT) armv6

Valid Archs: armv6 armv7 armv7s

I have read other questions which ask about the iOS 6 and 7 appearance in relation to build settings. Including this one: is there a way to have an app run and display as ios 6 on a iphone with iOS 7? I also could not find any information for this on ADC. ADC just mentions "compatibility with iOS 6, etc"

Update: This may be related to me building for iOS 7 on Xcode 4.6. Xcode 5 gives me compiler errors on build, the related question is Xcode 5 "Missing compiler spec LLVM 4.2" error

Update (10/14/13): I have resolved the build errors of building in Xcode 5 and have confirmed that building with SDK set to iOS 7 in Xcode 5 gives an iOS 7 UI even with a deployment target of < iOS 7.

A table for those who find this page:


Xcode 4.6

  • iOS 7 SDK

    • iOS 7 deployment

      • iOS 7 device
        • iOS 7 UI
      • iOS 6 device (or lower)
        • N/A
    • iOS 6 deployment

      • iOS 7 device
        • iOS 6 UI
      • iOS 6 device (or lower)
        • iOS 6 UI
  • iOS 6 SDK

    • iOS 6 deployment

      • iOS 7 device
        • iOS 6 UI
      • iOS 6 device (or lower)
        • iOS 6 UI

Xcode 5

  • iOS 7 SDK

    • iOS 7 deployment

      • iOS 7 device
        • iOS 7 UI
      • iOS 6 device (or lower)
        • N/A
    • iOS 6 deployment (or lower)

      • iOS 7 device
        • iOS 7 UI
      • iOS 6 device (or lower)
        • iOS 6 UI
Community
  • 1
  • 1
ansonl
  • 786
  • 1
  • 13
  • 34
  • 1
    It's based on the Base SDK, not the Deployment Target. – rmaddy Sep 28 '13 at 20:25
  • Yes, that is what I thought it was based on. However, when deployment is 7.0, UI is different from when deployment target is iOS 6.1. – ansonl Sep 28 '13 at 20:36
  • 2
    What I meant was that an app with a Base SDK of 6.x running on a device with iOS 7 will still like like iOS 6 (except for alerts and action sheets). An app with a Base SDK of iOS 7 (and an earlier Deployment Target) will like like whatever version it is running on. – rmaddy Sep 28 '13 at 20:39
  • Mhm, I had the SDK set to iOS 7 when I compiled for both deploy iOS 6 and iOS 7 and they both produce the same iOS 6 UI on an iOS 7 device. – ansonl Sep 28 '13 at 20:43

3 Answers3

4

No! You can set the deployment target to be 6.1 For example and on devices running 6.1 it will look like 6.1 while on iOS7 devices it will look like 7.0.

And of course if you set deployment target to 7.0 it can ONLY run on 7.0 and up devices.

Also, make sure you set Base SDK to "Latest iOS". And check that your Target settings are NOT overriding your Project Settings. Really you should pick one of those two and only set it on place and let it flow through to the other. I use Target settings mostly.

You want to set your BASE SDK to the highest you're using.
You want to set your DEPLOYMENT target to the LOWEST your prepared to support.
The OS will do the rest.

Cliff Ribaudo
  • 8,932
  • 2
  • 55
  • 78
  • Are you sure about that? I just tried setting my deployment at 6.1 and sdk to iOS 7 and it is still showing the iOS 6 UI on my iOS 7 device. I've added/noted some of my other build settings in the original question. – ansonl Sep 28 '13 at 20:33
  • Yup. Make sure the setting for your TARGET is not overriding the setting for your PROJECT. – Cliff Ribaudo Sep 28 '13 at 20:36
  • I checked both my TARGET And PROJECT and the problem is still there. Could you provide a link to Apple's documentation on this? I might be able to get some more info from that. – ansonl Sep 28 '13 at 20:41
  • Not sure where that is. You can look it up via google the same as I would have to. As I said those are the settings I use.... for about 6 years now... are you sure your actually running iOS 7 on that device... or that your xcode is running the app that you think it is on the test device :) – Cliff Ribaudo Sep 28 '13 at 20:44
  • Okay, this may actually have to do with me still using Xcode 4.6 to build for iOS 7. This is a completely different question that's still related, but when I build with Xcode 5. The build fails with "Missing compiler spec ... llvmgcc42 ..." for every code file in the project. This is has something to do with the project being built with LLVM 4.2 and now Xcode only supporting LLVM 5, but I'm not sure how to fix this. I've made a separate question for this. – ansonl Sep 28 '13 at 20:59
  • Ok, but my answer to your original question is still correct. Do the right thing. – Cliff Ribaudo Sep 29 '13 at 03:04
  • Okay, I have confirmed that the UI discrepancy was indeed caused by Xcode 4.6. Building with Xcode 5 shows the iOS 7 UI with a deployment target of < iOS 7. – ansonl Oct 14 '13 at 14:47
1

I had exactly the same problem - Base SDK 7.0, Deployment Target SDK 6.1 on simulator worked as expected (iOS7 looks) but on the device (which had iOS7 installed) resulted in iOS6 looks.

Turns out it was because I had 6.1 SDK copied in my XCode 5 (I copied it previously to build another project against iOS6.1 with XCode5).

I didn't figure it myself, here is the link to the original answer: https://stackoverflow.com/a/19132061/1077481

The bottom line - don't copy SDK 6.1 in XCode5 :)

Community
  • 1
  • 1
Andris Zalitis
  • 2,369
  • 18
  • 18
  • That's strange. I have similar issue. Even if set -sdk iphoneos7.1 in command line build, seems xcodebuild build for iOS6.1. (Yes, this sdk present in my platform folder to support oldish style L&F). – karim Mar 25 '14 at 12:54
0

Yes I think that's the intended behaviour. If the deployment target is <7, it will run like an iOS 6 app on your iOS 7 device.

This is because it doesn't have the usable status bar and also implements the old style keyboard.

Now that apple has the feature of downloading the last compatible version, if you update your app to make it iOS7 only, someone with iOS6 will automatically download the last working version.

user1923975
  • 1,389
  • 4
  • 13
  • 29
  • Okay, thanks. I was making my app programmatically adapt to iOS 7, is there is way to get the iOS 7 UI and still release the version for older devices? Hm, I didn't know that apple had that feature. Could you provide me with a link for details? – ansonl Sep 28 '13 at 20:25
  • http://www.engadget.com/2013/09/17/apple-ios-last-compatible-version-app-iphone-ipod-ipad/ – user1923975 Sep 28 '13 at 20:29
  • Do you know what date these "last compatible apps" started to be saved in Apple's system or has Apple just "opened" access to previous app versions? It appears to work with very old updates as I just tried to download Navigon on an iPhone 3G. – ansonl Sep 28 '13 at 20:49
  • Sorry I dont know the details, i'd guess Apple always keep versions of your apps and will just use the last one. – user1923975 Sep 28 '13 at 22:19
  • -1 My live app with deployment target 5.0 disagrees. Apples documentation (iOS7 transition guide) and almost all of the apps I use disagree as well. It is of course possible to have iOS7 UI in Apps with a lower deployment target. – Matthias Bauch Sep 29 '13 at 08:54
  • Apple link to "last compatible version": https://developer.apple.com/news/index.php?id=9182013a – ansonl Oct 14 '13 at 15:17
  • -1 This isn't right. Apps built with the _iOS 7 SDK_ will have the new appearance when run under iOS 7; running under iOS 6.1 or earlier will keep the old appearance. To get the old appearance on a device running iOS 7 you need to either: build the app with the iOS 6 SDK, or fake it by using your own custom UI (which happens to look like iOS 6 UI). The deployment target is basically irrelevant to appearance. – Calrion Oct 28 '13 at 02:49