我正在〜/ 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。