This problem has been driving us nuts for some time. We have applications, all built with Titanium (I'm mentioning this because I'm not 100% sure that the problem doesn't come from there). The applications are up on the store, we updated them a few times since the every launch.
Right now, they supports armv6 and armv7.
For the next update, we want to add support for the iphone 5, which means that we have to drop support for armv6. Which is absolutly fine. We also don't mind setting the minimum OS version to 4.3.
So we changed the build settings in xcode to armv7 armv7s, set the minimum os to 4.3, added the retina screens and so one, builded the app. We left everything else as it were. When we try to validate the app, we get this message :
this bundle does not support one or more of the devices that were supported in the previous bundle for this app
With a link to the apple manual page : http://developer.apple.com/library/ios/#qa/qa1623/_index.html
Which told us that the error might be because :
When you see this error message, you have changed the "Targeted Device Family" build setting (which modifies the UIDeviceFamily info.plist key.)"
But we did not.
Also, a few line below (in Targeting the latest iOS):
For example, if your app is no longer built with armv6, you should not add armv7 to your UIRequiredDeviceCapabilities. This may cause Xcode or iTunes Connect to erroneously reject your update.
Of course, we did not do that.
We even tried to make to change the app version to the next major one, as someone stated it solved it.
Has anyone a clue on how we remove armv6 support for good ? The only solution we found would be to delete the application and recreate it with only armv7 this time. This, of course, would not be acceptable as we would lose comments, ratings and so on.
Did you remove armv6 from both the 'Architectures' and the 'Valid Architectures' setting?
Ok I manage to get it to work and now I'm wondering what went wrong when we tried the first times. Here is what I finaly did (nothing more):
took the current version in Titanium
Cleaned it up
set the version in Titanium to the next major one (2.0 in our case)
reseted environment to use xcode 4.5 (it was already the case, but I was willing to be on the safe side)
builded the package through publish, with the SDK set to 6.0
The build process confirmed that this was ok ([INFO] Minimum iOS version: 4.3 linked iOS Version 6.0)
Once done, validated the package in xcode and uploaded it
And here are all the things I did not do this time:
Changed anything in the info.plist
Changed anything in the build architectures
actually anything in xcode except validate and upload
Related
I spent many hours trying to figure this issue out. Apple continuously accepted my uploaded binary when I was submitting my app through XCode4.2, yet only to declare the binary invalid minutes later. It turned out that it was because I had placed the "Default-568h#2x.png" in my resources folder in an attempt to support iPhone 5's splash screen and eliminate "letterbox mode" (black top and bottom bars)... I am using a 2006 MacBook Pro, and thus am unable to upgrade to Lion OS or Xcode4.5. Also, I am able to build AdHoc versions for my customer that runs just fine on the iPhone 5 (filling its entire screen).
Does anyone know of a workaround I can implement to get Apple to accept my binary while still being able to support iPhone 5's larger screen (no black top or bottom bars)? If I re-name "Default-568h#2x.png" I am able to get Apple to accept my binary, but will I lose compatibility with iPhone5?
I found the following link in my search, which seems to suggest the startup image has nothing to do with the iPhone 5's letterbox mode, and can be labeled any name. However, I must admit, I am rather lost when the writer begins discussing 'viewports' and 'media queries'...
http://www.mobilexweb.com/blog/iphone-5-ios-6-html5-developers
Thanks in advance for any help you can offer!
Apple has made a deliberate decision to only allow two types of apps:
Apps built with XCode 4.4 and earlier, built for iOS up to version 5, including support for armv6 (required for iPhone 3G) but without support for iOS 6 and without support for the larger screen of the iPhone 5.
Apps built with XCode 4.5, built for at least iOS 4.3, possibly supporting the larger screens (Default-568h#2x.png) but without support for iOS before 4.3 and without support for the armv6 architecture (required for iPhone 3G).
All others apps are now rejected if you upload them to the App Store. Your app is rejected because it's includes Default-568h#2x.png and one the following things: either armv6 support or support for iOS before 4.3.
Without XCode 4.5, it's impossible to create an app the support the larger iPhone 5 screen and is accepted by Apple.
Some people have managed to build and upload applications the support both iPhone 3G and iPhone 5. But this is very tricky and requires a parallel installation of at least XCode 4.5 and one earlier version.
Update:
If I'm not mistaken, the crucial points for supporting the larger screen are:
The launch image Default-568h#2x.png
The setting of Base SDK being iOS 6 (or later)
If you add the launch image without setting the Base SDK to iOS 6, iTunes Connect will reject you app:
"Invalid Launch Image - You app contains a launch image with a size modifier that is only supported for apps built with the iOS 6.0 SDK or later."
Without XCode 4.5, you cannot select iOS 6 as the Base SDK.
I was able to install iOS 6.0 SDK on my XCode v4.2 following these instructions:
Is it possible to get the iOS 5.1 SDK for Xcode 4.2 on Snow Leopard?
Afterwards, I could create a binary with the below attributes that Apple would accept.
The launch image Default-568h#2x.png
The setting of Base SDK being iOS 6 (or later)
I have have a Mac mini from 2006, running Snow Leopard, Xcode 4.2. I was having the exact same problem with my submissions last night (May 2, 2013). Organizer uploads the app, and says all is fine. Within a couple of minutes The email below comes through. I did what the email suggested. Then I double checked, triple checked all settings, recreated certificates/profiles....still invalid binary.
Early in development, I was able to crack a dmg to get iOS6 installed on my machine. I put Default-568h#2x.png in my app. I tested ad hoc installations on a 5th gen iPod Touch - everything worked fine, BUT Apple won't accept my app.
I was going to get a new mac this year anyway. I'm heading to the Apple store to get one tonight. Here's the email from Apple:
Dear developer,
We have discovered one or more issues with your recent delivery for "Gazoodle Colours". To process your delivery, the following issues must be corrected:
Invalid Signature - Make sure you have signed your application with a distribution certificate, not an ad hoc certificate or a development certificate. Verify that the code signing settings in Xcode are correct at the target level (which override any values at the project level). Additionally, make sure the bundle you are uploading was built using a Release target in Xcode, not a Simulator target. If you are certain your code signing settings are correct, choose "Clean All" in Xcode, delete the "build" directory in the Finder, and rebuild your release target.
Once these issues have been corrected, go to the Version Details page and click "Ready to Upload Binary." Continue through the submission process until the app status is "Waiting for Upload." You can then deliver the corrected binary.
Regards,
The App Store team
Update: Got a new macbook pro, built my app with the latest Xcode (4.6.2) and resubmitted the app. My app is finally in the Waiting for Review state. Wasn't sure buying a new computer would solve the problem, but it was a good excuse to upgrade the hardware, and it actually fixed the invalid binary issue!
I have created an app targeted for ios 4.1 with base SDK ios 5.0 and tested it with 3G(ios 4.3.3) 3GS(5.1) 3GS(5.0) iPad(5.1). My App has behaved well on all these devices. However, when apple has finaly accepted the app, and i have downloaded it on the same devices, the behaviour has changed. The problem is that the pages which are displayed are oversized, but if i move them, they properly start fitting the screen.
Has any of you came across similar situation when the app after publishing changed its behaviour?
And most important. How am i supoosed to reproduce this bug when the same app run from mac on real devices performs excellent?
I may add that base SDK was set to latest(5.0) but app was archived with XCode 4.2 which doesnt support ios 5.1.
Be kind to me, this is my first question :)
EDIT:
After hotpaw's helpful hint, i have checked that the problem was the release build. I can reproduce the bug on the device after changing target in run conf. from debug to release.
What is interesting, and frustrating, I cannot solve the issue, however, I have tested my application in release mode on xcode 4.3 and it is working perfectly. I have not changed anything, but it works. It can't pack the build( see problem Xcode 4.3.1 - Packaging operation failed), so i am stuck with xcode 4.2
For a while i have suspected that the bug is caused by the compiler when compiling for thumb, and the solution would be to add -mno-thumb to other c flags. But i fail to force that flag. See : iOS5 Xcode4.2 floating-point byte align error?
When I compare the compilation log, i can see that xcode 4.3 compiles with -arch armv6 when xcode 4.2 with -arch armv6. But it is the same device which I connect to the computer. I haven't spotted other differences, but they may exist. I can paste the compilation log for sample file if it would help.
This can happen if you test only Debug Builds, and then submit a Release Build to the App store. For final test, you need to force Xcode to test with a Release build (perhaps by editing the default schemes), and then submit this build with absolutely no changes to the Build settings, other than code signing.
You might also want to final test your Release build by Ad Hoc installation via iTunes on a freshly reset device from which all previous builds of the app have been deleted. See Apple's directions for doing this.
The problem was with the buggy compiler!
I couldn't notice the difference after applying -mno-thumb to my project, because the library which i used ( Three20) was set to compile only for armv6 which caused the problem and not my project. After adding -mno-thumb to all the projects of Three20 the bug has vanished!
I am going to notice the Three20 team about the issue.
I've been trying to get my app - built in Xcode 4.2 in Snow Leopard, using ARC, targeting iOS 4.0 and up - to install on a 3G, with no luck. I've tried every solution I can find (like this thorough one here: Is it possible to target older iOS versions when using Xcode 4.2 and iOS 5 SDK?) and while I've been able to get the app to run on the phone via Xcode, when I share the app and try to install it through iTunes, I keep getting the same error telling me the app was not installed because it is not compatible with this iPhone. My client is using a 3G so this is a pretty big problem.
I've set the architectures / valid architectures to support armv6 as well as armv7 in my build settings and I've deleted the line in info.plist about the required device capabilities with armv7 (I also experimented with adding armv6 instead of deleting the line, which made no difference). I also added the -mno-thumb to Other C Flags in case that was the issue. Even though I know for a fact that it works on a 3G, iTunes refuses to install it. Is there something I'm missing?
Check the OS version for you iPhone 3G. if it is running less than 4.0 you might need to have older sdk. Besides I guess ARC is not supported in earlier versions of iOS.
OK, I'm just dumb - I skipped a step and wasn't actually re-archiving the app, I just kept sharing the same original archive over and over again. Re-archived and now it works fine.
Thanks for all your help, everybody! Next time I ask a question I'll try to rule out my own lack of attention first...:P
I rewrote an app I have on the iTunes store using iOS5.
The original app had support for armv6 and armv7 on iOS 4.2 and higher.
The new app has only support for armv7 on iOS5.0 and higher (since iOS5 API is only supported on armv7)
So there's the issue. iTunes won't let me upgrade the app because it would mean some users won't be able to get an upgrade. Error message:
This bundle is invalid. UIRequiredDeviceCapabilities in the Info.plist may not contain values that would prevent this application from running on devices that were supported by previous versions.
The value in UIRequiredDeviceCapabilities is armv7. armv7 is required b/c iOS5 api.
What do I do? Do I pull the old app and replace it with the new one? What about my customers? How will they be able to upgrade? Are there any workarounds?
I also found this in my search:
https://developer.apple.com/library/ios/#qa/qa1623/_index.html
I wish they would fix this. I mean we can't support all versions all the time if they want us to use new features, and I'm not going to rerelease the app every time they upgrade the OS.
In short: UIRequiredDeviceCapabilities cannot be changed in app updates.
Take a look at Ole Begemann's post explaining it and suggesting changing required SDK version as a workaround.
I was just having this same issue. I tried adding armv6 to my architectures but that didn't work.
To make it work, I changed the deployment target to 5.0 and viola, no problems :)
I want to limit my universal-build app to iPhone4 / iPad, and I've set UIRequiredDeviceCapabilities to include "armv7", accordingly. In the build settings I've set:
"Architectures" = "Optimized (armv7)"
"Valid Architectures" = "armv7"
But the Release and Distribution builds of my universal app are generating this warning:
warning: iPhone apps should include an armv6 architecture (current ARCHS = "armv7")
Is this even a real problem? Can I safely ignore the warning? Why doesn't my debug build exhibit the same warning - the build config has the same settings?
I'm building with XCode 3.2.5, 4.2 SDK.
Similar to this question, but not quite:
"Warning: iPhone apps should include an armv6 architecture" even with build config set
I was having the same issue. I set the project settings accordingly but was still getting the error when building the Release version. I had to edit the Target settings and found that 'Build Active Architecture Only' was checked for the Release configuration. Unchecking it resolved the warning. I hope this helps someone.
Build Active Architecture only is really best used just for debug and simulator builds.
The iOS deployment target version is what determines the required architectures. iOS 4.2 and earlier included support for armv6 processors; therefore Xcode wants you to build for that architecture for builds that might be distributed.
If you really don't want armv6 code, and understand that the app store will reject your app if it targets iOS 4.2 or earlier and does not have armv6, then I'd suggest just changing the "Architectures" setting in the target to armv7 only.
You can stay with arm7 only if you want, but if you want to limit to iPhone 4 / iPad it's because you have a good reason ? To limit to devices you need to use UIRequiredDeviceCapabilities in your Info.plist, otherwise people with previous iPhone will find your app and it will not work.
PS: It's not easy to find a device capability for both iPad and iPhone, you can for example said that you want devices with a front facing camera but this will limit to iPhone 4 and iPad 2 (and not iPad 1)