2013-06-23 41 views
7

Bạn sẽ sử dụng số LaunchAgent bên trong hộp cát như thế nào? Tôi muốn phân phối một gói ứng dụng LaunchAgent UI-less bên trong ứng dụng chính của mình mà tôi có thể khởi chạy theo yêu cầu. Lý do tôi muốn điều này thay vì dịch vụ XPC là tùy chọn KeepAlive, điều này sẽ ngăn không cho launchd tự động giết chết quá trình của tôi khi không hoạt động. Tùy chọn này không tồn tại trên các dịch vụ XPC.Sử dụng LaunchAgent bên trong hộp cát ứng dụng Mac

Tài liệu nói rằng có một bản sao cần được sao chép vào ~/Library/LaunchAgents và điều này rõ ràng là không thể có trong hộp cát. Có một số loại API hệ thống có thể xử lý sao chép plist cho tôi không? Tôi đã nhìn thấy mã mẫu của SMJobBless của Apple, nhưng có vẻ như đó là để đăng ký một LaunchDaemon đặc quyền hơn là một LaunchAgent không có đặc quyền.

Trả lời

4

API bạn đang tìm kiếm là SMLoginItemSetEnabled(). Bạn sẽ phải đóng gói tác nhân dài hạn của mình như một gói .app thông thường và đưa nó vào gói ứng dụng chính của bạn tại Content/Library/LoginItems.

Sau đó, khi chạy trong ứng dụng chính, bạn có thể sử dụng cuộc gọi SMLoginItemSetEnabled() với mã nhận dạng gói của đại lý để bật và tắt tác nhân của bạn. Nếu ứng dụng chính của bạn thoát, tác nhân vẫn còn sống. Nếu người dùng đăng nhập ra ngoài và trở lại trong hoặc khởi động lại, hệ điều hành sẽ relaunch đại lý của bạn khi người dùng đăng nhập trở lại trong

Cập nhật:. Như Dmitry lưu ý, các tài liệu không còn đi kèm với mẫu ban đầu tôi đã đề cập, nhưng khác Apple sample code project, đối với Hộp cát ứng dụng, thể hiện cùng một API (xem tệp NSXPCConnection+LoginItem.m).

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