Monday, 15 August 2011

Mac App Store mysteriously not updating…

recently, the App Store suddenly stopped letting me update existing apps to a newer version, and stopped allowing me to install any new software whatsoever. no crash was occurring, and the program wouldn’t hang, but a progress spinner would appear in the title bar and simply stay there.

switching away from the Updates section would make the spinner go away, so apparently nothing was really happening. after a lot of messing around, including clearing out caches and preferences, and even contacting the (ultimately unhelpful) Apple support, I finally poked around in Console and saw some logged messages:

2011-08-12 17:02:27.839 App Store: ### Error trying to unarchive data. *** file inconsistency: read 'q', expecting 'i'
2011-08-12 17:02:29.504 App Store: ### Error trying to unarchive data. *** file inconsistency: read 'q', expecting 'i'
2011-08-12 17:02:32.287 App Store: *** file inconsistency: read 'q', expecting 'i'
2011-08-12 17:02:32.289 App Store: (
	0   CoreFoundation      0x9210ee77 __raiseError + 231
	1   libobjc.A.dylib     0x92d54149 objc_exception_throw + 155
	2   CoreFoundation      0x92076e89 +[NSException raise:format:arguments:] + 137
	3   CoreFoundation      0x92076df9 +[NSException raise:format:] + 57
	4   Foundation          0x959f14f8 checkExpected + 294
	5   Foundation          0x959f2004 -[NSUnarchiver decodeValueOfObjCType:at:] + 55
	6   CommerceKit         0x0009d377 -[ISAccount initWithCoder:] + 635
	7   Foundation          0x959f1635 _decodeObject_old + 309
	8   Foundation          0x959f24cd _decodeValueOfObjCType + 1125
	9   Foundation          0x959f2013 -[NSUnarchiver decodeValueOfObjCType:at:] + 70
	10  Foundation          0x959f1ca8 -[NSArray(NSArray) initWithCoder:] + 382
	11  Foundation          0x959f1635 _decodeObject_old + 309
	12  Foundation          0x959f09fd +[NSUnarchiver unarchiveObjectWithData:] + 89
	13  CommerceKit         0x00072963 SSGetUnarchivedValueForKey + 122
	14  CommerceKit         0x0009f99d -[ISAccountStore _accountsChangedNotification:] + 56
	15  Foundation          0x959f8470 __-[NSDistributedNotificationCenter addObserver:selector:name:object:suspensionBehavior:]_block_invoke_1 + 49
	16  CoreFoundation      0x920599c0 ____CFXNotificationPostToken_block_invoke_1 + 352
	17  CoreFoundation      0x92027830 __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 16
	18  CoreFoundation      0x91fdacb1 __CFRunLoopDoBlocks + 337
	19  CoreFoundation      0x920059c8 __CFRunLoopRun + 1096
	20  CoreFoundation      0x920051ec CFRunLoopRunSpecific + 332
	21  CoreFoundation      0x92005098 CFRunLoopRunInMode + 120
	22  HIToolbox           0x9086b487 RunCurrentEventLoopInMode + 318
	23  HIToolbox           0x90872cee ReceiveNextEventCommon + 168
	24  HIToolbox           0x90872c32 BlockUntilNextEventMatchingListInMode + 88
	25  AppKit              0x97da08ec _DPSNextEvent + 678
	26  AppKit              0x97da0159 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 113
	27  AppKit              0x97d9c4cb -[NSApplication run] + 904
	28  AppKit              0x9802fb54 NSApplicationMain + 1054
	29  App Store           0x000215d1 App Store + 5585
)

a little research on the file inconsistency error message, and confirmed by the stack trace, showed that the message was coming from NSUnarchiver, and was usually related to a 64-bit app trying to unpack 32-bit data, or something along those lines anyway.

it is at that point that I realised I had used XSlimmer on the Mac recently, and, while everything else had been fine, I must have stripped the 32-bit code from the App Store. restoring from backup made everything work again. I reported the problem to the XSlimmer blacklist, so hopefully this won’t affect many other people.

but I suppose the moral of the story is either that you shouldn’t waste time screwing around with “efficiency” apps, or that you should actually look at the logs once in a while when you have a problem!

2 comments:

  1. Thanks for the tip.
    It has helped in my case also.

    I didn't use slimmer, but to save RAM I selected "Run in 32-bit mode" on App Store info page. And all the symptoms were the same as yours.

    ReplyDelete
  2. I had the same problem. After reading you article, I was able to solve this by also stripping the 32 bit code from the storeagent

    sudo cp /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storeagent /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storeagent.full
    sudo ditto --arch i386 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storeagent /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storeagent.i386
    sudo mv /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storeagent.i386 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storeagent

    ReplyDelete