You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS Catalina下C++生成PDF后用Preview打开的权限问题如何解决

macOS Catalina下C++生成PDF后调用Preview打开的权限问题解决

问题背景

在macOS Catalina 10.15.7 + Xcode 11.3.1环境中,通过C++生成PDF文件后,调用Preview打开时遇到权限错误,操作流程如下:

  • 写入PDF文件的代码:
FILE * fp = fopen("/Users/test/Documents/1.pdf", "w+");
if (fp) {
    fwrite(pdf_data, size_of_pdf_data, 1, fp);
    fclose(fp);
}  
  • 调用Preview的代码:
system("osascript -e 'tell app \"Preview\" to open \"/Users/test/Documents/1.pdf\"'");

解决方法

1. 确认文件权限

首先检查生成的PDF文件权限是否正常:

  1. 打开终端,执行命令:
ls -l /Users/test/Documents/1.pdf
  1. 查看输出的权限列,确保当前用户拥有读权限(例如权限为-rw-r--r--,当前用户权限位是rw-)。
  2. 如果权限不足,执行命令添加读权限:
chmod u+r /Users/test/Documents/1.pdf

2. 配置Xcode沙盒权限

macOS Catalina的沙盒机制会限制应用访问用户目录,需为Xcode项目添加权限:

  • 打开项目的Signing & Capabilities页面,点击+ Capability添加Files and Folders权限。
  • 勾选User Selected File,若需要固定访问Documents目录,可在Info.plist中添加NSDocumentsFolderUsageDescription键,填写访问说明(如"需要读取生成的PDF文件")。

3. 优化AppleScript调用方式

使用POSIX file让AppleScript正确识别系统路径,减少权限识别问题:

std::string open_cmd = "osascript -e 'tell application \"Preview\" to open POSIX file \"/Users/test/Documents/1.pdf\"'";
system(open_cmd.c_str());

4. 改用系统open命令(推荐)

直接使用系统open命令绕开AppleScript的权限限制,更简洁可靠:

system("open -a Preview /Users/test/Documents/1.pdf");

内容的提问来源于stack exchange,提问作者xscript09

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:30:54