Well, at last I got it working.. For anyone who encounters this in the future..
-
Rename the main.m file to main.mm.
ZXing’s README states why we need this
It can happen that when trying to build your own project with ZXingWidgetController you get linker errors like “undefined reference
to”. If this error looks like a c++ undefined reference, then renaming
main.m into main.mm (Objective-C++ source suffix) may fix the problem -
Rename the file (ViewController/View) which uses ZXing libray
functions so that it also has .mm extension. -
Check architecture settings across project. Give
architecture and valid architecture as armv7 armv7s in your project settings, target settings, and ZXing project (which you
added to your main project) and target settings. -
In main project -> Build Settings scroll and find out the
options, C++ Language Dialect and C++ Standard Library.
Select options “Compiler Default” for both of them. (This is the
step I missed, It is needed because newest XCode template has
compiler default settings different to what they were in older
versions). -
You also might have to set ZXingWidget’s “Build Valid Architecture
Only” flag set asNO. In my case, this field was alreadyNO
These fixed the issue for me..
Update
On December 2013, Google has retired ZXing iOS/Objective C port. So Zxing project for iOS is no longer maintained and updated for new iOS versions. Also Zxing doesn’t have support for Arm64 architecture which is one of the standard architecture as per new XCode versions.
So developers are encouraged to move over to the native Apple framework to read barcode which is available from iOS7 onwards. See this for a step by step tutorial.