我遇到以下問題。有一個Cocoa應用程序,我有UI,筆尖等。我需要能夠在後臺或前臺啓動應用程序。換句話說,我需要前者中的NSApplicationActivationPolicyProhibited和後者中的NSApplicationActivationPolicyRegular。現在......如何開始的決定取決於傳遞給應用程序啓動的參數。所以代碼看起來或多或少:更改activationPolicy:啓動
shouldBeBackground = // read this from argument - argv
if (shouldBeBackground) {
[NSApp setActivationPolicy:NSApplicationActivationPolicyProhibited];
} else {
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
[NSApp activateIgnoringOtherApps:YES];
// later on I do the makeKeyAndOrderFront:
}
現在的問題是Info.plist。如果我把LSBackgroundOnly設置爲1,一切都按預期工作。但是如果我把它設置爲0(或者不把鍵),當應用程序啓動時,它會在碼頭顯示應用程序的圖標幾毫秒和一點點閃光。我想這是因爲該應用程序已使用默認策略進行初始化(開始顯示圖標),並將其切換到背景太遲。這也是解釋在:Cocoa - go to foreground/background programmatically
我知道的地方在哪裏讀取參數,做甚至在我開始可可或應用程序(例如,我可以鉤在MyOwnPrincipalClass +初始化)之前做IF,但即使這樣(即使我設置了這個策略),它看起來像Cocoa的啓動會設置默認的。所以它不起作用。
我發現的唯一解決方案是把我的IF放在開頭(在初始化cocoa之前)並根據參數,我編寫/修改Info.plist(LSBackgroundOnly標誌)。這可以工作,但它是一個真正的黑客。我想找到一個更清潔的解決方案。
順便說一句,如果我反其道而行:始終作爲背景啓動,然後使其成爲前景最糟糕的結果,因爲在前臺時,應用程序菜單欄不會自動顯示:您需要切換到另一個應用程序並回來使它看起來....我在互聯網上搜索,實際上它看起來像一個已知的bug /限制。
BTW2:有2個不同的二進制文件也不是一個選項。
感謝任何幫助,您可以給我,