diff --git a/CodePush.ios.js b/CodePush.ios.js index 0ce97aa..62346ce 100644 --- a/CodePush.ios.js +++ b/CodePush.ios.js @@ -1,20 +1,10 @@ 'use strict'; +var { AlertIOS } = require("react-native"); var NativeCodePush = require("react-native").NativeModules.CodePush; +var packageMixins = require("./package-mixins")(NativeCodePush); var requestFetchAdapter = require("./request-fetch-adapter.js"); var Sdk = require("code-push/script/acquisition-sdk").AcquisitionManager; -var packageMixins = require("./package-mixins")(NativeCodePush); - -var { AlertIOS } = require("react-native"); - -// This function is only used for tests. Replaces the default SDK, configuration and native bridge -function setUpTestDependencies(providedTestSdk, providedTestConfig, testNativeBridge){ - if (providedTestSdk) testSdk = providedTestSdk; - if (providedTestConfig) testConfig = providedTestConfig; - if (testNativeBridge) NativeCodePush = testNativeBridge; -} -var testConfig; -var testSdk; function checkForUpdate() { var config; @@ -61,10 +51,12 @@ function checkForUpdate() { }); } +var isConfigValid = true; + var getConfiguration = (() => { var config; return function getConfiguration() { - if (config) { + if (config && isConfigValid) { return Promise.resolve(config); } else if (testConfig) { return Promise.resolve(testConfig); @@ -72,6 +64,7 @@ var getConfiguration = (() => { return NativeCodePush.getConfiguration() .then((configuration) => { if (!config) config = configuration; + isConfigValid = true; return config; }); } @@ -121,6 +114,26 @@ function log(message) { console.log(`[CodePush] ${message}`) } +function setDeploymentKey(deploymentKey) { + return NativeCodePush.setDeploymentKey(deploymentKey) + .then(() => { + // Mark the local copy of the config data + // as invalid since we just modified it + // on the native end. + isConfigValid = false; + }); +} + +var testConfig; +var testSdk; + +// This function is only used for tests. Replaces the default SDK, configuration and native bridge +function setUpTestDependencies(providedTestSdk, providedTestConfig, testNativeBridge){ + if (providedTestSdk) testSdk = providedTestSdk; + if (providedTestConfig) testConfig = providedTestConfig; + if (testNativeBridge) NativeCodePush = testNativeBridge; +} + /** * The sync method provides a simple, one-line experience for * incorporating the check, download and application of an update. @@ -214,7 +227,7 @@ function sync(options = {}, syncStatusChangeCallback, downloadProgressCallback) if (typeof syncOptions.updateDialog !== "object") { syncOptions.updateDialog = CodePush.DEFAULT_UPDATE_DIALOG; } else { - syncOptions.updateDialog = Object.assign(CodePush.DEFAULT_UPDATE_DIALOG, syncOptions.updateDialog); + syncOptions.updateDialog = Object.assign({}, CodePush.DEFAULT_UPDATE_DIALOG, syncOptions.updateDialog); } var message = null; @@ -258,7 +271,6 @@ function sync(options = {}, syncStatusChangeCallback, downloadProgressCallback) } }) .catch((error) => { - console.log(error); syncStatusChangeCallback(CodePush.SyncStatus.UNKNOWN_ERROR); reject(error); }) @@ -273,14 +285,8 @@ var CodePush = { log: log, notifyApplicationReady: NativeCodePush.notifyApplicationReady, restartApp: NativeCodePush.restartApp, - setDeploymentKey: NativeCodePush.setDeploymentKey, setUpTestDependencies: setUpTestDependencies, sync: sync, - AutoSyncMode: { - NONE: NativeCodePush.codePushAutoSyncModeNone, - ON_START: NativeCodePush.codePushAutoSyncModeOnStart, - ON_RESUME: NativeCodePush.codePushAutoSyncModeOnResume - }, InstallMode: { IMMEDIATE: NativeCodePush.codePushInstallModeImmediate, // Restart the app immediately ON_NEXT_RESTART: NativeCodePush.codePushInstallModeOnNextRestart, // Don't artificially restart the app. Allow the update to be "picked up" on the next app restart diff --git a/CodePush.m b/CodePush.m index 1655e96..e0893a7 100644 --- a/CodePush.m +++ b/CodePush.m @@ -116,10 +116,11 @@ static NSString * const PendingUpdateRollbackTimeoutKey = @"rollbackTimeout"; { // Export the values of the CodePushInstallMode enum // so that the script-side can easily stay in sync - return @{ @"codePushInstallModeOnNextRestart":@(CodePushInstallModeOnNextRestart), + return @{ + @"codePushInstallModeOnNextRestart":@(CodePushInstallModeOnNextRestart), @"codePushInstallModeImmediate": @(CodePushInstallModeImmediate), @"codePushInstallModeOnNextResume": @(CodePushInstallModeOnNextResume) - }; + }; }; - (void)dealloc @@ -243,8 +244,8 @@ static NSString * const PendingUpdateRollbackTimeoutKey = @"rollbackTimeout"; // JavaScript-exported module methods RCT_EXPORT_METHOD(downloadUpdate:(NSDictionary*)updatePackage - resolver:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) + resolver:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject) { [CodePushPackage downloadPackage:updatePackage progressCallback:^(long expectedContentLength, long receivedContentLength) { @@ -273,13 +274,13 @@ RCT_EXPORT_METHOD(downloadUpdate:(NSDictionary*)updatePackage } RCT_EXPORT_METHOD(getConfiguration:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) + rejecter:(RCTPromiseRejectBlock)reject) { resolve([[CodePushConfig current] configuration]); } RCT_EXPORT_METHOD(getCurrentPackage:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) + rejecter:(RCTPromiseRejectBlock)reject) { dispatch_async(dispatch_get_main_queue(), ^{ NSError *error; @@ -293,10 +294,10 @@ RCT_EXPORT_METHOD(getCurrentPackage:(RCTPromiseResolveBlock)resolve } RCT_EXPORT_METHOD(installUpdate:(NSDictionary*)updatePackage - rollbackTimeout:(int)rollbackTimeout - installMode:(CodePushInstallMode)installMode - resolver:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) + rollbackTimeout:(int)rollbackTimeout + installMode:(CodePushInstallMode)installMode + resolver:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSError *error; @@ -318,16 +319,16 @@ RCT_EXPORT_METHOD(installUpdate:(NSDictionary*)updatePackage } RCT_EXPORT_METHOD(isFailedUpdate:(NSString *)packageHash - resolve:(RCTPromiseResolveBlock)resolve - reject:(RCTPromiseRejectBlock)reject) + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject) { BOOL isFailedHash = [self isFailedHash:packageHash]; resolve(@(isFailedHash)); } RCT_EXPORT_METHOD(isFirstRun:(NSString *)packageHash - resolve:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) + resolve:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject) { NSError *error; BOOL isFirstRun = didUpdate @@ -339,7 +340,7 @@ RCT_EXPORT_METHOD(isFirstRun:(NSString *)packageHash } RCT_EXPORT_METHOD(notifyApplicationReady:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) + rejecter:(RCTPromiseRejectBlock)reject) { [self cancelRollbackTimer]; resolve([NSNull null]); @@ -357,14 +358,6 @@ RCT_EXPORT_METHOD(restartAppInternal:(int)rollbackTimeout) [self initializeUpdateWithRollbackTimeout:rollbackTimeout needsRestart:YES]; } -RCT_EXPORT_METHOD(setDeploymentKey:(NSString *)deploymentKey - resolve:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) -{ - [[CodePushConfig current] setDeploymentKey:deploymentKey]; - resolve(nil); -} - RCT_EXPORT_METHOD(setUsingTestFolder:(BOOL)shouldUseTestFolder) { usingTestFolder = shouldUseTestFolder;