Hi All
I’m facing a weird issue, I’m saving presets into XML files, it works fine when debugging from Xcode, and fails when the application is running in release mode.
I’m testing this code on Mac OS sierra.
The writeToFile function below returns false in release mode, works fine when running from Xcode debugger.
Any tips would be greatly appreciated.
int MyClass::savePresetToFile(File theFile)
{
#ifdef DEBUG
std::cout << "savePresetToFile: " << std::endl;
#endif
// build an XML file with all params
MidiController *midiController = MidiController::getInstance();
if(midiController->isConnectedToBl == true) return PRESET_FILE_NO_DEVICE; if(midiController->isConnectedToNormal == false) return PRESET_FILE_NO_DEVICE;
XmlElement rootNode ("Preset");
// header Preset->date/appVer //XmlElement infoNode ("Info"); XmlElement* infoNode = new XmlElement ("Info"); infoNode->setAttribute("Date", juce::Time::getCurrentTime().toString(true, true)); infoNode->setAttribute("AppVer", APP_VER); rootNode.addChildElement(infoNode); //infoNode->deleteAllChildElements();
// Device infos //XmlElement deviceNode ("Device"); XmlElement* deviceNode = new XmlElement ("Device"); deviceNode->setAttribute("prodId", (int) midiController->SYSX_PRODUCT_ID_25_37); deviceNode->setAttribute("FwVer", String::formatted("%.1f", midiController->connectedDevice.fwVersion)); deviceNode->setAttribute("BlVer", String::formatted("%.1f", midiController->connectedDevice.blVersion)); rootNode.addChildElement(deviceNode); //deviceNode->deleteAllChildElements();
// all add parameters to the XML XmlElement* paramNode = new XmlElement ("Params");
int nbReg = FillMultiParamArrayWithAllRegisters(); for(int i=0; i<nbReg; i++) { XmlElement* regNode = new XmlElement ("Reg"); // grab the register value in paramsBeforeUpdateArray[paramId][i] without sending to midi int nbWordsForThisReg = midiController->updateSingleRegister(midiController->multiParamArray[i], false); String valStr = ""; for(int j=0; j<nbWordsForThisReg; j++) { valStr += String::formatted("%08X", midiController->paramsBeforeUpdateArray[midiController->multiParamArray[i]][j]); }
#ifdef DEBUG
std::cout << String::formatted(“Reg%d ->”, midiController->multiParamArray[i])+valStr << std::endl;
#endif
regNode->setAttribute(String::formatted("Reg%d", midiController->multiParamArray[i]), valStr); paramNode->addChildElement(regNode); //regNode->deleteAllChildElements(); }
rootNode.addChildElement(paramNode); //paramNode->deleteAllChildElements();
#ifdef DEBUG
String myXmlDoc = rootNode.createDocument(String::empty);
std::cout << "XML: " + myXmlDoc << std::endl;
#endif
// save the xml to file int res = rootNode.writeToFile(theFile, "");
rootNode.deleteAllChildElements();
if(res > 0) return PRESET_FILE_OK; return PRESET_FILE_CANNOT_CREATE;
}