Nelle ultime settimane ho scritto un'applicazione mac in modo rapido, sia per accedere alla programmazione mac che per esercitarsi rapidamente quando ci trasferiamo sul mio posto di lavoro. Attualmente sto cercando di ottenere del codice funzionante per aggiungere la mia applicazione come applicazione "Avvio all'avvio" personalizzando il codice gentilmente fornito su BDungan's blogSwift - avvio di un'applicazione Mac all'avvio
Finora dopo aver incasinato per molte ore ho trovato il seguente:
func itemRefInLoginItems() -> LSSharedFileListItemRef?
{
var itemRef: LSSharedFileListItemRef? = nil
var itemURL: Unmanaged<CFURLRef>?
let appURL = NSURL.fileURLWithPath(NSBundle.mainBundle().bundlePath)
if let loginItemsRef = LSSharedFileListCreate(kCFAllocatorDefault,kLSSharedFileListSessionLoginItems.takeRetainedValue(),NSMutableDictionary()) {
var unretainedLoginItemsRef = loginItemsRef.takeUnretainedValue()
if var loginItems = LSSharedFileListCopySnapshot(unretainedLoginItemsRef, nil) {
for item in (loginItems.takeRetainedValue() as NSArray) {
let currentItemRef = item as LSSharedFileListItemRef
var outRef: FSRef
if (LSSharedFileListItemResolve(currentItemRef, 0, &itemURL, nil) == noErr) {
if (appURL?.isEqual(itemURL?.takeRetainedValue()) != nil) { //PROBLEM 1
itemRef = currentItemRef
}
}
}
}
}
return itemRef
}
func isLaunchAtStartup() -> Bool {
let itemRef = self.itemRefInLoginItems()
return itemRef != nil
}
func makeLaunchAtStartup() { // Compile seems to fall down on this line...
if !self.isLaunchAtStartup() {
let loginItemsRef = LSSharedFileListCreate(kCFAllocatorDefault, kLSSharedFileListSessionLoginItems.takeRetainedValue(), NSMutableDictionary())
let appURL = NSURL(fileURLWithPath: NSBundle.mainBundle().bundlePath) as CFURLRef
let itemRef = LSSharedFileListInsertItemURL(loginItemsRef.takeRetainedValue(), kLSSharedFileListItemLast.takeRetainedValue(), nil, nil, appURL, nil, nil)
}
}
Tuttavia, sto riscontrando due problemi.
Problema 1
Swift non vuole che io a confrontare un NSURL ad un CFURLRef ... per ora sono andato con un suggerimento Xcode solo per ottenere l'applicazione in esecuzione, ma sono sicuro al 100% che non sta facendo quello che penso sia. (vedi // PROBLEMA 1).
In ogg-c sembra che il ponte libero tra NSURL e CFURLRef (o CFURL) sia consentito, tuttavia nel tentativo di lanciare, cast condizionale o qualsiasi varietà di rapido come (Inserisci carattere corretto qui) si avvicina al mio codice inevitabilmente t costruire. Ottengo errori come:
non gestito non è un sottotipo di NSURL: if appURL as Unmanaged<CFURLRef> == itemURL
e.t.c.
Problema 2
Anche se questo codice dà attualmente non avvisi o errori ... quando si cerca di compilare ottengo un Command failed due to signal: Segmentation fault: 11
, che per essere sinceri ... è oltre me.
Che dopo sandbox Abilitato ? – ak2g