簡體   English   中英

如何調試舊版Mac OS X的應用程序?

[英]How do you debug an app for an older version of Mac OS X?

我在OS X 10.8機器上使用Xcode 4.6開發應用程序。 應用程序部署目標設置為10.6,這是我們需要支持的。 但是當我歸檔應用程序(編譯,鏈接和嵌入資源+框架)並將其部署(也稱為復制)到10.6測試機器時,它會崩潰,導致通用的Segmentation故障。 它在10.7上工作正常。

我無法在舊版Mac上的Xcode中編譯項目,因為應用程序是使用較新的編譯器構建的(它使用ARC,隱式屬性合成,新的objective-c文字語法等)。 它也不會進行類型檢查,因為基本SDK是10.8並且它引用了10.6機器上的編譯器不知道的一些10.8令牌。

有關如何調試應用程序的任何建議?

我不以任何方式與該公司/軟件有任何聯系,但Deploymate是一個付費應用程序,它可以掃描您的應用程序以獲取SDK使用情況,並告訴您何時調用舊操作系統版本上不可用的選擇器和API。 這可以幫助您跟蹤與API使用相關的異常和崩潰。

您很可能使用一個或多個10.7+ API在10.6上崩潰。 使用10.8目標SDK,您可以允許該SDK中可用的所有調用。 然而,應用程序被限制很晚,因此當您實際上沒有調用這些函數時,這不會崩潰。 您需要一個類似於此的顯式檢查(此處為全屏功能):

#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_6
if (runningOnLionOrLater) {
    [mainWindow setCollectionBehavior: NSWindowCollectionBehaviorFullScreenPrimary];
    [toggleFullscreenItem setHidden: NO];
}
#endif

確定當前版本的一種方法是:

    int macVersion;
    if (Gestalt(gestaltSystemVersion, &macVersion) == noErr) {
        runningOnLionOrLater = macVersion > MAC_OS_X_VERSION_10_6;
    }

為了調試有問題的調用,只需將基本SDK設置為10.6,XCode應標記那些不可用的函數。

雖然沒有真正好的解決方案(我在不同的macOS版本上看到了不同的行為)並且沒有辦法簡單地模擬舊的macOS版本,如果你有一台備用的機器:

可以使用外部HD,對其進行分區並安裝不同的macOS版本。 它們都可以啟動,每個操作系統版本重啟機器都很麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM