The code signature version is no longer supported – iOS

Si estamos intentando instalar nuestra app en nuestro iPhone y recibimos este error:

The code signature version is no longer supported.

Es debido a que Apple ha cambiado la firma de codificación para incluir derechos codificados en «DER» además de los derechos codificados en plist.
Esta sección adicional de derechos codificados en DER es necesaria en iOS 15 y se obligado en la última versión de Xcode.

Para solucionarlo iremos a «Build Settings» de nuestro Xcode y buscaremos en la lupita «Other Code Signing Flags«, en la parte de Debug añadiremos el siguiente texto:

--generate-entitlement-der

Intentamos instalar de nuevo la app y ya debería de funcionar (o al menos arreglarse este problemilla)


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

Unable to install App – Ionic iOS

En mi caso el problema viene de intentar instalar en el iPhone la app desarrollada con Ionic.
Si nos aparece este alert, clickemos en «Details» y leamos un poco los códigos «raros» que nos explica. El que nos interesa es si pone:

The code signature version is no longer supported.

Para solucionarlo iremos a «Build Settings» de nuestro Xcode y buscaremos en la lupita «Other Code Signing Flags«, en la parte de Debug añadiremos el siguiente texto:

--generate-entitlement-der

Volvemos a intentar instalar y ya nos debería funcionar 💃


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

Pods-App.debug.xcconfig: unable to open file (in target «App» in project «App»)

Si intentando compilar nuestra app de Ionic con ios nos aparece el siguiente error en consola, accedemos desde nuestra terminal a la carpeta donde tenemos la app. En mi caso el error era:

Showing All Messages
/Users/kikebeltran/Projects/ionic-app/ios/App/Pods/Target Support Files/Pods-App/Pods-App.debug.xcconfig: unable to open file (in target "App" in project "App")

Mi directorio es:

/Users/kikebeltran/Projects/ionic-app/ios/App

Para acceder:

cd /Users/kikebeltran/Projects/ionic-app/ios/App

Y una vez allí ejecutamos:

pod install

Y ya deberíamos poder compilar (:


En el caso que con solo «pod install» no nos funcione, ejecutaremos los siguiente comandos:

pod reintegrate 
pod install

Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

[ERROR] An error occurred while running subprocess capacitor.

Si estamos empezando a crear una app con Ionic y nos arroja el siguiente error:

> capacitor init example-app io.ionic.starter –web-dir www –npm-client npm
error: unknown option ‘–npm-client’
[ERROR] An error occurred while running subprocess capacitor.

capacitor init example-app io.ionic.starter –web-dir www –npm-client npm exited with exit code 1.

Re-running this command with the –verbose flag may provide more information.

Installing dependencies may take several minutes.

Deberíamos reinstalar el nuevo cli de ionic, para ello:

npm uninstall -g ionic
npm uninstall -g @ionic/cli
npm install -g @ionic/cli

Volvemos a ejecutar el comando para crear la app y debería de funcionar.


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

Serialization of ‘Illuminate\Http\UploadedFile’ is not allowed On queue – Laravel

Si estamos con Laravel e intentamos enviar un archivo a un proceso de colas nos saltará este error, eso sucede porque no podemos mandar una instancia del archivo subido al job.

Para ello deberemos de almacenar el archivo para luego posteriormente poder tratarlo cuando manejemos el job.


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

NullInjectorError: No provider for Renderer2! en un Service de Angular

Si intentamos manipular el DOM desde un servicio de Angular (a sabiendas que no es aconsejado según las convenciones de Angular) es posible que nos salte el error:

NullInjectorError: No provider for Renderer2

Si queremos romper las «reglas» y acceder al DOM podemos hacer una truquito mientras Angular arregla el issue (https://github.com/angular/angular/issues/17824)

Lo que podemos hacer es inyectar en el constructor «RendererFactory2» y asignar en el constructor el «rendererFactory» inyectado a la propiedad «_renderer2» que anteriormente hemos inicializado.

El ejemplo entero:

import { Injectable, Renderer2, RendererFactory2 } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class AccesoDomDesdeService {

  private _renderer2: Renderer2

  constructor(
    rendererFactory: RendererFactory2,
  ) { 
    this._renderer2 = rendererFactory.createRenderer(null, null)
  }

}

Y ya podríamos utilizar el «_renderer2» para acceder al DOM perfectamente.


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

Añadir directorio para albergar una landing dentro de un proyecto Angular

No es lo más bonito, limpio, etc, etc… Pero, si queremos albergar una web/landing/blog o simplemente un directorio para tener algunos recursos dentro de nuestro proyecto en Angular

{
    "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
    ...
    "projects": {
      "webapp": {
        ...
        "architect": {
          "build": {
            "builder": "@angular-devkit/build-angular:browser",
            "options": {
              ...
              "assets": [
                "src/favicon.ico.png",
                "src/assets",
                "src/landing"
              ]
          }
        }
      }
    }
  }
}

Creamos una carpeta con el mismo nombre que hemos puesto «landing» y creamos un index.html dentro.


Y ya, compilamos y ya podemos acceder a:

http://localhost:4200/landing

Y veremos el index que hemos creado (:


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

Validar que el campo no exista en base de datos ignorando el del propio usuario con Laravel Validators

El título nos puede marear un poco, no supe resumirlo.

Básicamente, si queremos validar que el campo no exista en base datos, desde un validator de Laravel pondremos algo parecido a:
(pongamos el ejemplo que tenemos un campo que se llama usuario/username en base datos que queramos que sea único)

Este sería un resumen el archivo App\Http\Requests\UpdateUserRequest.php

class UpdateUserRequest extends FormRequest
{
    ...
    public function rules()
    {
        return [
            ...
            'surnames' => 'string|max:150',
            'username' => 'string|max:30|unique:users,username',
            ...
        ];
    }
}

Si nos fijamos en el campo username, entre otras validaciones (que sea un string como máximo 30 caracteres) tenemos unique, junto con la tabla; users y el campo que queremos que sea único; username.

Bien, esto nos funcionaría la primera vez cuando el usuario todavía no tiene un username… pero cuando vamos a actualizar el campo vamos a tener el problema que esta validación no nos permitiría enviar nuestro propio nombre de usuario ya que detectaría que ya existe en base de datos y nos lo echaría atrás.

En este caso tenemos que utilizar un validation rule diciéndole que ignore el username que esté relacionado con nuestro usuario (en este caso, el usuario logueado «request()->user()->id «):

public function rules()
class UpdateUserRequest extends FormRequest
{
    ...
    public function rules()
    {
        return [
            ...
            'surnames' => 'string|max:150',
            'username' => [ 'string', 'max:30', ValidationRule::unique( 'users' )->ignore( request()->user()->id ) ],
            ...
        ];
    }
}

¡Espero que os sirva!
Saludos 👨‍💻


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

La guía (cheat sheet) definitiva de Grid CSS

En el post anterior os pasé un par de enlaces para ver qué es CSS GRID y para empezar a aprender.

En este os paso un par de enlaces a modo de chuleta para refrescar la cantidad de propiedades que tiene CSS GRID.

Aquí tenemos dos páginas de referencia para (de un plumazo) refrescar la memoria de las bondades que atesora.

https://learncssgrid.com

https://grid.malven.co


Captura de pantalla de grid.malven.com


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?