在MacOS中打包Qt / C ++应用程序后无法写入〜/ Library / Application Support

时间:2018-04-13 09:41:48

标签: c++ macos qt pkgbuild productbuild

我正在〜/ Library / Application Support(QStandardPaths :: AppDataLocation [0])中编写我的应用程序日志,如果我从Qt Creator启动我的应用程序,一切顺利。在使用 pkgbuild productbuild 打包应用程序后,使用我的开发者ID应用程序(用于代码签名)和开发者ID安装程序(用于产品构建)对应用程序进行签名,当我将其安装在我的应用程序中时机器,具有管理员权限,不生成日志文件(生成目录树)。我正在使用std :: ofstream将QByteArray中的消息写入文件。另外,我正在使用 qInstallMessageHandler

知道如何使其有效吗?我需要在productbuild中的 Distribution.xml 中添加一些内容吗?我需要在包装步骤中添加更多权利吗?

这是我正在使用的处理程序

void tracesOutputHandler(QtMsgType type, const QMessageLogContext& context, const QString & msg)
{
    std::cout << "This is called" << std::endl;
    QString txt;
    switch (type) {
    case QtDebugMsg:
        txt = QString("Debug: %1").arg(msg);
        break;
    case QtWarningMsg:
        txt = QString("Warning: %1").arg(msg);
        break;
    case QtCriticalMsg:
        txt = QString("Critical: %1").arg(msg);
        break;
    case QtFatalMsg:
        txt = QString("Fatal: %1").arg(msg);
        break;
    }

    // log_name here is well-formed.
    QFile outFile(log_name);
    if (outFile.open(QIODevice::WriteOnly | QIODevice::Append)) {
        QTextStream ts(&outFile);
        ts << txt << endl;
    } else {
        qDebug() << Q_FUNC_INFO << "Cannot open in log file";
    }
}

这个被叫消息出现在QtCreator执行中。

另外,只需添加应用程序不是沙箱。

编辑:经过大量测试后,我认为当应用程序开始在应用程序图标中双击时,不会调用MessageHandler tracesOutputHandler。

0 个答案:

没有答案