如何在OS X中调试屏幕保护程序

Dav*_*ana 22 debugging macos xcode objective-c screensaver

我想知道是否有任何不错的方法,除了NSLog-ing几乎所有东西 - 在OS X中正确调试Screensaver应用程序包?

"屏幕保护程序"是Xcode中的项目类型,但显然没有Build and Go调试.此外,我发现实际上我的捆绑包已经加载到了

/System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app 
Run Code Online (Sandbox Code Playgroud)

应用程序作为某种插件.

那么调试代码有一个不错的方法吗?查看崩溃报告和NSLoging到控制台有帮助,但它远非完美.

Mar*_*ark 14

有一篇旧的MacTech文章描述了屏幕保护程序的开发周期.该文章还有第2部分.查看"调试提示"部分.

我觉得这个方法很痛苦,所以我编写了一个应用程序,基本的应用程序是一个窗口和一个控制器,用我的新屏幕保护程序包初始化ScreenSaverView.一旦工作正常,我必须做的就是测试一个变化,在Xcode中命中了Command-R.


Kar*_*ski 7

由于OS X 10.11 El Capitan的系统完整性保护功能,调试器无法附加到运行的任何内容/System/.此外,此处的其他信息适用于旧版本的Xcode.

以下是我使用Xcode 7.2开发El Capitan的方法:

  1. 复制/System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app//tmp/.(由于.xcscheme引用了完全限定的路径,因此将其复制到公共场所最适合协作,而不是特定用户主目录中的某个位置.)
  2. 编辑项目.xcscheme:
    • 将"可执行文件"的"运行"操作设置为复制的应用程序,并添加参数:( 不带扩展名的包名称-debug -background -module "<product-name>"在哪里).<product-name>.saver
    • 添加一个预操作脚本(下面的源代码),其shell设置为/bin/bash及其构建设置来自该方案.它创建了一个指向内置.saver包的符号链接~/Library/Screen Savers/

资源:

SCREEN_SAVER_PATH="${HOME}/Library/Screen Savers/${FULL_PRODUCT_NAME}"
if [[ -d "${SCREEN_SAVER_PATH}" || -f "${SCREEN_SAVER_PATH}" || -L "${SCREEN_SAVER_PATH}" ]]; then
    rm -Rf "${SCREEN_SAVER_PATH}"
fi
ln -s "${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}" "${SCREEN_SAVER_PATH}"
Run Code Online (Sandbox Code Playgroud)

现在,当您点击Xcode的"运行"按钮时,屏幕保护程序将在桌面上以壁纸模式运行,您可以使用调试器.

  • 在 High Sierra 中,该应用程序位于“/System/Library/CoreServices/ScreenSaverEngine.app” (3认同)

Pet*_*wis 6

您可以通过执行将加载插件的应用程序来调试插件.

因此,要调试屏幕保护程序,请打开插件项目,从"项目"菜单中选择"新建自定义可执行文件",然后将应用程序设置为屏幕保护程序引擎.

要调试屏幕保护程序,您可能还需要使用第二台Mac并使用远程调试,因此您的用户界面操作不会干扰屏幕保护程序.