Xcode 8 - Designables IB - Error al procesar y actualizar el estado del diseño automático, el agente se bloqueó

167

Recientemente me actualicé a Xcode 8 y tengo problemas con el Storyboard.

Si abro el proyecto y no tengo el Storyboard abierto, se compilará y funcionará bien. Una vez que abro el Storyboard, recibo múltiples errores sobre los Designables de IB como se muestra a continuación.

ingrese la descripción de la imagen aquí

Estas vistas son las únicas vistas que usan vistas personalizadas TextFieldEffectsy BEMCheckboxque importé usando Cocoapods.

Alan
fuente
¿Quizás verifique el repositorio del Pod que está utilizando y vea si este problema es frecuente entre otros usuarios?
Zolnoor
¿Alguna respuesta relevante a esto?
Mohsin Khubaib Ahmed
1
¿Encontraron alguna solución?
sumergido el
Cuidado, el problema puede ser NECESITAS UNA CREACIÓN DE GRASA para una biblioteca incrustada . en mi ejemplo tenía Swifter incrustado. Naturalmente, tiene a mano una compilación gorda (para desarrollo - simulador / teléfono) y una compilación solo para teléfono (para tienda de aplicaciones, solo teléfono) y simplemente cambia a la única para teléfono cuando sea necesario para enviar a TestFlight, etc. Todavía tenía la biblioteca solo para teléfonos en el proyecto !!!!! Doh! Cambiar a la grasa "correcta" en solucionó el problema.
Fattie

Respuestas:

179

Puede probar uno de los siguientes para descubrir la causa:

  1. busque los IBDesignablesAgentCocoaTouchregistros en este directorio: ~/Library/Logs/DiagnosticReportsy vea la causa.

Nota: para usuarios con Catalina: busque IBDesignablesAgent-iOS_<DATE>-<MAC_NAME>.crash

  1. Vaya al Editor -> Depurar vista seleccionada mientras selecciona su @IBDesignable UIViewen su guión gráfico y vea el seguimiento de la pila.

  2. Eliminar la carpeta Derivar datos.

    Xcode Preference -> Location -> Derived Data
    /Users/YourMacName/Library/Developer/Xcode/DerivedData
    
  3. Limpia tu proyecto Shift + Command + Alt + K .

  4. Construye tu proyecto Command + B .

Maria
fuente
35
Usando este enfoque pude descubrir que la razón era Fatal error: Use of unimplemented initializer 'init(frame:)' for class 'TestIBKit.Button'. No sabía que ese IBDesignablesAgentCocoaTouchproceso llama init(frame:), en lugar de init?(coder aDecoder:).
Yevhen Dubinin
55
@YevhenDubinin Gracias, esto me ayudó. Todo estuvo bien después de que lo implementé init(frame:)en mi subclase
UIButton
2
Esto solucionó mi problema, pero tuve que abandonar xCode antes de eliminar los datos derivados
Husam,
2
la mejor respuesta init (frame :) es un problema común
Michał Ziobro
1
Salga de xcode y borre DerivedData. Se resolvió el problema.
Mubashar
80

Resolví el problema haciendo lo siguiente:

  1. Ir a File > Workspace settings.
  2. Haga clic en la pequeña flecha derecha al lado de "Datos derivados". Esto abre la aplicación Finder en la ubicación de la DerivedDatacarpeta.
  3. Vaya dentro de la DerivedDatacarpeta y elimine la carpeta correspondiente a su proyecto.
  4. Salga de Xcode y vuelva a abrirlo.
  5. Limpia tu proyecto shiftcommandk.
  6. Construye tu proyecto commandb.
  7. Abre tu guión gráfico.
  8. Ir a Editor > Refresh all views.

Actualizado

A veces simplemente directamente Ir a Editor > Refresh all viewstrabajar. Si Refresh all viewsestá deshabilitado, salga de Xcode e intente nuevamente.

mnemónico23
fuente
Gracias por publicar esto. Hice una eliminación de la línea de comandos de la "vieja escuela" de datos derivados, pero el problema persistió. El uso de su método resolvió el problema para mí.
Adrian
Actualizar todas las vistas para la victoria también para mí. ¡Gracias!
Mike K.
56

Simplemente elimino la vista que falló y presiono comando + Z para deshacer la eliminación. Esto funciona para mi.

Si edita la vista fallida más tarde, el error puede ocurrir nuevamente, haga lo anterior nuevamente.

Ryan.Yuen
fuente
66
Es ridículo pero funcionó.
Ansari
1
¡¡Increíble!! Trabajó para mí
Nupur Sharma
1
Quién sabe, podría ser la respuesta. Funcionó que todavía no puedo creer
Asad Amodi
37

Me enfrenté a este problema en CocoaPod 1.5.0. La solución es reinstalar el pod nuevamente (instalar el pod nuevamente) una vez que aparezca este error o puede usar CocoaPod 1.4.0 en su lugar. Funciona bien en 1.4.0 (al menos para mí).

actualizar:

Agregar el siguiente script en Podfile me ayuda a resolver el problema en 1.5.0

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings.delete('CODE_SIGNING_ALLOWED')
    config.build_settings.delete('CODE_SIGNING_REQUIRED')
  end
end

referencia: https://github.com/Skyscanner/SkyFloatingLabelTextField/issues/201#issuecomment-381915911

Jerome Li
fuente
100% cierto la degradación a 1.4.0 resolvió el problema por mí.
ale_stro
44
Trabajado, 1.5.0 vainas.
Andrey Oshev
3
que s work for me, you should add end` para durar de código.
Mahdi
1
Me funcionó a mi también. Intenté todas las demás sugerencias sin éxito. Probado con Pods 1.3.1
Sal
18

Agregar el siguiente código a mi @IBDesignableclase hizo el truco.

override init(frame: CGRect) {
    super.init(frame: frame)
}
Mohammad Zaid Pathan
fuente
Esto funciona para mi. De hecho, agregué dos anulaciones para extender UITextView. (1) init(frame: CGRect, textContainer: NSTextContainer?), (2) init?(coder aDecoder: NSCoder). Luego reconstruir y advertencia (error) desaparecido. Ni siquiera es necesario limpiar la carpeta de compilación.
John Pang
¡Gracias! Buena respuesta)
JiosDev
13

Para cualquier persona, como yo, que no puede encontrar ese IBDesignablesAgentCocoaToucharchivo o cuando intenta "Depurar vistas seleccionadas" del Editor obtiene un error, aquí hay otra forma de depurar esos errores "Error al procesar".

Abra la aplicación 'Consola', desde la barra lateral seleccione su Mac actual (probablemente se seleccionará automáticamente de forma predeterminada) y luego en la barra de búsqueda busque "IBSceneUpdate" y presione enter.

De esta manera, cada vez que obtenga un error de Xcode por IBDesignableno poder renderizar, también obtendrá una nueva entrada "IBSceneUpdate" con más detalles sobre el error.

¡Al menos así pude depurar mis IBDesignableerrores!

Aplicación de consola que muestra errores de actualización de IBScene

Stelabouras
fuente
1
La aplicación es una consola real en lugar de una terminal, solo como un FYI.
Carl Upton
¡Buena atrapada! Edité mi respuesta.
Stelabouras
12

Si está utilizando el archivo xib para uiview personalizado. Prueba esto:

Cambiar de

Bundle.main.loadNibNamed("UserView", owner: self, options: nil)

A:

let bundle = Bundle(for: UserView.self) 
bundle.loadNibNamed("UserView", owner: self, options: nil)
Hoàng Công Tùng
fuente
8

Intente deshabilitar 'Usar variaciones de rasgos' (panel Identidad y tipo) para cualquier archivo xib que pueda tener para vistas personalizadas que se utilizan en su guión gráfico.

LatinCoder
fuente
7

mi problema se resolvió eliminando carpetas (que está relacionado con este proyecto) de la carpeta de datos derivados. puede hacer esto haciendo clic en Archivo -> Configuración del proyecto -> luego haga clic en el signo de flecha deside /Users/.../Xcode/DerivedData haga clic en la carpeta DerivedData, verá que su proyecto elimina las carpetas con nombre. salga de xcode al abrir su proyecto, limpie el proyecto utilizando este paso Producto-> limpiar y luego compile el proyecto: Producto-> Compilar Estos resolverán estos problemas.

Mitu Vinci
fuente
4

Respuesta correcta proporcionada por @Maria :

comprobar informe de bloqueo en ~/Library/Logs/DiagnosticReports

Forma alternativa :

  1. abierto Spotlight

ingrese la descripción de la imagen aquí

  1. tipo console.app

ingrese la descripción de la imagen aquí

  1. Seleccione Crash reports

ingrese la descripción de la imagen aquí

  1. marque uno IBDesignablesAgent-iOSy revise el registro de fallas
gbk
fuente
Usar la consola fue lo que me ayudó a resolver mi problema. Mensajes mucho más detallados que los de Xcode.
Andrew Moore
3

Simplemente abra su guión gráfico -> Editor -> Actualizar todas las vistas. Este trabajo para mi.

Anggara Siswanajaya
fuente
3

Intenté limpiar y ejecutar el proyecto no resolverá este problema.

Pero Cerrar y reabrió el proyecto lo hizo.

Lal Krishna
fuente
2

Cuando depuré esto descubrí que hay algunas clases que están modificando la interfaz de usuario. Por lo general, marquelabel, que es una subclase de UILabel o cualquier otra clase que subclasifique UIView y dibuje ui en tiempo de ejecución y colisione con el motor Autolayout. Intente dar ancho o alto fijo para estas vistas personalizadas. Si no resuelve su problema, intente las siguientes soluciones: -

Solución 1: - Descomente #use_frameworks dentro de su archivo pod.

Solución 2: intente eliminar datos derivados

  1. Cierre la ventana del editor de su Xcode y salga del simulador ->
  2. Vaya a Preferencias de Xcode -> Ubicaciones ->
  3. Haga clic en la pequeña flecha gris que muestra la ruta de datos derivados ->
  4. Seleccione su proyecto ->
  5. Eliminar todas las carpetas dentro ->
  6. Salga de Xcode y vuelva a abrir
Ashish Pisey
fuente
1
¿Podría explicar cómo esto realmente resuelve el problema?
Paula Hasstenteufel
esto resolvió el problema, pero aún no sé por qué no se comentó que use_frameworks porque eso es para un proyecto rápido a la derecha
Abhishek
Mi Podfile ya está usando frameworks, ¿alguna sugerencia anterior no lo comenta?
mmr118
@ moni15 agregué una posible solución más. Por favor, compruebe.
Ashish Pisey
Descomentar #use_frameworks en el archivo pod y borrar DerivedData funcionó para mí.
Jugal Desai
2

Tuve el mismo problema y vine aquí para tratar de averiguar qué pasó. Noté la respuesta mejor calificada y la respuesta en sí misma no me ayudó, ya que IBDesignable no existía en la carpeta de registro y ya intenté todas las demás opciones allí, sin embargo, en los comentarios noté que alguien hablaba de un inicio de marco.

Decidí intentar comentar mi extensión IBDesignable para UIView y al instante solucionó el problema. Entonces, para solucionar esto, encuentre la extensión que causa el problema y asegúrese de configurar los inits necesarios creando una clase IBDesignable y proporcionando los inicializadores necesarios de la siguiente manera:

@IBDesignable class RoundedView: UIView {

override init(frame: CGRect) {
    super.init(frame: frame)
    sharedInit()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    sharedInit()
}

override func prepareForInterfaceBuilder() {
    super.prepareForInterfaceBuilder()
    sharedInit()
}

func sharedInit() {
}
}

IMPORTANTE: recuerde agregar la nueva clase al elemento en el que está utilizando el designado.

Nox
fuente
1
Como dice su documentación, no olvide llamar a super.prepareForInterfaceBuilder () en su implementación de prepareForInterfaceBuilder ().
Jaime S
1

Enfrentado el mismo error: había personalizado UITextField y utilizando el generador de interfaces, el error en la consola fue -Uso del inicializador no implementado 'init (frame :)' para la clase "CustomField"

Se agregó el inicializador para corregir el error

Avinash
fuente
1

Enfrenté este problema después de actualizar a la última versión de XCode. Después de probar la solución múltiple descrita anteriormente, solo hice bastante Xcode y luego apagué el sistema y lo encendí y eso funcionó para mí.

Mehsam Saeed
fuente
0

Después de realizar los cambios necesarios, cambie el guión gráfico o, en mi caso, un .xib para abrir en "XCode 7", guarde y cierre. Esta es solo una medida provisional para abordar los errores, pero en última instancia, deberá corregirlos o hacer esto hasta que ya no pueda hacerlo.

Alberto Lopez
fuente
0

En mi caso, estaba usando una biblioteca que estaba subclasificando UIView. Estaba usando IB_DESIGNABLE, y faltaba llamar a [super awakeFromNib]. Una vez que agregué la llamada a este método, el error desapareció.

No estoy seguro de si el hecho de que se estaba implementando IB_DESIGNABLEtuvo un impacto en esto.

AnthoPak
fuente
¿Dónde agregaste el código para [super awakeFromNib]? ¿Puedes compartir tu código?
TheJeff
0

Esta es la forma más fácil para mí: agregue este script a su Podfile

Podfile:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    next if target.product_type == "com.apple.product-type.bundle"
    target.build_configurations.each do |config|
      config.build_settings['CONFIGURATION_BUILD_DIR'] = '$PODS_CONFIGURATION_BUILD_DIR'
    end
  end
end

Fuente:

Esta solución alternativa para @IBDesignable se puede encontrar aquí: https://github.com/CocoaPods/CocoaPods/issues/5334

N feroz
fuente