{"id":32159,"date":"2025-02-20T16:37:28","date_gmt":"2025-02-20T15:37:28","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=32159"},"modified":"2025-02-20T16:37:30","modified_gmt":"2025-02-20T15:37:30","slug":"apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/","title":{"rendered":"Apps macOS: Desde el Sandboxing hasta la Notarizaci\u00f3n, los Fundamentos"},"content":{"rendered":"\n<p>Probablemente ya est\u00e9s familiarizado con t\u00e9rminos como Sandboxing, Hardened Runtime y Notarizaci\u00f3n. Despu\u00e9s de todo, estas son capacidades requeridas si tienes previsto distribuir tus apps macOS a trav\u00e9s de la Mac App Store. De igual modo, y a partir de macOS Sequoia 15, Apple ha reforzado incluso m\u00e1s las protecciones relacionadas con la seguridad de las apps al ser ejecutadas. Por ejemplo, era bastante com\u00fan el poder utilizar COntrol + Clic sobre cualquier app macOS descargada de internet, y que no estuviese firmada, para simplemente seleccionar la opci\u00f3n Abrir en el men\u00fa contextual y as\u00ed ejecutarla. Eso ya no es posible hacerlo de forma tan sencilla en macOS Sequoia.<\/p>\n\n\n\n<p>De hecho, Apple recomienda Notarizar el software incluso si tienes pensado distribuirlo desde tu propio sitio web, fuera de la Mac App Store. Pero, \u00a1no te preocupes! Actualmente existen m\u00faltiples opciones (m\u00e1s all\u00e1 de Xcode) que te permiten realizar esta tarea, incluso si las apps han sido creadas y compiladas con Xojo. A lo largo de este art\u00edculo ver\u00e1s como activar el Sanboxing, el Hardened Runtime e incluso Notarizar sobre una sencilla aplicaci\u00f3n de ejemplo. Por supuesto, este art\u00edculo s\u00f3lo se centra en los fundamentos, y depende de ti leer la documentaci\u00f3n relacionada en el sitio web de Apple para a\u00f1adir las entradas, tanto los correspondientes a los Entitlements como a las entradas adicionales de clave\/valor para el archivo Info.plist, requeridos en el caso de tu app en concreto; como por ejemplo el acceso a archivos, acceso a la c\u00e1mara o micr\u00f3fono, acceso de red, etc.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-un-poco-de-tierra-en-comun\">Un poco de Tierra en Com\u00fan<\/h2>\n\n\n\n<p>Si est\u00e1s utilizando Xojo 2024r4 o posterior, comprobar\u00e1s que la aplicaci\u00f3n de Sandboxing, Hardened Runtime y la Notarizaci\u00f3n est\u00e1n integrados en el IDE; pero en el caso de que est\u00e9s utilizando una versi\u00f3n anterior de Xojo (o bien cualquier otro entorno de desarrollo), entonces a continuaci\u00f3n ver\u00e1s como podr\u00e1s hacer dichas operaciones mediante la ejecuci\u00f3n de diferentes comandos desde el Terminal.<\/p>\n\n\n\n<p>Puede que en este momento tu cabeza est\u00e9 dando vueltas en el caso de que no est\u00e9s familiarizado con estos t\u00e9rminos relacionado con la seguridad de las apps; as\u00ed que, \u00bfa qu\u00e9 se refieren t\u00e9rminos como Sandbox, Hardened Runtime y Notarizaci\u00f3n cuando se aplican a las apps de macOS?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-sandboxing\">Sandboxing<\/h2>\n\n\n\n<p>Cuando una app de macOS tiene activado el Sandboxing esto significa que macOS crear\u00e1 un contenedor exclusivo para todo lo relacionado con la app durante su primera ejecuci\u00f3n. Esto es lo que tambi\u00e9n ocurre, por ejemplo, cada vez que instalamos una app de iOS. Dicho contenedor tendr\u00e1 su propia estructura de carpetas para accede a elementos como los Documentos, Im\u00e1genes, Descargas, etc. Piensa en ello como el espacio de ejecuci\u00f3n privado para la app:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.xojo.com\/wp-content\/uploads\/2024\/08\/1-Container.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>Por supuesto, <a href=\"https:\/\/developer.apple.com\/documentation\/security\/app_sandbox?language=objc\">te estar\u00e1n esperando algunos entitlements<\/a> requeridos para que tu app con Sandblxing aplicado pueda acceder a los archivos creados por otras apps (incluyendo el Escritorio, la carpeta de Descargas, Pel\u00edculas, M\u00fasica, im\u00e1genes, etc), entre otras cosas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-hardened-runtime\">Hardened Runtime<\/h2>\n\n\n\n<p>Cuando se activa para tu app macOS, el Hardened Runtime a\u00f1ade una capa extra de protecci\u00f3n al c\u00f3digo en ejecuci\u00f3n propiamente dicho. Por ejemplo, evita cierta clase de explouts, como la inyecci\u00f3n de c\u00f3digo, el secuestro de biblioteca vinculada din\u00e1micamente (DLL) y la manipulaci\u00f3n del espacio de memoria del proceso. Este tipo de protecci\u00f3n tambi\u00e9n se mejora mediante la <a href=\"https:\/\/support.apple.com\/en-us\/102149\">Protecci\u00f3n de Integridad del Sistema en macOS (SIP).<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-notarizacion\">Notarizaci\u00f3n<\/h2>\n\n\n\n<p>En resumen, se trata de una tercera capa de confianza para los potenciales usuarios de tu app macOS. Cuando la app est\u00e1 notarizada, esto asegura que el software firmado con un Identificador de Desarrollador determinado ha sido comprobado por Apple en busca de componentes maliciosos. No est\u00e1 relacionado con el proceso de revisi\u00f3n realizado por Apple cuando se env\u00eda la app para su distribuci\u00f3n a la Mac app Store, sino con la <a href=\"https:\/\/support.apple.com\/en-gb\/guide\/security\/sec5599b66df\/web\">tecnolog\u00eda Gatekeeper de macOS<\/a>. Por tanto, cuando una app notarizada se descarga de Internet, Gatekeeper utilizar\u00e1 el ticket de notarizaci\u00f3n asociado con la app o archivo DMG para proporcionar una informaci\u00f3n m\u00e1s significativa sobre el origen de la app, incluyendo el hecho de si es seguro o no su ejecuci\u00f3n.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.xojo.com\/wp-content\/uploads\/2024\/08\/2-Gatekeeper.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-preparacion\">Preparaci\u00f3n<\/h2>\n\n\n\n<p>Para poder seguir este art\u00edculo necesitaras:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Xojo<\/strong>. <a href=\"https:\/\/www.xojo.com\/download\">Desc\u00e1rgalo para macOS<\/a> si no lo has hecho ya; en el caso de que quieras crear y aplicar este proceso para aquellas apps nativas creadas con Xojo. (Aunque tambi\u00e9n se puede aplicar sobre los bundle de aplicaci\u00f3n creados mediante otras herramientas).<\/li>\n\n\n\n<li><strong>macOS 11.3<\/strong> o posterior.<\/li>\n\n\n\n<li><strong>Xcode 13 o posterior<\/strong>. Ejec\u00fatalo al menos una vez para asegurarte de que est\u00e1n instalados todos los SDK y componentes requeridos.<\/li>\n\n\n\n<li><strong>Apple Developer ID<\/strong>. Es preciso que se disponga de una membres\u00eda de pago en el programa Apple Developer. Tambi\u00e9n has de asegurarte de que los certificados est\u00e9n instalados en tu mac (puede realizarse desde el propio Xcode).<\/li>\n\n\n\n<li><strong>Conexi\u00f3n a Internet<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p>Con todos estos requisitos cumplidos, abre Xojo para crear un proyecto Desktop para macOS y crea un dise\u00f1o b\u00e1sico en la ventana por omisi\u00f3n. No es preciso que la app ofrezca ninguna funcionalidad en absoluto para mantener nuestro foco en el tema que estamos tratando. Luego, utiliza Build Settings &gt; macOS &gt; Mac App Name para proporcionar un nombre a la aplicaci\u00f3n cuando se compile (para este ejemplo utilizaremos &#8220;SandboxedApp&#8221;). Si compilas la app de macOS con otra herramienta, el resultado ha de ser un bundle est\u00e1ndar de app para macOS.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.xojo.com\/wp-content\/uploads\/2024\/08\/3-XojoProjectName.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>Por \u00faltimo, guarda el proyecto desde el IDE de Xojo (por ejemplo en la carpeta Documentos), y haz clic en el boton Build para compilar la app. En este punto no se requiere la asignaci\u00f3n del valor Developer ID que deber\u00eda de introducirse en la secci\u00f3n Build Settings &gt; macOS &gt; Sign, dado que la firmaremos (de nuevo) en los siguientes pasos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-crear-el-archivo-de-entitlements\">Crear el archivo de Entitlements<\/h2>\n\n\n\n<p>El archivo de entitlements es muy similar al archivo Info.plist que probablemente ya conozcas, encargado de contener los pares de clave\/valor para que la app funcione correctamente. El contenido de ambos archivos est\u00e1 en formato XML, y la \u00fanica diferencia es que, mientras que el archivo Info.plist est\u00e1 generado autom\u00e1ticamente por Xojo, en el caso del archivo Entitlements deber\u00e1s de crearlo manualmente tu utilizando tu editor de textos preferido.<\/p>\n\n\n\n<p>Por tanto, abre el editor de textos (existen muchas opciones, tanto gratuitas como de pago; personalmente tiendo a utilizar BBEdit de BareBones Software). A\u00f1ade las siguientes l\u00edneas de c\u00f3digo en el documento de texto y gu\u00e1rdalo con el nombre &#8220;Entitlements.plist&#8221; (si lo guardas en la misma carpeta que la utilizada a la hora de compilar tu app macOS, mejor). Este es el archivo en el que probablemente querr\u00e1s a\u00f1adir m\u00e1s entradas en funci\u00f3n de los requerimientos espec\u00edficos de tu app:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;!DOCTYPE plist SYSTEM \"file:\/\/localhost\/System\/Library\/DTDs\/PropertyList.dtd\"&gt;\n&lt;plist version=\"0.9\"&gt;\n&lt;dict&gt;\n  &lt;key&gt;com.apple.security.app-sandbox&lt;\/key&gt;\n  &lt;true\/&gt;\n&lt;\/dict&gt;\n&lt;\/plist&gt;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-aplica-sandboxing-a-tu-app\">Aplica Sandboxing a tu App<\/h2>\n\n\n\n<p>Con la app compilada y el archivo de entitlements ya creado, abre una ventana del Terminal y escribe el siguiente comando, pulsando a continuaci\u00f3n la tecla retorno:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&gt; codesign --force --deep --timestamp --entitlements &lt;ruta-al archivo-entitlements.plist&gt; -s \"Developer ID Application: &lt;tu-nombre-completo-de-desarrollador (incluyendo-el-id-de-equipo)&gt;\" &lt;ruta-al-bundle-de-tu-app&gt;<\/pre>\n\n\n\n<p>Una vez ejecutado el comando, ejecuta la app &#8220;SanboxedApp&#8221;, abre la app Monitor de Actividad y aseg\u00farate de que la opci\u00f3n Sandbox est\u00e9 activada en las opciones del men\u00fa Ver &gt; Columnas. Luego, utiliza el campo de b\u00fasquedas de la ventana principal para filtrar los procesos mostrados de modo que s\u00f3lo se liste tu app. Echa un vistazo al valor bajo la columna Sandbox y ver\u00e1s que la app se muestra ahora con el Sandboxing aplicado. Tambi\u00e9n puedes comprobar que se ha creado un Contendor para la app en la ruta Library\/Containers. Sal de la app de ejemplo cuando est\u00e9s listo.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.xojo.com\/wp-content\/uploads\/2024\/08\/4-Sandbox.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-hardened-runtime-0\">Hardened Runtime<\/h2>\n\n\n\n<p>Con nuestra app con el Sandboxing ya aplicado, veamos ahora como aplicarle la opci\u00f3n de Hardener Runtime. Nuevamente, escribe el siguiente comando en la l\u00ednea de comandos del Terminal:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&gt; codesign --force --deep --options runtime --timestamp --entitlements &lt;ruta-a-tu-archivo-entitlements.plist -s \"Developer ID Application: &lt;tu-nombre-completo-de-desarrollador (incluyendo-el-id-de-equipo)&gt;\" &lt;ruta-al-bundle-de-tu-app&gt;<\/pre>\n\n\n\n<p>Como puedes ver, no var\u00eda mucho con respecto al anterior comando. Todo lo que a\u00f1ade es el texto &#8220;-options runtime&#8221; responsable de activar el Hardened Runtime. Como puedes imaginar, este comando tambi\u00e9n activa el Sandboxing de la app al tiempo que activa el Hardened Runtime, ambas cosas a la vez.<\/p>\n\n\n\n<p>\u00bfQuieres comprobar si ha funcionado correctamente? Bien, escribe el siguiente comando en el Terminal:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&gt; codesign --display --verbose &lt;ruta-al-bundle-de-tu-app&gt;<\/pre>\n\n\n\n<p>Producir\u00e1 una salida similar a la siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Executable=&lt;ruta-al-bundle-de-tu-app&gt;\nIdentifier=com.xojo.sandboxedapp\nFormat=app bundle with Mach-O universal (x86_64 arm64)\nCodeDirectory v=20500 size=43297 <strong>flags=0x10000(runtime)<\/strong> hashes=1342+7 location=embedded\nSignature size=9100\nTimestamp=13 Aug 2024 at 12:51:28\u202fPM\nInfo.plist entries=15\nTeamIdentifier=************\nRuntime Version=11.1.0\nSealed Resources version=2 rules=13 files=4\nInternal requirements count=1 size=184<\/pre>\n\n\n\n<p>Es espec\u00edficamente el texto \u201cflags=0x1000(runtime)\u201d el que nos indica que, de hecho, la app cuenta con el Hardened Runtime activado. \u00a1Enhorabuena!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-notarizar-la-app\">Notarizar la App<\/h2>\n\n\n\n<p>Se trata del \u00faltimo paso, pero va a requerir de un paso adicional por nuestra parte. Dado que la l\u00ednea de comandos notarytool, empleada para notarizar la app, requiere del uso del ID y la contrase\u00f1a correspondientes a tu cuenta Apple ID, sumado al hecho que utiliza la autenticaci\u00f3n 2FA, resulta muy conveniente crear una contrase\u00f1a espec\u00edfica de aplicaci\u00f3n para ello.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-crear-una-contrasena-especifica-de-aplicacion\">Crear una Contrase\u00f1a Espec\u00edfica de Aplicaci\u00f3n<\/h2>\n\n\n\n<p>Sigue estos pasos para crear la contrase\u00f1a utilizada por el proceso notarytool:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Accede a <a href=\"https:\/\/appleid.apple.com\/\">appleid.apple.com<\/a><\/li>\n\n\n\n<li>En la secci\u00f3n Sign-in and Security, selecciona la opci\u00f3n App-Specific Passwords:<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.xojo.com\/wp-content\/uploads\/2024\/08\/5-AppSpecificPasswordA.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La anterior acci\u00f3n mostrar\u00e1 un nuevo di\u00e1logo en el que se listar\u00e1n todas las contrase\u00f1as espec\u00edficas de aplicaci\u00f3n que ya hubieses creado. Haz clic en el bot\u00f3n &#8220;+&#8221; para a\u00f1adir una nueva contrase\u00f1a:<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.xojo.com\/wp-content\/uploads\/2024\/08\/6-AppSpecificPasswordB.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Escribe un nombre significativo como el &#8220;T\u00edtulo&#8221; o descripci\u00f3n para tu nueva contrase\u00f1a en el di\u00e1logo presentado (notarytool podr\u00e1 ser uno bastante bueno):<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.xojo.com\/wp-content\/uploads\/2024\/08\/7-AppSpecificPasswordC.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Una vez que hagas clic en el bot\u00f3n Create es posible que debas de autenticarte de nuevo utilizando tu Apple ID para ello. Una vez realizado, se presentar\u00e1 un nuevo di\u00e1logo con la contrase\u00f1a generada. C\u00f3piala y escr\u00edbela o p\u00e9gala en un lugar seguro, dado que ser\u00e1 la que necesitemos en el siguiente paso.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-anadir-al-llavero-la-contrasena-especifica-de-notarytool\">A\u00f1adir al Llavero la contrase\u00f1a espec\u00edfica de notarytool<\/h2>\n\n\n\n<p>Dado que esta contrase\u00f1a espec\u00edfica de aplicaci\u00f3n se utilizar\u00e1 por la utilidad notarytool en la l\u00ednea de comandos, ser\u00e1 m\u00e1s que conveniente almacenarla en el Llavero de macOS. Para ello, escribe el siguiente comando en el Terminal y pulsa la tecla Retorno:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&gt; xcrun notarytool store-credentials \"notarytool-password\" --apple-id \"&lt;tu-Apple-ID&gt;\" --team-id &lt;tu-team-id&gt; --password &lt;la-contrase\u00f1a-copiada-en-el-paso-anterior&gt;<\/pre>\n\n\n\n<p>Una vez ejecutado podr\u00e1s ver la contrase\u00f1a a\u00f1adida en la app Llavero bajo el nombre de \u201cnotarytool-password\u201d:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/blog.xojo.com\/wp-content\/uploads\/2024\/08\/8-NotaryToolPassword.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-crear-un-archivo-zip-para-la-app\">Crear un archivo Zip para la app<\/h2>\n\n\n\n<p>El proceso de notarizaci\u00f3n es realizado por el servicio de notarizaci\u00f3n de Apple ejecutado en sus servidores; esto es, en Internet; lo que significa que notarytool necesita enviar (subir) el bundle de tu app en un formato de archivo apropiado. Existen dos opciones: como archivo DMG (que ha de ser firmado antes de subirlo), o bien como archivo Zip, que es m\u00e1s r\u00e1pido y tambi\u00e9n sencillo (\u00bfsabes cu\u00e1n sencillo es crear archivos Zip en el lenguaje de programaci\u00f3n Xojo?).<\/p>\n\n\n\n<p>Por tanto, para poder subir nuestra app para notarizarla, hemos de crear un archivo Zip en primer lugar. Nuevamente, es momento de introducir un nuevo comando en el Terminal:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&gt; \/usr\/bin\/ditto -c -k --keepParent &lt;ruta-al-bundle-de-tu-app&gt; &lt;ruta-al-archivo-donde-guardar-el-zip\/nombre-de-archivo.zip&gt;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-subir-la-app-para-notarizar\">Subir la app para Notarizar<\/h2>\n\n\n\n<p>Con el archivo Zip ya creado, ya tenemos todas la piezas para enviarla al proceso de notarizaci\u00f3n. El tiempo invertido por dicho proceso puede variar (y lo har\u00e1) atendiendo a diversos factores.<\/p>\n\n\n\n<p>Para enviar el archivo, escribe el siguiente comando en la ventana del Terminal:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&gt; xcrun notarytool submit &lt;ruta-al-archivo-donde-guardar-el-zip\/nombre-de-archivo.zip&gt; --keychain-profile \"notarytool-password\" --wait<\/pre>\n\n\n\n<p>Tras pulsar la tecla de Retorno comenzar\u00e1 el proceso y el Terminal te mostrar\u00e1 informaci\u00f3n sobre el progreso; algo similar a esto:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Conducting pre-submission checks for &lt;nombre-de-tu-archivo-zip&gt; and initiating connection to the Apple notary service...\nSubmission ID received\n  id: &lt;some-id-number-goes-here&gt;\nUpload progress: 100.00% (8.65 MB of 8.65 MB)   \nSuccessfully uploaded file\n  id: &lt;some-id-number-goes-here&gt;\n  path: &lt;path-of-the-zip-file&gt;\nWaiting for processing to complete.\nCurrent status: Accepted........\nProcessing complete\n  id: &lt;guarda-este-id-en-un-lugar-seguro-lo-necesitar\u00e1s-luego&gt;\n  <strong>status: Accepted<\/strong><\/pre>\n\n\n\n<p>\u00bfHas observado la \u00faltima l\u00ednea? El texto &#8220;status: Accepted&#8221; significa que todo ha funcionado correctamente y que el proceso de notarizaci\u00f3n ha tenido \u00e9xito; pero, \u00a1mejor si lo comprobamos! Escribe el siguiente comando en la ventana del Terminal. Este indicar\u00e1 a la herramienta notarytool que descargue el archivo de registro en formato JSON y que lo guarde en la ruta indicada. Es un buen h\u00e1bito hacerlo, ya que dicho archivo de registro tambi\u00e9n incluir\u00e1 cualquier error eventual y la explicaci\u00f3n sobre dichos posibles errores encontrados durante el proceso de notarizaci\u00f3n, incluyendo aquellos relacionados con la app propiamente dicha:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&gt; xcrun notarytool log &lt;escribe-aqui-el-valor-guardado-en-lugar-seguro-correspondiente-al-campo-id-de-la-salida-anterior&gt; --keychain-profile \"notarytool-password\" &lt;ruta-para-guardar-el-registro.json&gt;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-grapa-el-ticket\">\u00a1Grapa el Ticket!<\/h2>\n\n\n\n<p>Asumiendo que todo haya funcionado correctamente, es el momento de &#8220;grapar&#8221; el ticket de notarizaci\u00f3n sobre la app propiamente dicha. No es requerido, pero s\u00ed conveniente para evitar posteriores comprobaciones en l\u00ednea cuando el usuario ejecute la app o Gatekeeper la inspeccione.<\/p>\n\n\n\n<p>Lo has adivinado, esto significa ejecutar un nuevo comando desde la ventana del Terminal sobre la app en la que ya se ha aplicado Sandboxing y Hardened Runtime (no sobre el archivo Zip que has creado y enviado utilizando notarytool):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&gt; xcrun stapler staple \"&lt;ruta-al-bundle-de-la-app-firmada-con-sandboxing-y-hardened-runtime&gt;\"<\/pre>\n\n\n\n<p>Tras esto, puedes comprobar que todo ha funcionado correctamente utilizando el siguiente comando:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&gt; spctl -a -vvv -t install &lt;ruta-al-bundle-de-la-app-firmada-con-sandboxing-y-hardened-runtime&gt;<\/pre>\n\n\n\n<p>Y ver\u00e1s una salida similar a la siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">source=Notarized Developer ID\norigin=&lt;el-developer-id-completo&gt;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-distribucion-de-la-app\">Distribuci\u00f3n de la App<\/h2>\n\n\n\n<p>Correcto, pero probablemente querr\u00e1s distribuir tu app en Internet utilizando un contenedor DMG. En este caso, sigue estos pasos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Crea un archivo (container) DMG.<\/li>\n\n\n\n<li>Copia el bundle de la app ya notarizada en el DMG.<\/li>\n\n\n\n<li>Notariza el archivo DMG.<\/li>\n\n\n\n<li>Grapa el ticket sobre el archivo DMG.<\/li>\n<\/ul>\n\n\n\n<p>De esa forma el contenedor DMG estar\u00e1 notarizado junto con el bundle de la app que contiene.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusiones\">Conclusiones<\/h2>\n\n\n\n<p>Como hemos visto, todo el proceso, desde la aplicaci\u00f3n de Sandboxing, la aplicaci\u00f3n de Hardened Runtime y la Notarizaci\u00f3n, implica una buena cantidad de comandos desde el Terminal, incluyendo la creaci\u00f3n de un archivo Zip. Pero la buena noticia es que todo este proceso puede automatizarse en las versiones de Xojo anteriores a Xojo 2024r4, ya que a partir de dicha versi\u00f3n todos estos procesos est\u00e1n automatizados y disponibles desde el propio IDE.<\/p>\n\n\n\n<p>Como se ha dicho al principio, este art\u00edculo s\u00f3lo toca los fundamentos y no profundiza sobre la creaci\u00f3n de los Perfiles de Aprovisionamiento (asociados con las capacidades requeridas por la app), los Entitlements que tu app pueda requerir para su correcto funcionamiento, o cualquier otro tema relacionado; de modo que probablemente encuentres de inter\u00e9s la siguiente documentaci\u00f3n disponible en el portal Apple Developer:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/developer.apple.com\/help\/account\/manage-profiles\/create-a-development-provisioning-profile\/\">Perfiles de Aprovisionamiento<\/a>.<\/li>\n\n\n\n<li><a href=\"https:\/\/developer.apple.com\/documentation\/bundleresources\/entitlements?language=objc\">Entitlements de macOS<\/a>.<\/li>\n\n\n\n<li><a href=\"https:\/\/developer.apple.com\/documentation\/security\/app_sandbox?language=objc\">Sandbox en macOS<\/a>.<\/li>\n\n\n\n<li><a href=\"https:\/\/developer.apple.com\/documentation\/security\/hardened_runtime?language=objc\">Hardened Runtime en macOS<\/a>.<\/li>\n\n\n\n<li><a href=\"https:\/\/developer.apple.com\/documentation\/security\/notarizing_macos_software_before_distribution?language=objc\">Notarizaci\u00f3n en macOS<\/a>.<\/li>\n<\/ul>\n\n\n\n<p>\u00a1Feliz Programaci\u00f3n!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Probablemente ya est\u00e9s familiarizado con t\u00e9rminos como Sandboxing, Hardened Runtime y Notarizaci\u00f3n. Despu\u00e9s de todo, estas son capacidades requeridas si tienes previsto distribuir tus apps macOS a trav\u00e9s de la Mac App Store. De igual modo, y a partir de macOS Sequoia 15, Apple ha reforzado incluso m\u00e1s las protecciones relacionadas con la seguridad de&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/\">Read more<\/a><\/p>\n","protected":false},"author":269,"featured_media":32204,"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":[10747],"collections":[],"class_list":{"0":"post-32159","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-lenguajes-de-programacion","8":"tag-desarrollo-web","9":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Apps macOS: Fundamentos de Sandboxing, Notarizaci\u00f3n y Seguridad<\/title>\n<meta name=\"description\" content=\"Lee el art\u00edculo de Javier para entender c\u00f3mo las nuevas medidas de seguridad en macOS Sequoia 15 afectan a las apps no firmadas.\" \/>\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\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Apps macOS: Desde el Sandboxing hasta la Notarizaci\u00f3n, los Fundamentos\" \/>\n<meta property=\"og:description\" content=\"Lee el art\u00edculo de Javier para entender c\u00f3mo las nuevas medidas de seguridad en macOS Sequoia 15 afectan a las apps no firmadas.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/\" \/>\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=\"2025-02-20T15:37:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-20T15:37:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1792\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\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\\\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/lenguajes-de-programacion\\\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\\\/\"},\"author\":{\"name\":\"Javier\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/8647944f90883a9526705a0998ffbe1a\"},\"headline\":\"Apps macOS: Desde el Sandboxing hasta la Notarizaci\u00f3n, los Fundamentos\",\"datePublished\":\"2025-02-20T15:37:28+00:00\",\"dateModified\":\"2025-02-20T15:37:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/lenguajes-de-programacion\\\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\\\/\"},\"wordCount\":2438,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/lenguajes-de-programacion\\\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t.webp\",\"keywords\":[\"Desarrollo web\"],\"articleSection\":[\"Lenguajes de programaci\u00f3n\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/lenguajes-de-programacion\\\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/lenguajes-de-programacion\\\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\\\/\",\"name\":\"Apps macOS: Fundamentos de Sandboxing, Notarizaci\u00f3n y Seguridad\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/lenguajes-de-programacion\\\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/lenguajes-de-programacion\\\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t.webp\",\"datePublished\":\"2025-02-20T15:37:28+00:00\",\"dateModified\":\"2025-02-20T15:37:30+00:00\",\"description\":\"Lee el art\u00edculo de Javier para entender c\u00f3mo las nuevas medidas de seguridad en macOS Sequoia 15 afectan a las apps no firmadas.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/lenguajes-de-programacion\\\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/lenguajes-de-programacion\\\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/lenguajes-de-programacion\\\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t.webp\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t.webp\",\"width\":1792,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/lenguajes-de-programacion\\\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\\\/#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\":\"Apps macOS: Desde el Sandboxing hasta la Notarizaci\u00f3n, los Fundamentos\"}]},{\"@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:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7d8697b4578139fa315e8e8058abaf814935c00af9f9f5faac583bdef6e4c334?s=96&d=mm&r=g\",\"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":"Apps macOS: Fundamentos de Sandboxing, Notarizaci\u00f3n y Seguridad","description":"Lee el art\u00edculo de Javier para entender c\u00f3mo las nuevas medidas de seguridad en macOS Sequoia 15 afectan a las apps no firmadas.","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\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/","og_locale":"en_US","og_type":"article","og_title":"Apps macOS: Desde el Sandboxing hasta la Notarizaci\u00f3n, los Fundamentos","og_description":"Lee el art\u00edculo de Javier para entender c\u00f3mo las nuevas medidas de seguridad en macOS Sequoia 15 afectan a las apps no firmadas.","og_url":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2025-02-20T15:37:28+00:00","article_modified_time":"2025-02-20T15:37:30+00:00","og_image":[{"width":1792,"height":1024,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t.webp","type":"image\/webp"}],"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\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/"},"author":{"name":"Javier","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8647944f90883a9526705a0998ffbe1a"},"headline":"Apps macOS: Desde el Sandboxing hasta la Notarizaci\u00f3n, los Fundamentos","datePublished":"2025-02-20T15:37:28+00:00","dateModified":"2025-02-20T15:37:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/"},"wordCount":2438,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t.webp","keywords":["Desarrollo web"],"articleSection":["Lenguajes de programaci\u00f3n"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/","url":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/","name":"Apps macOS: Fundamentos de Sandboxing, Notarizaci\u00f3n y Seguridad","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t.webp","datePublished":"2025-02-20T15:37:28+00:00","dateModified":"2025-02-20T15:37:30+00:00","description":"Lee el art\u00edculo de Javier para entender c\u00f3mo las nuevas medidas de seguridad en macOS Sequoia 15 afectan a las apps no firmadas.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t.webp","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t.webp","width":1792,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/apps-macos-desde-el-sandboxing-hasta-la-notarizacion-los-fundamentos\/#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":"Apps macOS: Desde el Sandboxing hasta la Notarizaci\u00f3n, los Fundamentos"}]},{"@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:\/\/secure.gravatar.com\/avatar\/7d8697b4578139fa315e8e8058abaf814935c00af9f9f5faac583bdef6e4c334?s=96&d=mm&r=g","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\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t-600x400.webp","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t-600x600.webp","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\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t.webp",1792,1024,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t-150x150.webp",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t-300x171.webp",300,171,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t-768x439.webp",768,439,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t-1024x585.webp",1024,585,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t-1536x878.webp",1536,878,true],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t.webp",1792,1024,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t-100x100.webp",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t-180x128.webp",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t-896x504.webp",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t-400x225.webp",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t-600x400.webp",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-20-16.36.16-A-horizontal-digital-illustration-of-a-macOS-developer-working-on-app-security-including-Sandboxing-and-Notarization.-The-developer-wearing-casual-t-600x600.webp",600,600,true]},"uagb_author_info":{"display_name":"Javier","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/javier\/"},"uagb_comment_info":0,"uagb_excerpt":"Probablemente ya est\u00e9s familiarizado con t\u00e9rminos como Sandboxing, Hardened Runtime y Notarizaci\u00f3n. Despu\u00e9s de todo, estas son capacidades requeridas si tienes previsto distribuir tus apps macOS a trav\u00e9s de la Mac App Store. De igual modo, y a partir de macOS Sequoia 15, Apple ha reforzado incluso m\u00e1s las protecciones relacionadas con la seguridad de&#8230;&hellip;","lang":"es","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/32159","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=32159"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/32159\/revisions"}],"predecessor-version":[{"id":32205,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/32159\/revisions\/32205"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/32204"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=32159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=32159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=32159"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=32159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}