Start coding OSX Backgrounder Application, for OpenAFS Preference Pane, that user...
authorClaudio Bisegni <Claudio.Bisegni@lnf.infn.it>
Wed, 29 Jul 2009 13:12:13 +0000 (15:12 +0200)
committerDerrick Brashear <shadow@dementia.org>
Mon, 3 Aug 2009 11:48:36 +0000 (04:48 -0700)
To prevent future compatibility with osx we must use NSStatusItem instead NSMenuExtra that is not documented api.
For this has been created a background only application that will manage all function managed by current NSMenuExtra

Reviewed-on: http://gerrit.openafs.org/261
Tested-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.h [new file with mode: 0644]
src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.m [new file with mode: 0644]
src/platform/DARWIN/AFSPreference/AFSBackgrounder/main.m [new file with mode: 0644]
src/platform/DARWIN/AFSPreference/AFSBackgrounder/resource/AFSBackounderMainMenu.xib [new file with mode: 0644]
src/platform/DARWIN/AFSPreference/AFSBackgrounder/resource/Info.plist [new file with mode: 0644]
src/platform/DARWIN/AFSPreference/AFSBackgrounder/resource/version.plist [new file with mode: 0644]
src/platform/DARWIN/AFSPreference/OpenAFS.xcodeproj/project.pbxproj

diff --git a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.h b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.h
new file mode 100644 (file)
index 0000000..6c7bfa6
--- /dev/null
@@ -0,0 +1,19 @@
+//
+//  AFSBackgrounder.h
+//  OpenAFS
+//
+//  Created by Claudio Bisegni on 29/07/09.
+//  Copyright 2009 Infn. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface AFSBackgrounderDelegate : NSObject {
+       IBOutlet NSMenu *backgrounderMenu;
+       NSStatusItem    *statusItem;
+    NSImage         *statusImage;
+    NSImage         *statusHighlightImage;
+}
+
+@end
diff --git a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.m b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.m
new file mode 100644 (file)
index 0000000..3ecfad5
--- /dev/null
@@ -0,0 +1,36 @@
+//
+//  AFSBackgrounder.m
+//  OpenAFS
+//
+//  Created by Claudio Bisegni on 29/07/09.
+//  Copyright 2009 Infn. All rights reserved.
+//
+
+#import "AFSBackgrounderDelegate.h"
+
+
+@implementation AFSBackgrounderDelegate
+- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
+       NSLog(@"applicationDidFinishLaunching");
+       //Create the NSStatusBar and set its length
+    statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain];
+    
+    //Used to detect where our files are
+    NSBundle *bundle = [NSBundle mainBundle];
+    
+    //Allocates and loads the images into the application which will be used for our NSStatusItem
+    statusImage = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"hasToken" ofType:@"png"]];
+    statusHighlightImage = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"noToken" ofType:@"png"]];
+    
+    //Sets the images in our NSStatusItem
+    [statusItem setImage:statusImage];
+    [statusItem setAlternateImage:statusHighlightImage];
+    
+    //Tells the NSStatusItem what menu to load
+    [statusItem setMenu:backgrounderMenu];
+    //Sets the tooptip for our item
+    [statusItem setToolTip:@"Andrews Menu Item"];
+    //Enables highlighting
+    [statusItem setHighlightMode:YES];
+}
+@end
diff --git a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/main.m b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/main.m
new file mode 100644 (file)
index 0000000..a8c9b51
--- /dev/null
@@ -0,0 +1,14 @@
+//
+//  main.m
+//  test
+//
+//  Created by Claudio Bisegni on 29/07/09.
+//  Copyright Infn 2009. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+int main(int argc, char *argv[])
+{
+    return NSApplicationMain(argc,  (const char **) argv);
+}
diff --git a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/resource/AFSBackounderMainMenu.xib b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/resource/AFSBackounderMainMenu.xib
new file mode 100644 (file)
index 0000000..53f0dc9
--- /dev/null
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03">
+       <data>
+               <int key="IBDocument.SystemTarget">1050</int>
+               <string key="IBDocument.SystemVersion">9J61</string>
+               <string key="IBDocument.InterfaceBuilderVersion">680</string>
+               <string key="IBDocument.AppKitVersion">949.46</string>
+               <string key="IBDocument.HIToolboxVersion">353.00</string>
+               <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+                       <bool key="EncodedWithXMLCoder">YES</bool>
+               </object>
+               <object class="NSArray" key="IBDocument.PluginDependencies">
+                       <bool key="EncodedWithXMLCoder">YES</bool>
+                       <string>com.apple.InterfaceBuilderKit</string>
+                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+               </object>
+               <object class="NSMutableDictionary" key="IBDocument.Metadata">
+                       <bool key="EncodedWithXMLCoder">YES</bool>
+                       <object class="NSArray" key="dict.sortedKeys">
+                               <bool key="EncodedWithXMLCoder">YES</bool>
+                       </object>
+                       <object class="NSMutableArray" key="dict.values">
+                               <bool key="EncodedWithXMLCoder">YES</bool>
+                       </object>
+               </object>
+               <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+                       <bool key="EncodedWithXMLCoder">YES</bool>
+                       <object class="NSCustomObject" id="1001">
+                               <string key="NSClassName">NSObject</string>
+                       </object>
+                       <object class="NSCustomObject" id="1003">
+                               <string key="NSClassName">FirstResponder</string>
+                       </object>
+                       <object class="NSCustomObject" id="1004">
+                               <string key="NSClassName">NSApplication</string>
+                       </object>
+                       <object class="NSMenu" id="913072818">
+                               <string key="NSTitle"/>
+                               <object class="NSMutableArray" key="NSMenuItems">
+                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                       <object class="NSMenuItem" id="77178862">
+                                               <reference key="NSMenu" ref="913072818"/>
+                                               <string key="NSTitle">Start AFS</string>
+                                               <string key="NSKeyEquiv"/>
+                                               <int key="NSMnemonicLoc">2147483647</int>
+                                               <object class="NSCustomResource" key="NSOnImage" id="769352467">
+                                                       <string key="NSClassName">NSImage</string>
+                                                       <string key="NSResourceName">NSMenuCheckmark</string>
+                                               </object>
+                                               <object class="NSCustomResource" key="NSMixedImage" id="863282242">
+                                                       <string key="NSClassName">NSImage</string>
+                                                       <string key="NSResourceName">NSMenuMixedState</string>
+                                               </object>
+                                       </object>
+                                       <object class="NSMenuItem" id="661887258">
+                                               <reference key="NSMenu" ref="913072818"/>
+                                               <bool key="NSIsDisabled">YES</bool>
+                                               <bool key="NSIsSeparator">YES</bool>
+                                               <string key="NSTitle"/>
+                                               <string key="NSKeyEquiv"/>
+                                               <int key="NSMnemonicLoc">2147483647</int>
+                                               <reference key="NSOnImage" ref="769352467"/>
+                                               <reference key="NSMixedImage" ref="863282242"/>
+                                       </object>
+                                       <object class="NSMenuItem" id="10398219">
+                                               <reference key="NSMenu" ref="913072818"/>
+                                               <string key="NSTitle">Get Token</string>
+                                               <string key="NSKeyEquiv"/>
+                                               <int key="NSMnemonicLoc">2147483647</int>
+                                               <reference key="NSOnImage" ref="769352467"/>
+                                               <reference key="NSMixedImage" ref="863282242"/>
+                                       </object>
+                               </object>
+                       </object>
+                       <object class="NSCustomObject" id="437456796">
+                               <string key="NSClassName">AFSBackgrounderDelegate</string>
+                       </object>
+               </object>
+               <object class="IBObjectContainer" key="IBDocument.Objects">
+                       <object class="NSMutableArray" key="connectionRecords">
+                               <bool key="EncodedWithXMLCoder">YES</bool>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">delegate</string>
+                                               <reference key="source" ref="1004"/>
+                                               <reference key="destination" ref="437456796"/>
+                                       </object>
+                                       <int key="connectionID">6</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">backgrounderMenu</string>
+                                               <reference key="source" ref="437456796"/>
+                                               <reference key="destination" ref="913072818"/>
+                                       </object>
+                                       <int key="connectionID">12</int>
+                               </object>
+                       </object>
+                       <object class="IBMutableOrderedSet" key="objectRecords">
+                               <object class="NSArray" key="orderedObjects">
+                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">0</int>
+                                               <object class="NSArray" key="object" id="1002">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                               </object>
+                                               <reference key="children" ref="1000"/>
+                                               <nil key="parent"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">-2</int>
+                                               <reference key="object" ref="1001"/>
+                                               <reference key="parent" ref="1002"/>
+                                               <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">-1</int>
+                                               <reference key="object" ref="1003"/>
+                                               <reference key="parent" ref="1002"/>
+                                               <string key="objectName">First Responder</string>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">-3</int>
+                                               <reference key="object" ref="1004"/>
+                                               <reference key="parent" ref="1002"/>
+                                               <string key="objectName">Application</string>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">1</int>
+                                               <reference key="object" ref="913072818"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                       <reference ref="77178862"/>
+                                                       <reference ref="661887258"/>
+                                                       <reference ref="10398219"/>
+                                               </object>
+                                               <reference key="parent" ref="1002"/>
+                                               <string key="objectName">StatusMenu</string>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">5</int>
+                                               <reference key="object" ref="437456796"/>
+                                               <reference key="parent" ref="1002"/>
+                                               <string key="objectName">Delegate</string>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">9</int>
+                                               <reference key="object" ref="77178862"/>
+                                               <reference key="parent" ref="913072818"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">10</int>
+                                               <reference key="object" ref="661887258"/>
+                                               <reference key="parent" ref="913072818"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">11</int>
+                                               <reference key="object" ref="10398219"/>
+                                               <reference key="parent" ref="913072818"/>
+                                       </object>
+                               </object>
+                       </object>
+                       <object class="NSMutableDictionary" key="flattenedProperties">
+                               <bool key="EncodedWithXMLCoder">YES</bool>
+                               <object class="NSMutableArray" key="dict.sortedKeys">
+                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                       <string>-1.IBPluginDependency</string>
+                                       <string>-2.IBPluginDependency</string>
+                                       <string>-3.IBPluginDependency</string>
+                                       <string>1.IBEditorWindowLastContentRect</string>
+                                       <string>1.IBPluginDependency</string>
+                                       <string>10.IBPluginDependency</string>
+                                       <string>11.IBPluginDependency</string>
+                                       <string>5.IBPluginDependency</string>
+                                       <string>9.IBPluginDependency</string>
+                               </object>
+                               <object class="NSMutableArray" key="dict.values">
+                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilderKit</string>
+                                       <string>com.apple.InterfaceBuilderKit</string>
+                                       <string>{{244, 767}, {125, 53}}</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                               </object>
+                       </object>
+                       <object class="NSMutableDictionary" key="unlocalizedProperties">
+                               <bool key="EncodedWithXMLCoder">YES</bool>
+                               <object class="NSArray" key="dict.sortedKeys">
+                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                               </object>
+                               <object class="NSMutableArray" key="dict.values">
+                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                               </object>
+                       </object>
+                       <nil key="activeLocalization"/>
+                       <object class="NSMutableDictionary" key="localizations">
+                               <bool key="EncodedWithXMLCoder">YES</bool>
+                               <object class="NSArray" key="dict.sortedKeys">
+                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                               </object>
+                               <object class="NSMutableArray" key="dict.values">
+                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                               </object>
+                       </object>
+                       <nil key="sourceID"/>
+                       <int key="maxID">12</int>
+               </object>
+               <object class="IBClassDescriber" key="IBDocument.Classes">
+                       <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+                               <bool key="EncodedWithXMLCoder">YES</bool>
+                               <object class="IBPartialClassDescription">
+                                       <string key="className">AFSBackgrounderDelegate</string>
+                                       <string key="superclassName">NSObject</string>
+                                       <object class="NSMutableDictionary" key="outlets">
+                                               <string key="NS.key.0">backgrounderMenu</string>
+                                               <string key="NS.object.0">NSMenu</string>
+                                       </object>
+                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
+                                               <string key="majorKey">IBProjectSource</string>
+                                               <string key="minorKey">AFSBackgrounder/AFSBackgrounderDelegate.h</string>
+                                       </object>
+                               </object>
+                       </object>
+               </object>
+               <int key="IBDocument.localizationMode">0</int>
+               <string key="IBDocument.LastKnownRelativeProjectPath">../../OpenAFS.xcodeproj</string>
+               <int key="IBDocument.defaultPropertyAccessControl">3</int>
+       </data>
+</archive>
diff --git a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/resource/Info.plist b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/resource/Info.plist
new file mode 100644 (file)
index 0000000..676dfad
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>LSUIElement</key>
+       <true/>
+       <key>CFBundleDevelopmentRegion</key>
+       <string>English</string>
+       <key>CFBundleExecutable</key>
+       <string>${EXECUTABLE_NAME}</string>
+       <key>CFBundleIdentifier</key>
+       <string>com.yourcompany.${PRODUCT_NAME:identifier}</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundlePackageType</key>
+       <string>APPL</string>
+       <key>CFBundleSignature</key>
+       <string>????</string>
+       <key>CFBundleVersion</key>
+       <string>1.0</string>
+       <key>NSMainNibFile</key>
+       <string>AFSBackounderMainMenu</string>
+       <key>NSPrincipalClass</key>
+       <string>NSApplication</string>
+</dict>
+</plist>
diff --git a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/resource/version.plist b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/resource/version.plist
new file mode 100644 (file)
index 0000000..5611992
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>BuildVersion</key>
+       <string>3</string>
+       <key>CFBundleVersion</key>
+       <string>1.0</string>
+       <key>ProductBuildVersion</key>
+       <string>9M2729</string>
+       <key>ProjectName</key>
+       <string>DevToolsWizardTemplates</string>
+       <key>SourceVersion</key>
+       <string>11600000</string>
+</dict>
+</plist>
index a006158..123d280 100644 (file)
                322884030C3E45C800E778CC /* InfoController.h in Headers */ = {isa = PBXBuildFile; fileRef = 322884010C3E45C800E778CC /* InfoController.h */; };
                322884040C3E45C800E778CC /* InfoController.m in Sources */ = {isa = PBXBuildFile; fileRef = 322884020C3E45C800E778CC /* InfoController.m */; };
                322884050C3E45C800E778CC /* InfoController.m in Sources */ = {isa = PBXBuildFile; fileRef = 322884020C3E45C800E778CC /* InfoController.m */; };
+               3228B9B01020526900DF98DA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 3228B9AF1020526900DF98DA /* main.m */; };
+               3228B9B4102052A900DF98DA /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 327309620C2AB433008C322B /* Security.framework */; };
+               3228B9BE102052BE00DF98DA /* version.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3228B9BD102052BE00DF98DA /* version.plist */; };
+               3228B9D5102070A200DF98DA /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3276591D10204E08004CA418 /* Info.plist */; };
+               3228BA1910207A4200DF98DA /* hasToken.png in Resources */ = {isa = PBXBuildFile; fileRef = 3228BA1810207A4200DF98DA /* hasToken.png */; };
+               3228BA1B10207A5200DF98DA /* noToken.png in Resources */ = {isa = PBXBuildFile; fileRef = 3228BA1A10207A5200DF98DA /* noToken.png */; };
                322B90450C2F0A2D0068F99A /* start_afs.sh in Resources */ = {isa = PBXBuildFile; fileRef = 322B90430C2F0A2D0068F99A /* start_afs.sh */; };
                322B90460C2F0A2D0068F99A /* stop_afs.sh in Resources */ = {isa = PBXBuildFile; fileRef = 322B90440C2F0A2D0068F99A /* stop_afs.sh */; };
                322CEF600C211D220060D66D /* DBCellElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 322CEF5F0C211D220060D66D /* DBCellElement.m */; };
                327308D80C2AA369008C322B /* SecurityFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 327308D20C2AA364008C322B /* SecurityFoundation.framework */; };
                327309970C2AB433008C322B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 327309620C2AB433008C322B /* Security.framework */; };
                327309980C2AB434008C322B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 327309620C2AB433008C322B /* Security.framework */; };
+               3276592110204E4E004CA418 /* AFSPropertyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B0AFDE0C01729400272348 /* AFSPropertyManager.m */; };
+               3276592210204E51004CA418 /* DBCellElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 322CEF5F0C211D220060D66D /* DBCellElement.m */; };
+               3276592310204E51004CA418 /* CellIp.m in Sources */ = {isa = PBXBuildFile; fileRef = 322CEF6D0C211DCC0060D66D /* CellIp.m */; };
+               3276592410204EE0004CA418 /* FileUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 3273088C0C2A9B05008C322B /* FileUtil.m */; };
+               3276592510204EE1004CA418 /* AuthUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 3213E9400C2ABFD200D3D2F6 /* AuthUtil.m */; };
+               3276592610204EE2004CA418 /* TaskUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 327756260C3053A100C15D11 /* TaskUtil.m */; };
+               3276592710204EE2004CA418 /* ViewUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 495B043F0D219A2900F1E328 /* ViewUtility.m */; };
+               3276592810204EE3004CA418 /* NSString+search.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B565730D8FAF62005255F2 /* NSString+search.m */; };
+               3276592910204EE4004CA418 /* PListManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 498DCB420DC2240B00D143C8 /* PListManager.m */; };
+               3276592A10204EE5004CA418 /* DialogUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 49B766440DCA47A50014A80F /* DialogUtility.m */; };
+               3276592E10204F8D004CA418 /* AFSBackounderMainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3276592D10204F8D004CA418 /* AFSBackounderMainMenu.xib */; };
+               3276593110204F9E004CA418 /* AFSBackgrounderDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3276593010204F9E004CA418 /* AFSBackgrounderDelegate.m */; };
+               3276594110204FFA004CA418 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 495C39460D81EA3C003426FC /* Kerberos.framework */; };
+               3276594310204FFA004CA418 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4940075A0CE62EB500F40D0A /* CoreServices.framework */; };
+               3276594410204FFC004CA418 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; };
+               3276594510205003004CA418 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 493564E70CE711F300699A24 /* Carbon.framework */; };
                327756270C3053A100C15D11 /* TaskUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 327756260C3053A100C15D11 /* TaskUtil.m */; };
                327756280C3053A100C15D11 /* TaskUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 327756250C3053A100C15D11 /* TaskUtil.h */; };
                327756290C3053A100C15D11 /* TaskUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 327756260C3053A100C15D11 /* TaskUtil.m */; };
                3223836B0C32A96F00380547 /* English */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; name = English; path = English.lproj/Localizable.strings; sourceTree = "<group>"; };
                322884010C3E45C800E778CC /* InfoController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InfoController.h; sourceTree = "<group>"; };
                322884020C3E45C800E778CC /* InfoController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InfoController.m; sourceTree = "<group>"; };
+               3228B9AF1020526900DF98DA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = AFSBackgrounder/main.m; sourceTree = "<group>"; };
+               3228B9BD102052BE00DF98DA /* version.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = version.plist; path = AFSBackgrounder/resource/version.plist; sourceTree = "<group>"; };
+               3228BA1810207A4200DF98DA /* hasToken.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = hasToken.png; sourceTree = "<group>"; };
+               3228BA1A10207A5200DF98DA /* noToken.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = noToken.png; sourceTree = "<group>"; };
                322B90430C2F0A2D0068F99A /* start_afs.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = start_afs.sh; sourceTree = "<group>"; };
                322B90440C2F0A2D0068F99A /* stop_afs.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = stop_afs.sh; sourceTree = "<group>"; };
                322CEF5E0C211D220060D66D /* DBCellElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBCellElement.h; sourceTree = "<group>"; };
                3273088C0C2A9B05008C322B /* FileUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FileUtil.m; sourceTree = "<group>"; };
                327308D20C2AA364008C322B /* SecurityFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SecurityFoundation.framework; path = /System/Library/Frameworks/SecurityFoundation.framework; sourceTree = "<absolute>"; };
                327309620C2AB433008C322B /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = "<absolute>"; };
+               3276591B10204E08004CA418 /* AFSBackgrounder.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AFSBackgrounder.app; sourceTree = BUILT_PRODUCTS_DIR; };
+               3276591D10204E08004CA418 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = AFSBackgrounder/resource/Info.plist; sourceTree = "<group>"; };
+               3276592D10204F8D004CA418 /* AFSBackounderMainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = AFSBackounderMainMenu.xib; path = AFSBackgrounder/resource/AFSBackounderMainMenu.xib; sourceTree = "<group>"; };
+               3276592F10204F9E004CA418 /* AFSBackgrounderDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFSBackgrounderDelegate.h; path = AFSBackgrounder/AFSBackgrounderDelegate.h; sourceTree = "<group>"; };
+               3276593010204F9E004CA418 /* AFSBackgrounderDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFSBackgrounderDelegate.m; path = AFSBackgrounder/AFSBackgrounderDelegate.m; sourceTree = "<group>"; };
                327756250C3053A100C15D11 /* TaskUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TaskUtil.h; sourceTree = "<group>"; };
                327756260C3053A100C15D11 /* TaskUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TaskUtil.m; sourceTree = "<group>"; };
                32B0AFDD0C01729400272348 /* AFSPropertyManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSPropertyManager.h; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
+               3276591910204E08004CA418 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               3276594110204FFA004CA418 /* Kerberos.framework in Frameworks */,
+                               3276594310204FFA004CA418 /* CoreServices.framework in Frameworks */,
+                               3276594410204FFC004CA418 /* Cocoa.framework in Frameworks */,
+                               3276594510205003004CA418 /* Carbon.framework in Frameworks */,
+                               3228B9B4102052A900DF98DA /* Security.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                32CF01370C203C1800A8DC58 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                                32CFFEF90C20314100A8DC58 /* Stand Alone Program */,
                                08FB77AFFE84173DC02AAC07 /* Classes */,
                                494BD47A0C43EDD400DB0A3A /* AFSMenuExtra */,
+                               3276591010204DB4004CA418 /* AFSBackgrounder */,
                                32DBCFA10370C40200C91783 /* Other Sources */,
                                089C167CFE841241C02AAC07 /* Resources */,
                                089C1671FE841209C02AAC07 /* Frameworks and Libraries */,
                                49683EE40C3446380093C7C8 /* afshlp */,
                                494C74DE0C46052800D3A2D2 /* AFSMenuExtra.menu */,
                                4998A6860DC33BEC00146652 /* LoginTimeDaemon */,
+                               3276591B10204E08004CA418 /* AFSBackgrounder.app */,
                        );
                        name = Products;
                        sourceTree = "<group>";
                        name = Info;
                        sourceTree = "<group>";
                };
+               3228B9B21020527000DF98DA /* resource */ = {
+                       isa = PBXGroup;
+                       children = (
+                               3228BA1810207A4200DF98DA /* hasToken.png */,
+                               3228BA1A10207A5200DF98DA /* noToken.png */,
+                               3276591D10204E08004CA418 /* Info.plist */,
+                               3228B9BD102052BE00DF98DA /* version.plist */,
+                               3276592D10204F8D004CA418 /* AFSBackounderMainMenu.xib */,
+                       );
+                       name = resource;
+                       sourceTree = "<group>";
+               };
                322CEF6B0C211DAC0060D66D /* Afs Element */ = {
                        isa = PBXGroup;
                        children = (
                        name = Utility;
                        sourceTree = "<group>";
                };
+               3276591010204DB4004CA418 /* AFSBackgrounder */ = {
+                       isa = PBXGroup;
+                       children = (
+                               3228B9AF1020526900DF98DA /* main.m */,
+                               3276592F10204F9E004CA418 /* AFSBackgrounderDelegate.h */,
+                               3276593010204F9E004CA418 /* AFSBackgrounderDelegate.m */,
+                               3228B9B21020527000DF98DA /* resource */,
+                       );
+                       name = AFSBackgrounder;
+                       sourceTree = "<group>";
+               };
                32B0AFB40C016E6900272348 /* English.lproj */ = {
                        isa = PBXGroup;
                        children = (
 /* End PBXHeadersBuildPhase section */
 
 /* Begin PBXNativeTarget section */
+               3276591A10204E08004CA418 /* AFSBackgrounder */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 3276592010204E08004CA418 /* Build configuration list for PBXNativeTarget "AFSBackgrounder" */;
+                       buildPhases = (
+                               3276591710204E08004CA418 /* Resources */,
+                               3276591810204E08004CA418 /* Sources */,
+                               3276591910204E08004CA418 /* Frameworks */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = AFSBackgrounder;
+                       productName = AFSBackgrounder;
+                       productReference = 3276591B10204E08004CA418 /* AFSBackgrounder.app */;
+                       productType = "com.apple.product-type.application";
+               };
                32CF01380C203C1800A8DC58 /* Test */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = 32CF013C0C203C4900A8DC58 /* Build configuration list for PBXNativeTarget "Test" */;
                                49683EE30C3446380093C7C8 /* afshlp */,
                                494BD4680C43ED0C00DB0A3A /* AFSMenuExtra */,
                                4998A6850DC33BEC00146652 /* LoginTimeDaemon */,
+                               3276591A10204E08004CA418 /* AFSBackgrounder */,
                        );
                };
 /* End PBXProject section */
 
 /* Begin PBXResourcesBuildPhase section */
+               3276591710204E08004CA418 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               3276592E10204F8D004CA418 /* AFSBackounderMainMenu.xib in Resources */,
+                               3228B9BE102052BE00DF98DA /* version.plist in Resources */,
+                               3228B9D5102070A200DF98DA /* Info.plist in Resources */,
+                               3228BA1910207A4200DF98DA /* hasToken.png in Resources */,
+                               3228BA1B10207A5200DF98DA /* noToken.png in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                494BD4650C43ED0C00DB0A3A /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
 /* End PBXShellScriptBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
+               3276591810204E08004CA418 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               3276592110204E4E004CA418 /* AFSPropertyManager.m in Sources */,
+                               3276592210204E51004CA418 /* DBCellElement.m in Sources */,
+                               3276592310204E51004CA418 /* CellIp.m in Sources */,
+                               3276592410204EE0004CA418 /* FileUtil.m in Sources */,
+                               3276592510204EE1004CA418 /* AuthUtil.m in Sources */,
+                               3276592610204EE2004CA418 /* TaskUtil.m in Sources */,
+                               3276592710204EE2004CA418 /* ViewUtility.m in Sources */,
+                               3276592810204EE3004CA418 /* NSString+search.m in Sources */,
+                               3276592910204EE4004CA418 /* PListManager.m in Sources */,
+                               3276592A10204EE5004CA418 /* DialogUtility.m in Sources */,
+                               3276593110204F9E004CA418 /* AFSBackgrounderDelegate.m in Sources */,
+                               3228B9B01020526900DF98DA /* main.m in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                32CF01360C203C1800A8DC58 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        };
                        name = Release;
                };
+               3276591E10204E08004CA418 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               COPY_PHASE_STRIP = NO;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_MODEL_TUNING = G5;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;
+                               GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+                               INFOPLIST_FILE = AFSBackgrounder/resource/Info.plist;
+                               INSTALL_PATH = "$(HOME)/Applications";
+                               OTHER_LDFLAGS = (
+                                       "-framework",
+                                       Foundation,
+                                       "-framework",
+                                       AppKit,
+                               );
+                               PREBINDING = NO;
+                               PRODUCT_NAME = AFSBackgrounder;
+                       };
+                       name = Debug;
+               };
+               3276591F10204E08004CA418 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               COPY_PHASE_STRIP = YES;
+                               DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+                               GCC_ENABLE_FIX_AND_CONTINUE = NO;
+                               GCC_MODEL_TUNING = G5;
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;
+                               GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+                               INFOPLIST_FILE = AFSBackgrounder/resource/Info.plist;
+                               INSTALL_PATH = "$(HOME)/Applications";
+                               OTHER_LDFLAGS = (
+                                       "-framework",
+                                       Foundation,
+                                       "-framework",
+                                       AppKit,
+                               );
+                               PREBINDING = NO;
+                               PRODUCT_NAME = AFSBackgrounder;
+                               ZERO_LINK = NO;
+                       };
+                       name = Release;
+               };
                32CF013D0C203C4900A8DC58 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               3276592010204E08004CA418 /* Build configuration list for PBXNativeTarget "AFSBackgrounder" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               3276591E10204E08004CA418 /* Debug */,
+                               3276591F10204E08004CA418 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                32CF013C0C203C4900A8DC58 /* Build configuration list for PBXNativeTarget "Test" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (