{"id":3205,"date":"2017-04-10T10:15:32","date_gmt":"2017-04-10T17:15:32","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3205"},"modified":"2025-06-13T21:37:13","modified_gmt":"2025-06-14T04:37:13","slug":"couchbase-lite-embedded-in-ios-app-part1","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/couchbase-lite-embedded-in-ios-app-part1\/","title":{"rendered":"Primeros pasos con Couchbase Lite en tu aplicaci\u00f3n iOS : Parte 1"},"content":{"rendered":"<p>Este post explica c\u00f3mo puedes empezar a usar Couchbase Lite en tu aplicaci\u00f3n iOS. Couchbase Lite es una base de datos JSON embebida que puede funcionar de forma aut\u00f3noma, en una red P2P, o con un Sync Gateway como endpoint remoto. Aunque veremos el framework en el contexto de una App iOS en Swift, todo lo que se discute aqu\u00ed se aplica igualmente a apps m\u00f3viles desarrolladas en cualquier otra plataforma (Android, iOS (ObjC), Xamarin). Las desviaciones se especificar\u00e1n como tales. \u00a1Permanece atento a los posts relacionados para las otras plataformas!<\/p>\n<p><strong>NOTA<\/strong>:  Vamos a discutir Couchbase Mobile v1.4 que es la versi\u00f3n de producci\u00f3n actual. Hay una versi\u00f3n <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/whatsnew.html?language=ios\">Vista previa para desarrolladores de la versi\u00f3n 2.0 de Couchbase Mobile<\/a> . Hablaremos de ello en un pr\u00f3ximo art\u00edculo.<\/p>\n<h3><\/h3>\n<p><!--more--><\/p>\n<h3>Fondo<\/h3>\n<p>Couchbase Mobile Stack se compone de Couchbase Server, Couchbase Sync Gateway y Couchbase Lite embedded Database. Puede obtener m\u00e1s informaci\u00f3n sobre el servidor en la <a href=\"https:\/\/www.couchbase.com\/blog\/es\/getting-comfortable-with-couchbase-mobile-installing-couchbase-server\/\">Gu\u00eda de introducci\u00f3n a Couchbase Server<\/a> y el Sync Gateway en el\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/es\/getting-comfortable-couchbase-mobile-installing-sync-gateway\/\">Gu\u00eda de introducci\u00f3n a Couchbase Sync Gateway<\/a>.<\/p>\n<p>Asumir\u00e9 que est\u00e1s familiarizado con el desarrollo de aplicaciones iOS y los conceptos b\u00e1sicos de Swift. Si quieres leer sobre bases de datos NoSQL o Couchbase, puedes encontrar un mont\u00f3n de recursos en el\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/es\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">Couchbase<\/a>\u00a0sitio.<\/p>\n<p>Couchbase es de c\u00f3digo abierto. Todo lo que voy a utilizar aqu\u00ed es libre de probar.<\/p>\n<h3>Couchbase Lite<\/h3>\n<p>Couchbase Lite puede utilizarse en varios modos de despliegue.<\/p>\n<ul>\n<li><strong>Opci\u00f3n 1<\/strong>: Puede utilizarse como base de datos independiente multiplataforma integrada en un dispositivo.<\/li>\n<li><strong>Opci\u00f3n 2<\/strong>: Se puede utilizar junto con un Sync Gateway remoto que le permitir\u00eda sincronizar datos entre dispositivos. Este caso se puede extender para incluir la pila completa de Couchbase con el Couchbase Server. Desde la perspectiva de Couchbase Lite en el dispositivo, no deber\u00eda importar si hay un Couchbase Server o no, ya que Couchbase Lite interactuar\u00e1 con el Sync Gateway remoto.<\/li>\n<li><strong>Opci\u00f3n 3<\/strong>: Puede utilizarse en modo P2P<\/li>\n<\/ul>\n<p>Aqu\u00ed nos centraremos en la Opci\u00f3n 1.<\/p>\n<h4>API nativa<\/h4>\n<p>Couchbase Lite expone una API nativa para iOS, Android y Windows que permite a las aplicaciones interactuar f\u00e1cilmente con la plataforma Couchbase. Como desarrollador de aplicaciones, no tienes que preocuparte por el funcionamiento interno de la base de datos integrada de Couchbase Lite, sino que puedes centrarte en crear tu aplicaci\u00f3n. La API nativa te permite interactuar con el framework de Couchbase Lite como lo har\u00edas con otros frameworks\/subsistemas de la plataforma. De nuevo, hablaremos de Couchbase Mobile v1.4 en esta entrada del blog. Puedes obtener una lista completa de las APIs en nuestro<a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/references\/couchbase-lite\/couchbase-lite\/index.html\"> Desarrollador Couchbase<\/a> sitio.<\/p>\n<h3>Integraci\u00f3n<\/h3>\n<p>Hay muchas opciones para integrar el framework Couchbase Lite en tu aplicaci\u00f3n iOS. Probablemente la m\u00e1s sencilla sea utilizar sistemas de gesti\u00f3n de dependencias como <a href=\"https:\/\/cocoapods.org\">Cocoapods<\/a> o <a href=\"https:\/\/github.com\/Carthage\/Carthage\">Cartago<\/a>pero si lo prefiere, puede incluir manualmente el framework en su proyecto de aplicaci\u00f3n. Echa un vistazo a nuestro <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/installation\/ios\/index.html?language=ios\">Gu\u00eda de inicio de Couchbase Mobile<\/a>\u00a0para las distintas opciones de integraci\u00f3n.<\/p>\n<p><strong>Nota<\/strong> que en el caso de una aplicaci\u00f3n Swift, despu\u00e9s de importar el framework, tendr\u00e1s que crear un Bridging Header (si tu aplicaci\u00f3n no tiene ya uno) e importar los siguientes archivos<\/p>\n<pre class=\"wrap:true scroll:true lang:swift decode:true\" title=\"Cabecera puente\">#import &lt;CouchbaseLite\/CouchbaseLite.h&gt;\r\n#import &lt;CouchbaseLiteListener\/CBLListener.h&gt;<\/pre>\n<p>&nbsp;<\/p>\n<h3>Aplicaci\u00f3n de demostraci\u00f3n<\/h3>\n<p>Descargue el proyecto de demostraci\u00f3n de Xcode desde <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-starterapp\">Repo de Github<\/a> . Utilizaremos esta aplicaci\u00f3n como ejemplo en el resto del blog.<\/p>\n<pre class=\"lang:default decode:true\">git clone git@github.com:couchbaselabs\/couchbase-lite-ios-starterapp.git<\/pre>\n<p>&nbsp;<\/p>\n<p>Esta aplicaci\u00f3n utiliza Cocoapods para integrar el framework Couchbase Lite y pretende familiarizarte con los conceptos b\u00e1sicos del uso del framework Couchbase Lite. Una vez descargada, compila y ejecuta la aplicaci\u00f3n. Puedes usar esta aplicaci\u00f3n como punto de partida y extenderla para probar otras APIs.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5680 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/cblitedemo-compressor.gif\" alt=\"\" width=\"329\" height=\"600\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3>Flujo de trabajo b\u00e1sico<\/h3>\n<h4><strong>Creaci\u00f3n de una base de datos local<\/strong><\/h4>\n<p>Abra el\u00a0<em>DBMainMenuViewController.swift<\/em> y localice el archivo\u00a0<em>createDBWithName<\/em> funci\u00f3n.<\/p>\n<p>Esto crear\u00e1 una base de datos con el nombre especificado en la ruta por defecto (\/Library\/Application Support). Puede especificar un directorio diferente cuando instale la aplicaci\u00f3n <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/references\/couchbase-lite\/couchbase-lite\/manager\/manager\/index.html\">CBLManager<\/a> clase.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\" title=\"Crear base de datos\">do {\r\n    \/\/ 1: Set Database Options\r\n    let options = CBLDatabaseOptions()\r\n    options.storageType = kCBLSQLiteStorage\r\n    options.create = true\r\n\r\n     \/\/ 2: Create a DB if it does not exist else return handle to existing one\r\n     try cbManager.openDatabaseNamed(name.lowercased(), with: options)\r\n}\r\ncatch {\r\n\/\/ handle error\r\n}\r\n<\/pre>\n<ol>\n<li style=\"text-align: left\">Crea el objeto CBLDatabaseOptions para asociarlo con la base de datos. Por ejemplo, puede establecer la clave de cifrado que se utilizar\u00e1 con la base de datos mediante la propiedad encryptionKey. Explore las otras opciones en <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/references\/couchbase-lite\/couchbase-lite\/manager\/database-options\/index.html\">CBLDatabaseOptions<\/a> clase.<\/li>\n<li style=\"text-align: left\">Los nombres de las bases de datos deben estar en min\u00fasculas. La aplicaci\u00f3n de ejemplo pondr\u00e1 autom\u00e1ticamente los nombres en min\u00fasculas. Si tiene \u00e9xito, se crear\u00e1 una nueva base de datos local si no existe. Si existe, se devolver\u00e1 un \"handle\" de la base de datos existente.<\/li>\n<\/ol>\n<h4><strong>Listado de bases de datos<\/strong><\/h4>\n<p>Esto es muy sencillo. Abra el <em>DBListTableViewController.swift<\/em> expediente.  La direcci\u00f3n <em>allDatabaseNames<\/em> propiedad en <em>CBLManager<\/em> enumera las bases de datos creadas.<\/p>\n<h4><strong>A\u00f1adir un nuevo documento a una base de datos<\/strong><\/h4>\n<p>Abra el\u00a0<em>DocListTableViewController.swift<\/em> y localice el archivo\u00a0<em>crearDocConNombre<\/em> funci\u00f3n.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\" title=\"a\u00f1adir documento\">do {\r\n            \/\/ 1: Create Document with unique Id\r\n            let doc = self.db?.createDocument()\r\n             \r\n            \/\/ 2: Construct user properties Object\r\n            let userProps = [DocumentUserProperties.name.rawValue:name,DocumentUserProperties.overview.rawValue:overview]\r\n           \r\n            \/\/ 3: Add a new revision with specified user properties\r\n            let _ = try doc?.putProperties(userProps)            \r\n        }\r\n        catch  {\r\n         \/\/ handle error            \r\n        }<\/pre>\n<ol>\n<li>Como resultado de esta llamada, se crea un Documento con un Id \u00fanico<\/li>\n<li>Puede especificar un conjunto de propiedades de usuario como pares . Existe una alternativa en la que puede utilizar <em>CBLDocumentModel<\/em> para especificar los datos de su aplicaci\u00f3n. La direcci\u00f3n <em>CBLDocumentModel <\/em>s\u00f3lo est\u00e1 disponible para la plataforma iOS<em>.\u00a0<\/em>En nuestro ejemplo utilizaremos las propiedades &lt;key:value<\/li>\n<\/ol>\n<p>Esto crea una nueva revisi\u00f3n del documento con las propiedades de usuario especificadas<\/p>\n<h4><strong>Listado de documentos en la base de datos<\/strong><\/h4>\n<p>Abra el\u00a0<em>DocListTableViewController.swift<\/em> y localice el archivo\u00a0<em>getAllDocumentForDatabase<\/em>\u00a0funci\u00f3n<\/p>\n<pre class=\"wrap:true lang:swift decode:true\" title=\"listar documentos\">do {\r\n\u00a0 \u00a0 \u00a0 guard let dbName = dbName else {\r\n\u00a0 \u00a0 \u00a0     return\r\n\u00a0 \u00a0 \u00a0 \u00a0}\r\n\u00a0 \u00a0 \u00a0 \u00a0\/\/ 1. Get handle to DB with specified name\r\n\u00a0 \u00a0 \u00a0  self.db = try cbManager.existingDatabaseNamed(dbName)\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n       \/\/ 2. Create Query to fetch all documents. You can set a number of properties\r\n       \/\/ on the query object\r\n\u00a0 \u00a0 \u00a0 \u00a0liveQuery = self.db?.createAllDocumentsQuery().asLive()\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0  guard let liveQuery = liveQuery else {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0return\r\n\u00a0 \u00a0 \u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0\/\/ 3: You can optionally set a number of properties on the query object.\r\n\u00a0 \u00a0 \u00a0 \u00a0\/\/ Explore other properties on the query object\r\n\u00a0 \u00a0 \u00a0 \u00a0liveQuery.limit = UInt(UINT32_MAX) \/\/ All documents\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0\/\/ \u00a0 query.postFilter =\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0  \/\/4. Start observing for changes to the database\r\n\u00a0 \u00a0 \u00a0 \u00a0self.addLiveQueryObserverAndStartObserving()\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0 \u00a0\/\/ 5: Run the query to fetch documents asynchronously\r\n\u00a0 \u00a0 \u00a0 liveQuery.runAsync({ (enumerator, error) in\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0switch error {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  case nil:\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ 6: The \"enumerator\" is of type CBLQueryEnumerator and\r\n             \/\/ is an enumerator for the results\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  self.docsEnumerator = enumerator\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 default: \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 })\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 \u00a0 catch\u00a0 {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ handle error\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n<\/pre>\n<ol>\n<li>Obtener el acceso a la base de datos con el nombre especificado<\/li>\n<li>Crear un <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/references\/couchbase-lite\/couchbase-lite\/query\/query\/index.html\">CBLQuery<\/a> objeto. Esta consulta se utiliza para obtener todos los documentos. Puede crear un objeto de consulta normal o un objeto de consulta \"en vivo\". El objeto de consulta \"en vivo\" es de tipo <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/references\/couchbase-lite\/couchbase-lite\/query\/live-query\/index.html\">CBLLiveQuery<\/a> que se actualiza autom\u00e1ticamente cada vez que se producen cambios en la base de datos que afectan a los resultados de la consulta.<\/li>\n<li>El objeto de consulta tiene una serie de propiedades que pueden modificarse para personalizar los resultados. Pruebe a modificar las propiedades y vea el efecto en los resultados<\/li>\n<li>Tendr\u00e1 que a\u00f1adir expl\u00edcitamente un observador al objeto Live Query para ser notificado de los cambios en la base de datos. Discutiremos esto m\u00e1s a fondo en la secci\u00f3n \"Observar cambios en los documentos de la base de datos\".<strong>\u00a0<\/strong>No olvides retirar el observador y dejar de observar los cambios cuando ya no lo necesites.<\/li>\n<li>\u00a0Ejecute la consulta de forma as\u00edncrona. Tambi\u00e9n puede hacerlo de forma sincr\u00f3nica si lo prefiere, pero probablemente sea recomendable hacerlo de forma asincr\u00f3nica si los conjuntos de datos son grandes.<\/li>\n<li>Una vez que la consulta se ejecuta correctamente, se obtiene un mensaje <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/references\/couchbase-lite\/couchbase-lite\/query\/query-enumerator\/index.html\">CBLQueryEnumerator<\/a> objeto. El enumerador de consultas permite enumerar los resultados. Se presta muy bien como fuente de datos para la vista de tabla que muestra los resultados<\/li>\n<\/ol>\n<h4><strong>Editar un documento existente <\/strong><\/h4>\n<p><strong>\u00a0<\/strong>Abra el\u00a0<em>DocListTableViewController.swift<\/em> y localice el archivo\u00a0<em>updateDocConNombre\u00a0<\/em>funci\u00f3n.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\" title=\"edici\u00f3n de documentos\">do {\r\n\u00a0 \u00a0 \u00a0 \u00a0\/\/ 1: Get the document associated with the row\r\n\u00a0 \u00a0 \u00a0  let doc = self.docAtIndex(index)\r\n\u00a0\u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0\/\/ 2: Construct user properties Object with updated values\r\n\u00a0 \u00a0 \u00a0 \u00a0var userProps = [DocumentUserProperties.name.rawValue:name,DocumentUserProperties.overview.rawValue:overview]\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0\/\/ 3: If a previous revision of document exists, make sure to specify that.\r\n       \/\/ SInce its an update, it should exist!\r\n\u00a0 \u00a0 \u00a0 if let revId = doc?.currentRevisionID\u00a0 {\r\n\u00a0\u00a0  \u00a0 \u00a0 \u00a0 \u00a0 userProps[\"_rev\"] = revId\r\n\u00a0 \u00a0 \u00a0 }\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \/\/ 4: Add a new revision with specified user properties\r\n\u00a0 \u00a0 \u00a0 let savedRev = try doc?.putProperties(userProps)\r\n\u00a0 }\r\n\u00a0 catch\u00a0 {\r\n\u00a0        \/\/ handle error\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0  }\r\n\r\n\u00a0fileprivate func docAtIndex(_ index:Int) -&gt; CBLDocument? {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ 1. Get the CBLQueryRow object at specified index\r\n\u00a0 \u00a0 \u00a0 \u00a0 let queryRow = self.docsEnumerator?.row(at: UInt(index))\r\n\u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ 2: Get the document associated with the row\r\n\u00a0 \u00a0 \u00a0 \u00a0 let doc = queryRow?.document\u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0 return doc\r\n }\r\n<\/pre>\n<ol>\n<li>Obtener el control del documento que necesita ser editado. La direcci\u00f3n <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/references\/couchbase-lite\/couchbase-lite\/query\/query-enumerator\/index.html\">CBLQueryEnumerator<\/a> se puede consultar para obtener el nombre del documento en el \u00edndice seleccionado<\/li>\n<li>Actualice las propiedades del usuario como pares . Existe una alternativa en la que puede utilizar <em>CBLDocumentModel<\/em> para especificar los datos de su aplicaci\u00f3n. Esto s\u00f3lo est\u00e1 disponible en iOS. Usaremos propiedades  en nuestro ejemplo.<\/li>\n<li>Las actualizaciones del documento requerir\u00e1n un revisionId para indicar expl\u00edcitamente la revisi\u00f3n del documento que debe actualizarse. Esto se especifica utilizando \"<em>_rev<\/em>\". Esto es necesario para la resoluci\u00f3n de conflictos. M\u00e1s informaci\u00f3n <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/current\/guides\/couchbase-lite\/native-api\/revision\/index.html?language=ios\">aqu\u00ed<\/a>. Esto crea una nueva revisi\u00f3n del documento con las propiedades de usuario especificadas<\/li>\n<\/ol>\n<h4><strong>Borrar un documento existente <\/strong><\/h4>\n<p><strong>\u00a0<\/strong>Abra el\u00a0<em>DocListTableViewController.swift<\/em> y localice el archivo\u00a0<em>deleteDocAtIndex<\/em>\u00a0funci\u00f3n.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\" title=\"eliminar documento\">do {\r\n \u00a0 \u00a0 \u00a0 \/\/ 1: Get the document associated with the row\r\n\u00a0 \u00a0 \u00a0 \u00a0let doc = self.docAtIndex(index)\u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0\/\/ 2: Delete the document\r\n\u00a0 \u00a0 \u00a0 \u00a0try doc?.delete()\r\n\u00a0\u00a0 }\r\n\u00a0 \u00a0catch\u00a0 {\r\n\u00a0\u00a0\u00a0 \u00a0 \u00a0\/\/ Handle error\r\n\u00a0 \u00a0}\r\n<\/pre>\n<ol>\n<li>Obtiene el manejador del documento que necesita ser editado. Se puede consultar el CBLQueryEnumerator para obtener el identificador del documento en el \u00edndice seleccionado.<\/li>\n<li>Borrar el documento. Esto borra todas las revisiones del documento<\/li>\n<\/ol>\n<h4><strong>Observar los cambios en los documentos de la base de datos<\/strong><\/h4>\n<p>Abra el\u00a0<em>DocListTableViewController.swift<\/em> y localice el archivo\u00a0<em>addLiveQueryObserverAndStartObserving<\/em>\u00a0funci\u00f3n<\/p>\n<pre class=\"wrap:true lang:swift decode:true\" title=\"observador de consultas en directo\">\u00a0\u00a0 \/\/ 1. iOS Specific. Add observer to the live Query object\r\n\u00a0 \u00a0 \u00a0 \u00a0 liveQuery.addObserver(self, forKeyPath: \"rows\", options: NSKeyValueObservingOptions.new, context: nil)\r\n\u00a0\u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0\/\/ 2. Start observing changes\r\n\u00a0 \u00a0 \u00a0 \u00a0 liveQuery.start()\r\n<\/pre>\n<ol>\n<li>Para ser notificado de los cambios en la base de datos que afectan a los resultados de la consulta, a\u00f1ada un observador al objeto Live Query . Este es un caso en el que las versiones Swift\/ Obj C difieren de otras plataformas m\u00f3viles. Si est\u00e1 desarrollando en otras plataformas, puede llamar a la funci\u00f3n <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/references\/couchbase-lite\/couchbase-lite\/query\/live-query\/index.html\">addChangeListener<\/a> API en el objeto Live Query. Sin embargo, en Couchbase Lite 1.4, esta API no est\u00e1 soportada en las plataformas iOS y en su lugar aprovecharemos el patr\u00f3n Key-Value-Observer de iOS para ser notificados de los cambios.<strong>\u00a0<\/strong>\u00a0A\u00f1adir un observador KVO al objeto Live Query para empezar a observar los cambios en la propiedad \"rows\" del objeto Live Query.<\/li>\n<li>Empezar a observar los cambios<\/li>\n<\/ol>\n<p>Siempre que se produzca un cambio en la base de datos que afecte a la propiedad \"rows\" del objeto LiveQuery, tu aplicaci\u00f3n recibir\u00e1 una notificaci\u00f3n de cambios. Cuando recibas la notificaci\u00f3n de cambio, puedes actualizar tu UI, que en este caso ser\u00eda recargar la tableview.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 if keyPath == \"rows\" {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.docsEnumerator = self.liveQuery?.rows\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 tableView.reloadData()\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 }\r\n<\/pre>\n<h4><\/h4>\n<h4><strong>Eliminar una base de datos<\/strong><\/h4>\n<p>Abra el <em>DBListTableViewController.swift<\/em>\u00a0\u00a0y localice el archivo\u00a0<em>deleteDatabaseAtIndex<\/em>\u00a0funci\u00f3n.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\" title=\"Crear base de datos\"> do {\r\n        \/\/ 1.  Get handle to database if exists\r\n        let db = try cbManager.existingDatabaseNamed(dbToDelete)\r\n                    \r\n        \/\/ 2. Delete the database\r\n        try db.delete()\r\n                    \r\n        \/\/ 3. update local bookkeeping\r\n        self.dbNames?.remove(at: indexPath.row)\r\n\r\n        \/\/ 4. Update UI\r\n        tableView.deleteRows(at: [indexPath], with: .automatic)\r\n    }\r\n    catch {\r\n         \/\/ handle error\r\n     }<\/pre>\n<p>La eliminaci\u00f3n de una base de datos se gestiona mediante una simple llamada a delete() en la base de datos.<\/p>\n<h3>Conclusi\u00f3n<\/h3>\n<p>Como puedes ver, es bastante sencillo integrar una versi\u00f3n independiente de Couchbase Lite en tu nueva o existente aplicaci\u00f3n iOS. Puedes descargar la aplicaci\u00f3n de ejemplo de la que hablamos en este post desde <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-starterapp\">Repo de Github<\/a> y prueba a explorar las distintas interfaces.  Si tienes m\u00e1s preguntas, no dudes en ponerte en contacto conmigo en Twitter <a href=\"https:\/\/twitter.com\/rajagp\">@rajagp<\/a> o env\u00edeme un correo electr\u00f3nico <a href=\"mailto:priya.rajagopal@couchbase.com\">priya.rajagopal@couchbase.com<\/a>.<\/p>\n<p>En <a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/c\/mobile\/\">Foros de desarrollo de Couchbase Mobile<\/a> es otro buen lugar para resolver tus dudas sobre m\u00f3viles. Adem\u00e1s, echa un vistazo a la <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/whatsnew.html?language=ios\">Portal para desarrolladores de Couchbase<\/a> para obtener m\u00e1s informaci\u00f3n sobre Couchbase Mobile.<\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>This post looks at\u00a0 how you can get started with\u00a0Couchbase Lite in\u00a0your iOS App. Couchbase Lite is an embedded JSON database that can work standalone, in a P2P network, or with a\u00a0Sync Gateway as a remote endpoint. While we will [&hellip;]<\/p>","protected":false},"author":1423,"featured_media":3217,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,7667,1810,1816,9410],"tags":[1536,1909],"ppma_author":[8948],"class_list":["post-3205","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-lite","category-couchbase-mobile","category-couchbase-server","category-objective-c","tag-ios","tag-swift"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Getting Started with Couchbase Lite in your iOS App : Part1 - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Post discusses getting started with Couchbase Lite in your iOS App. Couchbase Lite is an embedded JSON database that supports multiple configurations\" \/>\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.couchbase.com\/blog\/es\/couchbase-lite-embedded-in-ios-app-part1\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting Started with Couchbase Lite in your iOS App : Part1\" \/>\n<meta property=\"og:description\" content=\"Post discusses getting started with Couchbase Lite in your iOS App. Couchbase Lite is an embedded JSON database that supports multiple configurations\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-lite-embedded-in-ios-app-part1\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-10T17:15:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T04:37:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/CBLite_standalone_featured_Image_blog1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"741\" \/>\n\t<meta property=\"og:image:height\" content=\"399\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@rajagp\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/\"},\"author\":{\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\"},\"headline\":\"Getting Started with Couchbase Lite in your iOS App : Part1\",\"datePublished\":\"2017-04-10T17:15:32+00:00\",\"dateModified\":\"2025-06-14T04:37:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/\"},\"wordCount\":1521,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/CBLite_standalone_featured_Image_blog1.png\",\"keywords\":[\"ios\",\"swift\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Lite\",\"Couchbase Mobile\",\"Couchbase Server\",\"Objective-C\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/\",\"name\":\"Getting Started with Couchbase Lite in your iOS App : Part1 - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/CBLite_standalone_featured_Image_blog1.png\",\"datePublished\":\"2017-04-10T17:15:32+00:00\",\"dateModified\":\"2025-06-14T04:37:13+00:00\",\"description\":\"Post discusses getting started with Couchbase Lite in your iOS App. Couchbase Lite is an embedded JSON database that supports multiple configurations\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/CBLite_standalone_featured_Image_blog1.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/CBLite_standalone_featured_Image_blog1.png\",\"width\":741,\"height\":399},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting Started with Couchbase Lite in your iOS App : Part1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\",\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"caption\":\"Priya Rajagopal, Senior Director, Product Management\"},\"description\":\"Priya Rajagopal is a Senior Director of Product Management at Couchbase responsible for developer platforms for the cloud and the edge. She has been professionally developing software for over 20 years in several technical and product leadership positions, with 10+ years focused on mobile technologies. As a TISPAN IPTV standards delegate, she was a key contributor to the IPTV standards specifications. She has 22 patents in the areas of networking and platform security.\",\"sameAs\":[\"https:\/\/x.com\/rajagp\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/priya-rajagopalcouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Primeros pasos con Couchbase Lite en tu aplicaci\u00f3n iOS : Parte1 - El blog de Couchbase","description":"Post discusses getting started with Couchbase Lite in your iOS App. Couchbase Lite is an embedded JSON database that supports multiple configurations","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.couchbase.com\/blog\/es\/couchbase-lite-embedded-in-ios-app-part1\/","og_locale":"es_MX","og_type":"article","og_title":"Getting Started with Couchbase Lite in your iOS App : Part1","og_description":"Post discusses getting started with Couchbase Lite in your iOS App. Couchbase Lite is an embedded JSON database that supports multiple configurations","og_url":"https:\/\/www.couchbase.com\/blog\/es\/couchbase-lite-embedded-in-ios-app-part1\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-04-10T17:15:32+00:00","article_modified_time":"2025-06-14T04:37:13+00:00","og_image":[{"width":741,"height":399,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/CBLite_standalone_featured_Image_blog1.png","type":"image\/png"}],"author":"Priya Rajagopal, Senior Director, Product Management","twitter_card":"summary_large_image","twitter_creator":"@rajagp","twitter_misc":{"Written by":"Priya Rajagopal, Senior Director, Product Management","Est. reading time":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/"},"author":{"name":"Priya Rajagopal, Senior Director, Product Management","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c"},"headline":"Getting Started with Couchbase Lite in your iOS App : Part1","datePublished":"2017-04-10T17:15:32+00:00","dateModified":"2025-06-14T04:37:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/"},"wordCount":1521,"commentCount":2,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/CBLite_standalone_featured_Image_blog1.png","keywords":["ios","swift"],"articleSection":["Best Practices and Tutorials","Couchbase Lite","Couchbase Mobile","Couchbase Server","Objective-C"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/","name":"Primeros pasos con Couchbase Lite en tu aplicaci\u00f3n iOS : Parte1 - El blog de Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/CBLite_standalone_featured_Image_blog1.png","datePublished":"2017-04-10T17:15:32+00:00","dateModified":"2025-06-14T04:37:13+00:00","description":"Post discusses getting started with Couchbase Lite in your iOS App. Couchbase Lite is an embedded JSON database that supports multiple configurations","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/CBLite_standalone_featured_Image_blog1.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/CBLite_standalone_featured_Image_blog1.png","width":741,"height":399},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-embedded-in-ios-app-part1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Getting Started with Couchbase Lite in your iOS App : Part1"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c","name":"Priya Rajagopal, Directora de Gesti\u00f3n de Productos","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734","url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","caption":"Priya Rajagopal, Senior Director, Product Management"},"description":"Priya Rajagopal es directora s\u00e9nior de gesti\u00f3n de productos en Couchbase y responsable de las plataformas de desarrollo para la nube y el per\u00edmetro. Lleva m\u00e1s de 20 a\u00f1os dedic\u00e1ndose profesionalmente al desarrollo de software en varios puestos de liderazgo t\u00e9cnico y de producto, con m\u00e1s de 10 a\u00f1os centrados en tecnolog\u00edas m\u00f3viles. Como delegada de est\u00e1ndares IPTV de TISPAN, fue una colaboradora clave en las especificaciones de est\u00e1ndares IPTV. Tiene 22 patentes en las \u00e1reas de redes y seguridad de plataformas.","sameAs":["https:\/\/x.com\/rajagp"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/priya-rajagopalcouchbase-com\/"}]}},"authors":[{"term_id":8948,"user_id":1423,"is_guest":0,"slug":"priya-rajagopalcouchbase-com","display_name":"Priya Rajagopal, Senior Director, Product Management","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","first_name":"Priya","last_name":"Rajagopal, Senior Director, Product Management","user_url":"","author_category":"","description":"Priya Rajagopal es directora s\u00e9nior de gesti\u00f3n de productos en Couchbase y responsable de las plataformas de desarrollo para la nube y el per\u00edmetro. Lleva m\u00e1s de 20 a\u00f1os dedic\u00e1ndose profesionalmente al desarrollo de software en varios puestos de liderazgo t\u00e9cnico y de producto, con m\u00e1s de 10 a\u00f1os centrados en tecnolog\u00edas m\u00f3viles. Como delegada de est\u00e1ndares IPTV de TISPAN, fue una colaboradora clave en las especificaciones de est\u00e1ndares IPTV. Tiene 22 patentes en las \u00e1reas de redes y seguridad de plataformas."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3205","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/1423"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=3205"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3205\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/3217"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=3205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=3205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=3205"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=3205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}