2014-09-28 2 views
27

내 Mac 앱에서 로그인 할 때 앱이 자동으로 실행되는지 확인하려면 SMCopyAllJobDictionaries()을 사용하고 있습니다. 기본적으로 모든 로그인 항목의 배열을 가져 와서 내 번들 ID가 배열에 있는지 확인합니다.앱이 OS X에서 로그인 항목인지 확인 요세미티

이 함수 호출은 매버릭스까지만 작동하지만 deprecated in Yosemite입니다. Apple에 따르면

이 루틴은 향후 제공되지 않을 예정이며 향후 릴리스에서 제거 될 예정입니다. 제공된 대체품이 없습니다.

그러나 요세미티에서 어떻게 동일한 작업을 수행 할 수 있습니까? 체크 박스를 제대로 표시하려면 내 앱이 로그인 항목 목록에 있는지 확인해야합니다. Apple에서 관련 문서를 찾을 수 없습니다.

+0

'LSSharedFileList'는 샌드 박스가 활성화 된 상태에서 더 이상 작동하지 않습니다. stackoverflow.com/a/12629184/284811도 참조하십시오. Mac App Store를 통해 배포되므로 내 앱을 샌드 박스해야합니다. –

+0

'SMCopyAllJobDictionaries'에 대한 대체가 필요하지 않습니다. 내 대답은 여기를 참조하십시오. http://stackoverflow.com/questions/32546893/smcopyalljobdictionaries-and-smjobcopydictionary-is-deprecated-so-what-are-thei –

답변

1

나는 비슷한 목적으로 LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL)을 사용하고 있습니다. 예를 들어 How do you make your App open at login?에 대한 Nick Moore의 답변을 참조하십시오.

이것은 로그인 항목에 대해서는 작동하지만 launchd 작업에는 작동하지 않을 수 있습니다.

+1

불행히도'LSSharedFileList 'Sandbox를 사용할 때 더 이상 작동하지 않습니다. http://stackoverflow.com/a/12629184/284811도 참조하십시오. Mac App Store를 통해 배포되므로 내 앱을 샌드 박스해야합니다. 조사를위한 –

11

약간의 연구 끝에이 기간에 대한 쉬운 대답이없는 것처럼 보입니다. F.lux 및 BetterSnapTool을 비롯한 여러 응용 프로그램을 테스트 한 후 사용자 환경을 시스템 기본 설정과 쉽게 동기화 할 수있었습니다. 이러한 응용 프로그램에서 "시작시 실행"을 활성화 한 다음 항목 섹션의 시스템 기본 설정 로그에서 해당 응용 프로그램을 제거한 다음 다시 시작하면 인터페이스가 여전히 시작시 실행되도록 설정되어 있다고 생각합니다. 앱이 더 이상 속하지 않는 목록에서 앱을 삭제하려고 시도하고 아무 것도 할 필요가없는 두 번째 클릭으로 인해 체크 박스와 상호 작용하면 아무런 효과가 없습니다.

내게 이것은 내적 상태를 BOOL로 유지하고 시작 사이에 저장한다는 의미이며 요세미티 시점과 동기화 할 수있는 방법이 없다는 것을 의미합니다. 누군가가 그렇지 않다면 나는 그들에게 현상금을 줄 것이다.

+1

Thx! 이것은 정말 이상한데, 나는 애플이이 기능을 완전히 제거하고있는 것 같다. –

+0

문제 없습니다. 그렇게 보입니다. 우리가 봐야 할 것 같네요. – Metabble

+0

조사 결과를 공유해 주셔서 감사합니다. 합리적인 해결책은 앱이 시작될 때 백그라운드 체크를 실행하고 설정된 환경 설정이 무엇이든 간단히 동기화하는 것입니다. –

2

WWDC 2017에서 Apple 엔지니어는 여전히 이것이 사용하기에 더 좋은 API라고 말했습니다.

그러나이 API를 사용하면 빌드가 실패하게됩니다. 사용되지 않는 모든 기능 경고를 끄지 마십시오. 이 문제를 앱에 중요한

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wdeprecated-declarations" 
    CFArrayRef cfJobDicts = SMCopyAllJobDictionaries(kSMDomainUserLaunchd); 
#pragma clang diagnostic pop 

경우 당신은, 레이더를 제출하시기 바랍니다 깨끗한 솔루션을 제공하기 위해 애플 싶습니다; 대신, 컴파일하여 응용 프로그램을 사용하려면 다음과 SMCopyAllJobDictionaries 포장 이는 Apple 엔지니어가 작업 항목의 우선 순위를 결정하는 데 도움이됩니다.

+0

감사합니다. 이 성명서는 어디에서 보셨습니까? 링크를 제공해 주시겠습니까? –

관련 문제