Browse files

readme to reflect changes and update some information

  • Loading branch information...
1 parent 641000b commit 50d4e3bc165ecdb24e0963352d7596fe788c449c @HBehrens HBehrens committed Jul 29, 2012
Showing with 42 additions and 14 deletions.
  1. +42 −14 README.md
View
56 README.md
@@ -1,12 +1,16 @@
# StartAtLoginController
-Easy to use controller that makes uses of the new ServiceManagement APIs. This is the required way to do login items for sandboxed Applications and soon Apple will make sandboxing required for all Mac App Store Apps so you should update early! (Works in non-sandboxed applications as well)
+Easy to use controller that makes use of the [Cocoa ServiceManagement APIs][SM]. This is the required way to do login items for sandboxed applications (required for all Mac App Store apps) and works in non-sandboxed applications as well.
-I have tested it on 10.7 and it supports removing login dictionaries. Also, entries set by this class do not appear to be showing up in the Accounts Panel of System Preferences.
+It's been tested on 10.7 and 10.8 (and should work on 10.6.6+). Entries set by this class do not appear in the Accounts Panel of System Preferences.
## HOW-TO
-You must create an instance of the controller and set the bundle for it to use to your helper bundle. (It must point to a helper bundle that has LSBackgroundOnly or LSUIElement set to YES in its Info.plist and put this bundle in Contents/Library/LoginItems).
+### Helper Bundle
+
+You must create an instance of the controller and set its bundle identifier to use to your helper bundle. (It must point to a helper bundle that has LSBackgroundOnly or LSUIElement set to YES in its Info.plist and put this bundle in Contents/Library/LoginItems).
+
+For sandboxed apps, sign it with the same entitlements and developer id. Also, your can only be launched at login if it has been copied to `/Applications`.
Here is an example of a helper bundle:
@@ -18,26 +22,47 @@ Here is an example of a helper bundle:
[NSApp terminate:nil];
}
-Then in your application you can set the bundle (identifier/path) of your helper app:
+You can find a decent tutorial about this at [Tim Schröder's blog post "The Launch At Login Sandbox Project"][Tutorial].
+
+### Main Application
+
+Then in your application
+
+ * add the framework `ServiceManagement` and
+ * add the files `StartAtLoginController.{h,m}`
+
+to your main app's target. You can use the controller either in code or with the interface builder.
+
+#### Programmatically
- StartAtLoginController loginController = [[StartAtLoginController alloc] init];
- [loginController setBundle:[NSBundle bundleWithPath:[[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Contents/Library/LoginItems/AppHelper.app"]]];
+When using in code, create an instance of `StartAtLoginController` by providing the helper app's bundle identifier:
+
+ StartAtLoginController loginController = [[StartAtLoginController alloc] initWithIdentifier:@"your.app.helpers.bundle.id"];
-And now you can manipulate the Services Entry:
+Now, you can manipulate the Services Entry:
- [loginController setStartAtLogin: YES]; // adds the entry into LaunchServices and activates it
- //
- //
- [loginController remove]; // removes the entire entry from the services list
+ loginController.startAtLogin = YES; // adds the entry into LaunchServices and activates it
//
+ loginController.enabled = NO; // disables the entry on the services list
//
BOOL startsAtLogin = [loginController startAtLogin]; // gets the current enabled state
-Unfortunately you cannot use interface builder to bind your checkbox to this object since you need to set the bundle of your helper app. But you can make a property accessor for you helper app in your prefs controller and bind it through there.
+#### Interface Builder
+
+If you want to use the interface builder
+
+ * Place a NSObject (the blue box) into the nib window
+ * From the Inspector - **Identity Tab**
+ * Set the Class to `StartAtLoginController`
+ * Add the user defined runtime attribute `identifier` of type `String` and set it to your helper app's bundle identifier
+ * Place a Checkbox on your Window/View
+ * From the Inspector - **Bindings Tab**
+ * Unroll the > Value item
+ * Bind to `StartAtLoginController` with the Model Key Path `startAtLogin`
## REQUIREMENTS
-Works only on 10.6.6 and up
+Works only on 10.6.6 or later.
## LICENSE
@@ -63,4 +88,7 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+[SM]: http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLoginItems.html
+[Tutorial]: http://blog.timschroeder.net/2012/07/03/the-launch-at-login-sandbox-project/

0 comments on commit 50d4e3b

Please sign in to comment.