@@ -4,6 +4,17 @@ @implementation CodePushPackage
44
55NSString * const StatusFile = @" codepush.json" ;
66
7+ + (CodePushPackage*)sharedInstance {
8+ static dispatch_once_t predicate = 0 ;
9+ __strong static id sharedInstance = nil ;
10+ // static id sharedObject = nil; //if you're not using ARC
11+ dispatch_once (&predicate, ^{
12+ sharedInstance = [[self alloc ] init ];
13+ // sharedObject = [[[self alloc] init] retain]; // if you're not using ARC
14+ });
15+ return sharedInstance;
16+ }
17+
718+ (NSString *)getCodePushPath
819{
920 return [[CodePush getDocumentsDirectory ] stringByAppendingPathComponent: @" CodePush" ];
@@ -149,50 +160,51 @@ + (NSString *)getPackageFolderPath:(NSString *)packageHash
149160}
150161
151162+ (void )downloadPackage : (NSDictionary *)updatePackage
152- error : (NSError **)error
163+ progressCallback : (void (^)(long , long ))progressCallback
164+ doneCallback : (void (^)())doneCallback
165+ failCallback : (void (^)(NSError *err))failCallback
153166{
154- NSString *packageFolderPath = [self getPackageFolderPath: updatePackage[@" packageHash" ]];
167+ NSString *packageFolderPath = [CodePushPackage getPackageFolderPath: updatePackage[@" packageHash" ]];
155168
169+ NSError *error;
156170 if (![[NSFileManager defaultManager ] fileExistsAtPath: packageFolderPath]) {
157171 [[NSFileManager defaultManager ] createDirectoryAtPath: packageFolderPath
158172 withIntermediateDirectories: YES
159173 attributes: nil
160- error: error];
161- }
162-
163- if (*error) {
164- return ;
165- }
166-
167- NSURL *url = [[NSURL alloc ] initWithString: updatePackage[@" downloadUrl" ]];
168- NSString *updateContents = [[NSString alloc ] initWithContentsOfURL: url
169- encoding: NSUTF8StringEncoding
170- error: error];
171- if (*error) {
172- return ;
173- }
174-
175- [updateContents writeToFile: [packageFolderPath stringByAppendingPathComponent: @" app.jsbundle" ]
176- atomically: YES
177- encoding: NSUTF8StringEncoding
178- error: error];
179- if (*error) {
180- return ;
181- }
182-
183- NSData *updateSerializedData = [NSJSONSerialization dataWithJSONObject: updatePackage
184- options: 0
185- error: error];
186-
187- if (*error) {
188- return ;
174+ error: &error];
189175 }
190176
191- NSString *packageJsonString = [[NSString alloc ] initWithData: updateSerializedData encoding: NSUTF8StringEncoding];
192- [packageJsonString writeToFile: [packageFolderPath stringByAppendingPathComponent: @" app.json" ]
193- atomically: YES
194- encoding: NSUTF8StringEncoding
195- error: error];
177+ if (error) {
178+ return failCallback (error);
179+ }
180+
181+ NSString *downloadFilePath = [packageFolderPath stringByAppendingPathComponent: @" app.jsbundle" ];
182+
183+ CodePushDownloadHandler *downloadHandler = [[CodePushDownloadHandler alloc ]
184+ init: downloadFilePath
185+ progressCallback: progressCallback
186+ doneCallback: ^{
187+ NSError *error;
188+ NSData *updateSerializedData = [NSJSONSerialization
189+ dataWithJSONObject: updatePackage
190+ options: 0
191+ error: &error];
192+ NSString *packageJsonString = [[NSString alloc ]
193+ initWithData: updateSerializedData encoding: NSUTF8StringEncoding];
194+
195+ [packageJsonString writeToFile: [packageFolderPath stringByAppendingPathComponent: @" app.json" ]
196+ atomically: YES
197+ encoding: NSUTF8StringEncoding
198+ error: &error];
199+ if (error) {
200+ failCallback (error);
201+ } else {
202+ doneCallback ();
203+ }
204+ }
205+ failCallback: failCallback];
206+
207+ [downloadHandler download: updatePackage[@" downloadUrl" ]];
196208}
197209
198210+ (void )applyPackage : (NSDictionary *)updatePackage
@@ -207,7 +219,7 @@ + (void)applyPackage:(NSDictionary *)updatePackage
207219
208220 [info setValue: info[@" currentPackage" ] forKey: @" previousPackage" ];
209221 [info setValue: packageHash forKey: @" currentPackage" ];
210-
222+
211223 [self updateCurrentPackageInfo: info
212224 error: error];
213225}
0 commit comments