W ciągu ostatnich kilku tygodni pisałem szybko aplikację Mac, zarówno do programowania w języku mac, jak i do szybkiego przeszukiwania, kiedy przenosimy się do niego w moim miejscu pracy. Obecnie próbuję uzyskać kod działający, aby dodać moją aplikację jako aplikację "Uruchom na starcie", dostosowując kod dostarczony pod adresem BDungan's blogSwift - uruchomienie aplikacji Mac do uruchomienia przy uruchomieniu
Do tej pory, po wielu godzinach, natknąłem się na następujące kwestie:
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)
}
}
Występują jednak dwa problemy.
Problem 1
Swift nie chce mnie do porównywania bibliotece NSURL do CFURLRef ... teraz poszłam z sugestią Xcode tak aby uzyskać działających aplikacji, ale jestem 100% pewien, że nie robi tego, co myślę, że jest. (patrz // PROBLEM 1).
Wygląda na to, że między NSURL a CFURLRef (lub CFURL) było dozwolone bezpłatne łączenie, jednak przy próbie rzutowania, warunkowej obsady lub dowolnej odmiany szybkiej, jak (Wstaw poprawną postać tutaj) podejście do mojego kodu nieuchronnie nie byłoby " t budować. I pojawiają się błędy takie jak:
niezarządzalny nie jest podtypem bibliotece NSURL: if appURL as Unmanaged<CFURLRef> == itemURL
itd.
Problem 2
Chociaż ten kod aktualnie nie daje ostrzeżenia lub błędy ... podczas próby kompilacji dostaję Command failed due to signal: Segmentation fault: 11
, który szczerze mówiąc ... jest poza mną.
Co po piaskownicy Włączone ? – ak2g