ObjC Contracción ARC (colisión de ruido)

Siempre dude en agregar una nueva pregunta a los foros asesinos aquí, pero no he visto nada parecido a este error.

Parece que el clang se ha estrellado mientras compilo uno de mis files .m. Si alguien ha visto o sabe alguna solución para el siguiente, estaría inmensamente obligado.

Este error ocurre cuando compilo para armv6 en una configuration de lanzamiento usando XCode 4.4.1

Pero no ocurre cuando compilo para armv6 en una configuration de debugging , o libero para armv7, armv7s o i386.

El error específico es "ObjC ARC contraction":

1. <eof> parser at end of file 2. Code generation 3. Running pass 'Function Pass Manager' on module '/Users/Me/Documents/ThisProject/iOS/..../ClassFoo.m'. 4. Running pass 'ObjC ARC contraction' on function '@"\01-[ClassFoo evalJS:]"' clang: error: unable to execute command: Segmentation fault: 11 clang: error: clang frontend command failed due to signal (use -v to see invocation) clang: note: diagnostic msg: Please submit a bug report to http://developer.apple.com/bugreporter/ and include command line arguments and all diagnostic information. 

En la carpeta ../Intermediaries/Project.build/armv6/, veo:

  ClassFoo.dia 

y debería ver (como todos los files que lo rodean)

  ClassFoo.d ClassFoo.dia ClassFoo.o 

Aquí están los 4 primeros de la stack de clang, en caso de que alguien reconozca algo en ella:

  0 clang 0x00000001010536f2 main + 17107682 1 clang 0x0000000101053b79 main + 17108841 2 libsystem_c.dylib 0x00007fff93c428ea _sigtramp + 26 3 libsystem_c.dylib 0x00007fff93c7a54e tiny_malloc_from_free_list + 1078 

editar: También me di count cuando intenté de nuevo hace poco que recibo quejas sobre el indicador -fno-objc-arc, ¿quizás el comstackdor sym-links apunta a los binarys incorrectos?

Gracias por adelantado,

Millas

Gracias por todo su interés, y lamento tener que responder esta pregunta por mí mismo, pero ninguna otra solución que haya intentado ha resultado exitoso. He hecho mi mejor esfuerzo para documentar mi aventura aquí como un guía de cómo ayudar con suerte a algunos otros.

La versión corta:

  1. Xcode 4.5+ no es compatible con building to armv6 (iphone 3g).
  2. Con nuevas instalaciones de 4.5 y 4.4.1 experimenté varias versiones del error original.
  3. El motivo es doble:

    • Los files xcspec que utiliza Xcode no incluyen inputs para esta architecture.
    • 4 files libclang_rt * .a necesarios han sido despojados de sus rebanadas armv6.
  4. ¡Hay una solución! (ver la versión larga a continuación)

La versión larga:

Entre los muchos bashs frustrantes que hice para solucionar este problema, como search foros SO, search en los foros de Apple dev, search en Google, jugar sin parar con la configuration del proyecto, copyr SDK anteriores en los packages Xcode.app, publicar esta pregunta, archivar un error informe con Apple, etc. ad infinitum <- significa, "y así en el infinito" cada uno parecía no tener nada pertinente para revelar o solo un pequeño pedacito de información.

La receta de esta solución finalmente llevó a un desarrollador frustrado y decidido y la culminación de todo en una noche muy larga.

Entonces, ¿dónde está el cómo?

(Justo aquí, hermano)

Hay cerca de 12 pasos, ¡así que no olvides los últimos debajo de las imágenes!

Descargo de responsabilidad: esta es mi propia solución y funciona muy bien para mí, pero si no está seguro de lo que está sucediendo o lo que está haciendo, tenga mucho cuidado y se dé count de que no asumiré ninguna responsabilidad por los daños que pueda sufrir tratando de seguir estos pasos Dicho esto, ¡aquí tienes!

  1. Si aún no tiene una copy, descargue Xcode 4.4.1 desde http://connect.apple.com
  2. Extraer /PATH_TO_YOUR_Xcode_4.4.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk
  3. /PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/ en /PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
  4. Ahora .xcspec 4 files Xcode .xcspec en tu Xcode 4.5:

    • Navegue aquí: /PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications
    • Seleccione estos files:

      • iPhoneXcode4Options.xcspec
      • iPhoneOSArchitectures.xcspec
      • iPhoneCompilerOptions.xcspec
      • iPhoneClangOptions.xcspec
    • Haga clic derecho y select "Abrir con Xcode"

  5. Repite para Xcode 4.4.1 y pega las dos windows una al lado de la otra (solo hace esto más fácil).
  6. Agregarás armv6 a varias inputs de la siguiente manera: iPhoneClangOptions.xcspec

  7. Aqui otra vez: iPhoneCompilerOptions.xcspec

  8. Y aquí: iPhoneXcode4Options.xcspec

  9. Aquí, corta y pega una input de Xcode 4.4.1 a Xcode 4.5: iPhoneOSArchitectures.xcspec

  10. Muy bien, completaste ese tedioso, ¡ay! Guarde los files editados y ciérrelos todos. A continuación, debe crear nuevos files libclang_rt*.a para manejar la compilation de estos arcos. Este paso se hace más fácilmente en Terminal. Ingrese estos commands:

¡Asegúrese de copyr las copys de security y no hay ningún error en las routes o tipeo!

  cd /PATH_TO_YOUR_Xcode_4.4.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.2/lib/darwin sudo mkdir armv6_extractions lipo -extract armv6 -output armv6_extractions/libclang_rt.ios.armv6.a libclang_rt.ios.a lipo -extract armv6 -output armv6_extractions/libclang_rt.profile_ios.armv6.a libclang_rt.profile_ios.a lipo -extract armv6 -output armv6_extractions/libclang_rt.cc_kext.armv6.a libclang_rt.cc_kext.a sudo cp -R armv6_extractions /PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.2/lib/darwin cd /PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.2/lib/darwin sudo mkdir originals sudo cp libclang_rt.ios.a originals/ sudo cp libclang_rt.cc_kext_ios5.a originals/ sudo cp libclang_rt.profile_ios.a originals/ lipo -create -output libclang_rt.ios.a armv6_extractions/libclang_rt.ios.armv6.a originals/libclang_rt.ios.a lipo -create -output libclang_rt.cc_kext_ios5.a armv6_extractions/libclang_rt.cc_kext.armv6.a originals/libclang_rt.cc_kext_ios5.a lipo -create -output libclang_rt.profile_ios.a armv6_extractions/libclang_rt.cc_kext.armv6.a originals/libclang_rt.profile_ios.a 
  1. Reiniciar Xcode 4.5

    ^ … Escribí "11" aquí … ¿por qué aparece como "1"?

  2. Abra su proyecto y edite su configuration en consecuencia. Te recomiendo que crees una configuration separada solo para build en armv6, y lipo todo juntos cuando hayas terminado.

    • Agregue armv6 a Valid Architectures
    • Agregar armv6 a Architectures
    • Para su configuration específica de armv6, configure Base SDK para iOS 5.x (lo que ahora está listdo en el menu desplegable)
    • Establezca su objective de implementación según sea necesario (he construido tan bajo como iOS4.1 hasta ahora y creo que el sdk de iOS5.x que instaló al principio puede desplegar tan bajo como 4.x)

De acuerdo, creo que eso es todo.

Si alguien ve alguna edición que deba hacerse, POR FAVOR hágalo, y doy la bienvenida a cualquier comentario que alguien tenga que dar aquí.

Si algo sale mal, con los dedos cruzados , siempre puedes reinstalar tu Xcode e intentarlo de nuevo (o no).

La mejor de las suertes.

He tenido este problema antes … ¿inicializaste tu .m más de una vez? o importarlo? la única vez que me ocurrió este problema fue cuando intenté inicializar o importar un file .m en otro lugar que no sea su entorno nativo.

Un comstackdor no debe fallar. Si lo hace, entonces el vendedor necesita solucionarlo. Desafortunadamente, no creo que puedas get ninguna respuesta útil a través de un radar de Apple porque han avanzado: hay una versión más nueva de Clang en Xcode 4.5 y ya no son compatibles con armv6.

Dicho esto, debe abrir un Incidente de Soporte Técnico, ya que es probable que puedan proporcionarle una solución.

El post de error indica un error interno en el comstackdor mientras se procesa la function @ "\ 01- [ClassFoo evalJS:]". Es posible que pueda evitar el error al reorganizar el código en esa function y / o agregar variables volátiles a las variables locales en esa function.