Biblioteca estática, package y IB designable

Estoy intentando usar el IB Designable y IB Inspectable en mi UIButton, pero parece que hay algunos errores.

En el Navegador de problemas, el file de package:

Storyboard: IB Designables: No se pudo actualizar el estado de layout automático: No se pudo cargar designabled de la ruta (nulo)

Entonces, ¿me pregunto si hay alguna configuration que hacer para usarla en una biblioteca estática o algo así?

Esto es

#import <UIKit/UIKit.h> IB_DESIGNABLE @interface CustomUIButton : UIButton @property (nonatomic) IBInspectable int cornerRadius; @end 

Mi button personalizado que quiero hacer en vivo está dentro de un controller de vista.

Lamentablemente, no es posible usar IBDesignables con bibliotecas estáticas (o frameworks estáticos).

Esta no es una gran respuesta, pero quiero darle un poco de context al por qué.

Parece que la forma en que el generador de interfaces carga las classs para mostrarse como designables es cargar dinámicamente el marco dynamic que se crea (y no el binary de la aplicación) y usar las classs directamente (después de cambiarlas usando el time de ejecución de Objective-C). poco).

Puede ver que Interface Builder no está cargando su aplicación y solo los frameworks individuales con estos pasos:

  1. Crea un nuevo proyecto Xcode
  2. Crear un nuevo objective marco en el proyecto.
  3. Agregar una class que sea IBDesignable
  4. En el guión gráfico de su aplicación, cree una vista y establezca su class en la class IBDesignable su marco IBDesignable
  5. Haga clic en "Actualizar todas las vistas" en el menu "Editor"
  6. En su carpeta DerivedData para el proyecto, en el directory IBDesignables , puede ver que solo se ha construido su objective de marco.

El generador de interfaces realmente carga su marco usando dlopen manualmente. También puede ver que para facilitar esto al build su marco, Interface Builder realmente agrega 2 RPATH s a su binary, por lo que las dependencies se pueden encontrar en las routes personalizadas (puede ver esto con otool -L frameworkbinary ). Este método de cargar su binary no es posible con bibliotecas estáticas.

Por lo que vale, creo que la mejor solución para esto es crear frameworks dynamics, en lugar de bibliotecas estáticas, pero solo para comstackciones IBDesignable . Tendrá que hacer algún trabajo de configuration para hacer esto, y no es fácil trabajar con Xcode para que esto funcione, pero si lo testing, puede usar la ruta de compilation o el entorno para diferenciar IBDesignable comstackciones de IBDesignable vs comstackciones "normales".

EDIT: IB Designable e IB Inspectable no parecen funcionar con bibliotecas estáticas, por lo que si está utilizando una biblioteca estática, considere utilizar un marco dynamic (solo iOS 8) o, si es posible, mueva su componente fuera de la biblioteca estática.

Para problemas relacionados con Cocoapods, use la siguiente solución:

Esto está relacionado con esta pregunta .

Esta es la solución:

1) Instalar Cocoapods (0.36.0.beta.1) o más reciente;

2) ¡Agregue use_frameworks! a tu Podfile

Vea más aquí .

Intereting Posts