In-App Purchase: Hosted Content cannot be unpacked if User is not Administrator

Originator:mc
Number:rdar://17299627 Date Originated:2014-06-13
Status:Open Resolved:
Product:OS X SDK Product Version:Xcode 5.1.1, OS 10.9.4
Classification:Serious Bug Reproducible:Always
 
In my Mac App on the Mac App Store (http://fflp.me), the user can buy new content (new characters) from the Store (Cmd B) by clicking on the price or "Restore" (or "Restore All" in the menu. After the usual confirmation dialogs, the download begins, by landing in 'paymentQueue:updatedDownloads:' with the state SKDownloadStateActive. All goes fine, until almost 100%, when (I'm guessing) the internals of StoreKit go and unpack that .pkg to deliver me it's content.

On a "normal" (Administrator) user, all goes fine and I land in SKDownloadStateFinished where I can install the content.

On a Guest user though (used by the Apple Review Team as well), this happens — before SKDownloadStateFinished:


storeagent[274]: *** Assertion failure in -[SoftwareInstallOperation _startInstall], /SourceCache/Pisa/Pisa-232.6/iTunes Protocol/Built Into App/SoftwareInstallOperation.m:509

storeagent[274]: error Error Domain=PKInstallErrorDomain Code=100 "The installation could not be started." UserInfo=0x7f9c9a4c0fa0 {NSLocalizedDescription=The installation could not be started., NSUnderlyingError=0x7f9c9a745e70 "Authorization is required to install the packages."}

storeagent[274]: underlyingError Error Domain=PKInstallErrorDomain Code=100 "Authorization is required to install the packages." UserInfo=0x7f9c9a745d40 {NSLocalizedDescription=Authorization is required to install the packages.}

storeagent[274]: localException [PKInstallClient initWithRequest:PKInstallRequest <1 packages, destination=/>] failed with Error Domain=PKInstallErrorDomain Code=100 "Authorization is required to install the packages." UserInfo=0x7f9c9a745d40 {NSLocalizedDescription=Authorization is required to install the packages.}

storeagent[274]: -[SSDownload source]: unrecognized selector sent to instance 0x7f9c9a665c70

storeagent[274]: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SSDownload source]: unrecognized selector sent to instance 0x7f9c9a665c70'
*** First throw call stack:
(
	0   CoreFoundation                      0x00007fff96fe725c __exceptionPreprocess + 172
	1   libobjc.A.dylib                     0x00007fff8d802e75 objc_exception_throw + 43
	2   CoreFoundation                      0x00007fff96fea12d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
	3   CoreFoundation                      0x00007fff96f453f2 ___forwarding___ + 1010
	4   CoreFoundation                      0x00007fff96f44f78 _CF_forwarding_prep_0 + 120
	5   storeagent                          0x000000010e00f3ea storeagent + 156650
	6   storeagent                          0x000000010e05b8a6 storeagent + 469158
	7   storeagent                          0x000000010e0a9507 storeagent + 787719
	8   storeagent                          0x000000010e014d5d storeagent + 179549
	9   storeagent                          0x000000010e012b57 storeagent + 170839
	10  CoreFoundation                      0x00007fff96ed2bec __invoking___ + 140
	11  CoreFoundation                      0x00007fff96ed2a54 -[NSInvocation invoke] + 308
	12  CoreFoundation                      0x00007fff96f755e6 -[NSInvocation invokeWithTarget:] + 54
	13  CommerceKit                         0x00007fff98493246 -[ISDelegateProxy sendInvocationToDelegate:] + 294
	14  Foundation                          0x00007fff95dab13e __NSThreadPerformPerform + 229
	15  CoreFoundation                      0x00007fff96f18731 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
	16  CoreFoundation                      0x00007fff96f09ea2 __CFRunLoopDoSources0 + 242
	17  CoreFoundation                      0x00007fff96f0962f __CFRunLoopRun + 831
	18  CoreFoundation                      0x00007fff96f090b5 CFRunLoopRunSpecific + 309
	19  CoreFoundation                      0x00007fff96fbe811 CFRunLoopRun + 97
	20  storeagent                          0x000000010e07db13 storeagent + 609043
	21  libdyld.dylib                       0x00007fff943e75fd start + 1
)

Fflp![313]: === __61-[CKClientDispatch _sendMessage:callbackQueue:callbackBlock:]_block_invoke_2: Got error (Connection invalid).
Fflp![313]: === __61-[CKClientDispatch _sendMessage:callbackQueue:callbackBlock:]_block_invoke_2: Got error (Connection invalid).
Fflp![313]: === __61-[CKClientDispatch _sendMessage:callbackQueue:callbackBlock:]_block_invoke_2: Got error (Connection invalid).
com.apple.launchd.peruser.201[172]: (com.apple.storeagent[274]) Job appears to have crashed: Abort trap: 6

—

2 Apple Engineers told me during WWDC that it's a know bug and the Review Team then approved the app. The problem is that I'm now sure that someone using a guest account will loose money for nothing, which makes me have to check the user is not a guest.

Comments

Apple claims it now works in Yosemite. I reply....

I'm super confused........ Where did the "Guest" Login go in Yosemite? I'm running Beta 6 (14A329f) and I deactivated FileVault and in the login screen there's no "Guest" — only me.


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!