문제

나는 독 아이콘을 숨기고 NSStatusItem. 상태를 만들 수는 있지만 도크에서 아이콘을 제거하는 방법을 모르겠습니다. :-/

어떤 아이디어?

도움이 되었습니까?

해결책

나는 당신이 찾고 있다고 생각합니다 LSUIElement info.plist에서

lsuielement (문자열). 이 키가 "1"으로 설정되면 런치 서비스는 응용 프로그램을 에이전트 응용 프로그램으로 실행합니다. 에이전트 응용 프로그램은 도크 또는 힘 종료 창에 나타나지 않습니다. 일반적으로 배경 응용 프로그램으로 실행되지만 원하는 경우 사용자 인터페이스를 제시하기 위해 전경에 도달 할 수 있습니다.

짧은 토론을 참조하십시오 여기 켜거나 끄는 것에 대해

다른 팁

애플리케이션 번들을 수정하지 않는 Apple 지침을 준수하면서 Mac App Store Apps/(Lion Apps?)가 info에 의해 서명을 끊지 않도록 보장하기 위해서는 기본적으로 lsuielement를 기본적으로 1로 설정할 수 있습니다. 응용 프로그램 출시 :

ProcessSerialNumber psn = { 0, kCurrentProcess };
TransformProcessType(&psn, kProcessTransformToForegroundApplication);

도크 아이콘을 표시하거나 사용자가 아이콘을 원하지 않기로 선택한 경우이를 우회합니다.

하나의 부작용 만 있으면 응용 프로그램의 메뉴가 손실되고 초점이 회복 될 때까지 표시되지 않습니다.

원천: Checkbox 만들기 도크 아이콘을 켜고 끄는 것

개인적으로 나는 정보를 설정하지 않는 것을 선호합니다 .Plist 옵션 및 사용 TransformProcessType(&psn, kProcessTransformToForegroundApplication) 또는 TransformProcessType(&psn, kProcessTransformToUIElementApplication) 사용자 설정에 따라

활성화 정책이라고하는 것을 사용할 수 있습니다.

대상 c

// The application is an ordinary app that appears in the Dock and may
// have a user interface.
[NSApp setActivationPolicy: NSApplicationActivationPolicyRegular];

// The application does not appear in the Dock and does not have a menu
// bar, but it may be activated programmatically or by clicking on one
// of its windows.
[NSApp setActivationPolicy: NSApplicationActivationPolicyAccessory];

// The application does not appear in the Dock and may not create
// windows or be activated.
[NSApp setActivationPolicy: NSApplicationActivationPolicyProhibited];

스위프트 4

// The application is an ordinary app that appears in the Dock and may
// have a user interface.
NSApp.setActivationPolicy(.regular)

// The application does not appear in the Dock and does not have a menu
// bar, but it may be activated programmatically or by clicking on one
// of its windows.
NSApp.setActivationPolicy(.accessory)

// The application does not appear in the Dock and may not create
// windows or be activated.
NSApp.setActivationPolicy(.prohibited)

도크 아이콘을 숨겨야합니다.

또한보십시오

Xcode 4에서는 "응용 프로그램은 에이전트 (Uielement)"로 표시되며 부울입니다.

info.plist 컨트롤 클릭을 빈 공간으로 클릭하고 메뉴 유형에서 "행 추가"를 선택하십시오. "응용 프로그램은 에이전트 (Uielement)" "

선택 사항을 만들기 위해 다음 줄을 내 코드에 추가했습니다 (Valexa 감사합니다!)

 // hide/display dock icon
if (![[NSUserDefaults  standardUserDefaults] boolForKey:@"hideDockIcon"]) {
    //hide icon on Dock
    ProcessSerialNumber psn = { 0, kCurrentProcess };
    TransformProcessType(&psn, kProcessTransformToForegroundApplication);
} 

Swift에 대한 업데이트 : (위에서 두 가지 방법을 사용하여 결과가 동일합니다).

public class func toggleDockIcon_Way1(showIcon state: Bool) -> Bool {
    // Get transform state.
    var transformState: ProcessApplicationTransformState
    if state {
        transformState = ProcessApplicationTransformState(kProcessTransformToForegroundApplication)
    }
    else {
        transformState = ProcessApplicationTransformState(kProcessTransformToUIElementApplication)
    }

    // Show / hide dock icon.
    var psn = ProcessSerialNumber(highLongOfPSN: 0, lowLongOfPSN: UInt32(kCurrentProcess))
    let transformStatus: OSStatus = TransformProcessType(&psn, transformState)
    return transformStatus == 0
}

public class func toggleDockIcon_Way2(showIcon state: Bool) -> Bool {
    var result: Bool
    if state {
        result = NSApp.setActivationPolicy(NSApplicationActivationPolicy.Regular)
    }
    else {
        result = NSApp.setActivationPolicy(NSApplicationActivationPolicy.Accessory)
    }
    return result
}

사용자 선호도로 만들고 싶다면 uielement를 사용할 수 없습니다. Uielement는 응용 프로그램 번들에 상주합니다. 앱 번들의 파일을 편집해서는 안됩니다. 이로 인해 번들 서명이 무효화됩니다.

내가 찾은 가장 좋은 솔루션은 기반입니다 이 훌륭한 기사 . 내 솔루션은 Dan의 의견을 기반으로합니다. 요컨대, 코코아와 함께 할 수있는 방법은 없지만 약간의 탄소 코드로 가능합니다.

이 기사는 또한 도크 아이콘을 독점적으로 처리하는 도우미 앱을 만드는 것을 제안합니다. 그런 다음 기본 앱은 사용자 기본 설정에 따라이 앱을 시작하고 죽입니다. 이 접근법은 탄소 코드를 사용하는 것보다 더 강력하다고 생각하지만 아직 시도하지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top