[launchd-dev] SMJobBless() fails to replace outdated version
Damien Sorresso
dsorresso at apple.com
Fri Jan 27 15:17:50 PST 2017
Glad it's working!
-damien
> On 27 Jan, 2017, at 15:14, James Foster <james.foster at gemtalksystems.com> wrote:
>
> Hi Damien,
>
> Thanks very much. That seems to have done it!
>
> Some time ago I copied one of the many scripts out there that provides for auto-incrementing the build, and it defaulted to hex. I’ve switched to decimal and that works.
>
> James Foster
>
>
>> On Jan 27, 2017, at 12:09 PM, Damien Sorresso <dsorresso at apple.com <mailto:dsorresso at apple.com>> wrote:
>>
>> Hi James,
>>
>> "E6" is not a valid CFBundleVersion. CFBundleVersions are very specifically tuples consisting solely of three numeric elements as proscribed in
>>
>> https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102364 <https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102364>
>>
>> The daemon which backs SMJobBless() is strict in this regard. Because the version was invalid, it assumed a version of "0.0.0", and chose not to perform the update.
>> -damien
>>
>>> On 27 Jan, 2017, at 11:31, James Foster <james.foster at gemtalksystems.com <mailto:james.foster at gemtalksystems.com>> wrote:
>>>
>>> According to Damien Sorresso, BSD Engineering, Apple Inc. (see https://lists.macosforge.org/pipermail/launchd-dev/2010-October/000834.html <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 <mailto: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>
>>>>
>>>
>>> _______________________________________________
>>> launchd-dev mailing list
>>> launchd-dev at lists.macosforge.org <mailto:launchd-dev at lists.macosforge.org>
>>> https://lists.macosforge.org/mailman/listinfo/launchd-dev <https://lists.macosforge.org/mailman/listinfo/launchd-dev>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/launchd-dev/attachments/20170127/d32157ef/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3327 bytes
Desc: not available
URL: <https://lists.macosforge.org/pipermail/launchd-dev/attachments/20170127/d32157ef/attachment-0001.p7s>
More information about the launchd-dev
mailing list