Cyborg es un puerto parcial de VectordRawable de Android para iOS. Se pretende como un reemplazo de UIImages, fuentes de iconos y la opción de imagen Vector PDF de Apple. El formato Vectordrawable proporciona una serie de ventajas:
Cyborg también es compatible con MacOS (AppKit), TVOS y se puede usar desde Swiftui. Sin embargo, tenga en cuenta que estas implementaciones son actualmente menos maduras que la versión iOS.
Benchmaramos Cyborg con una serie de alternativas, cargando los más de 50 iconos contenidos en el conjunto de iconos de nuestra aplicación de controlador.
UIImage
. Las diferencias deben estar en las fracciones de milisegundos en la práctica.Si el rendimiento de análisis se convierte en un problema, es posible que desee implementar un mecanismo de almacenamiento en caché apropiado para su aplicación o aprovechar la seguridad del hilo de Cyborg para realizar el análisis del hilo principal.
Dicho esto, actualmente existen muchas oportunidades de mejora del rendimiento, por lo que el rendimiento debería mejorar en el futuro. Al momento de escribir este artículo, Swift es un idioma joven y mejoras de rendimiento, particularmente en la creación de cuerdas, los cierres y la propiedad también deberían tener un impacto positivo en el rendimiento de Cyborg.
La lista completa de características se enumera en la documentación de Android.
Cyborg admite Swift Package Manager y Cartago.
Para instalar con Cartago:
github "uber/cyborg" ~> [desired version]
Para agregar cyborg a un proyecto Xcode utilizando Swift Package Manager, siga las instrucciones proporcionadas por Apple.
Después de seguir los pasos de integración a continuación, el uso de cyborg requiere solo un poco más de código que usar una UIImage
:
let vectorView = VectorView ( theme : myTheme )
vectorView . drawable = VectorDrawable . named ( " MyDrawable " )
Cyborg está hecho para escalar a casos de usos complejos y, como tal, requiere un poco de configuración para obtener la muestra de código limpio anterior.
Veamos cómo escribir la integración mínima para comenzar:
Una de las mejores características de VectordRawables es la capacidad de intercambiar valores arbitrarios en tiempo de ejecución. Los activos vectordRawables bien autorizados pueden cambiar sus colores en respuesta a los cambios en el estado de la aplicación, como un modo nocturno.
Sin embargo, obtener acceso a estas potentes características requiere que escribamos nuestro propio tema y proveedores de recursos:
class Theme : Cyborg . ThemeProviding {
func colorFromTheme ( named _ : String ) -> UIColor {
return . black
}
}
class Resources : ResourceProviding {
func colorFromResources ( named _ : String ) -> UIColor {
return . black
}
}
Suponiendo que los recursos nunca cambien, ahora podemos escribir el inicializador de conveniencia representado en la primera muestra de código:
fileprivate let resources = Resources ( )
extension VectorDrawable {
public convenience init ( theme : Theme ) {
self . init ( theme : theme , resources : resources ( )
}
}
Si, por alguna razón, proporciona un vectordRawable inválido a Cyborg, la función de creación estándar en Cyborg le dará un mensaje de error detallado que puede informar como un servicio de informes de bloqueo de bloqueo de su elección y usarse para depurar localmente. Esto se puede manejar en el nivel de "plataforma" de su aplicación, lo que le permite escribir código que asume que el análisis siempre tiene éxito, al igual que con UIImage:
extension VectorDrawable {
public static func named ( _ name : String ) -> VectorDrawable ? {
return Bundle . main . url ( forResource : name , withExtension : " xml " ) . flatMap { url in
switch VectorDrawable . create ( from : url ) {
case . ok ( let drawable ) :
return drawable
case . error ( let error ) :
myAssertionFailureThatAlsoReportsToBackend ( " Could not create a vectordrawable named ( name ) ; the error was ( error ) " )
return nil
}
}
}
Como ya habrá notado, los objetos de tema y recursos que escribió en una sección anterior se escriben ampliamente. Para evitar problemas con los activos que hacen referencia al tema inexistente o los colores de recursos, es posible que desee vincular los archivos XML para asegurarse de que sean válidos.
Es posible que sea conveniente permitir a los diseñadores cometer nuevos activos directamente a un repositorio que los diseñadores pueden llevar a sus repositorios de Android e iOS.
La forma más fácil de garantizar la corrección de sus UI que usan Drawables vectoriales estáticos es probar las UIS que las usan utilizando una herramienta como Iossnapshottestcase. Esto asegurará que cualquier código que no esté verificado por compilador coincida con sus expectativas.