Metadatos de la app¶
Resumen¶
Esta página es la referencia del archivo appinfo/info.xml, que contiene los metadatos de una app: un ejemplo mínimo y uno completo, cómo se valida y se usa cada etiqueta, los límites de longitud, los elementos obsoletos o internos y cómo una app ofrece su registro de cambios. Está dirigida a quienes desarrollan apps.
Fuente: documentación de Nextcloud, «developer_manual/app_development/info», versión 3ad9158, licencia CC BY 3.0; traducida y adaptada para APS Conecta Gestión.
El archivo appinfo/info.xml contiene metadatos sobre la app. Hay documentación detallada en la documentación de la tienda de apps.
El info.xml se valida con un esquema XML que se puede consultar en línea.
Un info.xml mínimo válido se vería así:
Archivo appinfo/info.xml:
<?xml version="1.0"?>
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>news</id>
<name>News</name>
<summary>An RSS/Atom feed reader</summary>
<description>An RSS/Atom feed reader</description>
<version>8.8.2</version>
<licence>AGPL-3.0-or-later</licence>
<author>Bernhard Posselt</author>
<category>multimedia</category>
<bugs>https://github.com/nextcloud/news/issues</bugs>
<dependencies>
<nextcloud min-version="31"/>
</dependencies>
</info>
Un ejemplo completo se vería así (debe estar codificado en utf-8):
Archivo appinfo/info.xml:
<?xml version="1.0"?>
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>news</id>
<name lang="de">Nachrichten</name>
<name>News</name>
<summary lang="en">An RSS/Atom feed reader</summary>
<description lang="en"># Description\nAn RSS/Atom feed reader</description>
<description lang="de">< umgehen kann]]></description>
<version>8.8.2</version>
<licence>AGPL-3.0-or-later</licence>
<author mail="mail@provider.com" homepage="http://example.com">Bernhard Posselt</author>
<author>Alessandro Cosentino</author>
<author>Jan-Christoph Borchardt</author>
<documentation>
<user>https://github.com/nextcloud/news/wiki#user-documentation</user>
<admin>https://github.com/nextcloud/news#readme</admin>
<developer>https://github.com/nextcloud/news/wiki#developer-documentation</developer>
</documentation>
<category>multimedia</category>
<category>tools</category>
<website>https://github.com/nextcloud/news</website>
<discussion>https://your.forum.com</discussion>
<bugs>https://github.com/nextcloud/news/issues</bugs>
<repository>https://github.com/nextcloud/news</repository>
<screenshot small-thumbnail="https://example.com/1-small.png">https://example.com/1.png</screenshot>
<screenshot>https://example.com/2.jpg</screenshot>
<dependencies>
<php min-version="5.6" min-int-size="64"/>
<database min-version="9.4">pgsql</database>
<database>sqlite</database>
<database min-version="5.5">mysql</database>
<command>grep</command>
<command>ls</command>
<lib min-version="2.7.8">libxml</lib>
<lib>curl</lib>
<lib>SimpleXML</lib>
<lib>iconv</lib>
<nextcloud min-version="31" max-version="32"/>
</dependencies>
<background-jobs>
<job>OCA\DAV\CardDAV\Sync\SyncJob</job>
</background-jobs>
<repair-steps>
<pre-migration>
<step>OCA\DAV\Migration\Classification</step>
</pre-migration>
<post-migration>
<step>OCA\DAV\Migration\Classification</step>
</post-migration>
<live-migration>
<step>OCA\DAV\Migration\GenerateBirthdays</step>
</live-migration>
<install>
<step>OCA\DAV\Migration\GenerateBirthdays</step>
</install>
<uninstall>
<step>OCA\DAV\Migration\GenerateBirthdays</step>
</uninstall>
</repair-steps>
<two-factor-providers>
<provider>OCA\AuthF\TwoFactor\Provider</provider>
</two-factor-providers>
<commands>
<command>A\Php\Class</command>
</commands>
<settings>
<admin>OCA\Theming\Settings\Admin</admin>
<admin-section>OCA\Theming\Settings\Section</admin-section>
</settings>
<activity>
<settings>
<setting>OCA\Files\Activity\Settings\FavoriteAction</setting>
<setting>OCA\Files\Activity\Settings\FileChanged</setting>
<setting>OCA\Files\Activity\Settings\FileCreated</setting>
<setting>OCA\Files\Activity\Settings\FileDeleted</setting>
<setting>OCA\Files\Activity\Settings\FileFavorite</setting>
<setting>OCA\Files\Activity\Settings\FileRestored</setting>
</settings>
<filters>
<filter>OCA\Files\Activity\Filter\FileChanges</filter>
<filter>OCA\Files\Activity\Filter\Favorites</filter>
</filters>
<providers>
<provider>OCA\Files\Activity\FavoriteProvider</provider>
<provider>OCA\Files\Activity\Provider</provider>
</providers>
</activity>
<navigations>
<navigation role="admin">
<id>files</id>
<name>Files</name>
<route>files.view.index</route>
<order>0</order>
<icon>app.svg</icon>
<type>link</type>
</navigation>
</navigations>
<collaboration>
<plugins>
<plugin type="collaborator-search" share-type="SHARE_TYPE_CIRCLE">OCA\Circles\Collaboration\v1\CollaboratorSearchPlugin</plugin>
</plugins>
</collaboration>
</info>
Las siguientes etiquetas se validan y se usan de la siguiente manera:
id:
obligatoria
solo debe contener caracteres ASCII en minúscula y guion bajo
debe coincidir con la primera carpeta del archivo comprimido
se usará para identificar la app
name:
obligatoria
debe aparecer al menos una vez con lang="en" o sin atributo lang
se puede traducir usando varios elementos con distintos valores del atributo lang; el código de idioma debe indicarse en el atributo lang
se mostrará en la página de detalle de la app
summary:
opcional
si no se indica, se usará el texto del elemento description
debe aparecer al menos una vez con lang="en" o sin atributo lang
se puede traducir usando varios elementos con distintos valores del atributo lang; el código de idioma debe indicarse en el atributo lang
se mostrará en la página de la lista de apps como descripción corta
description:
obligatoria
debe aparecer al menos una vez con lang="en" o sin atributo lang
puede contener Markdown
se puede traducir usando varios elementos con distintos valores del atributo lang; el código de idioma debe indicarse en el atributo lang
se mostrará en la página de detalle de la app
version:
obligatoria
debe ser una versión semántica sin metadatos de compilación, p. ej., 9.0.1 o 9.1.0-alpha.1
licence:
obligatoria
puede aparecer varias veces con distintas licencias
debe contener una de las siguientes licencias (para apps destinadas a la v31 o superior; consultar la lista de licencias SPDX para conocer los detalles):
AGPL-3.0-only
AGPL-3.0-or-later
Apache-2.0
GPL-3.0-only
GPL-3.0-or-later
MIT
MPL-2.0
(obsoleto, para apps destinadas a la v30 o inferior) también se usan los siguientes alias abreviados:
agpl (AGPL-3.0)
apache (Apache-2.0)
gpl3 (GPL-3.0)
mit (MIT)
mpl (MPL-2.0)
author:
obligatoria
puede aparecer varias veces con distintos autores
puede contener un atributo mail, que debe ser un correo electrónico
puede contener un homepage, que debe ser una URL
(todavía) no se mostrará en la App Store
se ofrecerá mediante la API REST
documentation/user:
opcional
debe contener una URL a la documentación de usuario
se mostrará en la página de detalle de la app
documentation/admin:
opcional
debe contener una URL a la documentación de administración
se mostrará en la página de detalle de la app
documentation/developer:
opcional
debe contener una URL a la documentación para desarrolladores
se mostrará en la página de detalle de la app
category:
opcional
si no se indica, se usará la categoría tools
debe contener uno de los siguientes valores:
customization
files
games
integration
monitoring
multimedia
office
organization
security
social
tools
las categorías antiguas se migran:
auth se convertirá en security
puede aparecer más de una vez con distintas categorías
website:
opcional
debe contener una URL a la página principal del proyecto
se mostrará en la página de detalle de la app
discussion:
opcional
debe contener una URL a la página de discusión o al foro del proyecto
se mostrará en la página de detalle de la app como el botón «ask question or discuss»
si no está, se usará de forma predeterminada nuestro foro en https://help.nextcloud.com/
bugs:
obligatoria
debe contener una URL al gestor de incidencias del proyecto
se mostrará en la página de detalle de la app
repository:
opcional
debe contener una URL al repositorio del proyecto
puede contener un atributo type; los valores permitidos son git, mercurial, subversion y bzr, y el predeterminado es git
actualmente no se usa
screenshot:
opcional
debe contener una URL HTTPS a una imagen
puede contener un atributo small-thumbnail, que debe contener una url https a una imagen. Esta imagen se usará como vista previa pequeña (p. ej., en la vista general de la lista de apps). Conviene que sea pequeña para que se muestre rápido
se mostrará en la lista de apps y en la página de detalle, en el orden indicado
dependencies/php:
opcional
puede contener un atributo min-version (como máximo 3 dígitos separados por puntos)
puede contener un atributo max-version (como máximo 3 dígitos separados por puntos)
puede contener un atributo min-int-size; los valores válidos son 32 o 64
se mostrará en la página de versiones de la app
dependencies/database:
opcional
debe contener como texto el nombre de la base de datos; los valores válidos son sqlite, pgsql y mysql
puede aparecer varias veces con distintas bases de datos
puede contener un atributo min-version (como máximo 3 dígitos separados por puntos)
puede contener un atributo max-version (como máximo 3 dígitos separados por puntos)
se mostrará en la página de versiones de la app
dependencies/command:
opcional
debe contener como valor de texto un comando de linux
puede aparecer varias veces con distintos comandos
se mostrará en la página de versiones de la app
dependencies/lib:
opcional
se mostrará en la página de versiones de la app
debe contener una extensión de php requerida
puede aparecer varias veces con distintas extensiones de php
puede contener un atributo min-version (como máximo 3 dígitos separados por puntos)
puede contener un atributo max-version (como máximo 3 dígitos separados por puntos)
dependencies/nextcloud:
obligatoria
debe contener un atributo min-version (como máximo 3 dígitos separados por puntos)
debe contener un atributo max-version (como máximo 3 dígitos separados por puntos)
Nota
Las dependencias dependencies/php, dependencies/database y dependencies/lib se comprueban en el momento de la instalación (no en el de la actualización), por lo que las aplicaciones deben ceñirse a las dependencias que admite una versión mayor de APS Conecta Gestión en el momento en que una app publica la compatibilidad con esa versión; es decir, la app debe admitir el mismo rango de versiones de PHP que admite la versión de APS Conecta Gestión compatible.
background-jobs/job:
opcional
debe contener una clase php que se ejecuta como trabajo en segundo plano
no se usará, solo se valida
repair-steps/pre-migration/step:
opcional
debe contener una clase php que se ejecuta antes de ejecutar las migraciones de la base de datos
no se usará, solo se valida
repair-steps/post-migration/step:
opcional
debe contener una clase php que se ejecuta después de ejecutar las migraciones de la base de datos
no se usará, solo se valida
repair-steps/live-migration/step:
opcional
debe contener una clase php que se ejecuta después de ejecutar los trabajos posteriores a la migración
no se usará, solo se valida
repair-steps/install/step:
opcional
debe contener una clase php que se ejecuta después de instalar la app
no se usará, solo se valida
repair-steps/uninstall/step:
opcional
debe contener una clase php que se ejecuta después de desinstalar la app
no se usará, solo se valida
two-factor-providers/provider:
opcional
debe contener una clase php que se registra como proveedor de autenticación de dos factores
no se usará, solo se valida
commands/command:
opcional
debe contener una clase php que se registra como comando de occ
no se usará, solo se valida
activity/settings/setting:
opcional
debe contener una clase php que implementa OCP\Activity\ISetting y se usa para añadir elementos de interfaz de ajustes adicionales a la app de actividad
activity/filters/filter:
opcional
debe contener una clase php que implementa OCP\Activity\IFilter y se usa para añadir filtros adicionales a la app de actividad
activity/providers/provider:
opcional
debe contener una clase php que implementa OCP\Activity\IProvider y se usa para reaccionar a eventos de la app de actividad
settings/admin:
opcional
debe contener una clase php que implementa OCP\Settings\ISettings y devuelve el formulario que se muestra en el área de configuraciones de administración
settings/admin-section:
opcional
debe contener una clase php que implementa OCP\Settings\ISection y devuelve los datos para mostrar entradas de navegación en el área de configuraciones de administración
settings/personal:
opcional
debe contener una clase php que implementa OCP\Settings\ISettings y devuelve el formulario que se muestra en el área de ajustes personales
settings/personal-section:
opcional
debe contener una clase php que implementa OCP\Settings\ISection y devuelve los datos para mostrar entradas de navegación en el área de ajustes personales
settings/admin-delegation:
opcional
debe contener una clase php que implementa OCP\Settings\ISettings y no tiene interfaz (en los ajustes), porque solo está pensada para usarse en la delegación de administración
settings/admin-delegation-section:
opcional
debe contener una clase php que implementa OCP\Settings\ISection y que contiene clases de ajustes solo de delegación, como se definen arriba
navigations:
opcional
debe contener al menos un elemento navigation
navigations/navigation:
obligatoria
debe contener un elemento name y uno route
indica una entrada de navegación
role indica la visibilidad: all significa que todos pueden verla y admin significa que solo un administrador puede ver la entrada de navegación; el valor predeterminado es all
navigations/navigation/id:
opcional
el id de la app
también se pueden crear entradas para otras apps indicando un id distinto del de la propia app
navigations/navigation/name:
obligatoria
se mostrará debajo del icono de la entrada de navegación
lo traducirán las herramientas de traducción predeterminadas
navigations/navigation/route:
obligatoria
nombre de la ruta que se usará para generar el enlace
navigations/navigation/icon:
opcional
nombre del icono, que se busca en la carpeta img/ de la app
el valor predeterminado es app.svg
navigations/navigation/order:
opcional
se usa para ordenar las entradas de navegación
un número de orden mayor significa que la entrada se ordenará más abajo
navigations/navigation/type:
opcional
puede ser link o settings
link significa que la entrada se añade al menú de apps predeterminado
settings significa que la entrada se añade al menú del lado derecho, que también contiene las entradas personal, admin, users, help y logout
collaboration:
opcional
puede contener plugins para la búsqueda de colaboración (p. ej., para alimentar el diálogo de compartir)
collaboration/plugins:
opcional
debe contener al menos un plugin
collaboration/plugins/plugin:
obligatoria
el nombre de la clase PHP del plugin
debe contener el atributo type (actualmente solo collaboration-search). La clase debe implementar OCP\Collaboration\Collaborators\ISearchPlugin.
debe contener el atributo share-type, según las constantes concretas de \OCP\Share
Se aplican las siguientes longitudes máximas de caracteres:
Todas las cadenas de descripción son campos de texto de la base de datos y, por lo tanto, no tienen límite de tamaño
Todas las demás cadenas tienen un máximo de 256 caracteres
Los siguientes elementos están obsoletos o son solo para uso interno, y harán fallar la validación si están presentes:
standalone
default_enable
shipped
public
remote
requiremin
requiremax
Registro de cambios¶
Las apps pueden ofrecer un registro de cambios. Debe escribirse siguiendo keep a changelog.
Si la app incluye un archivo CHANGELOG.md en la raíz del proyecto, ese archivo se usará para mostrar los cambios de la versión publicada en la tienda de apps y, a quienes administran, en los ajustes de las apps.
Además, desde APS Conecta Gestión 29, si la app updatenotification está activada, las apps también pueden ofrecer un registro de cambios para los usuarios.
La app avisará a los usuarios después de la actualización de la app si hay disponible un CHANGELOG.language.md (donde language es el código de idioma de ese usuario) o un CHANGELOG.en.md de respaldo.