ios - Biblioteca estática, paquete y IB Designable
storyboard bundle (2)
Estoy intentando usar el IB Designable e IB Inspectable en mi UIButton, pero parece que hay algunos errores.
En Issue Navigator, el archivo del paquete:
Storyboard: IB Designables: no se pudo actualizar el estado del diseño automático: no se pudo cargar designado desde la ruta (nulo)
Entonces, me pregunto si hay alguna configuración 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 botón personalizado Quiero renderizar en vivo está dentro de un controlador de vista
EDITAR: 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 dinámico (solo iOS 8) o mueva su componente fuera de la biblioteca estática, si es posible.
Para problemas relacionados con Cocoapods, use la siguiente solución:
Esto está relacionado con esta pregunta .
Aquí está la solución:
1) Instale Cocoapods (0.36.0.beta.1) o más nuevo;
2) Agregar use_frameworks!
a tu Podfile
Ver más aquí .
Lamentablemente, no es posible utilizar IBDesignables
con bibliotecas estáticas (o marcos estáticos).
Esta no es una gran respuesta, pero quiero dar un contexto sobre por qué.
Parece que la forma en que Interface Builder carga las clases para mostrarse como designables es cargando dinámicamente el marco dinámico que creas (y no el binario de tu aplicación) y usando las clases directamente (después de cambiarlas usando el tiempo de ejecución Objective-C bastante poco).
Puede ver que Interface Builder no está cargando su aplicación, y solo los marcos individuales con estos pasos:
- Crea un nuevo proyecto de Xcode
- Crear un nuevo objetivo de marco en el proyecto
- Agregue una clase que sea
IBDesignable
- En el guión gráfico de su aplicación, cree una vista y establezca su clase en la clase
IBDesignable
su estructura - Haga clic en "Actualizar todas las vistas" en el menú "Editor"
- En su carpeta DerivedData para el proyecto, en el directorio de
IBDesignables
, puede ver que solo se ha creado su objetivo de infraestructura.
El constructor de interfaz realmente carga su marco usando dlopen
manualmente. También puede ver que para facilitar esto al construir su marco, Interface Builder en realidad agrega 2 RPATH
a su binario, por lo que las dependencias se pueden encontrar en las rutas personalizadas (puede ver esto con otool -L frameworkbinary
). Este método de cargar su binario no es posible con las bibliotecas estáticas.
Por lo que vale, creo que la mejor solución para esto es construir marcos dinámicos, en lugar de bibliotecas estáticas, pero solo para construcciones IBDesignable
. Tendrá que hacer algunas tareas de configuración para hacer esto, y no es fácil trabajar con Xcode para que funcione, pero si lo prueba, puede usar la ruta de compilación o el entorno para diferenciar IBDesignable
compilaciones IBDesignable
vs construcciones "normales".