Skip to content

Instantly share code, notes, and snippets.

@ericdke
Forked from erica/gist:7c298164409795bbf92f
Created August 1, 2015 15:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ericdke/859d4a8b1d749948f6dd to your computer and use it in GitHub Desktop.
Save ericdke/859d4a8b1d749948f6dd to your computer and use it in GitHub Desktop.
Swift: Launch at Login Helper
//
// LaunchAtLoginHelper.swift
//
// Created by Erica Sadun on 4/1/15.
// Copyright (c) 2015 Erica Sadun. All rights reserved.
//
import Foundation
public func getLoginItems() -> LSSharedFileList? {
let allocator : CFAllocator! = CFAllocatorGetDefault().takeUnretainedValue()
let kLoginItems : CFString! = kLSSharedFileListSessionLoginItems.takeUnretainedValue()
var loginItems_ = LSSharedFileListCreate(allocator, kLoginItems, nil)
if loginItems_ == nil {return nil}
let loginItems : LSSharedFileList! = loginItems_.takeRetainedValue()
return loginItems
}
public func existingItem(itemURL : NSURL) -> LSSharedFileListItem? {
let loginItems_ = getLoginItems()
if loginItems_ == nil {return nil}
let loginItems = loginItems_!
var seed : UInt32 = 0
let currentItems = LSSharedFileListCopySnapshot(loginItems, &seed).takeRetainedValue() as NSArray
for item in currentItems {
let resolutionFlags : UInt32 = UInt32(kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes)
var url = LSSharedFileListItemCopyResolvedURL(item as! LSSharedFileListItem, resolutionFlags, nil).takeRetainedValue() as NSURL
if url.isEqual(itemURL) {
let result = item as! LSSharedFileListItem
return result
}
}
return nil
}
public func willLaunchAtLogin(itemURL : NSURL) -> Bool {
return existingItem(itemURL) != nil
}
public func setLaunchAtLogin(itemURL: NSURL, enabled: Bool) -> Bool {
let loginItems_ = getLoginItems()
if loginItems_ == nil {return false}
let loginItems = loginItems_!
var item = existingItem(itemURL)
if item != nil && enabled {return true}
if item != nil && !enabled {
LSSharedFileListItemRemove(loginItems, item)
return true
}
LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemBeforeFirst.takeUnretainedValue(), nil, nil, itemURL as CFURL, nil, nil)
return true
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment