Venmo touch Braintree payment - compile error: Undefined symbols for architecture i386: "_OBJC_CLASS_$_VTClient" - ios

I have successfully installed braintree ios sdk using cocoapod and It was compiled fine.
However, when I initVTClient in my appdelegate.m file. I was getting compiling error:
Undefined symbols for architecture i386:
"OBJCCLASS_$_VTClient", referenced from:
objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
and I couldn't find any solutions online at all. any tips?
also submitted an issue here:
https://github.com/braintree/braintree_ios/issues/27

It's possible that you need to put "build settings"->architectures back to "standard architectures" since the old Venmo library (before their big v0 update) was built before the 64bit architecture. That's one solution I've seen.
[EDITED: 2/25/2014, 4:47pm EST]
I got my project to work. The problem for me was that my existing build settings were getting in the way of the build settings that cocoapods wanted to load onto the project. Those are the important ones such as the Venmo Framework, so there's good reason for the issue.
If you go to "build settings" -> "other linker flags", and add a new flag: "$(inherited)", it will work. I put that one at the top of the list so I'd try the same, not sure if order matters. What this does is keeps your old settings / flags, (I was using -ObjC), and imports the new ones from cocoapods. Good luck.

looks like i need to add VenmoTouch.framework into my target->Link Binary with Libraries.
then what's the point of using cocoapods
the official answer:
https://github.com/braintree/braintree_ios/issues/27
Make sure you verify which target CocoaPods is integrating with. There are a number of patterns for specifying this, such as target "name" do ... end and link_with.
See here for more details: http://guides.cocoapods.org/syntax/podfile.html#link_with

Related

iOS build succeeds but fails to archive

I have been working on my first ResearchKit app. Since the last time I created an archive, I have included a custom library for creating JSON strings. See my previous question.
After importing the .h file in that bridging-header file, I was able to use the package.
The project was running fine in the simulator. I even did a fresh clean and build for the "Generic iOS Device", and that completed with no errors. When I went to archive the project, during the linking stage, I get this error:
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_ORKLocation", referenced from:
objc-class-ref in ORKESerialization.o "_OBJC_CLASS_$_ORKConfirmTextAnswerFormat", referenced from:
objc-class-ref in ORKESerialization.o ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit
code 1 (use -v to see invocation)
My Xcode version is 7.1.1. I have been searching around the web for possible answers. Apparently it might have something to do with these architecture version, but I can't seen to pinpoint the problem. Any help would be appreciated. Thanks!
This sounds like a bug. Best bet is to file it on Github.

Linking Errors while integrating SKMaps.Framework

Getting these error while trying to integrate SKMaps framework
Undefined symbols for architecture x86_64:
"CRouteTestManager::calculateRoute(NGRouteInput const&, std::__1::shared_ptr<CRoute>&)", referenced from:
PoiTrackerTest::createRoute() in SKMaps(PoiTrackerTest.o)
"_gpTestRoutesManager", referenced from:
PoiTrackerTest::createRoute() in SKMaps(PoiTrackerTest.o)
createNavigationObject(int) in SKMaps(NavigationTest.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Please help me resolve this error.
Environment :
Xcode 6.3.1, Mac OSX 10.10.3
Deployment Target iOS7.0
Supports Swift.
i was following this guide : http://developer.skobbler.com/getting-started/ios
and also added CoreMotion.framework as there were also linking errors related to that framework.
Cause of Linker Error
This appears to be the result of the linker flag -all_load, which may have been added to your project through a CocoaPod. In the rare case that you have a static library with nothing but categories defined then you need this flag. Otherwise, it can be safely removed from your build. See discussion here:
What does the -all_load linker flag do?
From a link in the comments section on that discussion you can see that this bug that previously required -all_load has been fixed since XCode 4.
Objective-C categories in static library
Probable Explanation
This framework has a bunch of tests defined inside, but their dependencies are not included in the framework. When the linker is forced to resolve and link all dependencies, it errors out because it cannot find them. Basically, the library should be cleaned up so that it doesn't contain these unnecessary symbols. The work around is to remove -all_load for the time being.
Faced with the same problem. Deleting -all_load flag did not help, so I continued to research and found a solution:
Despite the fact that Skobbler declares the need for linking the libc++ library, in reality you need to link libstdc++.6 library. Note that linking libstdc++ will not help.
P.S. Xcode 6.4, iOS SDK 8.4

Xcode - Missing Architecture (library linking)

For the recent couple of days I have had this compiler error in Xcode every time I've built my project:
ld: warning: ignoring file /.../(Framework Name).framework/(Framework), missing required architecture x86_64 in file /.../(Framework Name).framework/(Framework) (2 slices)
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_CLSNAME", referenced from:
objc-class-ref in ViewController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
I also can't run this code on the iPhone 5 simulator (i386).
The iPhone device I have is outdated and can't run iOS 8. I tried setting the build settings to iOS 7 but I get an error regarding the lack of support for dynamic libraries before iOS 8.
Things to note:
I am using 2 projects, in 2 different workspaces. (one for the library and one for the demo app. Tests of the same code with the unit tests in the library project are successful.)
I used to be able to link the demo project with the library project until I had to do some changes in the library code. After I exported the newer version this error started occurring.
In order to get the library file/folder (.framework) I used the Archive option.
Running lipo -info outputs Architectures in the fat file: lib.a armv7 arm64
I have C++ code in the library project (unlikely to be the issue)
In the library project, I am using another external library I installed with Cocoa Pods (also used to work before changes in the library code)
Solutions I tried:
Changing the Architectures and the Valid Architectures list in Build Settings.
Setting "Build Active Architecture Only" to "No" in Build Settings.
Creating a new project (both for the demo and the library)
Making the library a static library (new project, got the same warning, no error, couldn't #import the files I needed)
I only started working with iOS and Xcode a couple of months ago and I am not super-experienced with everything there yet, so please try to explain everything with as much detail as you can.
Thanks in advance to anyone trying to help :)
Did you add the framework it says is missing? Also, try to delete the Derived Data folder and then clean the project. If that does not work, then turn off Modules in build settings.

Xcode mach -o linker

When i am trying to compile my project with NMSSH framework, XCode 5 says:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_NMSSHSession", referenced from: objc-class-ref in HelloWorldViewController.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
What should I do?
I ran into a similar issue myself. Here's what I did to fix it.
Open the downloaded Git repo in Finder
Open the NMSSH-iOS.xcodeproj file. NOT the NMSSH.xcodeproj!
Clean and build the project.
Follow the steps from the Github wiki page https://github.com/Lejdborg/NMSSH/wiki/Build-and-use-in-your-iOS-project
Actually, this itself is on the wiki page too. I know I opened the wrong Xcode Project and it seems like a lot of people do it accidentally. So, that's what I had to do to resolve it. Also, you'll have to build the framework for either the physical device or the emulator, depending upon what you're using and add to your project depending.
Hope this helps! Good luck!
You need to link NMSSH.framework with your project.
Open Build Phases in your project settings and add NMSSH.framework into the group Link Binary With Libraries.
Try this:
Click on the project then go to build settings and type linker flags in the search bar
Add "-ObjC" to "Other Linker Flags"

Undefined symbols in Xcode

I'm getting this error when building in Xcode for iOS.
Undefined symbols for architecture i386:
"_CGRectInset", referenced from:
-[RootViewController viewDidLoad] in RootViewController.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
The app is a clean project, just built from the template Xcode provides.
Any ideas?
I had the same problem with a project created from "Page-Based Application" template, in XCode4 Developer Preview 5.
You can fix it by adding the CoreGraphics framework to the list of linked frameworks and libraries. In other words:
Select the project file in the navigator (left-pane)
select the app target (the only other one is a testing target)
In the summary tab, scroll down to "Linked Frameworks and Libraries"
Hit the + andd CoreGraphics.framework.
Then it builds and runs.
This may be due to the project not being linked to the correct libraries. It may also be that there are missing Frameworks on your SDK installation. In the Build Phases section, make sure that your app is linking with UIKit and CoreGraphics. Also, it may help to also add the QuartzCore Framework, although I doubt that that is needed.

Resources