39 votos

Mac App Store De Recibo Código De Validación?

Pregunto si alguien tiene un tutorial o código de trabajo para la nueva Mac App Store de validación de recepción? Sobre las referencias sólo he sido capaz de encontrar hasta ahora son de Apple estelar de la documentación sobre el tema y un proyecto de código abierto que compila, pero no tiene una gran cantidad de comentarios en línea por lo que es difícil de entender a menos que usted es un cripto genio.

Apple docs para registrar a los desarrolladores sólo:

https://developer.apple.com/devcenter/mac/documents/validating.html

Roddi del ValidateStoreReceipt (se ve prometedor, pero escasamente documentado):

https://github.com/roddi/ValidateStoreReceipt

También se preguntan por qué Apple no solo proporcione el código de trabajo para la validación?

Cualquier otra buenas referencias por ahí?

-Rei

29voto

Laurent Etiemble Puntos 17360

Es difícil proporcionar una solución genérica para la Mac App Store la validación de recepción, principalmente porque este es un muy sensibles a la pieza de código que debe ser difícil de derivación (cf. La documentación de Apple).

Estos GitHub proyectos son muy buenos puntos de partida para aprender acerca de qué pasos se deben realizar en la validación de recepción:

Una vez que usted ha entendido lo que se debe hacer, aquí hay algunos consejos:

  • No utilice Objective-C las clases o métodos. Objective-C lleva un montón de metadatos, y su naturaleza dinámica expone a tiempo de ejecución de la inyección.
  • Sólo el uso de la función de C de llamadas. Incluso si usted necesita más líneas de código con el CoreFoundation marco, perfectamente puede hacer lo que la Fundación marco puede hacer (NSString, NSArray, NSDictionary, ...).
  • No vincular dinámicamente con el OpenSSL biblioteca como ha quedado obsoleto en Mac OS X Lion. Si quieres ir con OpenSSL, enlazar estáticamente para asegurarse de tener la última versión.
  • Uso de las funciones del sistema de criptografía. Mac OS X incluye con funciones equivalentes, desde 10.5. Por ejemplo, para calcular un hash SHA-1, puede utilizar el CC_SHA1 función.
  • No poner las cadenas en texto plano en el código. Las codifican o cifrar. Si no lo hace, puedes dar una pista acerca de la ubicación de su código.
  • No utilice las constantes numéricas en el código. Calcular en tiempo de ejecución, con unas sencillas operaciones (+, -, / o *). De nuevo, si usted no lo hace, puedes dar una pista acerca de la ubicación de su código.
  • Evitar sencillas pruebas para la validación mediante la incorporación de las pruebas y la llamada a la NSApplicationMain en un complejo bucle.
  • Evite llamar a NSApplicationMain directamente. El uso de un puntero a función para ocultar la invocación. Si no lo hace, puedes dar una pista acerca de la ubicación de su código.
  • Para cada versión de la aplicación, modificar ligeramente el código de validación de lo que nunca es el mismo.

Recuerde que la recepción de validación es necesario y no es simple como parece. Se puede consumir una gran cantidad de tiempo que se puede gastar mejor en su aplicación.

Así que le sugiero que eche un vistazo a esta aplicación: Receigen (Descargo de responsabilidad: yo soy el desarrollador de esta aplicación).

6voto

snibbe Puntos 1194

Con el fin de validar contra la real después de la recepción de las pruebas, cambie esta línea de código en su principal.m archivo:

if (!validateReceiptAtPath(@"~/Desktop/receipt"))

a

#ifdef USE_SAMPLE_RECEIPT   // defined for debug version
    NSString *pathToReceipt = @"~/Desktop/receipt";
#else
    NSString *pathToReceipt = [[[NSBundle mainBundle] bundlePath]
        stringByAppendingPathComponent:@"Contents/_MASReceipt/receipt"];
#endif  
    if (!validateReceiptAtPath(pathToReceipt))
        exit(173); //receipt did not validate

y en su configuración de compilador, "Otros C Banderas" para su Configuración de Depuración debe incluir -DUSE_SAMPLE_RECEIPT

cortesía http://jesusagora.org/groups/futurebasic/0::53562:get:1read.html

5voto

koregan Puntos 6156

Asegúrese de que usted está validando un recibo para su aplicación. Fácil de hacer todas las crypto y verificación de firmas para el mal de la recepción.

Ver http://pastebin.com/1eWf9LCg donde se ve como Angry Birds se perdió este bits y los dejó abiertos a la gente que aparezca en el recibo de compra de una aplicación gratuita.

Alan Quatermain también tiene un código para hacer esto en github. https://github.com/AlanQuatermain/mac-app-store-validation-sample

No debe usarse como está para evitar la eliminación automatizada.

3voto

C0C0AL0C0 Puntos 107

He revisado Alan Quartermain del código y se ve bien. Algo para pensar:

el último parámetro de aquí podría/debería ser un compilado requisito que indica que el código debe ser firmada por el certificado y no la de nadie más.

Cuando el desarrollador presenta una aplicación a la tienda para su aprobación, los certificados de firma son como sigue:

3rd Party Mac Developer Application: me
Apple Worldwide Developer Relations Certification Authority
Apple Root CA

Después de que la aplicación se entrega desde la Tienda de aplicaciones para el usuario final, los certificados de firma son como sigue:

Apple Mac OS Application Signing
Apple Worldwide Developer Relations Certification Authority
Apple Root CA

También, sugiero que la única salida(173) cuando la recepción es falta, pero todo lo demás está en orden.

3voto

indragie Puntos 9847

Usted podría tratar de NPReceiptVerification. Es la forma más sencilla de agregar la recepción de verificación para su aplicación. Usted acaba de agregar los archivos de clase para su proyecto, establecer la versión y el identificador del paquete, y todo lo demás se maneja automáticamente.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X