Skip to content
This repository has been archived by the owner on Oct 12, 2022. It is now read-only.

Update gets stuck on checking for update on the second update. #369

Closed
BradleyMiller opened this issue Feb 13, 2018 · 10 comments
Closed

Update gets stuck on checking for update on the second update. #369

BradleyMiller opened this issue Feb 13, 2018 · 10 comments

Comments

@BradleyMiller
Copy link

Description

When I push an update I am able to successfully update the application. However after the app has been updated any subsequent attempts to update the application get stuck on the checking for update step. (After that all other attempts say a sync is in progress but the sync never completes).

Reproduction

I have reproduced this on the standard Ionic starter template.
I can change the Javascript and Html files fine but when I change the variables.scss file in the the theme folder the issue occurs.
For example if I change the colour of the dark variable in the below to 333.
$colors: ( primary: #488aff, secondary: #32db64, danger: #f53d3d, light: #f4f4f4, dark: #222 );

Once stuck the when I try update and it gets stuck the console logs are:
[CodePush] Reported status: {"status":1,"label":"v130","appVersion":"0.0.1","deploymentKey":"xxx","previousLabelOrAppVersion":"v129","previousDeploymentKey":"xxx"}
I am releasing with
appcenter codepush release-cordova -a xxx/xxxx

The closest issue I could find was this one: #86

Additional Information

  • cordova-plugin-code-push version: 1.11.3
  • List of installed plugins:

code-push 2.0.4 "CodePushAcquisition"
cordova-plugin-code-push 1.11.3 "CodePush"
cordova-plugin-device 2.0.1 "Device"
cordova-plugin-dialogs 2.0.1 "Notification"
cordova-plugin-file 6.0.1 "File"
cordova-plugin-file-transfer 1.7.1 "File Transfer"
cordova-plugin-ionic-keyboard 2.0.5 "cordova-plugin-ionic-keyboard"
cordova-plugin-ionic-webview 1.1.16 "cordova-plugin-ionic-webview"
cordova-plugin-splashscreen 5.0.2 "Splashscreen"
cordova-plugin-whitelist 1.3.3 "Whitelist"
cordova-plugin-zip 3.1.0 "cordova-plugin-zip"

  • Cordova version: 8.0.0
  • iOS/Android/Windows version: Android (Have not attempted the others)
  • Does this reproduce on a debug build or release build? Both
  • Does this reproduce on a simulator, or only on a physical device? Physical Device
@svekl
Copy link
Contributor

svekl commented Feb 13, 2018

Hi @BradleyMiller, thanks for reporting, doesn't it look like #362 to you? Does sync call any callback with status?

@BradleyMiller
Copy link
Author

Hi @svekl Thanks for the response. I don't think it is the same as #362 as in that case the update is failing and the app is rolling back. In my case the update works as expected I however cannot do any future updates. In the failed attempt the sync callback is called with a status of 5 but never progresses past there. I have included more details and the full console logs below.

If I don't touch that variable.scss file and make other changes e.g to the html I do not get this issue, but when changing the variable.scss file it usually creates this issue, I cannot find a pattern but I need the colours to look like this the below but it fails each time I change it to that.

$colors: ( primary: #488aff, secondary: #32db64, danger: #f53d3d, light: #f4f4f4, dark: #222, lightText: #cccccc, mediumText: #b3b2b2, dashBorder: #eaeaea, siteTakeOn: #d4b6de, siteConfig: #e1e68c, siteAudit: #e6af8c, siteRollout: #f8f1e0, siteDecomission: #b9b9b9, siteAdHoc: #8bc5e6, info:#31708f );

In my sample application the code I am running is pretty simple.

let codePush = (<any>window).codePush; let SyncStatus = (<any>window).SyncStatus; codePush.sync((syncStatus) => { console.log(syncStatus); });

The logs when I run the sync the first time are:

5
codePushUtil.js:36 [CodePush] Checking for update.
codePushUtil.js:36 [CodePush] An update is available. {"appVersion":"0.0.1","deploymentKey":"xxx","downloadUrl":"https://codepushupdates.azureedge.net/storagev2/mLPiGZfI_T4IZkWlupEY_ucyXlx4fb8a1342-2db7-48d6-8d71-1eda662c4e44","isMandatory":false,"label":"v145","packageHash":"d98a6657cb15aa83a00eaaef594109d0443eac3904cb66e4953b5005a18514fc","packageSize":963706,"failedInstall":false}
main.js:175 7
codePushUtil.js:36 [CodePush] Downloading update
codePushUtil.js:36 [CodePush] Package download success: {"deploymentKey":"xxx","label":"v145","appVersion":"0.0.1","isMandatory":false,"packageHash":"d98a6657cb15aa83a00eaaef594109d0443eac3904cb66e4953b5005a18514fc","isFirstRun":false,"failedInstall":false,"localPath":"cdvfile://localhost/files/codepush/download/update.zip"}
main.js:175 8
codePushUtil.js:36 [CodePush] Installing update
codePushUtil.js:36 [CodePush] Applying diff update
codePushUtil.js:36 [CodePush] Verifying hash for folder path: /codepush/deploy/versions/d98a6657cb15aa83a00eaaef594109d0443eac3904cb66e4953b5005a18514fc/
codePushUtil.js:36 [CodePush] Install succeeded.
codePushUtil.js:36 [CodePush] Update is installed and will be run on the next app restart.
main.js:175 1
codePushUtil.js:36 [CodePush] The update contents succeeded the data integrity check.
codePushUtil.js:36 [CodePush] Install succeeded.
codePushUtil.js:36 [CodePush] Update is installed and will be run on the next app restart.
main.js:175 1

Then after restarting the application if I rerun sync (regardless of if I have released a later version) it goes into the sync callback but seems to get stuck on checking for update and outputs the below to the console.

5
codePushUtil.js:36 [CodePush] Reported status: {"status":1,"label":"v153","appVersion":"0.0.1","deploymentKey":"xxx","previousLabelOrAppVersion":"0.0.1","previousDeploymentKey":"xxx"}

Any future attempts to sync give me a status of 4 with a message saying a sync is in progress. After restarting the application I will get a status of 5 and if I clear out the application data (in the android settings menu) it will roll me back to the original version and I will be able to again perform one successful sync.

@BradleyMiller
Copy link
Author

Hi,

Sorry I should have included this in the original issue but the exact steps for reproducing the issue are below.

  1. ionic start codepushtabs tabs
  2. When asked "Would you like to integrate your new app with Cordova to target native iOS and Android?" I selected Yes.
  3. When asked "Install the free Ionic Pro SDK and connect your app?" I selected No
  4. Ran yarn Intstall
  5. ionic cordova run android
  6. cordova plugin add cordova-plugin-code-push@latest
  7. In home.html added <button ion-button (click)="checkForUpdate()">Update</button> and wrote Version 1 in the tittle to keep track if the app updates.
  8. In home.ts added

checkForUpdate() {
let codePush = (window).codePush;
let SyncStatus = (window).SyncStatus;
codePush.sync((syncStatus) => {
console.log(syncStatus);
});
}

  1. In variables.scss changed the $ colors: to look like the below. (This step seems to cause the issues for some reason)

$colors: (
primary: #0c2340,
secondary: #32db64,
light: #f4f4f4,
dark: #222,
lightText: #cccccc,
mediumText: #b3b2b2,
dashBorder: #eaeaea,
siteTakeOn: #d4b6de,
siteConfig: #e1e68c,
siteAudit: #e6af8c,
siteRollout: #f8f1e0,
siteDecomission: #b9b9b9,
siteAdHoc: #8bc5e6,
info:#31708f,
infoBackground: #d6e9f3,
success:#3c763d,
successBackground: #deefd7,
danger: #a94442,
dangerBackground: #f2dede,
warning: #8a6d3b,
warningBackground: #fcf8e3
);

  1. Added the deployment key to the config.xml
  2. Ran ionic cordova build android
  3. ran appcenter codepush release-cordova -a myaccount/myappname
  4. Installed the application on the device.
  5. Updated version 1 in the html to version 2.
  6. reran ionic cordova build android and appcenter codepush release-cordova -a myaccount/myappname
  7. Clicked the update button and the app updated successfully. Version 1 changed to version 2. However any future attempts to update the app get stuck as explained above.

My config file

<?xml version='1.0' encoding='utf-8'?>
<widget id="io.ionic.starter" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>codepushtabs</name>
    <description>An awesome Ionic/Cordova app.</description>
    <author email="hi@ionicframework" href="http://ionicframework.com/">Ionic Framework Team</author>
    <content src="index.html" />
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <preference name="ScrollEnabled" value="false" />
    <preference name="android-minSdkVersion" value="16" />
    <preference name="BackupWebStorage" value="none" />
    <preference name="SplashMaintainAspectRatio" value="true" />
    <preference name="FadeSplashScreenDuration" value="300" />
    <preference name="SplashShowOnlyFirstTime" value="false" />
    <preference name="SplashScreen" value="screen" />
    <preference name="SplashScreenDelay" value="3000" />
    <preference name="CodePushDeploymentKey" value="xxx" />
    <platform name="android">
        <allow-intent href="market:*" />
        <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
        <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
        <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
        <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
        <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
        <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
        <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
        <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
        <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
        <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
        <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
        <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
        <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
        <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
        <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
        <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
        <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
        <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
    </platform>
    <platform name="ios">
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
        <icon height="57" src="resources/ios/icon/icon.png" width="57" />
        <icon height="114" src="resources/ios/icon/[email protected]" width="114" />
        <icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
        <icon height="80" src="resources/ios/icon/[email protected]" width="80" />
        <icon height="120" src="resources/ios/icon/[email protected]" width="120" />
        <icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
        <icon height="100" src="resources/ios/icon/[email protected]" width="100" />
        <icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
        <icon height="120" src="resources/ios/icon/[email protected]" width="120" />
        <icon height="180" src="resources/ios/icon/[email protected]" width="180" />
        <icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
        <icon height="144" src="resources/ios/icon/[email protected]" width="144" />
        <icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
        <icon height="152" src="resources/ios/icon/[email protected]" width="152" />
        <icon height="167" src="resources/ios/icon/[email protected]" width="167" />
        <icon height="29" src="resources/ios/icon/icon-small.png" width="29" />
        <icon height="58" src="resources/ios/icon/[email protected]" width="58" />
        <icon height="87" src="resources/ios/icon/[email protected]" width="87" />
        <icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
        <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" />
        <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
        <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
        <splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
        <splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" />
        <splash height="2048" src="resources/ios/splash/Default-Landscape@~ipadpro.png" width="2732" />
        <splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
        <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" />
        <splash height="2732" src="resources/ios/splash/Default-Portrait@~ipadpro.png" width="2048" />
        <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
        <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" />
        <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
        <splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" />
    </platform>
    <plugin name="cordova-plugin-whitelist" spec="^1.3.3" />
    <plugin name="cordova-plugin-device" spec="^2.0.1" />
    <plugin name="cordova-plugin-splashscreen" spec="^5.0.2" />
    <plugin name="cordova-plugin-ionic-webview" spec="^1.1.16" />
    <plugin name="cordova-plugin-ionic-keyboard" spec="^2.0.5" />
    <plugin name="cordova-plugin-file-transfer" spec="^1.7.1" />
    <plugin name="cordova-plugin-zip" spec="^3.1.0" />
    <plugin name="cordova-plugin-code-push" spec="^1.11.5" />
    <engine name="android" spec="~7.0.0" />
</widget>

Output from running Ionic info
cli packages: (C:\Users\bradley.miller\AppData\Roaming\npm\node_modules)

@ionic/cli-utils  : 1.19.1
ionic (Ionic CLI) : 3.19.1

global packages:

cordova (Cordova CLI) : 8.0.0

local packages:

@ionic/app-scripts : 3.1.8
Cordova Platforms  : android 7.0.0
Ionic Framework    : ionic-angular 3.9.2

System:

Android SDK Tools : 25.2.5
Node              : v6.12.3
npm               : 3.10.10
OS                : Windows 10

Environment Variables:

ANDROID_HOME : C:\Program Files (x86)\Android\android-sdk

Misc:

backend : pro

@itoys
Copy link
Contributor

itoys commented Feb 16, 2018

Fixed in #372

@itoys itoys closed this as completed Feb 16, 2018
@svekl
Copy link
Contributor

svekl commented Feb 16, 2018

Hi @BradleyMiller, please, try new plugin version, for me it looks like the root of your issue is the same as #362

@BradleyMiller
Copy link
Author

Hi @svekl , thanks for looking into this. However I tried again with version 1.11.6 but am still getting the same issue.
Where you able to replicate the issue locally?

In #362 the update fails after a random amount of updates and rolls back. In my scenario if that variable.scss file looks like above I always only get one successful update while any future update just gets stuck in checking for update. There is also no rollback.

@svekl
Copy link
Contributor

svekl commented Feb 19, 2018

@BradleyMiller, thanks for detailed steps, I was able to reproduce it with new version, so you are absolutely right, it is some different issue, I'll take a look

@svekl
Copy link
Contributor

svekl commented Feb 21, 2018

Hi @BradleyMiller, investigated deeper and finally found a reason.
CodePush uses FileReader inside to open files, but it is broken in Ionic starter app, you can find some details about it here ionic-team/ionic2-app-base#126
Good news are that, you can apply a small workaround, you just need to place
<script src="build/polyfills.js"></script>
before
<script src="cordova.js"></script>
in index.html

@svekl svekl closed this as completed Feb 21, 2018
@svekl svekl added the external label Feb 21, 2018
@BradleyMiller
Copy link
Author

Thanks @svekl I can confirm that fixed the issue.

@svekl
Copy link
Contributor

svekl commented Feb 22, 2018

Awesome, glad to hear!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants