Skip to content
This repository was archived by the owner on May 20, 2025. It is now read-only.

Commit 35539d1

Browse files
committed
feedback
1 parent bea2b9c commit 35539d1

File tree

6 files changed

+171
-141
lines changed

6 files changed

+171
-141
lines changed

CodePush.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,17 @@ failCallback:(void (^)(NSError *err))failCallback;
8888

8989
@end
9090

91+
@interface CodePushStatusReport : NSObject
92+
93+
+ (NSString *)getDeploymentKeyFromStatusReportIdentifier:(NSString *)statusReportIdentifier;
94+
+ (NSString *)getPackageStatusReportIdentifier:(NSDictionary *)package;
95+
+ (NSString *)getPreviousStatusReportIdentifier;
96+
+ (NSString *)getVersionLabelFromStatusReportIdentifier:(NSString *)statusReportIdentifier;
97+
+ (BOOL)isStatusReportIdentifierCodePushLabel:(NSString *)statusReportIdentifier;
98+
+ (void)recordDeploymentStatusReported:(NSString *)appVersionOrPackageIdentifier;
99+
100+
@end
101+
91102
typedef NS_ENUM(NSInteger, CodePushInstallMode) {
92103
CodePushInstallModeImmediate,
93104
CodePushInstallModeOnNextRestart,

CodePush.m

Lines changed: 18 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ @implementation CodePush {
2323

2424
// These keys represent the names we use to store data in NSUserDefaults
2525
static NSString *const FailedUpdatesKey = @"CODE_PUSH_FAILED_UPDATES";
26-
static NSString *const LastDeploymentReportKey = @"CODE_PUSH_LAST_DEPLOYMENT_REPORT";
2726
static NSString *const PendingUpdateKey = @"CODE_PUSH_PENDING_UPDATE";
2827

2928
// These keys are already "namespaced" by the PendingUpdateKey, so
@@ -33,8 +32,6 @@ @implementation CodePush {
3332

3433
// These keys are used to inspect/augment the metadata
3534
// that is associated with an update's package.
36-
static NSString *const DeploymentKeyKey = @"deploymentKey";
37-
static NSString *const LabelKey = @"label";
3835
static NSString *const PackageHashKey = @"packageHash";
3936
static NSString *const PackageIsPendingKey = @"isPending";
4037

@@ -161,36 +158,6 @@ - (void)dealloc
161158
[[NSNotificationCenter defaultCenter] removeObserver:self];
162159
}
163160

164-
- (NSString *)getDeploymentKeyFromStatusReportIdentifier:(NSString *)statusReportIdentifier
165-
{
166-
return [[statusReportIdentifier componentsSeparatedByString:@":"] firstObject];
167-
}
168-
169-
- (NSString *)getPackageStatusReportIdentifier:(NSDictionary *)package
170-
{
171-
// Because deploymentKeys can be dynamically switched, we use a
172-
// combination of the deploymentKey and label as the packageIdentifier.
173-
NSString *deploymentKey = [package objectForKey:DeploymentKeyKey];
174-
NSString *label = [package objectForKey:LabelKey];
175-
if (deploymentKey && label) {
176-
return [[deploymentKey stringByAppendingString:@":"] stringByAppendingString:label];
177-
} else {
178-
return nil;
179-
}
180-
}
181-
182-
- (NSString *)getPreviousStatusReportIdentifier
183-
{
184-
NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];
185-
NSString *sentStatusReportIdentifier = [preferences objectForKey:LastDeploymentReportKey];
186-
return sentStatusReportIdentifier;
187-
}
188-
189-
- (NSString *)getVersionLabelFromStatusReportIdentifier:(NSString *)statusReportIdentifier
190-
{
191-
return [[statusReportIdentifier componentsSeparatedByString:@":"] lastObject];
192-
}
193-
194161
- (instancetype)init
195162
{
196163
self = [super init];
@@ -277,11 +244,6 @@ - (BOOL)isPendingUpdate:(NSString*)packageHash
277244
return updateIsPending;
278245
}
279246

280-
- (BOOL)isStatusReportIdentifierCodePushLabel:(NSString *)statusReportIdentifier
281-
{
282-
return statusReportIdentifier != nil && [statusReportIdentifier containsString:@":"];
283-
}
284-
285247
/*
286248
* This method updates the React Native bridge's bundle URL
287249
* to point at the latest CodePush update, and then restarts
@@ -304,13 +266,6 @@ - (void)loadBundle
304266
});
305267
}
306268

307-
- (void)recordDeploymentStatusReported:(NSString *)appVersionOrPackageIdentifier
308-
{
309-
NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];
310-
[preferences setValue:appVersionOrPackageIdentifier forKey:LastDeploymentReportKey];
311-
[preferences synchronize];
312-
}
313-
314269
/*
315270
* This method is used when an update has failed installation
316271
* and the app needs to be rolled back to the previous bundle.
@@ -556,38 +511,33 @@ - (void)savePendingUpdate:(NSString *)packageHash
556511
if (failedUpdates) {
557512
NSDictionary *lastFailedPackage = [failedUpdates lastObject];
558513
if (lastFailedPackage) {
559-
NSString *lastFailedPackageIdentifier = [self getPackageStatusReportIdentifier:lastFailedPackage];
560-
NSString *previousStatusReportIdentifier = [self getPreviousStatusReportIdentifier];
561-
if (lastFailedPackageIdentifier && (previousStatusReportIdentifier == nil || ![previousStatusReportIdentifier isEqualToString:lastFailedPackageIdentifier])) {
562-
[self recordDeploymentStatusReported:lastFailedPackageIdentifier];
563-
resolve(@{
564-
@"package": lastFailedPackage,
565-
@"status": DeploymentFailed
566-
});
567-
return;
568-
}
514+
resolve(@{
515+
@"package": lastFailedPackage,
516+
@"status": DeploymentFailed
517+
});
518+
return;
569519
}
570520
}
571521
} else if (_isFirstRunAfterUpdate) {
572522
// Check if the current CodePush package has been reported
573523
NSError *error;
574524
NSDictionary *currentPackage = [CodePushPackage getCurrentPackage:&error];
575525
if (!error && currentPackage) {
576-
NSString *currentPackageIdentifier = [self getPackageStatusReportIdentifier:currentPackage];
577-
NSString *previousStatusReportIdentifier = [self getPreviousStatusReportIdentifier];
526+
NSString *currentPackageIdentifier = [CodePushStatusReport getPackageStatusReportIdentifier:currentPackage];
527+
NSString *previousStatusReportIdentifier = [CodePushStatusReport getPreviousStatusReportIdentifier];
578528
if (currentPackageIdentifier) {
579529
if (previousStatusReportIdentifier == nil) {
580-
[self recordDeploymentStatusReported:currentPackageIdentifier];
530+
[CodePushStatusReport recordDeploymentStatusReported:currentPackageIdentifier];
581531
resolve(@{
582532
@"package": currentPackage,
583533
@"status": DeploymentSucceeded
584534
});
585535
return;
586536
} else if (![previousStatusReportIdentifier isEqualToString:currentPackageIdentifier]) {
587-
[self recordDeploymentStatusReported:currentPackageIdentifier];
588-
if ([self isStatusReportIdentifierCodePushLabel:previousStatusReportIdentifier]) {
589-
NSString *previousDeploymentKey = [self getDeploymentKeyFromStatusReportIdentifier:previousStatusReportIdentifier];
590-
NSString *previousLabel = [self getVersionLabelFromStatusReportIdentifier:previousStatusReportIdentifier];
537+
[CodePushStatusReport recordDeploymentStatusReported:currentPackageIdentifier];
538+
if ([CodePushStatusReport isStatusReportIdentifierCodePushLabel:previousStatusReportIdentifier]) {
539+
NSString *previousDeploymentKey = [CodePushStatusReport getDeploymentKeyFromStatusReportIdentifier:previousStatusReportIdentifier];
540+
NSString *previousLabel = [CodePushStatusReport getVersionLabelFromStatusReportIdentifier:previousStatusReportIdentifier];
591541
resolve(@{
592542
@"package": currentPackage,
593543
@"status": DeploymentSucceeded,
@@ -609,16 +559,16 @@ - (void)savePendingUpdate:(NSString *)packageHash
609559
} else if (isRunningBinaryVersion || [_bridge.bundleURL.scheme hasPrefix:@"http"]) {
610560
// Check if the current appVersion has been reported.
611561
NSString *appVersion = [[CodePushConfig current] appVersion];
612-
NSString *previousStatusReportIdentifier = [self getPreviousStatusReportIdentifier];
562+
NSString *previousStatusReportIdentifier = [CodePushStatusReport getPreviousStatusReportIdentifier];
613563
if (previousStatusReportIdentifier == nil) {
614-
[self recordDeploymentStatusReported:appVersion];
564+
[CodePushStatusReport recordDeploymentStatusReported:appVersion];
615565
resolve(@{ @"appVersion": appVersion });
616566
return;
617567
} else if (![previousStatusReportIdentifier isEqualToString:appVersion]) {
618-
[self recordDeploymentStatusReported:appVersion];
619-
if ([self isStatusReportIdentifierCodePushLabel:previousStatusReportIdentifier]) {
620-
NSString *previousDeploymentKey = [self getDeploymentKeyFromStatusReportIdentifier:previousStatusReportIdentifier];
621-
NSString *previousLabel = [self getVersionLabelFromStatusReportIdentifier:previousStatusReportIdentifier];
568+
[CodePushStatusReport recordDeploymentStatusReported:appVersion];
569+
if ([CodePushStatusReport isStatusReportIdentifierCodePushLabel:previousStatusReportIdentifier]) {
570+
NSString *previousDeploymentKey = [CodePushStatusReport getDeploymentKeyFromStatusReportIdentifier:previousStatusReportIdentifier];
571+
NSString *previousLabel = [CodePushStatusReport getVersionLabelFromStatusReportIdentifier:previousStatusReportIdentifier];
622572
resolve(@{
623573
@"appVersion": appVersion,
624574
@"previousDeploymentKey": previousDeploymentKey,

CodePush.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
/* Begin PBXBuildFile section */
1010
13BE3DEE1AC21097009241FE /* CodePush.m in Sources */ = {isa = PBXBuildFile; fileRef = 13BE3DED1AC21097009241FE /* CodePush.m */; };
1111
1B23B9141BF9267B000BB2F0 /* RCTConvert+CodePushInstallMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B23B9131BF9267B000BB2F0 /* RCTConvert+CodePushInstallMode.m */; };
12+
5421FE311C58AD5A00986A55 /* CodePushStatusReport.m in Sources */ = {isa = PBXBuildFile; fileRef = 5421FE301C58AD5A00986A55 /* CodePushStatusReport.m */; };
1213
54A0026C1C0E2880004C3CEC /* aescrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = 54A0024C1C0E2880004C3CEC /* aescrypt.c */; };
1314
54A0026D1C0E2880004C3CEC /* aeskey.c in Sources */ = {isa = PBXBuildFile; fileRef = 54A0024D1C0E2880004C3CEC /* aeskey.c */; };
1415
54A0026E1C0E2880004C3CEC /* aestab.c in Sources */ = {isa = PBXBuildFile; fileRef = 54A0024F1C0E2880004C3CEC /* aestab.c */; };
@@ -45,6 +46,7 @@
4546
13BE3DEC1AC21097009241FE /* CodePush.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CodePush.h; sourceTree = "<group>"; };
4647
13BE3DED1AC21097009241FE /* CodePush.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CodePush.m; sourceTree = "<group>"; };
4748
1B23B9131BF9267B000BB2F0 /* RCTConvert+CodePushInstallMode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTConvert+CodePushInstallMode.m"; sourceTree = "<group>"; };
49+
5421FE301C58AD5A00986A55 /* CodePushStatusReport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CodePushStatusReport.m; sourceTree = "<group>"; };
4850
54A0024A1C0E2880004C3CEC /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = "<group>"; };
4951
54A0024B1C0E2880004C3CEC /* aes_via_ace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes_via_ace.h; sourceTree = "<group>"; };
5052
54A0024C1C0E2880004C3CEC /* aescrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aescrypt.c; sourceTree = "<group>"; };
@@ -165,6 +167,7 @@
165167
1B23B9131BF9267B000BB2F0 /* RCTConvert+CodePushInstallMode.m */,
166168
54FFEDDF1BF550630061DD23 /* CodePushDownloadHandler.m */,
167169
810D4E6C1B96935000B397E9 /* CodePushPackage.m */,
170+
5421FE301C58AD5A00986A55 /* CodePushStatusReport.m */,
168171
81D51F391B6181C2000DA084 /* CodePushConfig.m */,
169172
13BE3DEC1AC21097009241FE /* CodePush.h */,
170173
13BE3DED1AC21097009241FE /* CodePush.m */,
@@ -239,6 +242,7 @@
239242
54FFEDE01BF550630061DD23 /* CodePushDownloadHandler.m in Sources */,
240243
54A002711C0E2880004C3CEC /* hmac.c in Sources */,
241244
54A002721C0E2880004C3CEC /* prng.c in Sources */,
245+
5421FE311C58AD5A00986A55 /* CodePushStatusReport.m in Sources */,
242246
54A002731C0E2880004C3CEC /* pwd2key.c in Sources */,
243247
54A002751C0E2880004C3CEC /* ioapi.c in Sources */,
244248
54A002771C0E2880004C3CEC /* unzip.c in Sources */,

CodePushStatusReport.m

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#import "CodePush.h"
2+
3+
static NSString *const LastDeploymentReportKey = @"CODE_PUSH_LAST_DEPLOYMENT_REPORT";
4+
static NSString *const DeploymentKeyKey = @"deploymentKey";
5+
static NSString *const LabelKey = @"label";
6+
7+
@implementation CodePushStatusReport
8+
9+
+ (NSString *)getDeploymentKeyFromStatusReportIdentifier:(NSString *)statusReportIdentifier
10+
{
11+
return [[statusReportIdentifier componentsSeparatedByString:@":"] firstObject];
12+
}
13+
14+
+ (NSString *)getPackageStatusReportIdentifier:(NSDictionary *)package
15+
{
16+
// Because deploymentKeys can be dynamically switched, we use a
17+
// combination of the deploymentKey and label as the packageIdentifier.
18+
NSString *deploymentKey = [package objectForKey:DeploymentKeyKey];
19+
NSString *label = [package objectForKey:LabelKey];
20+
if (deploymentKey && label) {
21+
return [[deploymentKey stringByAppendingString:@":"] stringByAppendingString:label];
22+
} else {
23+
return nil;
24+
}
25+
}
26+
27+
+ (NSString *)getPreviousStatusReportIdentifier
28+
{
29+
NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];
30+
NSString *sentStatusReportIdentifier = [preferences objectForKey:LastDeploymentReportKey];
31+
return sentStatusReportIdentifier;
32+
}
33+
34+
+ (NSString *)getVersionLabelFromStatusReportIdentifier:(NSString *)statusReportIdentifier
35+
{
36+
return [[statusReportIdentifier componentsSeparatedByString:@":"] lastObject];
37+
}
38+
39+
+ (BOOL)isStatusReportIdentifierCodePushLabel:(NSString *)statusReportIdentifier
40+
{
41+
return statusReportIdentifier != nil && [statusReportIdentifier containsString:@":"];
42+
}
43+
44+
+ (void)recordDeploymentStatusReported:(NSString *)appVersionOrPackageIdentifier
45+
{
46+
NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];
47+
[preferences setValue:appVersionOrPackageIdentifier forKey:LastDeploymentReportKey];
48+
[preferences synchronize];
49+
}
50+
51+
@end

0 commit comments

Comments
 (0)