In iOS 7, on the SKPaymentTransaction class, the property transactionReceipt:
// Only valid if state is SKPaymentTransactionStatePurchased.   @property(nonatomic, readonly) NSData *transactionReceipt …is deprecated. But, in my code, I created a InAppPurchase class, and in my method for controlling how is the method buying, I'm using the delegate method in my code and it's like:
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {  for (SKPaymentTransaction *transaction in transactions) {      switch (transaction.transactionState) {          case SKPaymentTransactionStatePurchasing:                         // code and bla bla bla                               [self initPurchase];                             NSLog(@"PASO 1");                        break;          case SKPaymentTransactionStatePurchased:                        // this is successfully purchased!                             purchased = TRUE;                             NSLog(@"PASO 2");                            [self isPurchased];                   NSLog(@"purchased %s", purchased? "true" : "false");                       //  and return the transaction data    if ([delegate respondsToSelector:@selector(successfulPurchase:restored:identifier:receipt:)])   [delegate successfulPurchase:self restored:NO identifier:transaction.payment.productIdentifier receipt:transaction.transactionReceipt];                       // and more code bla bla bla               break;          case SKPaymentTransactionStateRestored:                      // and more code bla bla bla                             [self restorePurchase];                           NSLog(@"PASO 3");              break;          case SKPaymentTransactionStateFailed:                      // and more code bla bla bla                              [self failedNotification];                            NSLog(@"PASO 4");              break;                      //------------------------------------------//                     //               THANKS GUYS                //                     //          GRETTINGS FROM BOLIVIA          //                     //             ROCK ON!!!! n_n'             //                     //------------------------------------------//      }    }   } 
You can get the receipt as the contents of the mainBundle's appStoreReceiptURL. You can find references: developer.apple.com
This is untested code, but off the top of my head, I'd say something along the lines of:
[NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]] should get you the same result that transactionReceipt used to return.
In case anyone maybe also confused about this problem (Maybe You also read an a little outdated tutorial like me...)
Please checkout WWDC 2014 Session 305 Preventing Unauthorized Purchases with Receipts. It covers both iOS & OS X, clear and comprehensive.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With