XCode error when buiding for app store - ios

Since the start of 2015 apple have new restrictions that say you must have 64-bit support and build with ios 8 SDK. I built my code with Unity for IOS, then opened XCode and opened the file I just created through Unity. I built it inside XCode fine with no errors. I then go to archive it and validate it. It then tells me about the new restrictions that I have mentioned above.
It says to use the default architecture to build a single binary. I go and change the architecture to suit this. Then I do a fresh build and it gives me an error saying "File is universal (2 slices) but does not contain a(n) armv7s slice". I researched this error and it said to just remove armv7s from the architecture. I did this and built again.
I then get the error "missing required architecture arm64 in file ..... undefined symbols for architecture arm64". I know this means that some of my libraries are not supported for arm64. I take out arm64 from architecture and then I am back to the start where it says I need to build for 64-bit.
Has anyone come across this type of problem before and may have a solution.
Many thanks in advance

You need to make a new build from Unity.From Player Settings -> Iphone -> Other settings -> Configuration . Under Scripting backend select IL2CPP and then under Architecture select Universal.

Related

Missing required architecture arm64

I have been running my app fine on a ipad mini throughout development but tried testing it on an iPad air 2 today and it wont run. I get the following warning
ignoring file /ProjectFolder/SwiftEverlive/EverliveSDK.framework/EverliveSDK, missing required architecture arm64 in file /ProjectFolder/SwiftEverlive/EverliveSDK.framework/EverliveSDK (2 slices)
my architectures settigs in my project
It also doesn’t run on the simulator. I also tried opening the project in the Swift everlive folder but that won't open. It says its missing the project.pbxproj file
To be honest did not understand the other answers for similar questions here. Sorry very new to iOS dev.
Edit
The problem seems to be in the settings of the Telerik Everlive Framework and how that was complied is sthere any way i cam fixthis as i dont have time for them to suggest a solution.
I am guessing this means that you are trying to use a framework, namely EverliveSDK, that has not been compiled for a the new 64 bit arm processor in the iPad Air 2. Framework files come with a lot of precompiled code - sometimes intended to be proprietary - and if it hasn't been compiled for your target architecture then you cannot use that framework on that architecture.
The devices that use the arm64 architecture are iPhone 5s and newer. The simulator uses the architectures i386 or i86. If you have the framework available to you (it should look like a little white lego) it should contain a text file of the same name. This text file will appear to contain a bunch of gibberish, however, if you run the command 'lipo -info' on this file in the terminal, if will tell you which architectures the framework contains. I suspect you will be missing arm64, in which case you can't use the framework on the aforementioned devices.
The follow solved the problem:
1. You can try to add arm64 to the Build Settings -> Architectures ->
Excluded Architectures for Any iOS Simulator SDK. It helps many of
devs, but for me it didn't work.
2. You can Clean Build Folder (⇧ + ⌘ +
K), clean DerivedData directory, CocoaPods caches, and restart
macOS, Xcode and Simulator. This solution works for me.
Try this
Remove all valid architecture. It just only set armv7 and armv7s.
Just change Build Settings -> Architectures -> Build Active Architecture Only -> Debug -> NO.

Error ITMS-90086: "Missing 64-bit support" && Undefined symbols for architecture arm64

I am trying to update an iOS app through XCode and Application Loader, but I always get this error:
ERROR ITMS-90086: "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."
So I applied some solutions founded here in Stack Overflow, now my configuration is like this:
Standard architectures (armv7, arm64) - $(ARCHS_STANDARD)
Base SDK Latest iOS (iOS 9.2)
Build Active Architecture Only YES (I also tried with NO)
Supported Platforms iOS
Valid Architectures armv7 armv7s arm64
After I did the configuration above to implement the arm64 architecture, I having troubles with some libraries:
ERROR: Undefined symbols for architecture arm64: (Some libraries)...
These libraries are already in the Link Binary With Libraries section. Needless to say, that if I remove the configuration with architectures, the code runs great, but I can't update it to the apple platform.
My deployment target is 7.0, but I also having this problem with the target 6.0.
My XCode version is 7.2.
Do some one knows a possible solution to this?
Hello Can please check if you any dependencies frameworks or two framework having the same classes or with class name so the while you build the app this may one of your reasons to get undefined symbols. This also may be the reason that the framework which you are used in your project many not support any specific architecture. Please check it.

How to enable 64-bit support with GPUImage

When building app with GPUImage, I got errors like this
ld: warning: directory not found for option '-L/Users/.../GPUImage'
ld: warning: ignoring file /Users/.../Libraries/GPUImage/libGPUImage.a, missing required architecture x86_64 in file /Users/.../Libraries/GPUImage/libGPUImage.a (3 slices)
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_GPUImageCrosshatchFilter", referenced from:
objc-class-ref in AddPopViewController.o
I don't know if this error is related, but what I want to do is for my app to support 64-bit processors. How can I do that?
In this link, it says
The framework supports 64-bit, but you'll have to enable this for your project in the framework and your application yourself
How do I do this? Thanks
Following are the steps given in the iOS documentation to ensure the app supports 64 bit. Check if the following points are taken care in your environment.
At a high level, here are the steps to create an app that targets both the 32-bit and the 64-bit runtime environments:
Install the latest Xcode.
Open your project. Xcode prompts you to modernize your project. Modernizing the project adds new warnings and errors that are
important when compiling your app for 64-bit.
Update your project settings to support iOS 5.1.1 or later. You can’t build a 64-bit project if it targets an iOS version earlier than
iOS 5.1.
Change the Architectures build setting in your project to "Standard Architectures (including 64-bit)."
Update your app to support the 64-bit runtime environment. The new compiler warnings and errors will help guide you through this
process. However, the compiler doesn’t do all of the work for you; use
the information in this document to help guide you through
investigating your own code.
Test your app on actual 64-bit hardware. iOS Simulator can also be helpful during development, but some changes, such as the function
calling conventions, are visible only when your app is running on a
device.

Getting Error : ld: file is universal (2 slices) but does not contain a(n) armv7 slice [duplicate]

I upgraded Xcode version and when using external static libraries, I get this message:
ld: file is universal (3 slices) but does not contain a(n) armv7s slice: /file/location for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Is there any way to bypass this and add support to the library if the developer of the library hasn't updated their library yet?
If you want to remove the support for any architecture, for example, ARMv7-s in your case, use menu Project -> Build Settings -> remove the architecture from "valid architectures".
You can use this as a temporary solution until the library has been updated. You have to remove the architecture from your main project, not from the library.
Alternatively, you can set the flag for your debug configuration's "Build Active Architecture Only" to Yes. Leave the release configuration's "Build Active Architecture Only" to No, just so you'll get a reminder before releasing that you ought to upgrade any third-party libraries you're using.
I've simply toggled "Build Active Architecture Only" to "Yes" in the target's build settings, and it's OK now!
Try to remove armv7s from project's "Valid architecture" to release from this issue for iOS 5.1 phone
I just posted a fix here that would also apply in this case - basically, you do a hex find-and-replace in your external library to make it think that it's ARMv7s code. You should be able to use lipo to break it into 3 static libraries, duplicate / modify the ARMv7 one, then use lipo again to assemble a new library for all 4 architectures.
Flurry Support for iPhone 5 (ARMv7s)
As I mentioned in yesterday’s post, Flurry started working on a version of the iOS SDK to support the ARMv7s processor in the new iPhone 5 immediately after the announcement on Wednesday.
I am happy to tell you that the work is done and the SDK is now available on the site.
use menu Project -> Build Settings ->
then remove armv7s from the"valid architectures".
If standard has been chosen then delete that and then add armv7.
In case this happens to someone. I built my own library to use with a third party code. While I was building it to deliver, I accidentally left my iPhone 4S plugged in, and so Xcode built my library only for the plugged architecture instead of following the project settings. Remove any plugged in devices and rebuilt the library, link it, and you should be all right.
Hope it helps.
In my case, I was linking to a third-party library that was a bit old (developed for iOS 6, on XCode 5 / iOS 7). Therefore, I had to update the third-party library, do a Clean and Build, and it now builds successfully.

How to ignore ld warning about missing i386 architecture for device-only framework

My app employes an external device (hardware accessory). I'm using a framework provided by the hardware supplier, but this only runs on the device (they do no support running in the simulator). Because of this, I'm getting the following warning when I compile:
ld: warning: ignoring file ...xxx.a, missing required architecture i386 in file
...xxx.a (2 slices)
Is there any way to tune my project configuration so that I no longer get this error when building for the simulator? I know it's a cosmetic issue, but I'd rather have my build log clean when I have no (real) problems in my code.
In the project setting, it's possible to add different libraries according to the current configuration and/or the os. Thus you can add your library only if your building for a real an iOS SDK (and not for the iOS simulator SDK).

Resources