-
Notifications
You must be signed in to change notification settings - Fork 17k
Description
Preflight Checklist
- I have read the Contributing Guidelines for this project.
- I agree to follow the Code of Conduct that this project adheres to.
- I have searched the issue tracker for a bug report that matches the one I want to file, without success.
Electron Version
41.0.0
What operating system(s) are you using?
macOS
Operating System Version
MacOS all
What arch are you using?
arm64 (including Apple Silicon)
Last Known Working Electron version
40.4.1
Does the issue also appear in Chromium / Google Chrome?
No
Expected Behavior
Apps should be able to update using Squirrel.Mac without issue.
Actual Behavior
Currently, our signed app is failing to update with the following errors:
Detected this as an install request
ERROR: Unrecognized attribute string flag '?' in attribute string "T@"NSString",?,R,C" for property debugDescription
ERROR: Unrecognized attribute string flag '?' in attribute string "T@"NSString",?,R,C" for property debugDescription
Installation error: Error Domain=SQRLShipItRequestErrorDomain Code=2 "Could not read update request" UserInfo={NSLocalizedDescription=Could not read update request, NSUnderlyingError=0x60000174aac0 {Error Domain=SQRLShipItRequestErrorDomain Code=1 "Missing required value" UserInfo={NSLocalizedDescription=Missing required value, NSLocalizedRecoverySuggestion="targetBundleURL" must not be set to nil.}}}
ShipIt quitting
Testcase Gist URL
No response
Additional Information
Ref #38437, which I think contains the breaking change.
My current theory is that the Mantle roll from 78d3966 → 2a8e212 changes how we're handling deserialization, and also pulled in a new bug here (Mantle/Mantle#899) - shout out to @CliftonH for the find!
One or both of the following are what I'm looking into:
+propertyKeysbehavior changed: The old Mantle included all properties except readonly ones. The new Mantle delegates to+storageBehaviorForPropertyWithKey:, which addsinstancesRespondToSelector:checks and recursive superclass lookups that can change which properties are included/excluded for Squirrel's SQRLShipItRequest.NSCodingdecode changed:-decodeValueForKey:withCoder:modelVersion:switched from NSInvocation-based dispatch to direct IMP calling, which could cause issues if method signatures don't match exactly.
The result is that targetBundleURL deserializes as nil, which is a required field, causing ShipIt to reject the update request and exit.
This was discovered while testing an Electron 40 → 41 upgrade. We currently don't test the updater with code-signed binaries, which is likely why this wasn't caught sooner.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status