- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,用一些背景信息来解释我的动机:我有一个 Qt/C++/Objective-C++ 应用程序,它使用 CoreAudio/AVFoundation 接收来自 Mac 上指定音频输入的传入音频,修改音频,然后通过某些指定的音频输出播放修改后的音频。这一切都工作得很好,直到 Mojave 和 Catalina,此时苹果新的麦克风隐私限制导致它无法再接收传入的音频(由于缺乏明确的用户使用权限,它只收到零/静音)麦克风)。
为了解决这个问题,我添加了代码来跳过新的获取用户权限 hoops (即向 Info.plist 添加了 NSMicrophoneUsageDescription
标签,按照建议添加了对 authorizationStatusForMediaType
和 requestAccessForMediaType
的调用等),现在又是我的应用程序从其图标启动时按预期工作(即,它提出“MyAudioProcessingApp想要使用麦克风”请求者,一旦用户响应,我的应用程序的复选框就会出现在“安全和隐私/隐私/麦克风”控制面板中并控制我的应用程序是否可以收听传入的音频)。就目前而言,一切正常。
我的问题是这样的——我的应用程序还有一个“后台模式”功能,用户可以要求应用程序将自身安装为非 GUI 系统服务(通过 launchd/launchctl 在启动时运行),所以一旦 Mac 启动,它就会在后台进行音频处理(即不需要任何人登录或手动启动应用程序)。对于想要在“ headless /嵌入式”Mac 上运行此应用程序作为固定音频安装一部分的人来说,这非常有用,任何人需要做的就是打开 Mac 电源以使其开始处理音频。
但是,我发现,当我的应用程序以这种方式作为后台进程运行时,[AVCaptureDeviceauthorizationStatusForMediaType:AVMediaTypeAudio]
始终返回 AVAuthorizationStatusDenied
,即使在用户之前已授予我的应用程序访问麦克风的权限。即使进程的有效用户 ID 与授予麦克风权限的用户相同,并且运行的可执行文件与先前生成用户同意的权限提示的文件相同,也会发生这种情况。/p>
我的问题是,是否需要一些特殊技巧才能在后台运行时访问麦克风?还是苹果决定 launchctl-launched-daemons 在任何情况下都无法访问麦克风,因此我运气不好?
ps 我的应用程序的 MyAudioProcessingApp.app/Contents/Info.plist
文件和 /Library/LaunchDaemons/com.mycompany.myprogram.plist
文件(均轻度匿名)是下面,如果它们相关的话:
----- begin MyProcessingApp.app/Contents/Info.plist ------- snip ------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>MyAudioProcessingApp</string>
<key>CFBundleGetInfoString</key>
<string>Created by Qt/QMake</string>
<key>CFBundleIconFile</key>
<string>vcore.icns</string>
<key>CFBundleIdentifier</key>
<string>com.mycompany.MyAudioProcessingApp</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>LSMinimumSystemVersion</key>
<string>10.10</string>
<key>NOTE</key>
<string>This file was generated by Qt/QMake.</string>
<key>NSMicrophoneUsageDescription</key>
<string>To allow MyAudioProcessingApp to process incoming audio data.</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSSupportsAutomaticGraphicsSwitching</key>
<true/>
</dict>
</plist>
----- end MyProcessingApp.app/Contents/Info.plist ------- snip ------
---- begin /Library/LaunchDaemons/com.mycompany.myprogram.plist ------ snip ------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:</string>
</dict>
<key>Label</key>
<string>com.mycompany.MyAudioProcessingApp</string>
<key>Program</key>
<string>/Library/MyCompany/MyAudioProcessingApp/run_my_program_in_background.sh</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/myprogram.stdout</string>
<key>StandardErrorPath</key>
<string>/tmp/myprogram.stderr</string>
<key>UserName</key>
<string>jaf</string> // NOTE: this is set dynamically to the correct user as part of the install-as-service step
<key>ProcessType</key>
<string>Interactive</string>
<key>GroupName</key>
<string>admin</string>
<key>InitGroups</key>
<true/>
</dict>
</plist>
---- end /Library/LaunchDaemons/com.mycompany.myprogram.plist ------ snip ------
---- begin /Library/MyCompany/MyAudioProcessingApp/run_my_program_in_background.sh ------ snip ------
#!/bin/bash
PATH_TO_MYPROGRAM_EXE="/Library/MyCompany/MyAudioProcessingApp/MyAudioProcessingApp.app/Contents/MacOS/MyAudioProcessingApp"
"$PATH_TO_MYPROGRAM_EXE" run_without_gui
exit 0
---- end /Library/MyCompany/MyAudioProcessingApp/run_my_program_in_background.sh ------ snip ------
最佳答案
今天早上我收到了苹果技术支持人员的回复;他们说不可能从非 GUI 系统服务访问麦克风。
他们建议使用反馈助手提交功能请求(我已经这样做了),或者作为解决方法,将我的程序设置为登录项,并将 Mac 设置为自动登录该用户。
由于我对 Apple 是否会根据我的要求改变他们的行为没有太大的信心,我想后者是我接下来要研究的内容。
关于macos - 如何在 Mojave/Catalina 下从后台(基于 launchctl)进程录制音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58104425/
尝试启动 servlet 引擎时,出现以下错误: 8080端口免费 在启动服务期间发现此错误。 服务器中已启用 IPv6。 错误: Using CATALINA_BASE: /app/iw-hom
我在尝试调用 Tomcat 上的 shutdown.sh 时遇到此错误。Tomcat 在 192.168.1.240:8080 上的内部服务器上 堆栈跟踪是 Aug 29, 2016 5:14:09
在我的 Linux 服务器 (ubuntu) 中,tomcat 日志文件 catalina.out 会自动重命名为新文件名,例如。 catalina.out catalina.out.1 , cata
我正在尝试为其中一个设备编写驱动程序套件扩展。我没有关于如何为 mac os Catalina 编写驱动程序扩展的信息。 我得到的唯一文档是 DriverKit 引用:https://develope
我有一个 bash 脚本,一旦文件超过特定大小时,它会成功删除一个或多个 tomcat 日志目录(我们运行多个实例)的 catalina.out 文件。我每晚运行此脚本作为 cron 作业。它基本上看
在 tomcat 启动后,Hibernate 开始登录 catalina.out。 (( 由于我从 tomcat/conf/logging.properties 中删除了控制台处理程序,它已开始在 c
我只是想知道如果我想替换: "$CATALINA_OUT" 2>&1 & 要每天轮换日志 我应该用什么替换它。我的理解是: "$CATALINA_BASE"/logs/catalina.out 2>&
我有我作为 .pkg 分发的应用程序使用 pkgbuild 创建的文件和 productbuild .使用 macOS Catalina,这不再起作用。安装程序提示我正在尝试将内容安装到系统卷。 三周
我在 Netbeans 中实现了一个基于 SOAP 的 Web 服务。我在服务器端遇到了一些问题,它给我错误 500,内部错误,因为我无法自动调试它,它告诉我检查日志但是我的catalina.out
我的一台主机在 Mac OS Catalina 上运行,并且它经常用完磁盘空间...... 我已经安排了在那里运行的任务,并且每天它都会将文件上传到 /用户/labuser/我的文件夹并从该文件夹中删
我已经修改了 php.ini 文件以启用操作码缓存并重新启动 apache,但它在 phpinfo() 中无处可见。 php -v 说: PHP 7.4.1 (cli) (built: Dec 18
01-Jul-2018 20:00:33.968 SEVERE [RMI TCP Connection(5)-127.0.0.1] org.apache.catalina.core.Container
由于 stderr.log 中的以下错误消息,我无法启动 tomcat 5.5 服务器。有人可以帮助我吗,这是一种紧急情况。提前致谢。 java.lang.ClassNotFoundException
该项目正在顺利运行突然我在控制台日志中收到此错误。我使用的是 Tomcat 8.0.35 版。我已经尝试了从干净构建到更新项目的所有方法。我知道已经解决了一些问题,但没有一个解决方案对我有用。 jav
我正在使用 Eclipse 在 Apache Tomcat 服务器上部署应用程序修复服务,但问题似乎是该应用程序没有被复制到 webapps 文件夹中,即它没有被发布。 HTTPConnectionM
在 tomcat 服务器中,logs 文件夹包含这样的文件 localhost.YYYY-MM-DD.log:主机日志 host-manager.YYYY-MM-DD.log 和manager.Y
我的 Java 应用程序(Spring、Hibernate、MySQL)在 Tomcat 5.5 中运行 在对我的应用程序进行最后一组更改后,Tomcat 的 catalina.out 文件增长非常迅
我禁用了 SIP,但目录/usr/bin 无论如何都是写保护的。如何获得/usr/bin 的写权限?请不要建议切换到/usr/local/bin。 最佳答案 Catalina 有一个新的文件系统安排,
我尝试在 Spring 中使用 Apache Tomcat 7.0 编写一个简单的 hello world 程序。我收到以下错误,服务器进入停止状态。 SEVERE: A child containe
我无法初始化 log4j catalina 日志附加器 - 你知道我缺少什么吗?我知道这是一个基本问题,但我坚持这一点。我为 catalina 记录器添加了 org.apache.log4j.net.
我是一名优秀的程序员,十分优秀!