# Gestión de plataformas

Antes de poder compilar el proyecto tenemos que especificar las plataformas para las cuales se va a generar. Las plataformas disponibles dependerán del sistema operativo que utilicemos, si soporta el SDK en cuestión o si lo tiene instalado (y si no lo tiene lo tendremos que instalar). En general soporta las siguientes combinaciones:

|                     | Mac | Linux | Windows |
| ------------------- | :-: | :---: | :-----: |
| **iOS**             |  x  |       |         |
| **Android**         |  x  |   x   |    x    |
| **BlackBerry 10**   |  x  |   x   |    x    |
| **Windows Phone 8** |     |       |    x    |
| **OS X**            |  x  |       |         |
| **Ubuntu**          |     |   x   |         |
| **Windows**         |     |       |    x    |

## Añadir plataformas <a href="#anadir-plataformas" id="anadir-plataformas"></a>

Para añadir una plataforma para la cual queremos compilar nuestro proyecto usaremos el siguiente comando:

```
$ cordova platform add <nombre-de-la-plataforma>
```

> Si escribimos "platforms", en plural, en lugar de "platform", también funcionará, ya que este comando es un alias.

Por ejemplo, en un Linux podremos añadir las siguientes plataformas a nuestro proyecto:

```
$ cordova platform add android
$ cordova platform add blackberry10
$ cordova platform add ubuntu
$ cordova platform add browser
```

La plataforma "browser" es una plataforma especial (disponible en todos los sistemas operativos) que nos perimitirá depurar nuestras aplicaciones en el navegador, no sólo mostrando la apariencia del código web sino también permitiendonos usar algunos de los plugins que veremos más adelante.

### _Ejemplo_: Añadir la plataforma Android <a href="#ejemplo-anadir-la-plataforma-android" id="ejemplo-anadir-la-plataforma-android"></a>

Por ejemplo, tras crear nuestro primer proyecto "myapp" en Linux, procedemos a añadir la plataforma Android como destino de la compilación, con el comando:

```
$ cordova platform add android
```

Si nos indicara que el SDK no está instalado en primer lugar tendríamos que descargarlo e instalarlo nosotros manualmente (el CLI de Cordova no incluye opciones para realizar la instalación de los distintos SDKs).

También es posible que no encuentre la ruta del SDK y nos de error tanto al añadir la plataforma como en la posterior compilación:

```
Android SDK is not set up properly. Make sure that the Android SDK 'tools' and 'platform-tools' 
directories are in the PATH variable.
```

Para arreglar este problema tenemos que asignar la ruta del SDK de Android a la variable "`ANDROID_HOME`" y al "`PATH`". Para esto en una consola de Linux ejecutamos:

```
export ANDROID_HOME=/<android-sdk-location>/sdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platforms-tools
```

Si estamos en un Mac usaremos:

```
export ANDROID_HOME=/<android-sdk-location>/android-sdk-macosx
export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
```

Para hacer estos cambios permanentes (de otra forma solo estarían disponibles para la consola actual) tendremos que añadir las líneas indicadas al fichero `.bashrc` (o a `.profile` o `.bash_profile`, dependiendo del sistema).

Después de arreglar estos problemas ya tendríamos que poder instalar la plataforma sin problemas.

## Listar plataformas <a href="#listar-plataformas" id="listar-plataformas"></a>

Para obtener un listado con las plataformas disponibles para nuestro sistema operativo además de un listado con las plataformas que ya hemos añadido a nuestra aplicación tenemos que ejecutar el comando:

```
$ cordova platform ls

# O simplemente:
$ cordova platform
```

Lo que nos mostraría (en ambos casos) un resultado similar al siguiente:

```
Installed platforms: android, browser
Available platforms: blackberry10, ubuntu
```

## Eliminar una plataforma <a href="#eliminar-una-plataforma" id="eliminar-una-plataforma"></a>

Para eliminar una plataforma añadida podemos ejecutar alguno de los siguientes comandos (los cuales son equivalentes):

```
$ cordova platform remove android

# O también:
$ cordova platform rm android
```

## Contenido de la carpeta "_platforms_" <a href="#contenido-de-la-carpeta-platforms" id="contenido-de-la-carpeta-platforms"></a>

Al añadir una plataforma o eliminarla, únicamente estamos trabajando sobre la carpeta "_platforms_" de nuestro proyecto. Al añadir una nueva se genera un subdirectorio con el nombre de la plataforma en cuestión, con el código fuente para esa plataforma.

Cada vez que se compile o ejecute el proyecto (como veremos más adelante) se copiará el contenido de la carpeta "www" (la cual contiene el código de nuestro proyecto) a una subcarpeta de cada plataforma (borrando todo lo que hubiese en ella). Por ejemplo, para Android se copiaría en la ruta `platforms/android/assets/www/` y para iOS en la ruta `platforms/ios/www`.

Por este motivo es importante que **no modifiquemos** el contenido de nuestro proyecto o aplicación directamente en la carpeta _platforms_, ya que se **borrará** en la siguiente compilación. Cualquier cambio que queramos hacer lo tendremos que realizar siempre dentro de la carpeta base `www`.
