Ios app problem

Hi everywhere. Firstly sorry for my bad English, I have a problem with my app in Ios platform. The app in Android work perfectly, but when I test in Iphone devices the app is slowly, some navPush don’t work while other work fine, ion-grid load some element. Can I solve? I try to reinstall new Ionic App but the problem is still here.

I past my configuration:

{
  "name": "OpenGoNew",
  "version": "0.0.1",
  "author": "Ionic Framework",
  "homepage": "http://ionicframework.com/",
  "private": true,
  "scripts": {
    "clean": "ionic-app-scripts clean",
    "build": "ionic-app-scripts build",
    "lint": "ionic-app-scripts lint",
    "ionic:build": "ionic-app-scripts build",
    "ionic:serve": "ionic-app-scripts serve"
  },
  "dependencies": {
    "@angular/common": "^7.2.15",
    "@angular/compiler": "^7.2.15",
    "@angular/compiler-cli": "^7.2.15",
    "@angular/core": "^7.2.15",
    "@angular/forms": "^5.2.0",
    "@angular/http": "^5.2.0",
    "@angular/platform-browser": "^5.2.0",
    "@angular/platform-browser-dynamic": "^5.2.0",
    "@ionic-native/app-update": "^5.5.1",
    "@ionic-native/camera": "^5.5.1",
    "@ionic-native/core": "^5.5.1",
    "@ionic-native/email-composer": "^5.5.1",
    "@ionic-native/splash-screen": "^5.5.1",
    "@ionic-native/status-bar": "^5.5.1",
    "@ionic/storage": "^2.2.0",
    "@ng-idle/core": "^2.0.0-beta.15",
    "@ng-idle/keepalive": "^2.0.0-beta.15",
    "cordova-ios": "5.0.0",
    "cordova-plugin-app-update": "^2.0.2",
    "cordova-plugin-appversion": "^1.0.0",
    "cordova-plugin-camera": "4.0.3",
    "cordova-plugin-device": "^2.0.2",
    "cordova-plugin-email-composer": "0.9.2",
    "cordova-plugin-ionic-keyboard": "^2.1.3",
    "cordova-plugin-ionic-webview": "^3.1.2",
    "cordova-plugin-splashscreen": "^5.0.2",
    "cordova-plugin-statusbar": "^2.4.2",
    "cordova-plugin-whitelist": "^1.3.3",
    "es6-promise-plugin": "4.2.2",
    "ionic-angular": "3.9.2",
    "ionicons": "^4.5.8",
    "rxjs": "^6.3.0",
    "rxjs-compat": "^6.5.2",
    "sw-toolbox": "3.6.0",
    "zone.js": "0.8.29"
  },
  "devDependencies": {
    "@ionic/app-scripts": "3.2.3",
    "typescript": "2.6.2"
  },
  "description": "An Ionic project",
  "cordova": {
    "plugins": {
      "cordova-plugin-camera": {},
      "cordova-plugin-email-composer": {
        "ANDROID_SUPPORT_V4_VERSION": "28.+"
      },
      "cordova-plugin-app-update": {},
      "cordova-plugin-whitelist": {},
      "cordova-plugin-statusbar": {},
      "cordova-plugin-device": {},
      "cordova-plugin-splashscreen": {},
      "cordova-plugin-ionic-webview": {
        "ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
      },
      "cordova-plugin-ionic-keyboard": {}
    },
    "platforms": [
      "ios"
    ]
  }
}
import { ListAppartmentPageModule } from './../pages/list-appartment/list-appartment.module';
import { RiepilogoUtentePageModule } from './../pages/riepilogo-utente/riepilogo-utente.module';
import { DocumentsPageModule } from './../pages/documents/documents.module';
import { CamerePageModule } from './../pages/camere/camere.module';
import { CamerePage } from './../pages/camere/camere';
import { ListAppartmentPage } from './../pages/list-appartment/list-appartment';
import { BrowserModule } from '@angular/platform-browser';
import { ErrorHandler, NgModule } from '@angular/core';
import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';

import { MyApp } from './app.component';
import { HomePage } from '../pages/home/home';
import { RiepilogoUtentePage } from '../pages/riepilogo-utente/riepilogo-utente';

import { HttpClientModule } from '@angular/common/http';
import { HttpModule } from '@angular/http';

import { PostProvider } from '../providers/post-provider';
import { IonicStorageModule } from '@ionic/storage';
import { DocumentsPage } from "../pages/documents/documents";
import { GetLocalUserProvider } from '../providers/get-local-user';
import {NgIdleKeepaliveModule} from "@ng-idle/keepalive";

import { Camera } from '@ionic-native/camera/ngx';
import { EmailComposer } from '@ionic-native/email-composer/ngx';


@NgModule({
  declarations: [
    MyApp,
    HomePage,
    // ListAppartmentPage,
    // RiepilogoUtentePage,
    // CamerePage,
    // DocumentsPage
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    HttpModule,
    CamerePageModule,
    DocumentsPageModule,
    RiepilogoUtentePageModule,
    ListAppartmentPageModule,
    NgIdleKeepaliveModule.forRoot(),
    IonicStorageModule.forRoot(),
    IonicModule.forRoot(MyApp, {
       autocomplete: false,
       autocorrect: 'off',
       scrollAssist: false,
       autoFocusAssist: false
    })
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    HomePage,
    RiepilogoUtentePage,
    ListAppartmentPage,
    CamerePage,
    DocumentsPage
  ],
  providers: [
    StatusBar,
    SplashScreen,
    Camera,
    EmailComposer,
    PostProvider,
    {provide: ErrorHandler, useClass: IonicErrorHandler},
    GetLocalUserProvider
  ]
})
export class AppModule {}

I have to deliver the final version app in two weeks. I am desperate. Please someone help me.

1 Like

hello , mabe your file cofig.xml is not properly done , some instruction in file config.xml must be added for ios to work perfectly ,
i suggest u to check the official documentation of gradle , and the official documentation of ionic to see what you are missing here .
i can tell you for example according to my knowledge , for making geolocation working correctly on ios you should and some instruction in the file config.xml which is available in the official documentation of ionic
hope this help

What I have to set for Ios in config.xml? I no have geolocalization. I write a provider named getLocalUserProvider that use http method.

1 Like

ok show us your full project code here , we need to see all to be able to help u , mabe it’s a directive problem or something else.

import { Component, ViewChild } from '@angular/core';
import {Platform, NavController, MenuController, ModalController} from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { Storage } from '@ionic/storage';

import { ListAppartmentPage } from '../pages/list-appartment/list-appartment';
import { HomePage } from '../pages/home/home';
import { DEFAULT_INTERRUPTSOURCES, Idle } from "@ng-idle/core";
import { User } from "../pages/model/user";
import { CamerePage } from "../pages/camere/camere";


@Component({
  templateUrl: 'app.html'
})
export class MyApp {
  rootPage:any = HomePage;
  @ViewChild('myNav') navCtrl: NavController;
  user: User;

  dateLogin: any;
  dateResume: any;
  expired: boolean;
  pagina: string;

  diffMs;
  diffDays;
  diffHrs;
  diffMins;

  constructor(platform: Platform,
              statusBar: StatusBar,
              splashScreen: SplashScreen,
              private storage: Storage,
              private menuCtrl: MenuController,
              private modalCtrl: ModalController,
              private idle: Idle) {


    platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      statusBar.styleDefault();
      splashScreen.hide();

      this.getCurrentPage();

      this.getDateLogin()
          .then( () => {
            if(this.expired == false){
              this.storage.get('session_storage').then((res)=> {
                this.user = JSON.parse(res);
                console.log(this.user);
              }).then( () => {
                if(this.user == null){
                  this.rootPage = HomePage;
                } else {
                  console.log("Il tipo di utente tornato è: " + this.user.type);
                  if(this.user.type == "user") {
                    this.rootPage = CamerePage;
                  } else {
                    this.rootPage = ListAppartmentPage;
                  }
                }
              });
            } else {
              this.logout();
            }
          });




      //TODO: Gestione AUTO LOGOUT BACKGROUND APP

      platform.pause.subscribe(() => {
        this.dateLogin = new Date().getTime();
        this.storage.set("date_login",this.dateLogin).then(res => console.log(res));
        console.log(this.dateLogin);
        console.log('[INFO] App paused');
        console.log("Il nome della root_page è: " + this.rootPage.name);
        this.getCurrentPage().then(() => {
          if (this.pagina == "foto"){
            console.log("Sono in pagina fotocamera");
          }else {
            console.log("Sono nelle altre pagine quindi chiudo l'app");
            platform.exitApp();
          }
        });

        //platform.exitApp();
      });

      platform.resume.subscribe(() => {
        console.log('[INFO] App resumed');
        this.getDateLogin();
      });

      //FINE Gestione AUTO LOGOUT BACKGROUND APP

    });


    // this.storage.get('session_storage').then((res)=> {
    //   this.user = JSON.parse(res);
    //   console.log(this.user);
    // }).then( () => {
    //   if(this.user == null){
    //     this.rootPage = HomePage;
    //   } else {
    //     console.log("Il tipo di utente tornato è: " + this.user.type);
    //     if(this.user.type == "user") {
    //       this.rootPage = CamerePage;
    //     } else {
    //       this.rootPage = ListAppartmentPage;
    //     }
    //   }
    // });
    this.autoLogout();
  }


  ionViewDidLoad(){
    //this.getDateLogin();
  }

  autoLogout(){
    //timeout to AutoLOGOUT
    this.idle.setIdle(3);
    this.idle.setTimeout(15*60); // un minuto.. test!!
    this.idle.setInterrupts(DEFAULT_INTERRUPTSOURCES);

    this.idle.onTimeoutWarning.subscribe((countdown: number) => {
      console.log('Timeout Warning - ' + countdown);
    });

    this.idle.onTimeout.subscribe(() => {
      console.log('Timeout');
      //this.storage.clear();
      this.storage.remove('session_storage');
      this.storage.remove('date_login');
      this.navCtrl.setRoot(HomePage);
    });

    this.idle.watch();
  }

  logout(){
    this.storage.remove('session_storage');
    this.storage.remove('date_login');

    this.idle.stop();
    this.idle.ngOnDestroy(); //includes this.idle.stop() and this.clearInterrupts() both.

    setTimeout(() => this.navCtrl.setRoot(HomePage), 1000);

  }

  openPage(page:any){
    this.navCtrl.setRoot(page);
    this.menuCtrl.close();
  }

  openModal(page:any){
    let modal = this.modalCtrl.create(page);
    modal.present();
    this.menuCtrl.close();
  }


  getDateLogin() {
    return this.storage.get('date_login').then((val) => {

      this.dateLogin = val;
      console.log("VAL: "+ val);
    }).then(() => {
      if(this.dateLogin == null || this.dateLogin == undefined){
        //this.dateLogin = new Date();
        console.log("Data dopo aver verificato non esista: "+ this.dateLogin);
        //this.navCtrl.setRoot(HomePage);
        this.expired = false;
        //this.storage.set('date_login', this.dateLogin.getMinutes());
      } else {
        this.dateResume = new Date().getTime();
        this.getDifferenceBetwennTwoDates(this.dateResume,this.dateLogin);
        console.log("Data dopo aver verificato che ci si sia già loggati esista: "+ this.dateResume);
        //if(((this.dateResume - this.dateLogin) > 20) || ((this.dateResume - this.dateLogin) <= -40)){
        if((this.diffMins > 10) || (this.diffDays > 0) ){
          console.log("Data dopo aver verificato la differenza: "+ this.dateLogin);
          console.log("Data dopo aver verificato la differenza: "+ this.dateResume);
          console.log("Differenza: "+ (this.dateResume - this.dateLogin));
          //this.logout();
          this.expired = true;
        } else {
          this.dateLogin = new Date().getTime();
          this.storage.set('date_login', this.dateLogin);
          //this.navCtrl.setRoot(HomePage);
          this.expired = false;
        }
      }
    });
  }


  getDifferenceBetwennTwoDates(dateLogin, dateResume){
    this.diffMs = (dateLogin - dateResume); // milliseconds
    this.diffDays = Math.floor(this.diffMs / 86400000); // days
    this.diffHrs = Math.floor((this.diffMs % 86400000) / 3600000); // hours
    this.diffMins = Math.round(((this.diffMs % 86400000) % 3600000) / 60000); // minutes
    console.log(this.diffDays + " days, " + this.diffHrs + " hours, " + this.diffMins + "minutes");
  }

  getCurrentPage(){
    return this.storage.get('foto').then((val) => {

      this.pagina = val;
      console.log("PAGINA CORRENTE: " + val);
    });
  }

}
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Storage } from '@ionic/storage';
import {User} from "../pages/model/user";


@Injectable()
export class GetLocalUserProvider {

  user: User = new User();


  constructor(public http: HttpClient, private storage: Storage) {
  }


  getStorage(key, obj, func) {
    return this.storage.get(key).then((val) => {
      obj = JSON.parse(val);
    }).then(() =>{
      func;
    });
  }


}
import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
import 'rxjs/add/operator/map';

@Injectable()
export class PostProvider {


  key="myVariable";
  module="myVariable";
  url = "myVariable";


  constructor(public http: Http){}


  makeLogin(funct: string, username: string, password: string)
  {
    let urlSearchParams = new URLSearchParams();
    urlSearchParams.append('key', this.key);
    urlSearchParams.append('module', this.module);
    urlSearchParams.append('function', funct);
    urlSearchParams.append('username', username);
    urlSearchParams.append('password', password);
    let body = urlSearchParams.toString();

    var headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');

    return this.http
      .post(this.url, body, { headers: headers })
      .map(response => response.json())
  }


  getListAppartments(funct: string, keyclient: string)
  {
    let urlSearchParams = new URLSearchParams();
    urlSearchParams.append('key', this.key);
    urlSearchParams.append('module', this.module);
    urlSearchParams.append('function', funct);
    urlSearchParams.append('keyclient', keyclient);
    let body = urlSearchParams.toString();

    var headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');

    return this.http
      .post(this.url, body, { headers: headers })
      .map(res => res.json());
  }

  getListAppartmentsAdmin(funct: string, keyclient: string, token: string, sessionid:string)
  {
    let urlSearchParams = new URLSearchParams();
    urlSearchParams.append('token', token);
    urlSearchParams.append('key', this.key);
    urlSearchParams.append('module', this.module);
    urlSearchParams.append('function', funct);
    urlSearchParams.append('keyclient', keyclient);
    urlSearchParams.append('sessionid', sessionid);
    let body = urlSearchParams.toString();

    var headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');

    return this.http
        .post(this.url, body, { headers: headers })
        .map(res => res.json());
  }



  getKeys(keyclient:string, token:string, funct:string, sessionid:string, roomid:string, key:string, module: string){

    let urlSearchParams = new URLSearchParams();
    urlSearchParams.append('token', token);
    urlSearchParams.append('keyclient', keyclient);
    urlSearchParams.append('key', this.key);
    urlSearchParams.append('module', this.module);
    urlSearchParams.append('function', funct);
    urlSearchParams.append('sessionid', sessionid);
    urlSearchParams.append('roomid', roomid);
    let body = urlSearchParams.toString();

    var headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');

    return this.http
      .post(this.url, body, { headers: headers })
      .map(res => res.json());
  }

  openDoor(keyclient:string, token:string, funct:string, sessionid:string, roomid:string, keycode: string){

    let urlSearchParams = new URLSearchParams();
    urlSearchParams.append('token', token);
    urlSearchParams.append('keyclient', keyclient);
    urlSearchParams.append('key', this.key);
    urlSearchParams.append('module', this.module);
    urlSearchParams.append('function', funct);
    urlSearchParams.append('sessionid', sessionid);
    urlSearchParams.append('roomid', roomid);
    urlSearchParams.append('keycode', keycode);
    let body = urlSearchParams.toString();

    var headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');

    return this.http
        .post(this.url, body, { headers: headers })
        .map(res => res.json());
  }

  getContacts(funct:string){
    let urlSearchParams = new URLSearchParams();
    urlSearchParams.append('key', this.key);
    urlSearchParams.append('module', this.module);
    urlSearchParams.append('function', funct);
    let body = urlSearchParams.toString();

    var headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');

    return this.http
        .post(this.url, body, { headers: headers })
        .map(res => res.json());
  }

}

import { Component } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import {IonicPage, LoadingController, MenuController, NavController, NavParams} from 'ionic-angular';
import {RiepilogoUtentePage} from "../riepilogo-utente/riepilogo-utente";
import {KeyClient} from "../model/keyClient";
import {User} from "../model/user";
import { Storage } from '@ionic/storage';
import {HomePage} from "../home/home";
import {PostProvider} from "../../providers/post-provider";

/**
 * Generated class for the CamerePage page.
 *
 * See https://ionicframework.com/docs/components/#navigation for more info on
 * Ionic pages and navigation.
 */

@IonicPage()
@Component({
  selector: 'page-camere',
  templateUrl: 'camere.html',
})
export class CamerePage {

    appartments:KeyClient[] = [];
    keys: string[];
    camere: KeyClient[];
    user: User;
    loading:any;

    constructor(public navCtrl: NavController,
                public navParams: NavParams,
                public http: HttpClient,
                private loadingCtrl: LoadingController,
                private storage: Storage,
                private postPvdr: PostProvider,
                public menuCtrl: MenuController)
    {


    }

  showLoader(){
    this.loading = this.loadingCtrl.create({
      content: 'Caricamento in corso'
    });
    this.loading.present();
  }


  ionViewDidLoad() {
    console.log('ionViewDidLoad CamerePage');
      this.showLoader();
      //this.camera = this.navParams.get('stanza');
      this.camere = this.navParams.get('stanza');
      if(this.camere != null){
          //this.appartments.push(this.camera);
          //this.appartments = this.appartmentsRetrieve;
          this.keys = Object.keys(this.camere);
          console.log(this.appartments);
      } else {
          this.getStorage().then(() =>{
              if (this.user.type == "user"){
              this.menuCtrl.enable(true, 'menuUser');
              this.menuCtrl.enable(false, 'myMenu');
          } else {
              this.menuCtrl.enable(false, 'menuUser');
              this.menuCtrl.enable(true, 'myMenu');
          }
          });
      }
      this.loading.dismiss();
  }

  chooseHouse(item:KeyClient){     ---->   THIS NAV DON'T WORK.. IN ANDROID WORK FINE
    console.log(item);
    this.navCtrl.push(RiepilogoUtentePage, {riepilogo: item});
  }


  doRefresh(event) {
    this.showLoader();
      this.keys = this.navParams.get('stanza');
      if(this.keys != null){
          //this.appartments.push(this.camera);
          this.keys = Object.keys(this.camere);
      } else {
          this.getStorage();
      }
    this.loading.dismiss();
    event.complete();
  }



    getStorage() {
        return this.storage.get('session_storage').then((val) => {

            this.user = JSON.parse(val);
            console.log("VAL: "+ val);
        }).then(() =>{
            this.getUser()
        });
    }
    getUser() {

        console.log(this.user);
        console.log("Parto con la chiamata HTTP");

        if (this.user.keyclient != null && this.user.keyclient != undefined) {

            console.log("Il keyClient ricevuto dalla login è: " + this.user.keyclient);

            this.postPvdr.getListAppartments("elencostanze", this.user.keyclient)
                .subscribe((data: [KeyClient]) => {
                    this.appartments = data;
                    this.loading.dismiss();
                    console.log(this.appartments);
                });

        } else {
            this.storage.clear();
            this.navCtrl.setRoot(HomePage);
        }
    }

}

i do not see html files

<ion-menu id="myMenu"  [content]="myNav" side="right">

  <ion-header>
    <ion-toolbar style="height: 70px;">
      <button ion-button menuToggle>
        <ion-icon style="font-size: 3.5rem; color: #ffffff;" name="menu"></ion-icon>
      </button>
      <ion-title>Menu</ion-title>
    </ion-toolbar>
  </ion-header>

  <ion-content>
    <ion-list>
      <button ion-item (click)="openPage('ListAppartmentPage')" style="height: 60px;">Appartamenti</button>
      <!--<button ion-item (click)="openPage('DocumentsPage')" style="height: 60px;">Scatta Foto</button>-->
      <button ion-item (click)="openPage('ContattiPage')" style="height: 60px;">Contatti</button>
      <button ion-item (click)="openPage('PrivacyPage')" style="height: 60px;">Privacy</button>
      <button ion-button (click)="logout()">Logout</button>
    </ion-list>
  </ion-content>

</ion-menu>

<ion-menu id="menuOnlyContact"  [content]="myNav" side="right">

  <ion-header>
    <ion-toolbar style="height: 70px;">
      <button ion-button menuToggle>
        <ion-icon style="font-size: 3.5rem; color: #ffffff;" name="menu"></ion-icon>
      </button>
      <ion-title>Menu</ion-title>
    </ion-toolbar>
  </ion-header>

  <ion-content>
    <ion-list>
      <button ion-item (click)="openPage('ModalPhotoPage')" style="height: 60px;">Contatti</button>
    </ion-list>
  </ion-content>

</ion-menu>

<ion-menu id="menuUser"  [content]="myNav" side="right">

  <ion-header>
    <ion-toolbar style="height: 70px;">
      <button ion-button menuToggle>
        <ion-icon style="font-size: 3.5rem; color: #ffffff;" name="menu"></ion-icon>
      </button>
      <ion-title>Menu</ion-title>
    </ion-toolbar>
  </ion-header>

  <ion-content>
    <ion-list>
      <button ion-item (click)="openPage('CamerePage')" style="height: 60px;">Camere</button>
      <button ion-item (click)="openPage('DocumentsPage')" style="height: 60px;">Scatta Foto</button>
      <button ion-item (click)="openPage('ContattiPage')" style="height: 60px;">Contatti</button>
      <button ion-item (click)="openPage('PrivacyPage')" style="height: 60px;">Privacy</button>
      <button ion-button (click)="logout()">Logout</button>
    </ion-list>
  </ion-content>

</ion-menu>

<ion-nav #myNav [root]="rootPage" swipeBackEnabled="false"></ion-nav>

<ion-header>
  <ion-navbar>
    <ion-toolbar style=" height: 70px !important;">
      <img src="../assets/imgs/logoopenhotel.png" alt="logo">
      <!--            <button right ion-button menuToggle style="padding-right: 5% !important;">-->
      <!--                <ion-icon name="menu"></ion-icon>-->
      <!--            </button>-->
    </ion-toolbar>
  </ion-navbar>
</ion-header>


<ion-content padding>

  <button right ion-button menuToggle>
    <ion-icon name="menu"></ion-icon>
  </button>

    <ion-refresher slot="fixed" (ionRefresh)="doRefresh($event)">
      <ion-refresher-content></ion-refresher-content>
    </ion-refresher>

  <br><br><br>

  <div id="loginUtente-markdown1" class="show-list-numbers-and-dots" style="text-align: center;">
      <h4>Lista Camere</h4>
  </div>

  <br><br>

    <ion-list *ngIf="camere">
      <ion-item *ngFor="let item of keys" (click)="chooseHouse(camere[item])">
        <ion-thumbnail item-start>
          <img [src]="camere[item].thumnails_image">
        </ion-thumbnail>
        <h2><strong>{{camere[item].nome}}</strong></h2>
        <p>Indirizzo: {{camere[item].address}}</p>
        <p>Telefono: {{camere[item].contacts["tel"]}}</p>
        <button ion-button clear item-end style="width: 9%!important; color: #000000 !important; background-color: transparent !important;">
          <ion-icon style="font-size: 2rem !important;" name="arrow-dropright"></ion-icon>
        </button>
      </ion-item>
    </ion-list>

<!--  <ion-list *ngIf="appartments">-->
<!--    <ion-item *ngFor="let item of appartments" (click)="chooseHouse(item)">-->
<!--      <ion-thumbnail item-start>-->
<!--        <img [src]="item.thumnails_image">-->
<!--      </ion-thumbnail>-->
<!--      <h2>Camera: {{item.nome}}</h2>-->
<!--      <p>Indirizzo: {{item.address}}</p>-->
<!--      <p>Telefono: {{item.contacts["tel"]}}</p>-->
<!--      <button ion-button clear item-end style="width: 9%!important; color: #000000 !important; background-color: transparent !important;">-->
<!--        <ion-icon style="font-size: 2rem !important;" name="arrow-dropright"></ion-icon>-->
<!--      </button>-->
<!--    </ion-item>-->
<!--  </ion-list>-->
</ion-content>

<ion-header>
    <ion-navbar style="margin-top: 0px; min-height: 0px;">
    </ion-navbar>
  </ion-header>

<ion-content padding="true" class="has-header">

  <br><br><br><br><br>

  <form [formGroup]="credentialsForm">

      <img src="../assets/imgs/logoopenhotel.png" alt="logo">

    <br><br>

  <div class="show-list-numbers-and-dots">
      <h3>Stai per entrare nella tua <br> stanza ma prima effettua il login</h3>
  </div>

  <br><br>

      <ion-item>
        <ion-label floating>Username / Email</ion-label>
        <ion-input autocomplete="off" class="my-input" [formControl]="credentialsForm.controls['username']" type="email" #user></ion-input>
      </ion-item>

      <ion-item>
          <ion-label floating>Password</ion-label>
          <ion-input autocomplete="new-password" role="presentation" class="my-input secure-font" [formControl]="credentialsForm.controls['password']" type="password" #pass></ion-input>
      </ion-item>

      <br><br>

      <h3 id="loginUtente-heading1" >Trattamento dei dati</h3>
        <div id="loginUtente-markdown1" class="show-list-numbers-and-dots">
            <p>
                Dichiaro di aver preso visione
                <br>del <strong>RE GDPR 679/2016</strong>
                <br> in materia di Privacy e
                <br>Protezione dei Dati personali.
            </p>
        </div>

        <div class="row">
          <div class="check">
            <ion-label>
              <ion-checkbox formControlName="cbox"></ion-checkbox>
              <p class="accetto">Accetto</p>
            </ion-label>
          </div>
        </div>

      <button ion-button  id="loginUtente-button1" style="height: 60px; background-color: #eaa315 !important;" full class="login"
       [disabled]="!credentialsForm.valid"
       (click)="login(user.value, pass.value)">Entra</button>
  </form>

</ion-content>

Can you help me please? I can’t understand what I solve this problem

pls try this in html:

Camere Scatta Foto Contatti Privacy Logout

I remember one time i had problem when i used routing with ‘’ when calling a page , sometimes work and sometimes no , if that did not work there are other alternatives ,
can you tell us which routing navigations do not work?
Regards

When I click in CameraPage the method to navpush in RiepilogoPage, in Android work, in Iphone No. But If I log like admin something work, like user doesn’t work. Then, In Riepilogo page, I have to load Three element in grid, but in Ios load only two element until I swith from portrait to landscape and viceversa

i understand u and this is interesting problem
did u try what i told you?

I think the best thing you can do now is to go to Stackoverflow https://stackoverflow.com
and this forum there ,
i am sure that they will help you there ,
also in the same time open an issue on Github .https://github.com
I hope you will find the solution
Regards.

Sorry but I didn’t undesrtand hat I hae to try. Can you explain me? Thank you

When you said: Try this in html, I dont’ see what I have to try

Listen , do what i said about github and stackoverflow and i guarantee you to solve your problem.
my proposition was to delete these ‘’ inhtml , mabe it can work mabe not but as i said the best place is Github and stackoverflow for that kind of forums .
<button ion-item (click)=“openPage(‘ListAppartmentPage’)” style=“height: 60px;”>Appartamenti
replace that line by this
<button ion-item (click)=“openPage(ListAppartmentPage)” style=“height: 60px;”>Appartamenti

what is your cordova version?
do the consol display any warings when you run the application by ionic serve ?
is there any warnings when you install a mlugin? for example npm install?
sometimes you have to check if there is a problem with npm
you go to the cmd
and go to your project directory and tap npm audit fix --force
if there is something missing in your dependencies mabe that can solve the problem

Cordova version: 8.1.2 (cordova-lib@8.1.1)
Thanks. I try to stackoverflow and Github

Hey @michele87 show me your error log…