I have implemented receipt validation locally on the device using OpenSSL and the asn1c compiler with help from Apple\'s Receipt Validation Programming Guide. My app only suppor
Dialog for enter user's psw is shown if the receipt is invalid or does not exist.
So RATHER then ask for psw at the beginning if receipt does not exist (for user is confusing bcs he just launch the app and it asks for no reason) PROVIDE Restore btn which you have to provide ANYWAY and w8 till you get receipt which you can reasonably varify.
So put your refresh code into if statement:
if([[NSFileManager defaultManager] fileExistsAtPath:[[[NSBundle mainBundle] appStoreReceiptURL] path]] == YES) {
self.receiptRefreshRequest = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:nil];
self.receiptRefreshRequest.delegate = self;
[self.receiptRefreshRequest start];
}