2009-07-09 54 views
15

我想知道是否有任何體面的方式,除了NSLog幾乎所有 - 正確調試OS X中的屏幕保護程序應用程序包?如何調試OS X中的屏幕保護程序

的「屏幕保護程序」是在Xcode項目類型,但顯然沒有建立和去調試。此外,我發現實際上我的軟件包已經加載到

/System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app 

作爲某種插件的應用程序。

那麼有一個體面的方式來調試你的代碼?看看崩潰報告和NSLog到控制檯幫助,但它遠非完美。

回答

10

有一個老MacTech文章中描述的屏幕保護程序的開發週期。文章中還有Part 2。查看「調試技巧」部分。

我覺得這種方法的痛苦,所以我寫了一份申請,基本的應用程序是一個窗口和初始化的ScreenSaverView與我的新的屏幕保護程序包的控制器。一旦這個工作正常,我所需要做的就是測試一個變化是在Xcode中命中了Command-R。

1

不一定是最好的方式,但你可以從另一臺機器的ssh在和GDB(未經測試)

編輯推出ScreenSaverEngine:

也,你可以嘗試添加新的應用程序的目標,並添加你的ScreenSaverView到IB的一個窗口,你可能不得不手動配置類似設置的東西,但它可以幫助一些,並且可能工作正常,因爲ScreenSaverView是NSView的一個子類

+0

我試圖避免這只是因爲缺乏另一臺機器的可用性...... – 2009-07-09 05:45:50

6

您可以通過執行將加載的應用程序來調試插件插頭在。

所以調試屏幕,打開你的插件項目,從項目菜單中選擇新的自定義可執行文件和應用程序設置爲屏幕保護程序引擎。

對於調試屏幕保護程序,您可能還想使用第二臺Mac,並使用remote debugging,以便您的用戶界面操作不會干擾屏幕保護程序。

+0

在XCode4的Lion上,我發現這是通過將方案的可執行文件更改爲/System/Frameworks/ScreenSaver.framework/資源/ ScreenSaverEngine.app – iforce2d 2012-01-06 14:06:12

+0

我還發現,每次更改屏幕保護程序時,仍然需要像往常一樣將屏幕保護程序安裝到系統首選項中,但與每次等待3分鐘相比,這仍然是一個更好的選擇。 – iforce2d 2012-01-06 14:14:02

+0

>>>這裏不能格式化文本;移動到新的答案<<< – geowar 2012-02-12 02:26:30

2

正如彼得所說,你可以通過執行一個將加載插件的應用程序來調試插件。

但是,不是使用屏幕保護程序引擎,您也可以使用系統首選項。當首選項出現在「Desktop &屏幕保護程序」下導航到您的屏幕保護程序時,加載您的插件。

它不是完美的,因爲你的觀點不會是全尺寸的,但它可以比建立遠程調試更方便。

2

有將運行屏幕保護程序的幾個Mac OS X程序:SaverLab,Screenalicious等 只是在網絡上找到他們中的一個,並進行下載,然後將其設置爲目標的可執行文件(如彼得ñ劉易斯說) 。

爲避免每次構建後將構建產品複製到'〜/ Library/Screen Savers /',您可以添加一個自定義構建腳本(注意:我在shell中使用'/ bin/tcsh -x'):

#remove the old screen saver or link 
rm -Rf "${SCRIPT_OUTPUT_FILE_0}" 

#if this is a debug build… 
if ("${CONFIGURATION}" == "Debug") then 

# create a symbolic link from our screen saver to this users screen saver directory 
ln -sfv "${SCRIPT_INPUT_FILE_0}" "${SCRIPT_OUTPUT_FILE_0}" 

#if this is a release build… 
else if ("${CONFIGURATION}" == "Release") then 

# copy our screen saver to this users CMM directory 
cp -Rfv "${SCRIPT_INPUT_FILE_0}" "${SCRIPT_OUTPUT_FILE_0}" 

endif 

然後將其輸入文件 「$ {BUILT_PRODUCTS_DIR}/$ {} FULL_PRODUCT_NAME」 和它的輸出文件爲 「$ {HOME} /庫/屏幕保護程序/ $ {} FULL_PRODUCT_NAME」。現在

當你建立/運行項目它會自動magicly鏈接到你的調試版本或複製發佈版本。

3

您還可以使目標可執行文件的屏保程序引擎('/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app')傳遞給它,並將其傳遞給-background標誌(因此它運行在所有內容之後,而不是在一切的前面)。

4

因爲OS X 10.11埃爾卡皮坦的系統完整性保護功能,調試器無法連接到從/System/運行任何東西。另外,這裏的其他信息適用於舊版本的Xcode。

這裏就是我得到了它的工作在埃爾卡皮坦和Xcode 7.2:

  1. 複製/System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app//tmp/。 (由於.xcscheme引用完全合格的路徑,將其複製到某個地方常見的是最適合的合作,而不是在特定用戶的主目錄下的某個地方。)
  2. 編輯項目的.xcscheme
    • 集的可執行文件它的運行動作複製的應用程序,並添加參數:-debug-background-module "<product-name>"(其中<product-name>是包名,不帶.saver擴展名)。
    • 添加預動作腳本(下文源),其外殼設置爲/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}" 

現在,當你打Xcode的運行按鈕,屏幕保護程序將在壁紙模式在桌面上運行,你可以使用調試器。

0

如果使ScreenSaverEngine應用程序的副本,並與您的開發者ID登錄,它會解決這個情況下系統完整性保護防止安裝調試。只要確保將可執行文件設置爲您自己簽名的副本。

相關問題