2011-09-15 26 views
10

Trong thực tế, tôi đọc tài liệu sau đây:Cách tạo ứng dụng trợ giúp cho Ứng dụng Mac để bắt đầu đăng nhập người dùng?

Applications can contain a helper application as a full application bundle, stored inside the main application bundle in the Contents/Library/LoginItems directory. Set either the LSUIElement or LSBackgroundOnly key in the Info.plist file of the helper application’s bundle.

Tôi hoàn toàn không hiểu nó, có ai biết làm thế nào để làm gì?

và cũng có, những gì hiện này có nghĩa là:

Note: Before calling the SMLoginItemSetEnabled function, first register with Launch Services by calling the LSRegisterURL function with the URL for the helper application bundle.

là có bất kỳ ví dụ về cách sử dụng LSRegisterURLSMLoginItemSetEnabled?

+1

Tôi đã thực sự bị mắc kẹt với điều này, và sau đó tìm thấy hướng dẫn này: http://blog.timschroeder.net/2012/07/03/the-launch-at-login-sandbox-project/ Thực sự đã giúp tôi không có kết thúc. –

+0

bản sao có thể có của [Mac OS X: bắt đầu khởi chạy khi đang ở trong cửa hàng ứng dụng?] (Http://stackoverflow.com/questions/11536477/mac-os-x-start-on-launch-while-in-app-store) –

Trả lời

0

Tôi chưa bao giờ sử dụng LSRegisterURL, tôi có thể trả lời câu hỏi đầu tiên: để đặt bit LSUIElement bạn chỉ cần mở .plist và thêm hàng "Application is agent (UIElement)", sau đó đặt giá trị thành TRUE.

+0

thiết lập LSUIElement thành TRUE có tạo ứng dụng trợ giúp không? trong thực tế, tôi không hoàn toàn hiểu 'ứng dụng trợ giúp' là gì? Nó đâu rồi? – disorderdev

-1

Về cơ bản, bạn phải xem Launch Services chỉ là một trình bao bọc xung quanh launchd, bạn có thể kiểm tra bằng cách xem man launchd trong thiết bị đầu cuối.

hoặc hãy nhìn vào câu hỏi này ở đây tại SO How do you make your App open at login?

+0

disorderdev không phải là người duy nhất trên thuyền này. Tôi thấy kỳ lạ là không có mã mẫu ở bất kỳ đâu được tìm thấy liên quan đến việc sử dụng SMLoginItemSetEnabled. Không có trong GitHub, không phải trong Google. nada. – Antony

+0

cũng có một vài mã mẫu trong bài viết SO tôi tham chiếu trong câu trả lời của tôi. Bạn đã tìm thấy thời gian để xem nó chưa? – GorillaPatch

+0

tốt, man launchd đưa ra cú pháp để chạy một dịch vụ trong nền, nhưng nó không chi tiết nhiều về cách bạn có thể bố trí mã trong obj-c. Mặt khác, liên kết bạn cung cấp thực sự là cho phương pháp Danh sách tệp được chia sẻ. [Tài liệu] (http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLoginItems.html#//apple_ref/doc/uid/10000172i-SW5-SW1) doesn ' t chi tiết nhiều nếu bạn muốn thực hiện cách tiếp cận khung quản lý dịch vụ. Chúng tôi muốn tạo một mục đăng nhập không cho phép người dùng tắt trực tiếp. – Antony

9
+ (void)startHelper { 
    NSURL *helperURL = [[[NSBundle mainBundle] bundleURL] URLByAppendingPathComponent:@"Contents/Library/LoginItems/YourHelper.app" isDirectory:YES]; 
    OSStatus status = LSRegisterURL((CFURLRef)helperURL, YES); 
    if (status != noErr) { 
     NSLog(@"Failed to LSRegisterURL '%@': %jd", helperURL, (intmax_t)status); 
    } 


    Boolean success = SMLoginItemSetEnabled(CFSTR("com.yourcompany.helper-CFBundleIdentifier-here"), YES); 
    if (!success) { 
     NSLog(@"Failed to start Helper"); 
    } 
} 

Lưu ý rằng Helper phải được đóng gói với các ứng dụng chính trong "Nội dung/Library/LoginItems" thư mục. Bạn sẽ cần phải tạo nó trong quá trình xây dựng và sao chép trình trợ giúp ở đó.

+0

Đây là những gì tôi đã tìm kiếm trong nhiều tuần! Cảm ơn roustern. – Todd

3

Tôi tìm thấy một liên kết có ích:

http://www.delitestudio.com/2011/10/25/start-dockless-apps-at-login-with-app-sandbox-enabled/

EDIT: buồn bã liên kết này không còn hoạt động. Có lẽ ai đó có thể đề xuất một lựa chọn tốt hơn ...

Đó là một hướng dẫn tốt để đăng ký một mục đăng nhập trong môi trường Sandboxed nếu sử dụng (và tất cả chúng ta sẽ cần đến cuối cùng!). Điều quan trọng là, khó chịu, bạn phải sao chép ứng dụng chính, được xây dựng của bạn vào thư mục Ứng dụng và không làm những gì tôi làm, hãy quên sandbox ứng dụng trợ giúp và thêm hàng Application is agent (UIElement) vào danh sách của người trợ giúp với TRUE cho giá trị. NSLog và Console là người bạn gỡ lỗi kiểu cũ của bạn ngay bây giờ.

... chỉ cần phải tìm ra cách để có được những ứng dụng helper để khởi động các ứng dụng chính khi họ đang cả sandboxed ..... Edit: tìm thấy câu hỏi này: Cocoa: Sandbox entitlement to launch another application

Các vấn đề liên quan