Aprobación de la aplicación cocos2dx iOS aprobada

Así que estuve atrapado por un par de días en este problema extremadamente extraño y molesto. Así que tengo una aplicación que publiqué en la tienda de aplicaciones de ios y recientemente regresé y agregué algunas características adicionales a la aplicación. No toqué el núcleo de la aplicación, solo agregué cosas como Twitter, Facebook, en las compras de aplicaciones y google admob (para la versión gratuita que está basada en la versión completa). Entonces aquí es donde las cosas se vuelven raras. Probé mi actualización. Hice una versión adhoc y probé en mi iphone 3gs, 4s, ipad 2, sin problemas. Envié a Apple, aprobaron la actualización y se lanzó. Actualicé la aplicación y traté de ejecutarlo y el boom se bloquea justo después de la pantalla de inicio (de nuevo aquí no se cambió nada). Mi proyecto utiliza el marco cocos2dx (versión cocos2d-2.0-x-2.0.4 @ 02 de noviembre de 2012) y yo uso cocosbuilder (2.1). Miré el logging y parecía ser un problema de desalignment dentro de la function CCBReader :: readFloat (). Descubrí que había una solución a esto aquí: https://github.com/DarraghCoy/cocos2d-x/commit/34b31fd754778f815fcac108089e3fe015e2e2b9 .

Así que continué y modifiqué mi caso pnetworkingeterminado también de esto: float CCBReader :: readFloat () {unsigned char type = this-> readByte ();

switch (type) { case kCCBFloat0: return 0; case kCCBFloat1: return 1; case kCCBFloatMinus1: return -1; case kCCBFloat05: return 0.5f; case kCCBFloatInteger: return (float)this->readInt(true); default: { /* using a memcpy since the compiler isn't * doing the float ptr math correctly on device. * TODO still applies in C++ ? */ float * pF = (float*)(this->mBytes + this->mCurrentByte); float f = 0; memcpy( &f, pF, sizeof(float)); this->mCurrentByte += 4; return f; } } } 

A esto:

  float CCBReader::readFloat() { unsigned char type = this->readByte(); switch (type) { case kCCBFloat0: return 0; case kCCBFloat1: return 1; case kCCBFloatMinus1: return -1; case kCCBFloat05: return 0.5f; case kCCBFloatInteger: return (float)this->readInt(true); default: { /* using a memcpy since the compiler isn't * doing the float ptr math correctly on device. * TODO still applies in C++ ? */ float * pF = (float*)(this->mBytes + this->mCurrentByte); float f = 0; memcpy((void*) &f, (const void*) pF, sizeof(float)); this->mCurrentByte += sizeof(float); return f; } } } 

De nuevo probando una versión de compilation en dispositivos no isses. Presenté este arreglo a Apple y solicité una revisión acelerada para que la aplicación se ejecutara en lugar de estrellarse y obtuvo la aprobación de Apple dentro de 1 día y fue enviada. Actualizo al lanzamiento de la nueva versión y nuevamente se bloquea.

Aquí hay una copy del logging del locking:

 Incident Identifier: DCFEA2A4-9707-4FF7-A4B7-26CF61B4A73F CrashReporter Key: b91e2f134184158618753244f837ff2ac5114f0d Hardware Model: iPhone4,1 Process: GAMEAPP [848] Path: /var/mobile/Applications/F860F02C-3D16-4995-A19F-CE036200209F/GAMEAPP.app/GAMEAPP Identifier: GAMEAPP Version: ??? (???) Code Type: ARM (Native) Parent Process: launchd [1] Date/Time: 2013-03-01 19:42:44.987 -0500 OS Version: iOS 6.1.2 (10B146) Report Version: 104 Exception Type: EXC_BAD_ACCESS (SIGBUS) Exception Codes: EXC_ARM_DA_ALIGN at 0x1f0807c9 Crashed Thread: 0 Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 GAMEAPP 0x000f971c cocos2d::extension::CCBReader::readFloat() (CCBReader.cpp:422) 1 GAMEAPP 0x000f9e52 cocos2d::extension::CCBReader::readKeyframe(int) (CCBReader.cpp:648) 2 GAMEAPP 0x000f99ae cocos2d::extension::CCBReader::readNodeGraph(cocos2d::CCNode*) (CCBReader.cpp:509) 3 GAMEAPP 0x000f9c20 cocos2d::extension::CCBReader::readNodeGraph(cocos2d::CCNode*) (CCBReader.cpp:586) 4 GAMEAPP 0x000f9342 cocos2d::extension::CCBReader::readFileWithCleanUp(bool) (CCBReader.cpp:689) 5 GAMEAPP 0x000f92ec cocos2d::extension::CCBReader::readNodeGraphFromData(cocos2d::extension::CCData*, cocos2d::CCObject*, cocos2d::CCSize const&, cocos2d::extension::CCBAnimationManager**) (CCBReader.cpp:230) 6 GAMEAPP 0x000f91aa cocos2d::extension::CCBReader::readNodeGraphFromFile(char const*, cocos2d::CCObject*, cocos2d::CCSize const&, cocos2d::extension::CCBAnimationManager**) (CCBReader.cpp:213) 7 GAMEAPP 0x000f90a4 cocos2d::extension::CCBReader::readNodeGraphFromFile(char const*, cocos2d::CCObject*) (CCBReader.cpp:192) 8 GAMEAPP 0x00119b50 IntroScene::init() (IntroScene.cpp:55) 9 GAMEAPP 0x00119ca8 IntroScene::create() (IntroScene.h:19) 10 GAMEAPP 0x00119a7c IntroScene::scene() (IntroScene.cpp:22) 11 GAMEAPP 0x00110290 AppDelegate::applicationDidFinishLaunching() (AppDelegate.cpp:144) 12 GAMEAPP 0x000dab94 cocos2d::CCApplication::run() (CCApplication.mm:50) 13 GAMEAPP 0x000b6610 -[AppController application:didFinishLaunchingWithOptions:] (AppController.mm:76) 14 UIKit 0x36522ad4 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restreState:] + 248 15 UIKit 0x3652265e -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1186 16 UIKit 0x3651a846 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 694 17 UIKit 0x364c2c34 -[UIApplication handleEvent:withNewEvent:] + 1000 18 UIKit 0x364c26c8 -[UIApplication sendEvent:] + 68 19 UIKit 0x364c2116 _UIApplicationHandleEvent + 6150 20 GraphicsServices 0x381d85a0 _PurpleEventCallback + 588 21 GraphicsServices 0x381d81ce PurpleEventCallback + 30 22 CoreFoundation 0x3468f170 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32 23 CoreFoundation 0x3468f112 __CFRunLoopDoSource1 + 134 24 CoreFoundation 0x3468df94 __CFRunLoopRun + 1380 25 CoreFoundation 0x34600eb8 CFRunLoopRunSpecific + 352 26 CoreFoundation 0x34600d44 CFRunLoopRunInMode + 100 27 UIKit 0x36519480 -[UIApplication _run] + 664 28 UIKit 0x365162fc UIApplicationMain + 1116 29 GAMEAPP 0x000b6c22 main (main.m:14) 30 GAMEAPP 0x000b6344 start + 36 Thread 1: 0 libsystem_kernel.dylib 0x3c8d5d98 __workq_kernreturn + 8 1 libsystem_c.dylib 0x3c823cf6 _pthread_workq_return + 14 2 libsystem_c.dylib 0x3c823a12 _pthread_wqthread + 362 3 libsystem_c.dylib 0x3c8238a0 start_wqthread + 4 Thread 2 name: Dispatch queue: com.apple.libdispatch-manager Thread 2: 0 libsystem_kernel.dylib 0x3c8c5648 kevent64 + 24 1 libdispatch.dylib 0x3c7f5974 _dispatch_mgr_invoke + 792 2 libdispatch.dylib 0x3c7f5654 _dispatch_mgr_thread$VARIANT$mp + 32 Thread 3: 0 libsystem_kernel.dylib 0x3c8d5d98 __workq_kernreturn + 8 1 libsystem_c.dylib 0x3c823cf6 _pthread_workq_return + 14 2 libsystem_c.dylib 0x3c823a12 _pthread_wqthread + 362 3 libsystem_c.dylib 0x3c8238a0 start_wqthread + 4 Thread 4 name: WebThread Thread 4: 0 libsystem_kernel.dylib 0x3c8c4eb4 mach_msg_trap + 20 1 libsystem_kernel.dylib 0x3c8c5048 mach_msg + 36 2 CoreFoundation 0x3468f040 __CFRunLoopServiceMachPort + 124 3 CoreFoundation 0x3468dd9e __CFRunLoopRun + 878 4 CoreFoundation 0x34600eb8 CFRunLoopRunSpecific + 352 5 CoreFoundation 0x34600d44 CFRunLoopRunInMode + 100 6 WebCore 0x3a60a500 RunWebThread(void*) + 440 7 libsystem_c.dylib 0x3c82e30e _pthread_start + 306 8 libsystem_c.dylib 0x3c82e1d4 thread_start + 4 Thread 5 name: AURemoteIO::IOThread Thread 5: 0 libsystem_kernel.dylib 0x3c8c4eb4 mach_msg_trap + 20 1 libsystem_kernel.dylib 0x3c8c5048 mach_msg + 36 2 AudioToolbox 0x3418391c AURemoteIO::IOThread::Run() + 104 3 AudioToolbox 0x34185c84 AURemoteIO::IOThread::Entry(void*) + 4 4 AudioToolbox 0x340c3882 CAPThread::Entry(CAPThread*) + 294 5 libsystem_c.dylib 0x3c82e30e _pthread_start + 306 6 libsystem_c.dylib 0x3c82e1d4 thread_start + 4 Thread 0 crashed with ARM Thread State (32-bit): r0: 0x1ed49740 r1: 0x1f0807c9 r2: 0x000001cd r3: 0x000001c8 r4: 0x00000004 r5: 0x1ed49740 r6: 0x42480000 r7: 0x2fd4af48 r8: 0xffffffff r9: 0x000001c9 r10: 0x1ed49740 r11: 0x1ed4a8a0 ip: 0x000001c7 sp: 0x2fd4af48 lr: 0x000f9e57 pc: 0x000f971c cpsr: 0x00000030 Binary Images: 

Modificé las otras banderas del linker para include -lsqlite3.0 y -ObjC (originalmente era solo -lxml2 y -lz). Mi optimization de creación de versión es -Os (más rápido, más pequeño).

¿Alguien más tiene este problema? No tengo idea de cómo depurar esto, ya que no puedo repro. Por último, ¿cómo atesting la manzana la aplicación y luego se cuelga justo después de la pantalla de bienvenida? Si puedo adivinar cuándo funciona la aplicación funciona y tal vez se rompa cuando vaya, lanzó la aprobación de la aplicación de publicación de la etapa "Procesamiento para App Store" (no estoy seguro).

¡Gracias!

Mi primera reacción, basada en tus declaraciones hacia el final, es que el "error de actualización de la aplicación" que Apple afirmó haber resuelto aún no está completamente resuelto. El parche DRM que se agrega durante la actualización, de alguna manera bloquea las aplicaciones actualizadas inmediatamente al inicio. http://www.tuaw.com/2013/03/01/bug-in-latest-evernote-for-ios-update-causes-the-app-to-crash/ https://discussions.apple.com/ thread / 3389977? start = 0 & tstart = 0 http://www.pcworld.com/article/258827/updated_apps_crashing_heres_what_you_need_to_know.html

Ha habido muchas preguntas similares relacionadas con el error de actualización de la aplicación. Hay algunas mejores prácticas o soluciones, indocumentadas por Apple específicamente para evitar el error de actualización. No los echa un vistazo. Uno de ellos puede funcionar para usted, si no es algo específico de su aplicación.

La aplicación actualizada se bloquea en la aplicación iPhone de iPad se bloquea inmediatamente después de la actualización

Esta publicación sobre errores de EXC_BAD_ACCESS en CCBReader me ayudó con el mismo problema: http://www.cocos2d-x.org/boards/6/topics/18183

Resulta que estaba relacionado con la desalignment de la memory en CCBReader, que funcionará bien en el sim, pero se bloqueará en un dispositivo debido a su procesador ARM.

Conozco una solución. Edite el esquema para comstackr para Debug y no para Release y parece no explotar.

He tenido dos rechazos también. Truco: tuve una versión (GRATUITA) de la aplicación que pasa y la otra (PREMIUM) se bloquea. Perseguí esa diferencia y confirmé la diferencia.

CCBReader 2.0

El efecto secundario de Debug / Release posiblemente sea la optimization, como se mencionó @ LearnCocos2D.


Optimización de la solución:

  • Seleccione el objective.
  • Seleccione la pestaña Crear fases.
  • Expanda el elemento Comstackr orígenes. Debería enumerar todos los files comstackdos. Si nota que en la parte superior hay una segunda columna "Banderas del comstackdor".
  • Seleccione CCBReader.m
  • Haga doble clic en la columna Banderas del comstackdor
  • ingrese "-O0"

resolvió el problema para mí

Estaba como "¿WTF está haciendo CCB allí?" … de todos modos, pruebe con -O3 o ninguna optimization en absoluto. -Se sabe que causa problemas sutiles, especialmente con cocos2d. Hay una razón por la que -Os no es el nivel pnetworkingeterminado para cocos2d (y creo que también las templates Xcode).

Si esto soluciona el problema, puede establecer el nivel de optimization o deshabilitar las optimizaciones solo para este file o function usando una de las respuestas de esta pregunta .

está utilizando files ccbi para crear UI. Su juego se bloquea random debido a que no está configurando su variable de reference en nullptr en el método init de su class.

Por ejemplo, declaré Label * homeLabel; En el file intorScene.h, en el método init de file .cpp debe establecer esta variable en

homeLabel = nullptr;