My first question on stackoverflow and new to iOS development, figuring things as I go. I have checked similar questions already, see links at bottom.
Task:
I am continuing work on a project for a client to make an iOS app update both 32-bit and 64-bit support compatible.
Archive validation gives me:
iTunes Store operation failed.
Missing 64-bit support. 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-...
Problem:
I can't seem to get my project/build to support both 32-bit and 64-bit binaries (let alone 64-bit by itself). I have followed Apple's (and other stackoverflow answers') suggestions with the following settings:
OS X 10.9.5
XCode 6.1
Architectures: Standard architectures(armv7,arm64) - $(ARCH_STANDARD)
Build Active Architecture Only: No (tried 'yes' to debug only and 'yes' to all)
Valid Architectures: armv7 armv7s arm64
iOS Deployment Target: 5.1.1 (also tried 6.0)
Methods attempted (tried deleting DerivedData as well):
a) clean -> build -> archive -> validate
b) connect device -> clean -> build -> disconnect device -> archive -> validate
When I check in the binary (following stackoverflow: ios 64-bit compatibility) I only get armv7 in the dwarfdump (which if I understand correctly is only 32-bit but should also have arm64 with the above settings).
File: MyApp.app/MyApp (armv7)
I have attempted many related solutions related to the problem from other other sources(lost track of other references) but no success.
Any help would be greatly appreciated, thanks!
References:
iOS 64 bit compatibility
minimum os x and xcode requirements for ios 8.1 development
iOS app submission : missing 64-bit support
You can manually add 64- bit (arm64) support like this:
Closing this question and to answer it for anyone else that wasn't aware or are new to iOS development (like me in both cases).
As #Almo and #Jeremiah Jessel mentioned in the comments regarding third-party libraries; I had looked into them and some of them were indeed built as 32-bit binary and were unfortunately, no longer maintained to have 64-bit support.
In my case, the problem was definitely the 32-bit libraries. I had some assistance and was able to update the libraries for 64-bit.
Related
I'm getting warning for 64-bit support missing. The whole message is like below:
Missing 64-bit support - Beginning on February 1, 2015 new iOS apps submitted to the App Store must include 64-bit support and be built with the iOS 8 SDK. Beginning June 1, 2015 app updates will also need to follow the same requirements. 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.
I've done changes like attached image for Valid Architectures.
If i try to Archive the build with supporting arm64. I'm getting following errors.
If i will remove arm64 from Valid Architectures, it will work fine and submitted successfully to iTunes Connect but i get mail from iTunes that binary is missing 64-bit support.
I have done googling but not able to get exact solution. Please help me for getting out of this issue.
Any help will be surely worth appreciate.
Thanks,
Amazon iOS SDK offers 64bit support since the version 1.7.0
https://aws.amazon.com/releasenotes/iOS/7003308162044672
Simply use their latest version 2.1.0 , and it will compile with arm64 flag.
That means your library is not compiled for 64 bit, arm64 and your app is expecting it,
There should be new version of that library which supports arm64, just check the developer's web site.
http://aws.amazon.com/mobile/sdk/
Simply update valid architectures and add arm64 flag in Xcode it's not the only step that you need to make an application 64-bit compatible.
Your log is telling you that one library at least it has not been compiled for 64-bit. So update your libraries, in particular from the logs I think you need update the Amazon library.
I try to upload the file via Application Loader. But I got the mail from iTunes store.
Missing 64-bit support - Beginning on February 1, 2015 new iOS apps submitted to the App Store must include 64-bit support and be built with the iOS 8 SDK. Beginning June 1, 2015 app updates will also need to follow the same requirements. 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.
But I already add the arm64 in Xcode like the following picture.
Why the Missing 64-bit support happened when upload to the iTunes connect ?
Did I missing something ?
I had same problem today I set Build Active Architecture to NO and it got submitted. Give a try
From this SO Answer and this SO Answer
Architecture: "Standard architectures" arm7, arm64
Valid Architectures: "arm64" , armv7...
Build Active Architecture Only - NO (specially... if your connected device is not arm64 compatible)
Most commonly happens when I archive while a device is connected (as it affect the architecture).
(As mentioned in a comment by Martin to Shashi3456643's answer)
I faced the similar issue with Xamarin.ios deployment. Later found that it was third party library causing the issue. I have maps in my app using from Arc GIS. I updated my dll to latest provided and resolved my issue.
This morning I got an e-mail from Apple saying the following:
Dear Developer,
As we announced in October, beginning February 1, 2015 new iOS apps
submitted to the App Store must include 64-bit support and be built
with the iOS 8 SDK. Beginning June 1, 2015 app updates will also need
to follow the same requirements. 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.
If you have any questions, visit the Apple Developer Forums.
Best regards, Apple Developer Technical Support
Now I have a question, how do you ensure that an iOS app IS 64bit compatible?
My build settings look like this:
My Deployment target is iOS 6.0.
I just need to confirm that the app is 64 bit compliant, I am all new to iOS and took over a fairly large project not long ago so I'd rather ask and be 100% sure.
Just to make things a bit clearer, how do you ensure that an iOS app is 64bit compatible? I know you need to set certain build rules such as the one in the image, but I want to know is there any way of knowing that your iOS app is 64 bit compliant. 32 bit iOS apps can run on 64bit hardware so I don't believe checking if the iOS app runs on a device will help.
I believe you could upload a new version and see if you get this message: But I was hoping for a nice option without uploading a new build.
Thanks!
With the settings you have you should end up with arm64 and armv7 in your binary. You won't get armv7s because although it's a valid architecture, it's not included in ARCHS_STANDARD if building on Xcode 6 (See also).
Just because it runs on a 64 bit device, it doesn't mean that it has 64-bit support. 64-bit devices can run 32-bit apps.
To determine whether or not it contains an arm64 chunk, you need to find the application. Go to Xcode preferences, and select the Locations tag. The Derived Data line tells you where files are being built.
Open up a Terminal (Finder->Applications->Utilities->Terminal) and go to that location using the 'cd' command. In my case, my project is stored in ~/MyProject
$ cd ~/MyProject
$ cd build
$ find . -name MyTarget
./build/MyTarget
./build/MyTarget/Build/Products/Debug-iphoneos/MyTarget.app/CoreControl
./build/MyTarget/Build/Products/Debug-iphoneos/MyTarget.app.dSYM/Contents/Resources/DWARF/CoreControl
Now we know where the binary is stored (it's the second result), we can check it to see what architectures it contains:
$ dwarfdump ./build/MyTarget/Build/Products/Debug-iphoneos/MyTarget.app/MyTarget
----------------------------------------------------------------------
File: ./build/MyTarget/Build/Products/Debug-iphoneos/MyTarget.app/MyTarget (armv7)
----------------------------------------------------------------------
.debug_info contents:
< EMPTY >
In my case, I only have arm7 built, not arm64.
I'm getting this error whenever I build in Xcode 6 GM Seed. It seems to be making my app insanely slow. What exactly does this mean and how do I fix it?
I had the following error:
Warning: Error creating LLDB target at path '.....'- using an empty
LLDB target which can cause slow memory reads from remote devices.
PS: im not able to run my app, its stuck on the splash screen
There is a thread in the Apple Developer Forum, https://devforums.apple.com/message/1010068#1010068 that describes how to diagnose this issue. I had his issue for Xcode 6 GM Seed, specifically - Version 6.0.1 (6A317). This isn't necessarily a solution, but it may help some people get a better diagnosis
Useful steps are as follows -
1) Create or modify your ~/.lldbinit and add log enable -f /tmp/lldb-api.txt lldb api to it.
2) Rerun your debugger session (no need to restart Xcode or anything)
3) Inspect the file at /tmp/lldb-api.txt. Look for a line beginning with SBDebugger::CreateTarget(...). Mine looked something like this
SBDebugger(0x7f83671fd600)::CreateTarget
(filename="/Users/xxxxxxx/Library/Developer/Xcode/DerivedData/Dino-gjuxikhuyokkqufeqmesmgjcxylu/Build/Products/Debug-iphonesimulator/Dino.app",
triple=x86_64, platform_name=(null), add_dependent_modules=1,
error=the specified architecture 'x86_64' is not compatible with
'i386-apple-ios' in
'/Users/xxxxxxx/Library/Developer/Xcode/DerivedData/Dino-gjuxikhuyokkqufeqmesmgjcxylu/Build/Products/Debug-iphonesimulator/Dino.app/Dino')
=> SBTarget(0x0)
4) Inspect the target file from the above log output, in my case -
file
"/Users/xxxxxxx/Library/Developer/Xcode/DerivedData/Dino-gjuxikhuyokkqufeqmesmgjcxylu/Build/Products/Debug-iphonesimulator/Dino.app/Dino"
/Users/apanagar/Library/Developer/Xcode/DerivedData/Dino-gjuxikhuyokkqufeqmesmgjcxylu/Build/Products/Debug-iphonesimulator/Dino.app/Dino:
Mach-O executable i386
5) So, In my case my problem was the architectures I was building for. The target architecture for your project should match the one on the SBDebugger::CreateTarget() line in the log output.
Xcode doc's point out the following. I had to go through my nested frameworks and change some outdated architecture targets -
NOTE ABOUT 64-BIT ARCHITECTURE
An app extension target must include the arm64 architecture in its
Architectures build settings or it will be rejected by the App Store.
Xcode includes this architecture with its “Standard architectures”
setting when you create a new app extension target.
If your containing app target links to an embedded framework, the app
must also include the arm64 architecture or it will be rejected by the
App Store.
For more information about 64-bit development, see 64-Bit Transition
Guide for Cocoa Touch or 64-Bit Transition Guide for Cocoa, depending
on your target platform.
https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionCreation.html#//apple_ref/doc/uid/TP40014214-CH5-SW1
I am not sure if this will help in your case. But I tried this solution and it worked pretty neatly for me.
Pull up the terminal and type - rm -rf ~/Library/Developer/Xcode/DerivedData
This is supposed to remove the huge stack of DerivedData folder and make the app execute faster.
Did you use Architectures=$(ARCHS_STANDARD_32_BIT) and run your app on a 64 bit device? (iPhone 5S or iPhone 5S simulator)
Apple seems to be stricter with apps which don't support 64bit. So if there is no specific reason, I think it's better to include arm64 in your build architecture
NOTE ABOUT 64-BIT ARCHITECTURE
An app extension target must include the arm64 architecture in its
Architectures build settings or it will be rejected by the App Store.
Xcode includes this architecture with its “Standard architectures”
setting when you create a new app extension target.
If your containing app target links to an embedded framework, the app
must also include the arm64 architecture or it will be rejected by the
App Store.
For more information about 64-bit development, see 64-Bit Transition
Guide for Cocoa Touch or 64-Bit Transition Guide for Cocoa, depending
on your target platform.
Source:
https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionCreation.html#//apple_ref/doc/uid/TP40014214-CH5-SW1
This warning is solved by changing Build Settings :
Select Project -> Build Settings
Change 'Architectures' to 'Standard architectures (armv7, arm64) - $(ARCHS_STANDARD)'
This will prompt an alert stating iOS 5.1.1 and above are supported. Click 'Change Deployment Target to 5.1.1'
Repeat steps for Target (if not changed automatically)
Also, this is preferred build setting since Apple is forcing developers to build apps on 64 but architecture. Apple document Link
I've developed an iOS app whose Deployment Target needs to be 5.0, so the target's Build Settings > Architectures > Architectures value has to be the standard without the 64-bit one (XCode complains about my deployment target if I try to include it).
I've read this post: Xcode 5 and iOS 7: Architecture and Valid architectures dealing with this backwards compatibility, but some things are still not clear for me:
They say in that post that last Xcode update allows to build both 32-bit and 64-bit but only for a deployment target of iOS 5.1.1 and later. I'm targeting iOS 5.0, how should I handle this? Will Apple reject my app if I only submit a 32-bit build and I don`t take advantage of iPhone's 5S 64-bit processor?
And finally they don't explain the difference between Architectures and Valid Architecures values in target's Build Settings, could somebody explain that?
Thanks!
Recommendations
I'm targeting iOS 5.0, how should I handle this?
Based on your requirement it appears the only option is to build the 32 bit app only. This should work on the iPhone 5s in 32 bit mode.
Will Apple reject my app if I only submit a 32-bit build and I don`t take advantage of iPhone's 5S 64-bit processor?
No. It has been publicly stated that 32 bit apps will continue to run on iPhone 5s although there is a known bug where 32bit apps will not support bluetooth operations on a 64 bit device (link). I have submitted a 32 bit app to the store which ran fine on iPhone 5s.
And finally they don't explain the difference between Architectures and Valid Architecures values in target's Build Settings, could somebody explain that?
To read the full explanation see the Xcode Build Settings documentation, but in essence just note the reference to the intersection of the two architecture settings. Actual supported architecture will be the intersection of values (one or the other setting may be empty but not both or no binary will be output).