MacOS 앱에 몇 초 만에 "로그인에서 시작"기능 추가
앱이 MacOS를 13 이상 대상으로하는 경우 대신이 최신 버전을 확인하십시오.
이것을 추가하는 것은 일반적으로 상당히 복잡하고 오류가 발생하기 쉬운 프로세스입니다 (12 세 이상). 더 이상!
이 패키지는 샌드 박스 및 비 샌드 박스 앱과 함께 작동하며 App Store 호환 및 Plash, Dato, Lungo 및 배터리 표시기와 같은 앱에서 사용됩니다.
이 패키지는 MacOS 13+의 새로운 SMAppService 사용하고 구형 MACOS 버전의 SMLoginItemSetEnabled 사용합니다.
SMAppService 존재 하므로이 패키지를 사용해야하는 이유는 무엇입니까?MacOS 10.13+
Xcode의 "Swift Package Manager"탭에서 https://github.com/sindresorhus/LaunchAtLogin-Legacy 추가하십시오.
앱이 MACOS를 13 이상 대상으로하는 경우이 단계를 건너 뜁니다.
아래에 아래에 새로운“실행 스크립트 단계”를 추가하십시오.
" ${BUILT_PRODUCTS_DIR} /LaunchAtLogin_LaunchAtLogin.bundle/Contents/Resources/copy-helper-swiftpm.sh "그리고“종속성 분석을 기반으로”선택 취소.
빌드 단계는 "사용자 스크립트 샌드 박스"를 사용하여 실행할 수 없습니다. 기본적으로 Xcode 15 이상이 활성화 된 경우 새로 활성화 된 경우 빌드 설정에서 "사용자 스크립트 샌드 박스"를 비활성화하십시오.
(빌드 위상 샌드 박스를 준수하기 위해 스크립트를 갖기 위해서는 추가 작업이 필요합니다.) ( Copy “Launch at Login Helper” 이름을 지정할 것입니다).
어떤 상태도 사용자 방어율에 저장할 필요가 없습니다.
Mac App Store 가이드 라인에는 사용자 작업에 응답하여 "로그인시 출시"기능이 가능해야합니다. 이것은 일반적으로 기본적으로 비활성화 된 선호도를 만들어 해결됩니다. 많은 앱을 통해 사용자가 환영 화면에서 활성화 할 수 있습니다.
import LaunchAtLogin
print ( LaunchAtLogin . isEnabled )
//=> false
LaunchAtLogin . isEnabled = true
print ( LaunchAtLogin . isEnabled )
//=> true 이 패키지는 내장 Toggle 비슷하지만 사전 정의 된 바인딩 및 레이블이있는 LaunchAtLogin.Toggle 보기가 함께 제공됩니다. 앱의 "로그인에서 시작"토글을 클릭하십시오.
struct ContentView : View {
var body : some View {
LaunchAtLogin . Toggle ( )
}
} 기본 레이블은 "Launch at login" 이지만 현지화 및 기타 요구에 대해 재정의 할 수 있습니다.
struct ContentView : View {
var body : some View {
LaunchAtLogin . Toggle {
Text ( " Launch at login " )
}
}
} 또는 @ObservedObject 와의 바인딩으로 LaunchAtLogin.observable 사용할 수 있습니다.
import SwiftUI
import LaunchAtLogin
struct ContentView : View {
@ ObservedObject private var launchAtLogin = LaunchAtLogin . observable
var body : some View {
Toggle ( " Launch at login " , isOn : $launchAtLogin . isEnabled )
}
} LaunchAtLogin.publisher 를 구독합니다.
import Combine
import LaunchAtLogin
final class ViewModel {
private var isLaunchAtLoginEnabled = LaunchAtLogin . isEnabled
private var cancellables = Set < AnyCancellable > ( )
func bind ( ) {
LaunchAtLogin
. publisher
. assign ( to : . isLaunchAtLoginEnabled , on : self )
. store ( in : & cancellables )
}
} LaunchAtLogin.publisher.values 사용하십시오.
컨트롤을 LaunchAtLogin.kvo 노출 된 속성에 바인딩하십시오.
import Cocoa
import LaunchAtLogin
final class ViewController : NSViewController {
@ objc dynamic var launchAtLogin = LaunchAtLogin . kvo
} 
MACOS 12 세 이하에서 패키지는 앱을 시작하는 데 필요한 도우미 앱을 번들로 만들고 빌드 시점에 앱에 복사합니다. MacOS 13 이상에서는 내장 API를 호출합니다.
LaunchAtLogin 실행 스크립트 단계가 여전히 "Embed Frameworks"단계보다 낮은지 확인하십시오. 주문이 실수로 변경되었을 수 있습니다.
빌드 오류는 일반적으로 다음과 같이 나타납니다.
cp: […]/Resources/LaunchAtLoginHelper.app: No such file or directory
rm: […]/Resources/copy-helper.sh: No such file or directory
Command PhaseScriptExecution failed with a nonzero exit code
불행히도 이것은 예상되는 행동입니다.
그러나 MacOS 13 이상에서 보여줄 것입니다.
이는 일반적으로 시스템 어딘가에 하나 이상의 오래된 앱 빌드가 있고 MacOS가 대신 그 중 하나를 선택하여 런칭 도우미가 없어서 시작하지 않기 때문에 발생합니다.
당신이 시도 할 수있는 것들 :
DerivedData 디렉토리를 삭제하십시오.유용한 스택 오버 플로우 답변 :
LaunchAtLogin.bundle 을 볼 수 없습니다. 또는 개발자 ID 배포에 대한 공증 오류가 발생합니다.여기에서 논의 된 바와 같이,이 패키지는 릴리스 또는 디버그 빌드를 만들고 설치를 정리하는지 확인하려고 시도합니다. 디버그 빌드가 번들이 없거나 반대로 릴리스 빌드에 번들이 있고 코드 서명 오류가 발생하면 실패한 것을 의미합니다.
스크립트의 결정은 빌드 설정에서 "활성 아키텍처 만 빌드"플래그를 기반으로합니다. 이것이 YES 설정되면 스크립트는 디버그 빌드를 위해 LaunchAtLogin을 패키지합니다. CodesIGNING으로 빌드를 배포 할 계획이라면이 플래그를 NO 로 설정해야합니다.