{"id":3404,"date":"2017-05-03T09:30:02","date_gmt":"2017-05-03T16:30:02","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3404"},"modified":"2025-06-13T20:09:35","modified_gmt":"2025-06-14T03:09:35","slug":"couchbase-lite-with-ios-app-extensions","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-lite-with-ios-app-extensions\/","title":{"rendered":"Compartilhamento de dados com o Couchbase Lite entre aplicativos iOS e extens\u00f5es de aplicativos"},"content":{"rendered":"<p>Esta postagem discute como usar o Couchbase Lite como um banco de dados incorporado para compartilhar dados entre seu aplicativo iOS e a extens\u00e3o de aplicativo iOS. \u00a0<a href=\"https:\/\/developer.apple.com\/app-extensions\/\">Extens\u00f5es de aplicativos <\/a>implementam uma tarefa ou funcionalidade espec\u00edfica que pode ser exposta a outros aplicativos no dispositivo ou ao sistema operacional. Nesta postagem, veremos um exemplo de como uma extens\u00e3o Today pode ser usada com um banco de dados incorporado do Couchbase Lite no modo aut\u00f4nomo.<\/p>\n<p><!--more--><\/p>\n<p>OBSERVA\u00c7\u00c3O: discutiremos o Couchbase Mobile v1.4, que \u00e9 a vers\u00e3o de produ\u00e7\u00e3o atual. Mas tudo o que discutimos aqui se aplica \u00e0 vers\u00e3o mais recente<a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/whatsnew.html?language=ios\"> Vers\u00e3o 2.0 do Developer Preview do Couchbase Mobile<\/a><\/p>\n<h2>Hist\u00f3rico<\/h2>\n<p>A Apple oferece suporte a v\u00e1rios tipos de <a href=\"https:\/\/developer.apple.com\/app-extensions\/\">Extens\u00f5es de aplicativos<\/a>\u00a0Cada uma delas habilita a funcionalidade que \u00e9 relevante para um subsistema espec\u00edfico no dispositivo.  Neste post, discutiremos como o Couchbase Lite pode ser usado com uma extens\u00e3o Today. Esse tipo de extens\u00e3o, tamb\u00e9m conhecido como \"Widget\", aparece na visualiza\u00e7\u00e3o Today da Central de Notifica\u00e7\u00f5es e permite que os usu\u00e1rios obtenham atualiza\u00e7\u00f5es r\u00e1pidas. Voc\u00ea pode saber mais sobre como as extens\u00f5es de aplicativos funcionam na se\u00e7\u00e3o<a href=\"https:\/\/developer.apple.com\/library\/content\/documentation\/General\/Conceptual\/ExtensibilityPG\/ExtensionOverview.html#\/\/apple_ref\/doc\/uid\/TP40014214-CH2-SW2\"> Documentos para desenvolvedores da Apple<\/a>.<\/p>\n<p>Presumo que voc\u00ea esteja familiarizado com o desenvolvimento de aplicativos iOS em Swift e tenha uma compreens\u00e3o b\u00e1sica da integra\u00e7\u00e3o do Couchbase Lite em seu aplicativo iOS. Este guia de introdu\u00e7\u00e3o \u00e9 um \u00f3timo lugar para come\u00e7ar.  Se quiser ler mais sobre o Couchbase, consulte os recursos no final deste post.<\/p>\n<h2>Couchbase Lite<\/h2>\n<p>O Couchbase Lite \u00e9 um banco de dados incorporado que \u00e9 executado em dispositivos. Ele pode ser usado em v\u00e1rios modos de implanta\u00e7\u00e3o. Ele pode ser usado como um banco de dados incorporado aut\u00f4nomo ou pode ser usado em conjunto com um Sync Gateway remoto que permita a sincroniza\u00e7\u00e3o de dados entre dispositivos. Nesta postagem, usaremos o Couchbase Lite no modo de implanta\u00e7\u00e3o aut\u00f4nomo. Nesta postagem, n\u00e3o abordaremos os detalhes da integra\u00e7\u00e3o com o Couchbase Lite. O\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-lite-embedded-in-ios-app-part1\/\">Primeiros passos com o Couchbase Lite <\/a>\u00e9 um bom lugar para come\u00e7ar a fazer isso.<\/p>\n<h2>Aplicativo de demonstra\u00e7\u00e3o<\/h2>\n<ul>\n<li>Fa\u00e7a o download do projeto de demonstra\u00e7\u00e3o do Xcode no site <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-mobile-ios-app-extension\">Reposit\u00f3rio do Github\u00a0<\/a>. Usaremos esse aplicativo como exemplo no restante do blog.<\/li>\n<\/ul>\n<pre class=\"lang:default decode:true\">git clone git@github.com:couchbaselabs\/couchbase-mobile-ios-app-extension.git<\/pre>\n<ul>\n<li>Siga as instru\u00e7\u00f5es na se\u00e7\u00e3o <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-mobile-ios-app-extension\/blob\/master\/README.md\">LEIAME<\/a> para instalar e executar o aplicativo<\/li>\n<\/ul>\n<p>Esse \u00e9 um aplicativo simples de lista de tarefas que permite aos usu\u00e1rios adicionar, editar e excluir tarefas. O usu\u00e1rio pode marcar as tarefas como conclu\u00eddas. O aplicativo inclui uma extens\u00e3o Today que mostra as duas principais tarefas diretamente na sua central de notifica\u00e7\u00f5es, sem a necessidade de abrir o aplicativo. O usu\u00e1rio pode marcar as tarefas como conclu\u00eddas diretamente na central de notifica\u00e7\u00f5es.<\/p>\n<p>Todas as tarefas s\u00e3o armazenadas em um banco de dados local do Couchbase Lite. Isso implica que tanto o aplicativo Container quanto a extens\u00e3o precisar\u00e3o acessar o banco de dados.<\/p>\n<h3>Arquitetura de aplicativos<\/h3>\n<p>As extens\u00f5es de aplicativos n\u00e3o s\u00e3o aplicativos aut\u00f4nomos. Elas s\u00e3o agrupadas em um aplicativo, chamado de \"<em>Aplicativo de cont\u00eaineres<\/em>\".  Embora as App Extensions sejam agrupadas no aplicativo Container, elas s\u00e3o executadas independentemente do aplicativo Container em um processo separado. As extens\u00f5es de aplicativos s\u00e3o iniciadas por outros aplicativos que precisam da funcionalidade da extens\u00e3o. O aplicativo que inicia a extens\u00e3o de aplicativo \u00e9 chamado de \"<em>Aplicativo host<\/em>\".  A interface do usu\u00e1rio da extens\u00e3o \u00e9 exibida no contexto do aplicativo host.<\/p>\n<p>Embora o aplicativo de cont\u00eainer e a extens\u00e3o correspondente sejam processos independentes executados em sua pr\u00f3pria \u00e1rea restrita, eles podem compartilhar dados por meio de um <em>Cont\u00eainer compartilhado<\/em>.<\/p>\n<p>O Shared Container pode ser configurado registrando um App Group exclusivo e ativando-o para o aplicativo cont\u00eainer e a extens\u00e3o. Voc\u00ea aprender\u00e1 a configurar isso na pr\u00f3xima se\u00e7\u00e3o.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3420\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/app-arch.png\" alt=\"App Extension Architecture\" width=\"842\" height=\"678\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/app-arch.png 842w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/app-arch-300x242.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/app-arch-768x618.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/app-arch-20x16.png 20w\" sizes=\"auto, (max-width: 842px) 100vw, 842px\" \/><\/p>\n<h3>Configura\u00e7\u00e3o de grupos de aplicativos<\/h3>\n<p>Consulte o\u00a0<a href=\"https:\/\/developer.apple.com\/library\/content\/documentation\/Miscellaneous\/Reference\/EntitlementKeyReference\/Chapters\/EnablingAppSandbox.html#\/\/apple_ref\/doc\/uid\/TP40011195-CH4-SW19\">Documentos para desenvolvedores da Apple<\/a>\u00a0para saber mais sobre como configurar o App Groups em seu aplicativo iOS<\/p>\n<p>Abra o <em>CBLiteApp.xcworkspace<\/em> do projeto do aplicativo de demonstra\u00e7\u00e3o que voc\u00ea baixou.<\/p>\n<ul>\n<li>Abra a guia \"Capabilities\" (Recursos) do CBLiteApp Container App target. Voc\u00ea dever\u00e1 ver o App Group <em>group.com.example.CBLiteSharedData<\/em> habilitado.<\/li>\n<\/ul>\n<div id=\"attachment_3406\" style=\"width: 591px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3406\" class=\"wp-image-3406\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/appgroup-app-1024x738.png\" alt=\"Enabling App Group\" width=\"581\" height=\"419\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/appgroup-app-1024x738.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/appgroup-app-300x216.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/appgroup-app-768x554.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/appgroup-app-1536x1107.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/appgroup-app-2048x1476.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/appgroup-app-20x14.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/appgroup-app-1320x951.png 1320w\" sizes=\"auto, (max-width: 581px) 100vw, 581px\" \/><p id=\"caption-attachment-3406\" class=\"wp-caption-text\">Ativa\u00e7\u00e3o do App Group para o aplicativo<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Abra a guia \"Capabilities\" (Recursos) do alvo CBLiteTaskExtension. Voc\u00ea dever\u00e1 ver o mesmo App Group, <em>group.com.example.CBLiteSharedData<\/em> habilitado.<\/li>\n<\/ul>\n<div id=\"attachment_3407\" style=\"width: 602px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3407\" class=\"wp-image-3407\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/appgroup-extension-1024x738.png\" alt=\"\" width=\"592\" height=\"426\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/appgroup-extension-1024x738.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/appgroup-extension-300x216.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/appgroup-extension-768x554.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/appgroup-extension-1536x1108.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/appgroup-extension-2048x1477.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/appgroup-extension-20x14.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/appgroup-extension-1320x952.png 1320w\" sizes=\"auto, (max-width: 592px) 100vw, 592px\" \/><p id=\"caption-attachment-3407\" class=\"wp-caption-text\">Configura\u00e7\u00e3o do grupo de aplicativos na extens\u00e3o<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>A ativa\u00e7\u00e3o dos recursos do App Group para um destino o adiciona aos arquivos de direitos para o aplicativo cont\u00eainer e sua extens\u00e3o.<\/p>\n<ul>\n<li>Al\u00e9m disso, voc\u00ea ter\u00e1 que adicionar o recurso App Groups ao seu App Id registrado no Apple Developer Portal.<\/li>\n<\/ul>\n<div id=\"attachment_3408\" style=\"width: 615px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3408\" class=\"wp-image-3408\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/portalconfigure-1024x815.png\" alt=\"Configuring App Group for App in Apple Developer Portal\" width=\"605\" height=\"482\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/portalconfigure-1024x815.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/portalconfigure-300x239.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/portalconfigure-768x611.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/portalconfigure-1536x1222.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/portalconfigure-20x16.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/portalconfigure-1320x1050.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/portalconfigure.png 1976w\" sizes=\"auto, (max-width: 605px) 100vw, 605px\" \/><p id=\"caption-attachment-3408\" class=\"wp-caption-text\">Configura\u00e7\u00e3o do App Group para o aplicativo no Apple Developer Portal<\/p><\/div>\n<p>&nbsp;<\/p>\n<h2>Passo a passo do aplicativo<\/h2>\n<p>Crie e execute o aplicativo escolhendo o destino do aplicativo \"<em>CBLiteApp<\/em>\". Agora, mude para a exibi\u00e7\u00e3o Hoje da Central de Notifica\u00e7\u00f5es<\/p>\n<ul>\n<li>Adicione seu novo widget de extens\u00e3o ao Today View, conforme mostrado abaixo<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3422\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/addtodaywidget.gif\" alt=\"Add Today Widget\" width=\"310\" height=\"572\" \/><\/p>\n<ul>\n<li>Mude para o aplicativo e adicione algumas tarefas tocando no bot\u00e3o \"+\". Mude para o widget Today correspondente. Voc\u00ea perceber\u00e1 que as tarefas que adicionou s\u00e3o exibidas no widget.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3410\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/addtask.gif\" alt=\"Add Task\" width=\"301\" height=\"560\" \/><\/p>\n<ul>\n<li>Marque uma tarefa como \"Conclu\u00edda\" tocando na tarefa. Agora, volte para o aplicativo Container. Voc\u00ea notar\u00e1 que o status de conclus\u00e3o das tarefas foi atualizado para corresponder \u00e0s a\u00e7\u00f5es realizadas no widget Hoje.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3423\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/todayextensionupdatetask.gif\" alt=\"Today Extension Update Task\" width=\"312\" height=\"570\" \/><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Edite ou exclua uma tarefa da mesma forma no aplicativo Container, passando o dedo sobre a entrada da tarefa. Alterne para o widget Hoje. Voc\u00ea ver\u00e1 a lista de tarefas atualizada.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3414\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/editdeletetask-1.gif\" alt=\"Force Touch\" width=\"315\" height=\"583\" \/><\/p>\n<ul>\n<li>Se o seu dispositivo for compat\u00edvel com o 3D Touch, voc\u00ea poder\u00e1 for\u00e7ar o toque no \u00edcone do aplicativo na tela inicial para revelar a extens\u00e3o do Top Tasks diretamente no \u00edcone e interagir com ele. Muito legal!<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3414\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/forcetouch.gif\" alt=\"Force Touch\" width=\"315\" height=\"583\" \/><\/p>\n<ul>\n<li>Por fim, encerre o aplicativo Container. Alterne para o Today Widget e atualize o status Conclu\u00eddo de uma tarefa. Reinicie o aplicativo. As tarefas ser\u00e3o listadas com o status atualizado.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3424\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/app-termination.gif\" alt=\"Container App Termination\" width=\"308\" height=\"572\" \/><\/p>\n<p>&nbsp;<\/p>\n<h2>Passo a passo do c\u00f3digo<\/h2>\n<p>As tarefas s\u00e3o armazenadas em um banco de dados local incorporado do Couchbase Lite. Isso implica que tanto o aplicativo cont\u00eainer quanto a extens\u00e3o Today precisam acessar o banco de dados. Conforme discutido anteriormente, a maneira de compartilhar dados entre o aplicativo cont\u00eainer e a extens\u00e3o \u00e9 por meio do Shared Container. Isso implica que o banco de dados do Couchbase Lite deve estar localizado no Shared Container.<\/p>\n<p>O c\u00f3digo para habilitar isso \u00e9 simples.<\/p>\n<p>Abra o <em>Gerenciador de banco de dados.swift<\/em> arquivo.<\/p>\n<p>O DatabaseManager \u00e9 uma classe singleton que lida com as fun\u00e7\u00f5es b\u00e1sicas de gerenciamento de banco de dados.<\/p>\n<ul>\n<li>Localizar <em>appGroupContainerURL<\/em> fun\u00e7\u00e3o<\/li>\n<\/ul>\n<p>Essa fun\u00e7\u00e3o constr\u00f3i o caminho para a pasta do cont\u00eainer compartilhado.<\/p>\n<pre class=\"lang:default decode:true\">  \/\/ 1. Get URL to shared group container\r\n        let fileManager = FileManager.default\r\n        guard let groupURL = fileManager\r\n            .containerURL(forSecurityApplicationGroupIdentifier: \"group.com.example.CBLiteSharedData\") else {\r\n                return nil\r\n        }\r\n        \r\n        let storagePathUrl = groupURL.appendingPathComponent(\"CBLite\")\r\n        let storagePath = storagePathUrl.path\r\n        \r\n        \/\/ 2: Create a folder in the shared container location with name\"CBLite\"\r\n        if !fileManager.fileExists(atPath: storagePath) {\r\n            do {\r\n                try fileManager.createDirectory(atPath: storagePath,\r\n                                                withIntermediateDirectories: false,\r\n                                                attributes: nil)\r\n            } catch let error {\r\n                print(\"error creating filepath: \\(error)\")\r\n                return nil\r\n            }\r\n        }\r\n        \r\n        return storagePathUrl<\/pre>\n<ol>\n<li>Retorna o URL para o cont\u00eainer de grupo compartilhado. Os cont\u00eaineres de grupo s\u00e3o armazenados em <em>~\/Biblioteca\/Cont\u00eaineres de grupo\/<\/em><\/li>\n<li>Crie uma pasta chamada CBLite no cont\u00eainer do grupo compartilhado.<\/li>\n<\/ol>\n<ul>\n<li>Localizar <em>configureCBManagerForSharedData<\/em> fun\u00e7\u00e3o<\/li>\n<\/ul>\n<pre class=\"lang:swift decode:true\">do {\r\n            \/\/ 1. Set the file protection mode for the Couchbase Lite database folder\r\n            let options = CBLManagerOptions(readOnly: false, fileProtection: Data.WritingOptions.completeFileProtectionUnlessOpen)\r\n            let cblpoptions = UnsafeMutablePointer&lt;CBLManagerOptions&gt;.allocate(capacity: 1)\r\n            cblpoptions.initialize(to: options)\r\n            \r\n            if let url = self.appGroupContainerURL() {\r\n                \/\/ 2. Initialize the CBLManager with the directory of the shared container\r\n                _cbManager = try CBLManager.init(directory: url.relativePath, options: cblpoptions)\r\n            }\r\n            \r\n            return true\r\n        }\r\n        catch {\r\n             return false\r\n            \r\n        }<\/pre>\n<ol>\n<li>Cria o objeto CBLManagerOptions options com as prote\u00e7\u00f5es de arquivo apropriadas. Um valor de <a href=\"https:\/\/developer.apple.com\/reference\/foundation\/nsdata.writingoptions\/1616278-completefileprotectionunlessopen\"><em>completeFileProtectionUnlessOpen<\/em><\/a> implica que o acesso de leitura\/grava\u00e7\u00e3o ao arquivo \u00e9 restrito, a menos que o arquivo esteja aberto<\/li>\n<li>Inicialize o CBLManager com o caminho para o cont\u00eainer compartilhado. Quando o banco de dados for criado, ele ser\u00e1 criado no cont\u00eainer compartilhado. O banco de dados do Couchbase Lite est\u00e1 agora no cont\u00eainer compartilhado, no qual o aplicativo e a extens\u00e3o podem ler e gravar.<\/li>\n<\/ol>\n<h3>E agora?<\/h3>\n<p>Explore o restante do c\u00f3digo de exemplo da demonstra\u00e7\u00e3o para entender como os documentos s\u00e3o adicionados, editados e exclu\u00eddos. D\u00ea uma olhada especificamente na se\u00e7\u00e3o\u00a0<em>TaskPresenter.swift<\/em> arquivo. \u00c9 aqui que todas as intera\u00e7\u00f5es com o banco de dados do Couchbase Lite s\u00e3o tratadas.<\/p>\n<p>Se tiver alguma d\u00favida, sinta-se \u00e0 vontade para entrar em contato comigo em <a href=\"https:\/\/twitter.com\/rajagp?lang=en\">Twitter<\/a>. Se voc\u00ea quiser sugerir melhorias, envie uma solicita\u00e7\u00e3o pull para o site <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-mobile-ios-app-extension\">GitHub<\/a> repo. Voc\u00ea pode saber mais sobre a integra\u00e7\u00e3o com o Couchbase Lite neste\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-lite-embedded-in-ios-app-part1\/\">Primeiros passos com o Couchbase Lite <\/a>blog. O <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/\">F\u00f3runs do Couchbase<\/a> s\u00e3o outro \u00f3timo lugar para postar suas perguntas.<\/p>\n<p>Embora esta postagem discuta o uso do Couchbase Lite no modo aut\u00f4nomo, fique atento a uma pr\u00f3xima postagem que aprimorar\u00e1 o recurso para incluir a sincroniza\u00e7\u00e3o com a nuvem.<\/p>","protected":false},"excerpt":{"rendered":"<p>This post discusses\u00a0how to use Couchbase Lite as an embedded database to share data between your iOS App and iOS App Extension. \u00a0App Extensions implement a specific task or functionality that can be exposed to other apps on the device [&hellip;]<\/p>","protected":false},"author":1423,"featured_media":3420,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1815,7667,1810],"tags":[1964,1866,1968,1536],"ppma_author":[8948],"class_list":["post-3404","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-best-practices-and-tutorials","category-couchbase-lite","category-couchbase-mobile","tag-app-extension","tag-data","tag-embedded-database","tag-ios"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Data sharing with Couchbase Lite between iOS Apps and iOS App Extensions<\/title>\n<meta name=\"description\" content=\"This post discusses how to use Couchbase Lite as an embedded database to share data between your iOS App and iOS App Extensions.\" \/>\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\/pt\/couchbase-lite-with-ios-app-extensions\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Data Sharing with Couchbase Lite between iOS Apps and App Extensions\" \/>\n<meta property=\"og:description\" content=\"This post discusses how to use Couchbase Lite as an embedded database to share data between your iOS App and iOS App Extensions.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-lite-with-ios-app-extensions\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-05-03T16:30:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:09:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/app-arch.png\" \/>\n\t<meta property=\"og:image:width\" content=\"842\" \/>\n\t<meta property=\"og:image:height\" content=\"678\" \/>\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-with-ios-app-extensions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/\"},\"author\":{\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\"},\"headline\":\"Data Sharing with Couchbase Lite between iOS Apps and App Extensions\",\"datePublished\":\"2017-05-03T16:30:02+00:00\",\"dateModified\":\"2025-06-14T03:09:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/\"},\"wordCount\":1306,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/app-arch.png\",\"keywords\":[\"app extension\",\"data\",\"embedded database\",\"ios\"],\"articleSection\":[\"Application Design\",\"Best Practices and Tutorials\",\"Couchbase Lite\",\"Couchbase Mobile\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/\",\"name\":\"Data sharing with Couchbase Lite between iOS Apps and iOS App Extensions\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/app-arch.png\",\"datePublished\":\"2017-05-03T16:30:02+00:00\",\"dateModified\":\"2025-06-14T03:09:35+00:00\",\"description\":\"This post discusses how to use Couchbase Lite as an embedded database to share data between your iOS App and iOS App Extensions.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/app-arch.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/app-arch.png\",\"width\":842,\"height\":678,\"caption\":\"App Extension Architecture\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Data Sharing with Couchbase Lite between iOS Apps and App Extensions\"}]},{\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\/pt\/author\/priya-rajagopalcouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Compartilhamento de dados com o Couchbase Lite entre aplicativos iOS e extens\u00f5es de aplicativos iOS","description":"Esta postagem discute como usar o Couchbase Lite como um banco de dados incorporado para compartilhar dados entre seu aplicativo iOS e as extens\u00f5es de aplicativo iOS.","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\/pt\/couchbase-lite-with-ios-app-extensions\/","og_locale":"pt_BR","og_type":"article","og_title":"Data Sharing with Couchbase Lite between iOS Apps and App Extensions","og_description":"This post discusses how to use Couchbase Lite as an embedded database to share data between your iOS App and iOS App Extensions.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-lite-with-ios-app-extensions\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-05-03T16:30:02+00:00","article_modified_time":"2025-06-14T03:09:35+00:00","og_image":[{"width":842,"height":678,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/app-arch.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-with-ios-app-extensions\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/"},"author":{"name":"Priya Rajagopal, Senior Director, Product Management","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c"},"headline":"Data Sharing with Couchbase Lite between iOS Apps and App Extensions","datePublished":"2017-05-03T16:30:02+00:00","dateModified":"2025-06-14T03:09:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/"},"wordCount":1306,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/app-arch.png","keywords":["app extension","data","embedded database","ios"],"articleSection":["Application Design","Best Practices and Tutorials","Couchbase Lite","Couchbase Mobile"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/","name":"Compartilhamento de dados com o Couchbase Lite entre aplicativos iOS e extens\u00f5es de aplicativos iOS","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/app-arch.png","datePublished":"2017-05-03T16:30:02+00:00","dateModified":"2025-06-14T03:09:35+00:00","description":"Esta postagem discute como usar o Couchbase Lite como um banco de dados incorporado para compartilhar dados entre seu aplicativo iOS e as extens\u00f5es de aplicativo iOS.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/app-arch.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/05\/app-arch.png","width":842,"height":678,"caption":"App Extension Architecture"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-lite-with-ios-app-extensions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Data Sharing with Couchbase Lite between iOS Apps and App Extensions"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados 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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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, Diretora S\u00eanior, Gerenciamento de Produtos","image":{"@type":"ImageObject","inLanguage":"pt-BR","@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 \u00e9 diretora s\u00eanior de gerenciamento de produtos da Couchbase, respons\u00e1vel pelas plataformas de desenvolvedor para a nuvem e a borda. Ela desenvolve software profissionalmente h\u00e1 mais de 20 anos em v\u00e1rios cargos t\u00e9cnicos e de lideran\u00e7a de produtos, com mais de 10 anos de foco em tecnologias m\u00f3veis. Como delegada de padr\u00f5es de IPTV da TISPAN, ela foi uma das principais colaboradoras das especifica\u00e7\u00f5es de padr\u00f5es de IPTV. Ela tem 22 patentes nas \u00e1reas de rede e seguran\u00e7a de plataforma.","sameAs":["https:\/\/x.com\/rajagp"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/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","author_category":"","last_name":"Rajagopal, Senior Director, Product Management","first_name":"Priya","job_title":"","user_url":"","description":"Priya Rajagopal \u00e9 diretora s\u00eanior de gerenciamento de produtos da Couchbase, respons\u00e1vel pelas plataformas de desenvolvedor para a nuvem e a borda. Ela desenvolve software profissionalmente h\u00e1 mais de 20 anos em v\u00e1rios cargos t\u00e9cnicos e de lideran\u00e7a de produtos, com mais de 10 anos de foco em tecnologias m\u00f3veis. Como delegada de padr\u00f5es de IPTV da TISPAN, ela foi uma das principais colaboradoras das especifica\u00e7\u00f5es de padr\u00f5es de IPTV. Ela tem 22 patentes nas \u00e1reas de rede e seguran\u00e7a de plataforma."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/3404","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/1423"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=3404"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/3404\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/3420"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=3404"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=3404"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=3404"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=3404"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}