Trong vài tuần qua tôi đã viết một ứng dụng mac nhanh chóng, cả hai để tham gia lập trình mac và thực hành nhanh khi chúng tôi di chuyển sang nơi làm việc. Tôi hiện đang cố gắng để có được một số mã hoạt động để thêm ứng dụng của tôi dưới dạng ứng dụng "Khởi chạy khi khởi động" bằng cách điều chỉnh mã vui lòng được cung cấp trên BDungan's blogSwift - khởi chạy ứng dụng Mac để khởi động khi khởi động
Cho đến giờ sau khi làm phiền trong nhiều giờ, tôi đã đưa ra những điều sau:
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)
}
}
Tuy nhiên, tôi đang gặp hai vấn đề.
Vấn đề 1
Swift không muốn tôi để so sánh một NSURL đến một CFURLRef ... bây giờ tôi đã đi với một gợi ý Xcode chỉ để có được các ứng dụng đang chạy, nhưng tôi chắc chắn 100% nó không làm những gì tôi nghĩ. (xem // VẤN ĐỀ 1).
Trong mục tiêu-c có vẻ như cầu nối miễn phí được phép giữa NSURL và CFURLRef (hoặc CFURL), tuy nhiên, cố gắng truyền, cast có điều kiện hoặc bất kỳ sự nhanh chóng nào (Chèn ký tự đúng ở đây) tiếp cận mã của tôi chắc chắn sẽ không ' t xây dựng. Tôi nhận được lỗi như:
Switch không phải là một subtype của NSURL: if appURL as Unmanaged<CFURLRef> == itemURL
e.t.c.
Vấn đề 2
Mặc dù mã này hiện không đưa ra cảnh báo hoặc lỗi ... khi cố gắng biên soạn tôi nhận được một Command failed due to signal: Segmentation fault: 11
, để được thẳng thắn ... là ngoài tôi.
gì sau sandbox Bật ? – ak2g