So we're trying to release our app on iOS, but an old version supported devices AIR no longer supports and we're getting an error.
I've spoken to Apple and the fix for this is to limit our app to iOS 7 or above, which we've done with InfoAdditions. We still get the error because our AIR app still includes armv7 and opengles 2.0 as requirements in the Info.plist file.
Is there a way we can remove these UIRequiredDeviceCapabilities from the info.plist file? The app will still be limited to devices that support it due to the iOS 7 requirement we have added. From where I'm standing, it looks like we'd have to build the .ipa with AIR, edit the Info.plist and then re-package, but this has us completely lost.
Related
I recently built an (universal) app for iOS in XCode 11.7 with deployment target set to iOS 10.0 (as per the Build Settings tab in XCode). Then I deployed that app to Testflight and was able to download and use it on a newer iPhone with the latest iOS.
However, when I tried to testflight it on my other iDevice (and old iPad 4th Gen that only runs iOS 10.3), Testflight told me that the app is only compatible with iOS 12.1 or higher. However, I've recently tested another app on Testflight built with (as far as I can tell) the exact same build settings using same MacBook and the same XCode, and that app installed on my iPad via Testflight without problems.
It sounds like the problem in App not compatible on iPhone 4s and 5 in Testflight and related posts, but my settings for "Build Active Architecture Only" are already set to "No" for Release.
I've already checked the Apple Compatiblity Matrix https://developer.apple.com/library/archive/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/DeviceCompatibilityMatrix/DeviceCompatibilityMatrix.html but I am not using any special features.
There are only few things left I can think of
I implicitly (and without meaning to) use some feature of the newer iPhones that are not included in iOS 12.1 or below
I checked in the appstore that the app contains "medical information" (it's just anatomy drawings for students), so maybe this triggered an implicit requirement of Apple Health Kit (which does not run on iPad 4t Gen). This seems unlikely, however, as I only stated this in the App Store listing, not in XCode.
Somewhere in the settings, there is still one remaining switch left to "only support iOS 12.1 or higher" and I just have not found it, If so, please point out where that might be
The app that successfully installed on Testflight is an update for an older app that was published in late 2019, so maybe Apple forces new Apps to require iOS 12.1 or higher (since all apps have to be built against SDK 12.1 now) regardless of built settings, but updates for already existing apps are still allowed to run on lower iOS versions. Is this the case?
Or am I missing something entirely different?
I have revamped my old application to use healthKit as base and hence I added healthKit as required device capability and moved up the deployment target to iOS 8.0 to make sure that healthKit is available and from iPhone4s all the devices support iOS 8.0 and healthkit.
My app is build for iPhone (not a universal app). Now when I try to submit the app I am getting the below error.
“The app's Info.plist can't contain values for the UIRequiredDeviceCapabilities key that would prevent this app from opening on any iOS device that was supported by previous versions. For more information, see Understanding the UIRequiredDeviceCapabilities Key.”
Does that mean, I need to remove healthkit capability and write code to support iPhone4 also ?? Please guide me.
I encountered the same problem on an iPhone only target, and resolved the issue by removing the UIRequiredDeviceCapabilities key.
I have an iOS 6 application that I had created, but not published, at the time when iOS 7 came out and so I went ahead and updated it to work with iOS 7. And now that I've published the appstore has the following text in the compatibility section for the application:
Requires iOS 6.1 or later. Compatible with iPhone, iPad, and iPad touch.
Now my problem is that when trying to install it from the store, onto a device running iOS 6.1, I get prompted to get iOS 7 if I want to continue. Downloading and installing onto a device running iOS 7 works.
Running on a simulator with iOS 6.1 works perfectly as well.
Has Apple started forcing a os upgrade or have I missed some configuration in Xcode?
Here is what I have (and believe is relevant) in Xcode:
Valid architectures: arm64 armv7 armv7s
Base SDK: Lates iOS(iOS 7.0) // I get no other choice
iOS Deployment Target iOS 6.1
All help would be appreciated in finding out what is going on here.
UPDATE 1 (25. October):
I've sent a message through the iTunesConnect portal and gotten a response. I've been asked to point all users having this problem to contact customer support, or contact developer technical support through the appdev portal on Apple's webpage. I've done the latter, and will update when I get a response.
Are you linking to a library that is only compiled to iOS 7 that may be the issue ? Although Xcode usually gives you errors for things like that.
Since Xcode 4.5, we are unable to build for armv6 and thus unable to support devices like iPhone 3G anymore.
Would it be possible to use, say, Xcode 4.3 to generate a properly signed armv6 binary and then use lipo to combine that binary and the Xcode-4.5-generated armv7 binary into a fat one?
How would I go about this? Does anyone know a good tutorial?
Would the resulting fat binary be allowed for submission to the App Store?
The code signature would no longer match after modifying a binary using lipo. So the bundle would need to be re-codesigned afterwards.
Apps built with Xcode 4.4 and even earlier will still run just fine on iOS 6 devices; and there are reports that Apple is still accepting apps built with the iOS 5.1 SDK.
Objective C will allow you to use some of the newer APIs not in the older linked frameworks via calling them thru the Objective C runtime by name. (Of course, the app should check for their availability on the current device first!)
You can even support the new iPhone 5 display from an earlier Xcode and pre-iOS-6 SDK by simply including a 568#2x tall Default image in the app bundle, and setting all your app's window and view sizes and resizing properties properly. UPDATE: Apple is no longer accepting apps built this way when submitted to the iTunes App store.
ADDED:
Another potential solution is to split your development into two similar apps. One for iOS 4.3 and up. And one for iOS 4.2.x and lower with not iOS 6 and iPhone 5 support. Two different apps in the app store. However it is unknown whether Apple will allow this.
It appears that someone else figured out how to do it, see this SO question.
I haven't tested it yet myself, though.
This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
iPhone app does not run on old device (3G, 3GS, …)
I've got a similar problem to this (iPhone app does not run on old device (3G, 3GS, ...)) but the workaround on that page doesn't do anything for me. I have been developing iOS apps on XCode3 and testing on an older second generation iPod Touch running iOS 4.2.1. Been trying the last couple of days to use XCode4 instead.
I'm able to build and run apps under XCode4 using the simulator, both ones that I initially developed under XCode3, as well as brand new XCode4 created "Hello World" type ones. However, when I try to put one on the actual hardware, it fails with little in the way of error messages. The debug window in XCode4 doesn't show anything amiss. The activity/status indicator in the top middle of XCode goes from "Building [AppName]" straight to "Finished Running [AppName]" but the app never is transferred or run on the device.
If I look at the iPod's console via Organizer I see a bunch of errors like:
Thu Jun 16 15:17:56 unknown lockdownd[16] <Error>: 2ff68000 handle_connection: Could not receive USB message #6 from Xcode. Killing connection
Thu Jun 16 15:17:56 unknown com.apple.mobile.lockdown[16] <Notice>: Could not receive size of message
and I'm guessing it's related to that. I've tried unplugging all other USB devices from my Mac but makes no difference. Tried rebooting both the device and the Mac, but again no difference.
I have adjusted the iOS deployment target to 4.2, so I don't think there's any problem there. The device shows up in Organizer with the green dot and a valid unexpired provisioning profile. Under code signing properties it looks like:
Code Signing Entity Don't Code Sign
Debug Don't Code Sign
Any iOS SDK iPhone Developer (currently matches...[profile I have installed])
Release Don't Code Sign
Any iOS SDK iPhone Developer (currently matches...[profile I have installed])
The device itself is showing up in the Schemes dropdown as:
[DeviceName] (4.2.1 overriding Base SDK to 5.0)
Anyone else running into a similar problem or have any suggestions?
Just to promote Thomas' comment to an answer, this can be caused by targeting a CPU architecture that your device doesn't support. The iPhone and iPhone 3G (along with iPod touches of the same generation) don't support armv7. Set the "Archiectures" build setting to include "armv6" to ensure the resulting fat binary contains armv6 code.
I had the same problem with XCode 4.1.1 and an Ipod Touch 2nd gen. I started with one of the templates and couldn't run it on my hardware. Found all the answers here on stackoverflow, but it's better to have all necessary steps in one spot:
You have to add armv6 to Architectures in your project settings (Build Settings tab). You can set it to "armv6 $(ARCHS_STANDARD_32_BIT)" or "armv6 armv7", it doesn't matter. $(ARCHS_STANDARD_32_BIT) is just a variable which equals "armv7" in the newest XCode.
Don't change the Base SDK, "Latest iOS (iOS5.0)" is fine. Under "Summary" change "Deployment Target" to 4.0 or whatever iOS version you want to have as a minimum version.
The newer templates in Xcode 4 have a standard setting in your Info.plist which you have to change. Search "Required device capabilities" and delete "armv7".
If you're doing steps 1+2 but forgot step 3, you get the "Could not receive USB message" errors in the device log and no error message otherwise in XCode. Why it does that, instead of showing you an error message that hints you to "Required device capabilities" is a different question.
In Short: Apple started to drop support for the armv6 platform with the update to iOS 4.3. Newer hardware runs with a different instruction set, armv7. If you want to support iOS 4 with XCode 4, you should really make sure that you also build your project for armv6 correctly with the steps above.
It looks like you have iOS 5.0 SDK installed. Am I reading that right? If so, that is governed by Apple Developer NDA and should not be discussed here. I would post in the developer forums.
Do you have other devices running 4.2.1 that DO work with your installation of Xcode? Do you have any other devices at all that DO work with your installation of Xcode?
Please be aware that apparently the architecture setting is case-sensitive.
I manually added 'Armv6' and nothing still worked.
Changing this to 'armv6' did the trick.