AiT (Another Interval Timer), My First Ionic App!

Hello, I’ve completed my first Ionic project a week or two ago which is an interval timer app, using RxJS for its time keeping. I have also programmed it to dynamically change the app’s accent theme and base theme. Currently its on Google Play as unreleased as I’m hoping to have some people here install it on an Android and give it a go.

The open beta test link is in the project’s readme file:

Any feedback will be appreciated. If there are any issues, I prefer to have it go into the project’s Issues section on Github. I’m interested to know if the audible is efficient for its intention. working out in a large room (or if you don’t workout (like me since I’ve put time in finishing this), just sit and listen). UI performance too is a concern of mine. Take a look at the code, you have time to see if I have done any unconventional coding with the framework’s intention. Thanks!

First, congrats for the app, I really like the design, really neat

I cloned your repo and had a quick look at your code, really quick and from an high point of view, overall it looks good I think, I just noticed two things, one major and one minor, want say it’s wrong but who knows :wink:

Major:

It looks like your lazy loading isn’t complete aka doesn’t work as it should. I’m not sure about it but when I build your app I only found a main.js and vendor.js as output where actually I should find more js files respectively at least one pro pages (see screenshots, your build vs my app build with lazy loading)

I didn’t debug it, I thought I would ask you first, but if you want to use lazy loading, as I’m guessing you would like since you’ve got many modules, I think that the problem might comes by the fact that your are referencing your pages modules (like AppSettingsPageModule) in your app.modules. If you use lazy loading, pages shouldn’t be referenced like this (respectively no imports).

app.module.ts

 @NgModule({
     ...
    imports: [
       ...
       AppSettingsPageModule, // <-- It's a lazy loaded page, remove this reference

Furthermore, again if you want to use lazy loading, don’t forget to push/setRoot pages not with their class but with their class names

this.navCtrl.push(AppSettingsPage); // <-- Bad for lazy loading
this.navCtrl.push('AppSettingsPage'); // <-- Good for lazy loading

Minor:

Before going in production, remove all console.log (a couple are still not commented)

I hope that it helps :wink:

P.S.: Screenshots

your build output (www/build), everything is in main.js:

21

a part of mine (see 1.js, 2.js etc = lazy loaded bundles), splitter bundles:

@reedrichards,
I appreciate your time and thank you for the compliment!

I assume the console lines would of been stripped out by Cordova when building for production, so it never crossed my mind. For lazy loading, I did come across lots of discussions, and confusion since Ionic 3.0 came out (for whatever reason) so it wasn’t a priority of mine during development. I will be mindful of it for future builds of this app or another. I lazy loaded the AppSettingsPage in my local repo and it seems to work! Thanks for the advice on how to implement that too.

The project’s config file caught my attention when I was implementing your advice. I assume there are some lines/elements that can be removed?

...
    <allow-navigation href="http://ionic.local/*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
...
    <allow-navigation href="http://192.168.0.4:8100" />

My objective is to hopefully remove the ‘internet access’ item under the “Permissions needed” list for the app. This is shown on Google Play when viewing the app. Not sure if it’s even possible.

Anyways thanks again!

You are welcome, my pleasure, glad to hear it was useful.

Actually I don’t feel that sure about answering your last question, also I don’t know if these are the permissions which are displayed in Google Play, I thought it was more the permissions the plugins need (like accessing geo location etc.). But I would like to hear what you manage to do about it :wink: