Czy istnieje sposób na wyłączenie automatycznego zamykania aplikacji w systemie OS X?

11

Czy istnieje sposób, aby powiedzieć OS X Lion, aby wyłączył automatyczne zakończenie dla danej aplikacji, której nie chcesz automatycznie kończyć?

FYI Lion jest poddawcą, jeśli jeszcze nie wiedziałeś, a co, jeśli nie chcesz, aby tak było w przypadku określonej aplikacji.

Lion porzuci działające aplikacje za twoimi plecami, jeśli uzna, że ​​potrzebuje zasobów i jeśli nie używasz ich. Heurystyka określania, czy aplikacja jest „w użyciu”, jest bardzo konserwatywna: nie może być aktywną aplikacją, nie może mieć widocznych, nie zminimalizowanych okien - i oczywiście musi wyraźnie obsługiwać automatyczne kończenie.

Powiedzmy na przykład, że nie chcę, aby TextEdit automatycznie zamykał się, gdy nie mam otwartych okien TextEdit i przełączam się na inną aplikację.

Po zapoznaniu się z sekcją Przewodnik po programowaniu aplikacji Mac dla automatycznego zakończenia , pomyślałem, że spróbuję dodać klucz NSSupportsAutomaticTermination o wartości Nie do pliku Info.plist dla TextEdit. (Nie działało: TextEdit ulega awarii przy otwartym).

Należy zauważyć, że plik nie zawierał klucza NSSupportsAutomaticTermination (co oznacza, że ​​Apple używał NSProcessInfo, aby włączyć automatyczne zakończenie), więc dodanie klucza i tak prawdopodobnie nie przyniesie żadnego efektu, ponieważ NSProcessInfo przesłania to, co jest w pliku plist. (Zweryfikowano, że to nie działa, poprzez samopodpisanie TextEdit ze zmodyfikowanym Info.plist, w tym kluczem NSSupportsAutomaticTermination i wartością Nie).

Jednym zauważonym efektem ubocznym jest to, że zmiana czegokolwiek w pliku Info.plist powoduje awarię TextEdit podczas otwierania. Przyczynę zanotowano w dzienniku awarii jako „nieprawidłowy podpis kodu”, co oznacza, że ​​aplikacja TextEdit i cała jej zawartość są podpisane kodem. Obejściem tego problemu jest samopodpisanie aplikacji za pomocą codesignpolecenia i samopodpisanego certyfikatu głównego, zgodnie z opisem w zadaniu Podpisywanie kodu .

Po tym, co próbowałem do tej pory, TextEdit nadal stosuje się do automatycznego zakończenia.

MrDaniel
źródło
1
Więc ... jeśli podpiszesz aplikację, czy to działa?
jtbandes
1
Nie, program nadal automatycznie kończy się nawet po samopodpisaniu, niezależnie od tego, co dodałem do Info.plist
MrDaniel
1
Czy próbowałeś pobrać przykładowe źródło TextEdit, które Apple udostępnia wraz z narzędziami programistycznymi i edytuje (lub usuwa) rzeczy NSProcessInfo, które rejestrują się w celu automatycznego zakończenia?
Cajunluke
Nie próbowałem tego, to powinno zadziałać w tym przypadku. Ale to pytanie wykracza poza TextEdit. Chodzi raczej o to, czy możemy obejść ten problem bez interwencji programisty na poziomie kodu źródłowego. Ponieważ nie zawsze będziemy mieli dostęp do kodu źródłowego dla aplikacji obsługujących automatyczne zakończenie.
MrDaniel
1
„Tak działa Apple”, to po prostu nieprawda. To nowa funkcja, która nie jest dobrze reklamowana. Z Apples Docs nie jest nawet jasne, co jest wymagane, aby system operacyjny automatycznie zakończył program. Apple nie reklamuje tego ani nie wspomina o tym na stronie funkcji Lion dla użytkowników końcowych. Myślę, że próbuje czegoś nowego Apple. Jeśli użytkownikowi się to nie podoba, powinien zgłosić głos Apple i programistom, aby mogli to poprawić.
MrDaniel

Odpowiedzi:

14

Twoim życzeniem jest moje polecenie terminalu ;-)

defaults write -g NSDisableAutomaticTermination -bool yes

Zauważ, że ponieważ automatyczne zakończenie tak naprawdę nie zamyka aplikacji, a raczej je ukrywa , musiały one zostać poprawnie zakończone, aby zadziałało.


źródło
2
Doskonałe, dobre wyszukiwanie user22760. Próbowałem, jak wspomniano powyżej, i działa, dzięki. Przypadek testowy TextEdit.app nie kończy się automatycznie po uruchomieniu ustawień domyślnych ... a następnie otwarciu i zamknięciu TextEdit. Po ponownym otwarciu TextEdit nie będzie się on automatycznie weryfikował bez otwartych okien i działał w tle.
MrDaniel
Ciekawy. Po wypróbowaniu tego polecenia rzeczywiście działa. Jednak próba jego cofnięcia okazała się trudniejsza. defaults write -g NSDisableAutomaticTermination -bool no, lub false, lub usunięcie klucza nie ma żadnego efektu, a aplikacje nie zostaną automatycznie
zakończone
To polecenie cudu działa dla mnie w Mavericks! Odnosi się to po powrocie do sesji lub otwarciu nowej sesji.
Nicolas Barbulesco
Dziękujemy bardzo za dodaną instrukcję uruchomienia i ręcznego zamknięcia aplikacji, a następnie uruchom ją ponownie, aby poprawnie zobaczyć efekt!
jtheletter
1

Istnieje pewny sposób, aby to naprawić, jeśli twój sprzęt to obsługuje. Możesz uaktualnić system Mac OS X 10.7 (Lion) do Mac OS X 10.6 (Snow Leopard).

Chociaż nie wszystkie urządzenia, które będą uruchamiać Lion, mogą obsługiwać ten ulepszony system operacyjny (niestety mój MacBook Air z połowy 2011 r. Nie), zawiera on takie funkcje, jak nieterminowe zakończenie, Rosetta (która umożliwia procesorom Intel uruchamianie oprogramowania skompilowanego dla PPC procesory) oraz kompatybilność z funkcjami nagrywania dla poszczególnych aplikacji w doskonałym WireTap Studio.

Jak w przypadku każdej aktualizacji, niektóre funkcje są tracone (takie jak Kontrola misji , Panel uruchamiania , niektóre gesty), a niektóre dziwactwa systemu operacyjnego wymagają trochę przyzwyczajenia (na przykład kierunek przewijania jest odwrócony), ale w sumie jest to dobra aktualizacja.

Daniel
źródło
2
Dobra uwaga, ale dla większości użytkowników Auto Terminination nie jest warte wycofania się do Snow Leopard, to tylko niewielka irytacja dla niektórych użytkowników, nie jestem jednym z nich.
MrDaniel
1
Oczywiście jest to ekstremalne rozwiązanie, ale jest to jeden z kilku sposobów, w jaki Snow Leopard jest lepszy od Lion. Ich łączny efekt może skłonić kogoś do chęci Śnieżnego Lamparta. To powiedziawszy, po prostu uczę się z tym żyć, ponieważ inne funkcje Lion (szczególnie związane z iCloud) sprawiają, że warto pogodzić się z wadami.
Daniel
Pytanie dotyczy Lwa.
Graham Perrin
1
@GrahamPerrin taka była moja odpowiedź. Chodzi mi o to, że jest to jedna z wielu rzeczy, które Lion złamał, a jednym z rozwiązań może być brak uruchamiania Lion.
Daniel