{"id":28663,"date":"2024-07-18T12:11:12","date_gmt":"2024-07-18T10:11:12","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=28663"},"modified":"2024-07-23T09:36:11","modified_gmt":"2024-07-23T07:36:11","slug":"crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/","title":{"rendered":"Crear una app macOS capaz de generar y reconocer c\u00f3digos QR"},"content":{"rendered":"\n<p>Mira a tu alrededor: c\u00f3digos QR, de barras o de cualquier otro tipo por todas partes; desde los billetes de avi\u00f3n a los medicamentos o cualquier producto por trivial que sea. No cabe duda de que especialmente los c\u00f3digos QR han sufrido una verdadera eclosi\u00f3n, especialmente motivada por la maldita pandemia del Covid. Ahora bien, \u00bfcu\u00e1nto esfuerzo requiere crear una aplicaci\u00f3n de macOS capaz de leer o incluso crear estos tipos de c\u00f3digos?<\/p>\n\n\n\n<p>Ya te anticipo que no se trata de una tarea nada trivial si optas por crearla con Xcode y Swift o bien Objective-C como lenguajes de programaci\u00f3n; y aun m\u00e1s esfuerzo si eres reci\u00e9n llegado al mundo de la programaci\u00f3n o si no te consideras un programador a tiempo completo.<\/p>\n\n\n\n<p>Eso s\u00ed, con Xojo la cosa cambia\u2026&nbsp;\u00a1y mucho! Con arrastrar y soltar un control desde la Librer\u00eda sobre la ventana de tu interfaz de usuario, a\u00f1adir un par de eventos y a\u00f1adir un par de l\u00edneas\u2026&nbsp;\u00a1listo! S\u00ed, as\u00ed de sencillo.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/sp-ao.shortpixel.ai\/client\/to_webp,q_glossy,ret_img,w_1140\/https:\/\/www.aprendexojo.com\/wp-content\/uploads\/2024\/07\/AppRunning.png\" alt=\"\" \/><\/figure><\/div>\n\n\n<p>Pero antes de crear una peque\u00f1a aplicaci\u00f3n de ejemplo para demostrarlo, veamos qu\u00e9 capacidades te ofrece la clase Barcode de Xojo (ah, importante, tambi\u00e9n puedes utilizar el mismo c\u00f3digo para crear la versi\u00f3n de Windows o de iOS y, pr\u00f3ximamente, de Linux si te interesa).<\/p>\n\n\n\n<p>Con la clase Barcode de Xojo puedes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Crear c\u00f3digos QR y de barras con el tama\u00f1o que requieras.<\/li>\n\n\n\n<li>Reconocer hasta 12 tipos diferentes de c\u00f3digos a partir de cualquier imagen que pasemos como par\u00e1metro (de hecho los m\u00e1s comunes tanto en el \u00e1mbito comercial e industrial); y si la imagen contiene varios c\u00f3digos\u2026 reconocer\u00e1 todos ellos y te los devolver\u00e1 como resultado.<\/li>\n\n\n\n<li>Escanear esa misma cantidad de diferentes tipos de c\u00f3digos usando cualquiera de las c\u00e1maras compatibles que est\u00e9n conectadas a tu Mac, y esto incluye tambi\u00e9n las c\u00e1maras de tu iPhone y\/o iPad mediante Continuity.<\/li>\n<\/ul>\n\n\n\n<p>Por supuesto, cuando se trata de escanear c\u00f3digos con la c\u00e1mara a trav\u00e9s de la interfaz de usuario que se presenta (no tendr\u00e1s que escribir ni una sola l\u00ednea de c\u00f3digo), podr\u00e1s cambiar en cualquier momento la c\u00e1mara que quieres usar, as\u00ed como voltear la imagen previsualizada para facilitarte la colocaci\u00f3n del objeto cuyo c\u00f3digo deseas escanear en el encuadre de la c\u00e1mara.<\/p>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-7c2172cc\"><h2 class=\"uagb-heading-text\">Creando la Interfaz de usuario de nuestra App<\/h2><\/div>\n\n\n\n<p>Descarga Xojo (es gratis) si aun no lo has hecho desde <a href=\"https:\/\/www.xojo.com\/download\" class=\"ek-link\">https:\/\/www.xojo.com\/download<\/a>. Una vez descargado y montada la imagen de disco, s\u00f3lo tendr\u00e1s que arrastrar su contenido a la carpeta Aplicaciones, tal y como har\u00edas con cualquier otra app.<\/p>\n\n\n\n<p>Ejecuta Xojo y en la ventana de Nuevo Proyecto, selecciona la opci\u00f3n Desktop en la barra lateral izquierda. No hace falta que rellenes ninguno de los campos que se presentan en el \u00e1rea principal al realizar dicha selecci\u00f3n, o bien puedes cambiarlos para asignar el nombre que tendr\u00e1 la aplicaci\u00f3n, nombre de tu empresa, etc.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/sp-ao.shortpixel.ai\/client\/to_webp,q_glossy,ret_img,w_1762\/https:\/\/www.aprendexojo.com\/wp-content\/uploads\/2024\/07\/NuevoProyecto.png\" alt=\"\" \/><\/figure><\/div>\n\n\n<p>Cuando confirmes la creaci\u00f3n del nuevo proyecto se abrir\u00e1 el IDE propiamente dicho mostrando en el \u00e1rea principal de la ventana el Editor de Dise\u00f1o. En dicha \u00e1rea podr\u00e1s ver la ventana de tu aplicaci\u00f3n que se a\u00f1ade por omisi\u00f3n con cada nuevo proyecto que se crea y cuyo nombre ser\u00e1 Window1.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/sp-ao.shortpixel.ai\/client\/to_webp,q_glossy,ret_img,w_2806\/https:\/\/www.aprendexojo.com\/wp-content\/uploads\/2024\/07\/DefaultWindow.png\" alt=\"\" \/><\/figure><\/div>\n\n\n<p>Haz clic en el icono Library (Librer\u00eda) situado en la barra lateral derecha del IDE. Al hacerlo podr\u00e1s ver listados todos los controles IU (Interfaz de usuario o UX, si lo prefieres) que se incluyen por omisi\u00f3n.<\/p>\n\n\n\n<p>Ubica el icono correspondiente a Barcode\u2026&nbsp;estoy convencido que no te costar\u00e1 mucho encontrarlo\u2026&nbsp;y arr\u00e1stralo desde la Librer\u00eda sobre el Editor de Dise\u00f1o.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/sp-ao.shortpixel.ai\/client\/to_webp,q_glossy,ret_img,w_614\/https:\/\/www.aprendexojo.com\/wp-content\/uploads\/2024\/07\/BarcodeLibrary.png\" alt=\"\" \/><\/figure><\/div>\n\n\n<p>Cuando lo sueltes comprobar\u00e1s que se ha a\u00f1adido el control tanto en la bandeja inferior del Editor de Dise\u00f1o como bajo la jerarqu\u00eda de la ventana Window1 en el Navegador (el Navegador es donde puedes ver todos los elementos que se van a\u00f1adiendo al proyecto, mediante una representaci\u00f3n jer\u00e1rquica que te permite ver qu\u00e9 controles contiene a otros). En este caso, puedes ver que la nueva instancia con el nuevo Barcode1 est\u00e1 asociada a la ventana Window1.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/sp-ao.shortpixel.ai\/client\/to_webp,q_glossy,ret_img,w_2806\/https:\/\/www.aprendexojo.com\/wp-content\/uploads\/2024\/07\/BarcodeAdded.png\" alt=\"\" \/><\/figure><\/div>\n\n\n<p>Si no ves la instancia Barcode1 en el Navegador es probable que debas desplegar la jerarqu\u00eda de Window1. Cuando lo hagas ver\u00e1s Barcode1 listado bajo Window1 &gt; Controls.<\/p>\n\n\n\n<p>Selecciona Barcode1, y selecciona la opci\u00f3n \u201cAdd to \u2018Barcode1\u2019 &gt; Event Handler\u201d en el men\u00fa contextual. Al hacerlo aparecer\u00e1 la siguiente ventana:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/sp-ao.shortpixel.ai\/client\/to_webp,q_glossy,ret_img,w_1212\/https:\/\/www.aprendexojo.com\/wp-content\/uploads\/2024\/07\/AddBarcodeEvents.png\" alt=\"\" \/><\/figure><\/div>\n\n\n<p>Selecciona los siguientes eventos<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ScanCancelled.<\/strong> Este evento ejecutar\u00e1 el c\u00f3digo asociado cuando el usuario pulse el bot\u00f3n \u201cOK\u201d en la ventana de escaneo o bien cuando se cancele por cualquier otro motivo.<\/li>\n\n\n\n<li><strong>ScanCompleted.<\/strong> Este evento ejecutar\u00e1 el c\u00f3digo asociado cada vez que la c\u00e1mara detecte un c\u00f3digo en el encuadre. Como puedes, dicho evento recibe como par\u00e1metro el c\u00f3digo detectado como una cadena de texto (tipo de dato String en el lenguaje de programaci\u00f3n Xojo).<\/li>\n\n\n\n<li><strong>ScanFailed.<\/strong> Este evento se produce cuando se produce alg\u00fan error, como por ejemplo al iniciar una operaci\u00f3n de escaneo sin que el Mac tenga alguna c\u00e1mara conectada o bien si se intenta ejecutar la aplicaci\u00f3n en un Mac con una versi\u00f3n inferior a macOS 10.15.<\/li>\n<\/ul>\n\n\n\n<p>Confirma la selecci\u00f3n pulsando el bot\u00f3n OK. Cuando lo hagas ver\u00e1s que se han a\u00f1adido bajo la instancia Barcode1 en el Navegador:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/sp-ao.shortpixel.ai\/client\/to_webp,q_glossy,ret_img,w_1172\/https:\/\/www.aprendexojo.com\/wp-content\/uploads\/2024\/07\/BarcodeNavigator.png\" alt=\"\" \/><\/figure><\/div>\n\n\n<p>Ahora bien, para completar nuestra interfaz de usuario necesitamos a\u00f1adir algunos controles m\u00e1s, como por ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un bot\u00f3n para iniciar la operaci\u00f3n de escanear c\u00f3digos mediante cualquiera de las c\u00e1maras disponibles en el Mac.<\/li>\n\n\n\n<li>Un campo de texto en el que podamos introducir un texto a partir del cual generar un c\u00f3digo QR como imagen.<\/li>\n\n\n\n<li>Un control que nos permita ver la imagen resultante de la operaci\u00f3n anterior.<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-c8dba964\"><h2 class=\"uagb-heading-text\">A\u00f1adir el bot\u00f3n para iniciar el escaneo de c\u00f3digos<\/h2><\/div>\n\n\n\n<p>Empecemos con el primer bot\u00f3n. Aseg\u00farate de que el elemento Window1 est\u00e9 seleccionado en el Navegador para que se muestre en el Editor de Dise\u00f1o si aun no lo est\u00e1; y vuelve a seleccionar Library (en el caso de que no est\u00e9 visible) para arrastrar en esta ocasi\u00f3n un bot\u00f3n (control Button) y soltarlo sobre la esquina inferior derecha de la ventana en el Editor de Dise\u00f1o. Utiliza las gu\u00edas de alineaci\u00f3n como pista sobre d\u00f3nde deber\u00edas de soltar el bot\u00f3n para mantener los m\u00e1rgenes recomendables.<\/p>\n\n\n\n<p>Al soltar el bot\u00f3n en el Editor de Dise\u00f1o se habr\u00e1 sustituido la Librer\u00eda por el Panel Inspector correspondiente al Bot\u00f3n. Aqu\u00ed es donde podremos definir algunas de sus propiedades. En este caso ajusta las siguientes con los valores indicados:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Name:<\/strong> ScanButton<\/li>\n\n\n\n<li><strong>Locking:<\/strong> Abre los candados superior e izquierdo, y cierra los candados derecho e inferior.<\/li>\n\n\n\n<li><strong>Caption:<\/strong> Iniciar Escaneo<\/li>\n<\/ul>\n\n\n\n<p>En el Editor de Dise\u00f1o comprobar\u00e1s que el texto asignado al bot\u00f3n no cabe. Con el bot\u00f3n seleccionado en el Editor de Dise\u00f1o, arrastra hacia la izquierda el manejador central izquierdo para modificar la anchura del control hasta que el texto se vea con claridad.<\/p>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-7ef4f9fe\"><h2 class=\"uagb-heading-text\">A\u00f1adir un campo de texto<\/h2><\/div>\n\n\n\n<p>Aqu\u00ed es donde el usuario de nuestra app de ejemplo introducir\u00e1 el texto que desee convertir a c\u00f3digo QR. Desde la librer\u00eda, arrastra el control TextField y su\u00e9ltalo en la esquina superior izquierda de la ventana (utiliza las gu\u00edas de alineaci\u00f3n para preservar los m\u00e1rgenes superior e izquierdo recomendados).<\/p>\n\n\n\n<p>Modifica los siguientes valores desde el Panel Inspector correspondiente al campo de texto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Name:<\/strong> QRTextField<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-43cbf61e\"><h2 class=\"uagb-heading-text\">A\u00f1adir el bot\u00f3n para generar un c\u00f3digo QR<\/h2><\/div>\n\n\n\n<p>Vuelve a seleccionar la Librer\u00eda y arrastra en esta ocasi\u00f3n un bot\u00f3n para situarlo en la esquina superior derecha. Nuevamente, utiliza las gu\u00edas para observar el margen que has de dejar a su derecha y para que el bot\u00f3n est\u00e9 alineado respecto al campo de texto a\u00f1adido en el paso anterior.<\/p>\n\n\n\n<p>En el Panel Inspector correspondiente al nuevo bot\u00f3n, modifica los siguientes valores:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Name:<\/strong> GenerateQRButton<\/li>\n\n\n\n<li><strong>Locking:<\/strong> Desbloquea los candados izquierdo e inferior, y bloquea los candados superior y derecho.<\/li>\n\n\n\n<li><strong>Caption:<\/strong> Generar QR<\/li>\n<\/ul>\n\n\n\n<p>Como puedes ver, el texto introducido no cabe en el bot\u00f3n\u2026&nbsp;as\u00ed que arrastra el manejador izquierdo central hacia la izquierda hasta que el texto se vea con claridad. Idealmente, haz que el ancho coincida con el del primer bot\u00f3n a\u00f1adido. Cuando arrastras el manejador podr\u00e1s utilizar nuevamente la gu\u00eda de alineaci\u00f3n que te indicar\u00e1 dicho aspecto.<\/p>\n\n\n\n<p>Vuelve a seleccionar el control QRTextField en el Editor de Dise\u00f1o y arrastra su manejador central derecho hacia la derecha hasta que aparezca la Gu\u00eda de alineaci\u00f3n sobre el bot\u00f3n GenerateQRButton. Tambi\u00e9n modificaremos el siguiente campo en el Panel Inspector para QRTextField:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Locking:<\/strong> Cierra los candados izquierdo, superior e izquierdo. Aseg\u00farate de que el candado inferior est\u00e9 abierto.<\/li>\n<\/ul>\n\n\n\n<p>As\u00ed, cuando ejecutemos la aplicaci\u00f3n y modifiquemos el tama\u00f1o de la ventana, la anchura del campo de texto tambi\u00e9n cambiar\u00e1 en consecuencia manteniendo sus m\u00e1rgenes con respecto al resto de los controles.<\/p>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-66a02b15\"><h2 class=\"uagb-heading-text\">A\u00f1adir un control para previsualizar im\u00e1genes<\/h2><\/div>\n\n\n\n<p>Se trata del \u00faltimo de los controles de nuestra interfaz de usuario. Desde la Liberar\u00eda, arrastra un control ImageViewer y su\u00e9ltalo justo debajo del campo de texto. Utiliza las gu\u00edas de alineaci\u00f3n para observar los m\u00e1rgenes superior e izquierdo. Luego, utiliza los manejadores de tama\u00f1o para aumentar el ancho y alto del control de modo que quede alineado a la derecha con el bot\u00f3n superior derecho y, hacia abajo, sobre la parte superior y derecha del bot\u00f3n inferior derecho. Cuando termines, la interfaz de usuario deber\u00eda tener un aspecto similar al mostrado en esta imagen:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/sp-ao.shortpixel.ai\/client\/to_webp,q_glossy,ret_img,w_2788\/https:\/\/www.aprendexojo.com\/wp-content\/uploads\/2024\/07\/UIFinished.png\" alt=\"\" \/><\/figure><\/div>\n\n\n<p>Con el control ImageViewer seleccionado en el Editor de Dise\u00f1o, introduce los siguientes valores en el Panel Inspector asociado:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Name:<\/strong> VisorQR<\/li>\n\n\n\n<li><strong>Locking:<\/strong> bloquea los candados izquierdo, superior, derecho e inferior.<\/li>\n<\/ul>\n\n\n\n<p>Ya hemos terminado con nuestra interfaz de usuario. El siguiente paso es a\u00f1adir funcionalidad.<\/p>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-77280ad1\"><h2 class=\"uagb-heading-text\">A\u00f1adir funcionalidad a los controles<\/h2><\/div>\n\n\n\n<p>Empezaremos con la capacidad de generar c\u00f3digos QR. Selecciona el bot\u00f3n GenerateQRButton en el Editor de Dise\u00f1o y haz doble clic sobre \u00e9l. En la ventana resultante, selecciona el evento Pressed y confirma la selecci\u00f3n. Al hacerlo aparecer\u00e1 el evento seleccionado bajo el Navegador del proyecto mostrando el editor de c\u00f3digo asociado. Aqu\u00ed es donde introduciremos el c\u00f3digo que se ejecutar\u00e1 cuando el usuario de la app haga clic sobre el bot\u00f3n.<\/p>\n\n\n\n<p>Introduce el siguiente fragmento de c\u00f3digo en el editor de c\u00f3digo asociado con el evento Pressed:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">If QRTextField.Text <span class=\"hljs-tag\">&lt;&gt;<\/span> \"\" Then\n  \u00a0 VisorQR.Image = Barcode1.Image(QRTextField.Text, 600, 600)\nEnd If<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>B\u00e1sicamente, lo que hace el c\u00f3digo es lo siguiente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Comprueba que el campo de texto no est\u00e9 vac\u00edo y, si es as\u00ed, ejecuta las instrucciones siguientes comprendidas en el bloque If\u2026End If<\/li>\n\n\n\n<li>La siguiente l\u00ednea se encarga de asignar a la propiedad Image del control VisorQR, la imagen generada mediante el m\u00e9todo Image de nuestra instancia Barcode1, pasando como par\u00e1metros el texto que se utilizar\u00e1 para generar el c\u00f3digo QR, as\u00ed como el tama\u00f1o del mismo (ancho y altura). Como puedes ver, el texto utilizado se obtiene a partir de la propiedad Text del control QRTextField.<\/li>\n<\/ul>\n\n\n\n<p>Selecciona ahora el control ScanButton en el Navegador de proyecto y utiliza el men\u00fa contextual para acceder a la opci\u00f3n de men\u00fa: Add To \u201cScanButton\u201d &gt; Event Handler\u2026<\/p>\n\n\n\n<p>En la ventana resultante, selecciona nuevamente el evento Pressed y confirma la selecci\u00f3n. Al hacerlo, el evento aparecer\u00e1 seleccionado en el Navegador de proyecto bajo el control ScanButton y mostrando el Editor de C\u00f3digo asociado.<\/p>\n\n\n\n<p>Introduce la siguiente l\u00ednea de c\u00f3digo, que ser\u00e1 la ejecutada cuando el usuario haga clic sobre el bot\u00f3n ScanButton:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Barcode1<\/span><span class=\"hljs-selector-class\">.StartScan<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Y esa simple l\u00ednea de c\u00f3digo es todo lo que necesitas para que se muestre la interfaz de usuario que te permitir\u00e1 escanear cualquiera de los diferentes tipos de c\u00f3digos soportados mediante cualquiera de las c\u00e1maras compatibles que est\u00e9n conectadas a tu Mac, incluido por ejemplo to iPhone a trav\u00e9s de Continuity.<\/p>\n\n\n\n<p>Ahora bien, cada vez que nuestra instancia Barcode1 reconozca un c\u00f3digo llamar\u00e1 al evento ScanCompleted. Selecciona dicho evento bajo Barcode1 para introducir la siguiente l\u00ednea en el Editor de C\u00f3digo asociado:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">MessageBox(value)<\/code><\/span><\/pre>\n\n\n<p>Es decir, nos mostrar\u00e1 un mensaje con el c\u00f3digo reconocido por la c\u00e1mara y que se recibe en el evento como una cadena de texto.<\/p>\n\n\n\n<p>Selecciona el evento ScanCancelled e introduce la siguiente l\u00ednea de c\u00f3digo:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">MessageBox(<span class=\"hljs-string\">\"Operaci\u00f3n de Escaneo Cancelada.\"<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Por \u00faltimo, selecciona el evento ScanFailed e introduce la siguiente l\u00ednea de c\u00f3digo en el Editor de C\u00f3digo asociado:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">MessageBox(<span class=\"hljs-string\">\"Se ha producido un error en la operaci\u00f3n de escaneo.\"<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>\u00a1Listo, nuestra app de ejemplo est\u00e1 lista para funcionar! Ejec\u00fatala pulsando el bot\u00f3n Run en la barra superior del IDE y prueba a escanear unos cuantos c\u00f3digos as\u00ed como a generar tus propios c\u00f3digos QR a partir del texto introducido en el campo de texto.<\/p>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-22e4f59c\"><h2 class=\"uagb-heading-text\">Conclusi\u00f3n<\/h2><\/div>\n\n\n\n<p>Como has podido comprobar, \u00a1quiz\u00e1 has tenido que emplear m\u00e1s tiempo en dise\u00f1ar la interfaz de usuario propiamente dicha que en a\u00f1adir la funcionalidad tanto para generar como para escanear c\u00f3digos mediante el control Barcode de Xojo! Adem\u00e1s, la app creada no s\u00f3lo funcionar\u00e1 en macOS, sino que tambi\u00e9n lo har\u00e1 tanto en Windows como en Linux.<\/p>\n\n\n\n<p>En cualquier caso, te garantizo que la cantidad de tiempo invertida habr\u00e1 sido infinitamente menor que si hubieses abordado el mismo tipo de proyecto utilizando cualquier otro entorno de desarrollo.<\/p>\n\n\n\n<p>\u00bfLo mejor de todo? Esta es s\u00f3lo una peque\u00f1a muestra de lo que puedes crear a partir de este embri\u00f3n de proyecto, estoy convencido de que tu imaginaci\u00f3n se encargar\u00e1 del resto a la hora de a\u00f1adir nuevas capacidades. Para ello puedes encontrar todo tipo de ayuda en la documentaci\u00f3n disponible desde el propio IDE o bien a trav\u00e9s de <a href=\"https:\/\/documentation.xojo.com\/\">https:\/\/documentation.xojo.com<\/a><\/p>\n\n\n\n<p>\u00a1Feliz programaci\u00f3n con Xojo!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mira a tu alrededor: c\u00f3digos QR, de barras o de cualquier otro tipo por todas partes; desde los billetes de avi\u00f3n a los medicamentos o cualquier producto por trivial que sea. No cabe duda de que especialmente los c\u00f3digos QR han sufrido una verdadera eclosi\u00f3n, especialmente motivada por la maldita pandemia del Covid. Ahora bien,&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/\">Read more<\/a><\/p>\n","protected":false},"author":269,"featured_media":28790,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10648],"tags":[],"collections":[],"class_list":{"0":"post-28663","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-lenguajes-de-programacion","8":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Crear una app macOS capaz de generar y reconocer c\u00f3digos QR<\/title>\n<meta name=\"description\" content=\"Explora la popularidad de los c\u00f3digos QR y c\u00f3mo Xojo facilita la creaci\u00f3n de aplicaciones macOS para leer y generarlos con un proceso simple.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crear una app macOS capaz de generar y reconocer c\u00f3digos QR\" \/>\n<meta property=\"og:description\" content=\"Explora la popularidad de los c\u00f3digos QR y c\u00f3mo Xojo facilita la creaci\u00f3n de aplicaciones macOS para leer y generarlos con un proceso simple.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-07-18T10:11:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-07-23T07:36:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Javier\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Bloguintosh\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Javier\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/\"},\"author\":{\"name\":\"Javier\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8647944f90883a9526705a0998ffbe1a\"},\"headline\":\"Crear una app macOS capaz de generar y reconocer c\u00f3digos QR\",\"datePublished\":\"2024-07-18T10:11:12+00:00\",\"dateModified\":\"2024-07-23T07:36:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/\"},\"wordCount\":2428,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-scaled.jpg\",\"articleSection\":[\"Lenguajes de programaci\u00f3n\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/\",\"name\":\"Crear una app macOS capaz de generar y reconocer c\u00f3digos QR\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-scaled.jpg\",\"datePublished\":\"2024-07-18T10:11:12+00:00\",\"dateModified\":\"2024-07-23T07:36:11+00:00\",\"description\":\"Explora la popularidad de los c\u00f3digos QR y c\u00f3mo Xojo facilita la creaci\u00f3n de aplicaciones macOS para leer y generarlos con un proceso simple.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-scaled.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-scaled.jpg\",\"width\":2560,\"height\":1707,\"caption\":\"crear una app\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Lenguajes de programaci\u00f3n\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Crear una app macOS capaz de generar y reconocer c\u00f3digos QR\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8647944f90883a9526705a0998ffbe1a\",\"name\":\"Javier\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7d8697b4578139fa315e8e8058abaf814935c00af9f9f5faac583bdef6e4c334?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7d8697b4578139fa315e8e8058abaf814935c00af9f9f5faac583bdef6e4c334?s=96&d=mm&r=g\",\"caption\":\"Javier\"},\"description\":\"Software Engineer at Xojo, Inc.\",\"sameAs\":[\"https:\/\/www.xojo.com\",\"https:\/\/x.com\/Bloguintosh\",\"http:\/\/youtube.com\/goxojo\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/javier\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Crear una app macOS capaz de generar y reconocer c\u00f3digos QR","description":"Explora la popularidad de los c\u00f3digos QR y c\u00f3mo Xojo facilita la creaci\u00f3n de aplicaciones macOS para leer y generarlos con un proceso simple.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/","og_locale":"en_US","og_type":"article","og_title":"Crear una app macOS capaz de generar y reconocer c\u00f3digos QR","og_description":"Explora la popularidad de los c\u00f3digos QR y c\u00f3mo Xojo facilita la creaci\u00f3n de aplicaciones macOS para leer y generarlos con un proceso simple.","og_url":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2024-07-18T10:11:12+00:00","article_modified_time":"2024-07-23T07:36:11+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-scaled.jpg","type":"image\/jpeg"}],"author":"Javier","twitter_card":"summary_large_image","twitter_creator":"@Bloguintosh","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Javier","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/"},"author":{"name":"Javier","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8647944f90883a9526705a0998ffbe1a"},"headline":"Crear una app macOS capaz de generar y reconocer c\u00f3digos QR","datePublished":"2024-07-18T10:11:12+00:00","dateModified":"2024-07-23T07:36:11+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/"},"wordCount":2428,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-scaled.jpg","articleSection":["Lenguajes de programaci\u00f3n"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/","url":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/","name":"Crear una app macOS capaz de generar y reconocer c\u00f3digos QR","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-scaled.jpg","datePublished":"2024-07-18T10:11:12+00:00","dateModified":"2024-07-23T07:36:11+00:00","description":"Explora la popularidad de los c\u00f3digos QR y c\u00f3mo Xojo facilita la creaci\u00f3n de aplicaciones macOS para leer y generarlos con un proceso simple.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-scaled.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-scaled.jpg","width":2560,"height":1707,"caption":"crear una app"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/crear-una-app-macos-capaz-de-generar-y-reconocer-codigos-qr\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Lenguajes de programaci\u00f3n","item":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/"},{"@type":"ListItem","position":3,"name":"Crear una app macOS capaz de generar y reconocer c\u00f3digos QR"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8647944f90883a9526705a0998ffbe1a","name":"Javier","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/7d8697b4578139fa315e8e8058abaf814935c00af9f9f5faac583bdef6e4c334?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7d8697b4578139fa315e8e8058abaf814935c00af9f9f5faac583bdef6e4c334?s=96&d=mm&r=g","caption":"Javier"},"description":"Software Engineer at Xojo, Inc.","sameAs":["https:\/\/www.xojo.com","https:\/\/x.com\/Bloguintosh","http:\/\/youtube.com\/goxojo"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/javier\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-600x600.jpg","author_info":{"display_name":"Javier","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/javier\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-scaled.jpg",2560,1707,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-300x200.jpg",300,200,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-768x512.jpg",768,512,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-1024x683.jpg",1024,683,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-1536x1024.jpg",1536,1024,true],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-2048x1365.jpg",2048,1365,true],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-100x100.jpg",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/07\/10200835-1-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Javier","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/javier\/"},"uagb_comment_info":0,"uagb_excerpt":"Mira a tu alrededor: c\u00f3digos QR, de barras o de cualquier otro tipo por todas partes; desde los billetes de avi\u00f3n a los medicamentos o cualquier producto por trivial que sea. No cabe duda de que especialmente los c\u00f3digos QR han sufrido una verdadera eclosi\u00f3n, especialmente motivada por la maldita pandemia del Covid. Ahora bien,&#8230;&hellip;","lang":"es","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/28663","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/269"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=28663"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/28663\/revisions"}],"predecessor-version":[{"id":28791,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/28663\/revisions\/28791"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/28790"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=28663"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=28663"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=28663"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=28663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}