[launchd-dev] SMJobBless() fails to replace outdated version
James Foster
james.foster at gemtalksystems.com
Fri Jan 27 11:31:48 PST 2017
According to Damien Sorresso, BSD Engineering, Apple Inc. (see https://lists.macosforge.org/pipermail/launchd-dev/2010-October/000834.html), "ServiceManagement will check the CFBundleVersion of the tool and, if it's the same ..., will not overwrite it."
I've updated my code to show the CFBundleVersion of the tool both before and after a "successful" invocation of SMJobBless(). Is there anything I can do to get this to work?
2017-01-27 09:10... existing: <string>84</string>
2017-01-27 09:10... replacement: <string>E6</string>
2017-01-27 09:10... SMJobBless(com.GemTalk.GemStone.Helper,...) returned true...
2017-01-27 09:10... now found: <string>84</string>
> On Jan 25, 2017, at 4:48 PM, James Foster <james.foster at gemtalksystems.com> wrote:
>
> I am attempting to replace a helper tool. Most of the time if I increment the version (of my application and of the helper tool) then the new tool will be installed. Sometimes it won't be installed and I have to delete the old one manually. The problem seems to occur about every dozen versions or so, and once it happens the replacement will not occur even if I change the version numbers again.
>
> https://developer.apple.com/reference/servicemanagement/1431078-smjobbless?language=objc <https://developer.apple.com/reference/servicemanagement/1431078-smjobbless?language=objc> states "If the job is already installed, success is returned.”
>
> How does SMJobBless() determine that the job is already installed? What do I need to do, beyond creating an entirely new job name, to make it look different enough to replace?
>
> Following is my code and console output (from macOS 10.12.2).
>
> James Foster
>
>
> CODE:
>
> - (void)installHelperTool;
> {
> OSStatus status = AuthorizationCreate(...);
> // handle errors
>
> NSLog(@"existing: %@", [self system:@"/usr/bin/otool -P "
> "/Library/PrivilegedHelperTools/com.GemTalk.GemStone.Helper | "
> "grep -A 1 VersionString | tail -1"]);
> NSLog(@"replacement: %@", [self system:@"/usr/bin/otool -P "
> "GemStone.app/Contents/Library/LaunchServices/com.GemTalk.GemStone.Helper | "
> "grep -A 1 VersionString | tail -1"]);
> CFErrorRef cfError = nil;
> if (SMJobBless(kSMDomainSystemLaunchd, (__bridge CFStringRef)@kHelperIdentifier, authRef, &cfError)) {
> NSLog(@"SMJobBless(%s,...) returned true; attempting (%s).", kHelperIdentifier, kShortVersionString);
> NSLog(@"now found: %@", [self system:@"/usr/bin/otool -P "
> "/Library/PrivilegedHelperTools/com.GemTalk.GemStone.Helper | "
> "grep -A 1 VersionString | tail -1"]);
> } else {
> AppError(@"Helper tool installation failed: %@", [(__bridge NSError*) cfError localizedDescription]);
> }
> }
>
>
> CONSOLE:
>
> default 14:25:04.368568 -0800 authd Succeeded authorizing right 'com.apple.ServiceManagement.blesshelper' by client '/Users/jfoster/Library/Developer/Xcode/DerivedData/GemStone-akfvfyaoddyaavgbcxnrdhnovoal/Build/Products/Debug/GemStone.app' [5626] for authorization created by '/Users/jfoster/Library/Developer/Xcode/DerivedData/GemStone-akfvfyaoddyaavgbcxnrdhnovoal/Build/Products/Debug/GemStone.app' [5626] (13,0)
> default 14:25:04.889238 -0800 kernel AMFI: allowing exception handler for 'GemStone' (5626) because the process is not restricted.
> default 14:25:04.385444 -0800 GemStone existing: <string>1.3.3.9</string>
> default 14:25:04.900905 -0800 kernel AMFI: allowing exception handler for 'GemStone' (5626) because the process is not restricted.
> default 14:25:04.397113 -0800 GemStone replacement: <string>1.4.0</string>
> default 14:25:04.398426 -0800 authd Succeeded authorizing right 'com.apple.ServiceManagement.blesshelper' by client '/usr/libexec/smd' [251] for authorization created by '/Users/jfoster/Library/Developer/Xcode/DerivedData/GemStone-akfvfyaoddyaavgbcxnrdhnovoal/Build/Products/Debug/GemStone.app' [5626] (3,0)
> default 14:25:04.408694 -0800 GemStone SMJobBless(com.GemTalk.GemStone.Helper,...) returned true; attempting (1.4.0).
> default 14:25:04.923798 -0800 kernel AMFI: allowing exception handler for 'GemStone' (5626) because the process is not restricted.
> default 14:25:04.419988 -0800 GemStone now found: <string>1.3.3.9</string>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/launchd-dev/attachments/20170127/696f261d/attachment.html>
More information about the launchd-dev
mailing list