mirror of
https://github.com/zhigang1992/react-native-code-push.git
synced 2026-06-10 23:59:42 +08:00
Restart the app _while_ it is in the background, but only after it has been in the background for "minimumBackgroundDuration" seconds (0 by default), so that user context isn't lost unless the app suspension is long enough to not matter.
199 lines
6.4 KiB
Objective-C
199 lines
6.4 KiB
Objective-C
#if __has_include(<React/RCTEventEmitter.h>)
|
|
#import <React/RCTEventEmitter.h>
|
|
#elif __has_include("RCTEventEmitter.h")
|
|
#import "RCTEventEmitter.h"
|
|
#else
|
|
#import "React/RCTEventEmitter.h" // Required when used as a Pod in a Swift project
|
|
#endif
|
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
@interface CodePush : RCTEventEmitter
|
|
|
|
+ (NSURL *)binaryBundleURL;
|
|
/*
|
|
* This method is used to retrieve the URL for the most recent
|
|
* version of the JavaScript bundle. This could be either the
|
|
* bundle that was packaged with the app binary, or the bundle
|
|
* that was downloaded as part of a CodePush update. The value returned
|
|
* should be used to "bootstrap" the React Native bridge.
|
|
*
|
|
* This method assumes that your JS bundle is named "main.jsbundle"
|
|
* and therefore, if it isn't, you should use either the bundleURLForResource:
|
|
* or bundleURLForResource:withExtension: methods to override that behavior.
|
|
*/
|
|
+ (NSURL *)bundleURL;
|
|
|
|
+ (NSURL *)bundleURLForResource:(NSString *)resourceName;
|
|
|
|
+ (NSURL *)bundleURLForResource:(NSString *)resourceName
|
|
withExtension:(NSString *)resourceExtension;
|
|
|
|
+ (NSURL *)bundleURLForResource:(NSString *)resourceName
|
|
withExtension:(NSString *)resourceExtension
|
|
subdirectory:(NSString *)resourceSubdirectory;
|
|
|
|
+ (NSURL *)bundleURLForResource:(NSString *)resourceName
|
|
withExtension:(NSString *)resourceExtension
|
|
subdirectory:(NSString *)resourceSubdirectory
|
|
bundle:(NSBundle *)resourceBundle;
|
|
|
|
+ (NSString *)getApplicationSupportDirectory;
|
|
|
|
+ (NSString *)bundleAssetsPath;
|
|
|
|
/*
|
|
* This method allows the version of the app's binary interface
|
|
* to be specified, which would otherwise default to the
|
|
* App Store version of the app.
|
|
*/
|
|
+ (void)overrideAppVersion:(NSString *)appVersion;
|
|
|
|
/*
|
|
* This method allows dynamically setting the app's
|
|
* deployment key, in addition to setting it via
|
|
* the Info.plist file's CodePushDeploymentKey setting.
|
|
*/
|
|
+ (void)setDeploymentKey:(NSString *)deploymentKey;
|
|
|
|
/*
|
|
* This method checks to see whether a specific package hash
|
|
* has previously failed installation.
|
|
*/
|
|
+ (BOOL)isFailedHash:(NSString*)packageHash;
|
|
|
|
/*
|
|
* This method checks to see whether a specific package hash
|
|
* represents a downloaded and installed update, that hasn't
|
|
* been applied yet via an app restart.
|
|
*/
|
|
+ (BOOL)isPendingUpdate:(NSString*)packageHash;
|
|
|
|
// The below methods are only used during tests.
|
|
+ (BOOL)isUsingTestConfiguration;
|
|
+ (void)setUsingTestConfiguration:(BOOL)shouldUseTestConfiguration;
|
|
+ (void)clearUpdates;
|
|
|
|
@end
|
|
|
|
@interface CodePushConfig : NSObject
|
|
|
|
@property (copy) NSString *appVersion;
|
|
@property (readonly) NSString *buildVersion;
|
|
@property (readonly) NSDictionary *configuration;
|
|
@property (copy) NSString *deploymentKey;
|
|
@property (copy) NSString *serverURL;
|
|
|
|
+ (instancetype)current;
|
|
|
|
@end
|
|
|
|
@interface CodePushDownloadHandler : NSObject <NSURLConnectionDelegate>
|
|
|
|
@property (strong) NSOutputStream *outputFileStream;
|
|
@property long long expectedContentLength;
|
|
@property long long receivedContentLength;
|
|
@property dispatch_queue_t operationQueue;
|
|
@property (copy) void (^progressCallback)(long long, long long);
|
|
@property (copy) void (^doneCallback)(BOOL);
|
|
@property (copy) void (^failCallback)(NSError *err);
|
|
@property NSString *downloadUrl;
|
|
|
|
- (id)init:(NSString *)downloadFilePath
|
|
operationQueue:(dispatch_queue_t)operationQueue
|
|
progressCallback:(void (^)(long long, long long))progressCallback
|
|
doneCallback:(void (^)(BOOL))doneCallback
|
|
failCallback:(void (^)(NSError *err))failCallback;
|
|
|
|
- (void)download:(NSString*)url;
|
|
|
|
@end
|
|
|
|
@interface CodePushErrorUtils : NSObject
|
|
|
|
+ (NSError *)errorWithMessage:(NSString *)errorMessage;
|
|
+ (BOOL)isCodePushError:(NSError *)error;
|
|
|
|
@end
|
|
|
|
@interface CodePushPackage : NSObject
|
|
|
|
+ (void)downloadPackage:(NSDictionary *)updatePackage
|
|
expectedBundleFileName:(NSString *)expectedBundleFileName
|
|
operationQueue:(dispatch_queue_t)operationQueue
|
|
progressCallback:(void (^)(long long, long long))progressCallback
|
|
doneCallback:(void (^)())doneCallback
|
|
failCallback:(void (^)(NSError *err))failCallback;
|
|
|
|
+ (NSDictionary *)getCurrentPackage:(NSError **)error;
|
|
+ (NSDictionary *)getPreviousPackage:(NSError **)error;
|
|
+ (NSString *)getCurrentPackageFolderPath:(NSError **)error;
|
|
+ (NSString *)getCurrentPackageBundlePath:(NSError **)error;
|
|
+ (NSString *)getCurrentPackageHash:(NSError **)error;
|
|
|
|
+ (NSDictionary *)getPackage:(NSString *)packageHash
|
|
error:(NSError **)error;
|
|
|
|
+ (NSString *)getPackageFolderPath:(NSString *)packageHash;
|
|
|
|
+ (BOOL)installPackage:(NSDictionary *)updatePackage
|
|
removePendingUpdate:(BOOL)removePendingUpdate
|
|
error:(NSError **)error;
|
|
|
|
+ (void)rollbackPackage;
|
|
|
|
// The below methods are only used during tests.
|
|
+ (void)clearUpdates;
|
|
+ (void)downloadAndReplaceCurrentBundle:(NSString *)remoteBundleUrl;
|
|
|
|
@end
|
|
|
|
@interface CodePushTelemetryManager : NSObject
|
|
|
|
+ (NSDictionary *)getBinaryUpdateReport:(NSString *)appVersion;
|
|
+ (NSDictionary *)getRetryStatusReport;
|
|
+ (NSDictionary *)getRollbackReport:(NSDictionary *)lastFailedPackage;
|
|
+ (NSDictionary *)getUpdateReport:(NSDictionary *)currentPackage;
|
|
+ (void)recordStatusReported:(NSDictionary *)statusReport;
|
|
+ (void)saveStatusReportForRetry:(NSDictionary *)statusReport;
|
|
|
|
@end
|
|
|
|
@interface CodePushUpdateUtils : NSObject
|
|
|
|
+ (BOOL)copyEntriesInFolder:(NSString *)sourceFolder
|
|
destFolder:(NSString *)destFolder
|
|
error:(NSError **)error;
|
|
|
|
+ (NSString *)findMainBundleInFolder:(NSString *)folderPath
|
|
expectedFileName:(NSString *)expectedFileName
|
|
error:(NSError **)error;
|
|
|
|
+ (NSString *)assetsFolderName;
|
|
+ (NSString *)getHashForBinaryContents:(NSURL *)binaryBundleUrl
|
|
error:(NSError **)error;
|
|
|
|
+ (NSString *)manifestFolderPrefix;
|
|
+ (NSString *)modifiedDateStringOfFileAtURL:(NSURL *)fileURL;
|
|
|
|
+ (BOOL)verifyHashForDiffUpdate:(NSString *)finalUpdateFolder
|
|
expectedHash:(NSString *)expectedHash
|
|
error:(NSError **)error;
|
|
|
|
@end
|
|
|
|
void CPLog(NSString *formatString, ...);
|
|
|
|
typedef NS_ENUM(NSInteger, CodePushInstallMode) {
|
|
CodePushInstallModeImmediate,
|
|
CodePushInstallModeOnNextRestart,
|
|
CodePushInstallModeOnNextResume,
|
|
CodePushInstallModeOnNextSuspend
|
|
};
|
|
|
|
typedef NS_ENUM(NSInteger, CodePushUpdateState) {
|
|
CodePushUpdateStateRunning,
|
|
CodePushUpdateStatePending,
|
|
CodePushUpdateStateLatest
|
|
};
|