SDKPox iap error: Undefined symbols for architecture arm64

Cocos2d-x version: cocos2d-x-3.16
sdkbox version: v1.0.2.0
xcode version: 10.0 (10A255)

I’m having trouble compiling my project after installing iap via sdkbox import iap

I get the following error:
linker command failed with exit code 1

I’ve tried to manually delete the iap frameworks from my project and reinstalling them but no luck.

I’ve tried downloading an older version of xcode: 9.4.1 but that did not help.

I am also using the sdkbox admob and that is working.

Error log:

Undefined symbols for architecture arm64:
  "sdkbox::IAPListener::onRestored(sdkbox::Product const&)", referenced from:
      IAPManager::onRestored(sdkbox::Product const&) in IAPManager.o
  "sdkbox::IAPListener::onProductRequestFailure(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      IAPManager::onProductRequestFailure(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in IAPManager.o
  "sdkbox::IAPListener::onSuccess(sdkbox::Product const&)", referenced from:
      IAPManager::onSuccess(sdkbox::Product const&) in IAPManager.o
  "sdkbox::IAPListener::onCanceled(sdkbox::Product const&)", referenced from:
      IAPManager::onCanceled(sdkbox::Product const&) in IAPManager.o
  "sdkbox::IAPListener::onFailure(sdkbox::Product const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      IAPManager::onFailure(sdkbox::Product const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in IAPManager.o
  "sdkbox::IAPListener::onProductRequestSuccess(std::__1::vector<sdkbox::Product, std::__1::allocator<sdkbox::Product> > const&)", referenced from:
      IAPManager::onProductRequestSuccess(std::__1::vector<sdkbox::Product, std::__1::allocator<sdkbox::Product> > const&) in IAPManager.o
  "sdkbox::IAPListener::onInitialized(bool)", referenced from:
      IAPManager::onInitialized(bool) in IAPManager.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Got it to compile. I was trying to call the base functions in my sdkbox::IAPListener derrived class.
I created a manager to wrap the framework and handle the purchases. After commenting out calling the base, it compiles.

BROKEN Version

//Init the current isntance if this singleton to NULL
IAPManager* gSingletonInstance_iapManager = NULL;

IAPManager* IAPManager::getInstance()
{
    if(gSingletonInstance_iapManager == NULL)
    {
        gSingletonInstance_iapManager = new IAPManager();
    }
    
    return gSingletonInstance_iapManager;
}

IAPManager::IAPManager()
{
}

IAPManager::~IAPManager()
{
}

void IAPManager::initializeIAP()
{
    sdkbox::IAP::setListener(this);
    sdkbox::IAP::init();
}

/////////////////////////
//Admob listener events
/////////////////////////

void IAPManager::onInitialized(bool ok)
{
    sdkbox::IAPListener::onInitialized(ok);
}

void IAPManager::onSuccess(sdkbox::Product const& p)
{
    sdkbox::IAPListener::onSuccess(p);
}

void IAPManager::onFailure(sdkbox::Product const& p, const std::string &msg)
{
    sdkbox::IAPListener::onFailure(p, msg);
}

void IAPManager::onCanceled(sdkbox::Product const& p)
{
    sdkbox::IAPListener::onCanceled(p);
}

void IAPManager::onRestored(sdkbox::Product const& p)
{
    sdkbox::IAPListener::onRestored(p);
}

void IAPManager::onProductRequestSuccess(std::vector<sdkbox::Product> const &products)
{
    sdkbox::IAPListener::onProductRequestSuccess(products);
}

void IAPManager::onProductRequestFailure(const std::string &msg)
{
    sdkbox::IAPListener::onProductRequestFailure(msg);
}

void IAPManager::onRestoreComplete(bool ok, const std::string &msg)
{
    sdkbox::IAPListener::onRestoreComplete(ok, msg);
}

COMPILING Version

IAPManager* gSingletonInstance_iapManager = NULL;

IAPManager* IAPManager::getInstance()
{
    if(gSingletonInstance_iapManager == NULL)
    {
        gSingletonInstance_iapManager = new IAPManager();
    }
    
    return gSingletonInstance_iapManager;
}

IAPManager::IAPManager()
{
}

IAPManager::~IAPManager()
{
}

void IAPManager::initializeIAP()
{
    
    sdkbox::IAP::setListener(this);
    sdkbox::IAP::init();
}

/////////////////////////
//Admob listener events
/////////////////////////

void IAPManager::onInitialized(bool ok)
{
     // REMOVED LINE
}

void IAPManager::onSuccess(sdkbox::Product const& p)
{
     // REMOVED LINE
}

void IAPManager::onFailure(sdkbox::Product const& p, const std::string &msg)
{
     // REMOVED LINE
}

void IAPManager::onCanceled(sdkbox::Product const& p)
{
     // REMOVED LINE
}

void IAPManager::onRestored(sdkbox::Product const& p)
{
     // REMOVED LINE
}

void IAPManager::onProductRequestSuccess(std::vector<sdkbox::Product> const &products)
{
     // REMOVED LINE
}

void IAPManager::onProductRequestFailure(const std::string &msg)
{
     // REMOVED LINE
}

void IAPManager::onRestoreComplete(bool ok, const std::string &msg)
{
     // REMOVED LINE
}

It’s great you solve your issue.