@@ -10,7 +10,7 @@ @implementation HybridMobileDeploy
10
10
+ (NSString *) getBundleFolderPath
11
11
{
12
12
NSString * home = NSHomeDirectory ();
13
- NSString * bundleFolder = [home stringByAppendingPathComponent: @" HybridMobileDeploy" ];
13
+ NSString * bundleFolder = [home stringByAppendingPathComponent: @" HybridMobileDeploy/bundle " ];
14
14
return bundleFolder;
15
15
}
16
16
@@ -21,6 +21,21 @@ + (NSString *) getBundlePath
21
21
return [bundleFolderPath stringByAppendingPathComponent: appBundleName];
22
22
}
23
23
24
+ + (NSString *) getPackageFolderPath
25
+ {
26
+ NSString * home = NSHomeDirectory ();
27
+ NSString * packageFolder = [home stringByAppendingPathComponent: @" HybridMobileDeploy/package" ];
28
+ return packageFolder;
29
+ }
30
+
31
+ + (NSString *) getPackagePath
32
+ {
33
+ NSString * packageFolderPath = [self getPackageFolderPath ];
34
+ NSString * appPackageName = @" localpackage.json" ;
35
+ return [packageFolderPath stringByAppendingPathComponent: appPackageName];
36
+ }
37
+
38
+
24
39
+ (NSURL *) getNativeBundleURL
25
40
{
26
41
return [[NSBundle mainBundle ] URLForResource: @" main" withExtension: @" jsbundle" ];
@@ -56,11 +71,12 @@ + (void) loadBundle:(NSString*)rootComponent
56
71
callback (@[[NSNull null ], [HybridMobileDeployConfig getConfiguration ]]);
57
72
}
58
73
59
- RCT_EXPORT_METHOD (installUpdateFromUrl:(NSString *)updateUrl
74
+ RCT_EXPORT_METHOD (installUpdate:(NSDictionary *)updatePackage
75
+ packageJsonString:(NSString *) packageJsonString
60
76
callback:(RCTResponseSenderBlock)callback)
61
77
{
62
78
dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^{
63
- NSURL * url = [NSURL URLWithString: updateUrl ];
79
+ NSURL * url = [NSURL URLWithString: updatePackage[ @" downloadUrl " ] ];
64
80
NSError *err;
65
81
66
82
NSString *updateContents = [[NSString alloc ] initWithContentsOfURL: url
@@ -69,7 +85,7 @@ + (void) loadBundle:(NSString*)rootComponent
69
85
70
86
if (err) {
71
87
// TODO send download url
72
- callback (@[RCTMakeError (@" Error downloading url" , err, [[NSDictionary alloc ] initWithObjectsAndKeys: updateUrl ,@" updateUrl" , nil ])]);
88
+ callback (@[RCTMakeError (@" Error downloading url" , err, [[NSDictionary alloc ] initWithObjectsAndKeys: [url absoluteString ] ,@" updateUrl" , nil ])]);
73
89
} else {
74
90
dispatch_async (dispatch_get_main_queue (), ^{
75
91
NSError *saveError;
@@ -85,12 +101,61 @@ + (void) loadBundle:(NSString*)rootComponent
85
101
// TODO send file path
86
102
callback (@[RCTMakeError (@" Error saving file" , err, [[NSDictionary alloc ] initWithObjectsAndKeys: [HybridMobileDeploy getBundlePath ],@" bundlePath" , nil ])]);
87
103
} else {
88
- [HybridMobileDeploy loadBundle: [HybridMobileDeployConfig getRootComponent ]];
89
- callback (@[[NSNull null ]]);
104
+
105
+ // save the package info too
106
+ NSString *packageFolderPath = [HybridMobileDeploy getPackageFolderPath ];
107
+ if (![[NSFileManager defaultManager ] fileExistsAtPath: packageFolderPath]) {
108
+ [[NSFileManager defaultManager ] createDirectoryAtPath: packageFolderPath withIntermediateDirectories: YES attributes: nil error: &saveError];
109
+ }
110
+ [packageJsonString writeToFile: [HybridMobileDeploy getPackagePath ]
111
+ atomically: YES
112
+ encoding: NSUTF8StringEncoding
113
+ error: &saveError];
114
+
115
+ if (saveError) {
116
+ callback (@[RCTMakeError (@" Error saving file" , err, [[NSDictionary alloc ] initWithObjectsAndKeys: [HybridMobileDeploy getPackagePath ],@" packagePath" , nil ])]);
117
+ } else {
118
+ [HybridMobileDeploy loadBundle: [HybridMobileDeployConfig getRootComponent ]];
119
+ callback (@[[NSNull null ]]);
120
+ }
90
121
}
91
122
});
92
123
}
93
124
});
94
125
}
95
126
127
+
128
+
129
+ RCT_EXPORT_METHOD (getLocalPackage: (RCTResponseSenderBlock)callback)
130
+ {
131
+
132
+ NSString *path = [HybridMobileDeploy getPackagePath ];
133
+
134
+ dispatch_async (dispatch_get_main_queue (), ^{
135
+
136
+ NSError * readError;
137
+
138
+ NSString *content = [NSString stringWithContentsOfFile: path encoding: NSUTF8StringEncoding error: &readError];
139
+ if (readError){
140
+
141
+ callback (@[RCTMakeError (@" Error finding local package " , readError, [[NSDictionary alloc ] initWithObjectsAndKeys: path,@" packagePath" , nil ]), [NSNull null ]]);
142
+ }else {
143
+ NSError * parseError;
144
+ NSData *data = [content dataUsingEncoding: NSUTF8StringEncoding];
145
+ NSDictionary * json = [NSJSONSerialization JSONObjectWithData: data
146
+ options: kNilOptions
147
+ error: &parseError];
148
+ if (parseError){
149
+ callback (@[RCTMakeError (@" Error parsing contents of local package " , parseError, [[NSDictionary alloc ] initWithObjectsAndKeys: path,@" packagePath" , nil ]), [NSNull null ]]);
150
+ }else {
151
+ callback (@[[NSNull null ], json]);
152
+ }
153
+
154
+ }
155
+
156
+ });
157
+
158
+
159
+ }
160
+
96
161
@end
0 commit comments