¿Problemas para obtener la versión original de la aplicación que instaló el usuario (validación de recibo)?

Tengo una aplicación que actualicé recientemente para trabajar en compras de aplicaciones. La versión anterior (paga pero sin compras en la aplicación) era 1.0 y la versión actual es 1.1.

Como la compra en la aplicación esencialmente desbloquea todas las funciones (que se incluyeron en la versión paga 1.0), quería una forma de que los usuarios que originalmente descargaron la versión 1.0 se actualicen si presionaron el botón de restaurar compras.

Para hacer esto, primero trato de restaurar las compras y si la respuesta a:

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue

Si esto me proporciona una cola con un recuento de transacciones de 0, verifico el recibo para ver si la versión original instalada fue 1.0.

El código para obtener el recibo es según la documentación de Apple

- (void)tryRestoreFromOriginalPurchase
{
    // Load the receipt from the app bundle
    NSError *error;
    NSData  *receipt = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];

    if (receipt == nil) {
        [self restoreFromOriginalVersionWithReceipt:nil];
        return;
    }

    // Create the JSON object that describes the request
    NSDictionary *requestContents = @{@"receipt-data": [receipt base64EncodedStringWithOptions:0]};
    NSData       *requestData     = [NSJSONSerialization dataWithJSONObject:requestContents options:0 error:&error];

    if (!requestData) {
        [self restoreFromOriginalVersionWithReceipt:nil];
        return;
    }

    // Create a POST request with the receipt data
    NSURL *storeURL = [NSURL URLWithString:@"https://buy.itunes.apple.com/verifyReceipt"];
    NSMutableURLRequest *storeRequest = [NSMutableURLRequest requestWithURL:storeURL];

    [storeRequest setHTTPMethod:@"POST"];
    [storeRequest setHTTPBody:requestData];

    // Make a connection to the iTunes Store on a background queue
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    [NSURLConnection sendAsynchronousRequest:storeRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (!connectionError) {
            NSError      *error;
            NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];

            if (jsonResponse) [self restoreFromOriginalVersionWithReceipt:jsonResponse];
            else              [self restoreFromOriginalVersionWithReceipt:nil];
        } else {
            [self restoreFromOriginalVersionWithReceipt:nil];
        }
    }];
}

Esto luego llama al siguiente método:

- (void)restoreFromOriginalVersionWithReceipt:(NSDictionary *)receipt
{
    if (receipt == nil) {
        // CALL METHOD TO HANDLE FAILED RESTORE
    } else {
        NSInteger status = [[receipt valueForKey:@"status"] integerValue];

        if (status == 0) {
            NSString *originalApplicationVersion = [[receipt valueForKey:@"receipt"] valueForKey:@"original_application_version"];

            if (originalApplicationVersion != nil && [originalApplicationVersion isEqualToString:@"1.0"]) {
                // CALL METHOD TO HANDLE SUCCESSFUL RESTORE
            } else {
                // CALL METHOD TO HANDLE FAILED RESTORE
            }
        } else {
            // CALL METHOD TO HANDLE FAILED RESTORE
        }
    }
}

Ahora esto no funciona. Cuando alguien instala la versión 1.1 y toca la restauración de compras, se restaura con éxito cuando no debería.

Me acabo de dar cuenta de que en mi Info.plist, mi CFBundleShortVersionString es 1.1 pero mi CFBundleVersion es 1.0.

Esta puede ser una pregunta realmente tonta, pero ¿el recibo proporciona una versión de aplicación original de 1.0 (debido a la versión incorrecta de CFBundleVersion) a pesar de que la actualización tiene la versión 1.1?

Entonces, si publico una nueva actualización con esto corregido para decir la versión 1.2 (tanto para CFBundleShortVersionString como para CFBundleVersion), ¿se resolverá el problema?

- ACTUALIZACIÓN -

Así que acabo de subir una nueva versión a la tienda de aplicaciones con CGBundleVersion y CFBundleShortVersionString igual a 1.2. Sin embargo, sigo enfrentando el mismo problema: los usuarios que descargan la versión 1.2 por primera vez y hacen clic en restaurar compras se actualizan de forma gratuita (debido a la verificación de recibos descrita anteriormente). Parece que original_application_version siempre llega a 1.0.

Nota: estoy descargando la aplicación con una nueva cuenta de iTunes que no la ha descargado previamente.

Aquí está el recibo que tengo si instalo desde la tienda de aplicaciones y luego trato de obtener el recibo a través de Xcode

2014-08-27 08:46:42.858 AppName[4138:1803] {
    environment = Production;
    receipt =     {
        "adam_id" = AppID;
        "application_version" = "1.0";
        "bundle_id" = "com.CompanyName.AppName";
        "download_id" = 94004873536255;
        "in_app" =         (
        );
        "original_application_version" = "1.0";
        "original_purchase_date" = "2014-08-26 22:30:49 Etc/GMT";
        "original_purchase_date_ms" = 1409092249000;
        "original_purchase_date_pst" = "2014-08-26 15:30:49 America/Los_Angeles";
        "receipt_type" = Production;
        "request_date" = "2014-08-26 22:46:42 Etc/GMT";
        "request_date_ms" = 1409093202544;
        "request_date_pst" = "2014-08-26 15:46:42 America/Los_Angeles";
    };
    status = 0;
}

¿Alguna idea?