How to enable 64-bit support with GPUImage - ios

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.

Related

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.

XCode error when buiding for app store

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.

iOS app: Missing 64-bit support

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.

Error creating LLDB target at path, Xcode 6 GM seed

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

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