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

Commit c3ccd27

Browse files
committed
Merge branch 'query-update-with-current-package' of github.com:Microsoft/react-native-code-push
2 parents 073cf5b + 15c9d93 commit c3ccd27

File tree

6 files changed

+95
-20
lines changed

6 files changed

+95
-20
lines changed

Examples/HybridMobileDeployCompanion/iOS/Info.plist

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,7 @@
4040
<string></string>
4141
<key>CodePushDeploymentKey</key>
4242
<string>deployment-key-here</string>
43+
<key>CodePushServerUrl</key>
44+
<string>server-url-here</string>
4345
</dict>
4446
</plist>

Examples/HybridMobileDeployCompanion/index.ios.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ var HybridMobileDeployCompanion = React.createClass({
2222
this.fetchData();
2323
},
2424
fetchData: function() {
25-
HybridMobileDeploy.queryUpdate((err, update) => {
26-
this.setState({ update: update, updateString: JSON.stringify(update) });
27-
});
25+
HybridMobileDeploy.queryUpdate((err, update) => {
26+
this.setState({ update: update, updateString: JSON.stringify(update) });
27+
});
2828
},
2929
getInitialState: function() {
3030
return { update: false, updateString: "" };

Examples/HybridMobileDeployCompanion/react-packager-cache-5737493143262339187995942fd693ba

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

HybridMobileDeploy.ios.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
var NativeHybridMobileDeploy = require('react-native').NativeModules.HybridMobileDeploy;
99
var requestFetchAdapter = require("./request-fetch-adapter.js");
1010
var semver = require('semver');
11-
var Sdk = require("hybrid-mobile-deploy-sdk/script/acquisition-sdk").AcquisitionManager;
11+
var Sdk = require("code-push/script/acquisition-sdk").AcquisitionManager;
1212
var sdk;
1313
var config;
1414

@@ -44,16 +44,24 @@ function queryUpdate(callback) {
4444
if (err) callback(err);
4545
getSdk(function(err, sdk) {
4646
if (err) callback(err);
47-
var pkg = {appVersion: configuration.appVersion};
48-
sdk.queryUpdateWithCurrentPackage(pkg, callback);
47+
NativeHybridMobileDeploy.getLocalPackage(function(err, localPackage) {
48+
var queryPackage = {appVersion: configuration.appVersion};
49+
if (!err && localPackage && localPackage.appVersion === configuration.appVersion) {
50+
queryPackage = localPackage;
51+
} else if (err) {
52+
console.log(err);
53+
}
54+
55+
sdk.queryUpdateWithCurrentPackage(queryPackage, callback);
56+
});
4957
});
5058
});
5159
}
5260

5361
function installUpdate(update) {
54-
getConfiguration(function(err, config) {
55-
NativeHybridMobileDeploy.installUpdateFromUrl(config.serverUrl + "acquire/" + config.deploymentKey, (err) => console.log(err));
56-
});
62+
// Use the downloaded package info. Native code will save the package info
63+
// so that the client knows what the current package version is.
64+
NativeHybridMobileDeploy.installUpdate(update, JSON.stringify(update), (err) => console.log(err));
5765
}
5866

5967
var HybridMobileDeploy = {

HybridMobileDeploy.m

Lines changed: 74 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ @implementation HybridMobileDeploy
1515
+ (NSString *) getBundleFolderPath
1616
{
1717
NSString* home = NSHomeDirectory();
18-
NSString* bundleFolder = [home stringByAppendingPathComponent:@"HybridMobileDeploy"];
18+
NSString* bundleFolder = [home stringByAppendingPathComponent:@"HybridMobileDeploy/bundle"];
1919
return bundleFolder;
2020
}
2121

@@ -26,6 +26,21 @@ + (NSString *) getBundlePath
2626
return [bundleFolderPath stringByAppendingPathComponent:appBundleName];
2727
}
2828

29+
+ (NSString *) getPackageFolderPath
30+
{
31+
NSString* home = NSHomeDirectory();
32+
NSString* packageFolder = [home stringByAppendingPathComponent:@"HybridMobileDeploy/package"];
33+
return packageFolder;
34+
}
35+
36+
+ (NSString *) getPackagePath
37+
{
38+
NSString * packageFolderPath = [self getPackageFolderPath];
39+
NSString* appPackageName = @"localpackage.json";
40+
return [packageFolderPath stringByAppendingPathComponent:appPackageName];
41+
}
42+
43+
2944
+ (NSURL *) getNativeBundleURL
3045
{
3146
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
@@ -43,11 +58,16 @@ + (NSURL *) getBundleUrl
4358
}
4459
}
4560

46-
- (void) reloadBundle
61+
+ (void) loadBundle:(NSString*)rootComponent
4762
{
4863
dispatch_async(dispatch_get_main_queue(), ^{
49-
self.bridge.bundleURL = [HybridMobileDeploy getBundleUrl];
50-
[self.bridge reload];
64+
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:[self getBundleUrl]
65+
moduleName:rootComponent
66+
launchOptions:nil];
67+
68+
UIViewController *rootViewController = [[UIViewController alloc] init];
69+
rootViewController.view = rootView;
70+
[UIApplication sharedApplication].delegate.window.rootViewController = rootViewController;
5171
});
5272
}
5373

@@ -56,27 +76,28 @@ - (void) reloadBundle
5676
callback(@[[NSNull null], [HybridMobileDeployConfig getConfiguration]]);
5777
}
5878

59-
RCT_EXPORT_METHOD(installUpdateFromUrl:(NSString*)updateUrl
79+
RCT_EXPORT_METHOD(installUpdate:(NSDictionary*)updatePackage
80+
packageJsonString:(NSString*) packageJsonString
6081
callback:(RCTResponseSenderBlock)callback)
6182
{
6283
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
63-
NSURL* url = [NSURL URLWithString:updateUrl];
84+
NSURL* url = [NSURL URLWithString:updatePackage[@"downloadUrl"]];
6485
NSError *err;
6586

6687
NSString *updateContents = [[NSString alloc] initWithContentsOfURL:url
6788
encoding:NSUTF8StringEncoding
6889
error:&err];
69-
7090
if (err) {
7191
// TODO send download url
72-
callback(@[RCTMakeError(@"Error downloading url", err, [[NSDictionary alloc] initWithObjectsAndKeys:updateUrl,@"updateUrl", nil])]);
92+
callback(@[RCTMakeError(@"Error downloading url", err, [[NSDictionary alloc] initWithObjectsAndKeys:[url absoluteString],@"updateUrl", nil])]);
7393
} else {
7494
dispatch_async(dispatch_get_main_queue(), ^{
7595
NSError *saveError;
7696
NSString *bundleFolderPath = [HybridMobileDeploy getBundleFolderPath];
7797
if (![[NSFileManager defaultManager] fileExistsAtPath:bundleFolderPath]) {
7898
[[NSFileManager defaultManager] createDirectoryAtPath:bundleFolderPath withIntermediateDirectories:YES attributes:nil error:&saveError];
7999
}
100+
80101
[updateContents writeToFile:[HybridMobileDeploy getBundlePath]
81102
atomically:YES
82103
encoding:NSUTF8StringEncoding
@@ -85,12 +106,55 @@ - (void) reloadBundle
85106
// TODO send file path
86107
callback(@[RCTMakeError(@"Error saving file", err, [[NSDictionary alloc] initWithObjectsAndKeys:[HybridMobileDeploy getBundlePath],@"bundlePath", nil])]);
87108
} else {
88-
[self reloadBundle];
89-
callback(@[[NSNull null]]);
109+
// Save the package info too.
110+
NSString *packageFolderPath = [HybridMobileDeploy getPackageFolderPath];
111+
if (![[NSFileManager defaultManager] fileExistsAtPath:packageFolderPath]) {
112+
[[NSFileManager defaultManager] createDirectoryAtPath:packageFolderPath withIntermediateDirectories:YES attributes:nil error:&saveError];
113+
}
114+
115+
[packageJsonString writeToFile:[HybridMobileDeploy getPackagePath]
116+
atomically:YES
117+
encoding:NSUTF8StringEncoding
118+
error:&saveError];
119+
120+
if (saveError) {
121+
callback(@[RCTMakeError(@"Error saving file", err, [[NSDictionary alloc] initWithObjectsAndKeys:[HybridMobileDeploy getPackagePath],@"packagePath", nil])]);
122+
} else {
123+
[HybridMobileDeploy loadBundle:[HybridMobileDeployConfig getRootComponent]];
124+
callback(@[[NSNull null]]);
125+
}
90126
}
91127
});
92128
}
93129
});
94130
}
95131

132+
133+
134+
RCT_EXPORT_METHOD(getLocalPackage: (RCTResponseSenderBlock)callback)
135+
{
136+
137+
NSString *path = [HybridMobileDeploy getPackagePath];
138+
139+
dispatch_async(dispatch_get_main_queue(), ^{
140+
141+
NSError* readError;
142+
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&readError];
143+
if (readError) {
144+
callback(@[RCTMakeError(@"Error finding local package ", readError, [[NSDictionary alloc] initWithObjectsAndKeys:path,@"packagePath", nil]), [NSNull null]]);
145+
} else {
146+
NSError * parseError;
147+
NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
148+
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data
149+
options:kNilOptions
150+
error:&parseError];
151+
if (parseError) {
152+
callback(@[RCTMakeError(@"Error parsing contents of local package ", parseError, [[NSDictionary alloc] initWithObjectsAndKeys:path,@"packagePath", nil]), [NSNull null]]);
153+
} else {
154+
callback(@[[NSNull null], json]);
155+
}
156+
}
157+
});
158+
}
159+
96160
@end

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"main": "HybridMobileDeploy.ios.js",
55
"keywords": "react-native",
66
"dependencies": {
7-
"hybrid-mobile-deploy-sdk": "file:../website/sdk/bin",
7+
"code-push": "file:../website/sdk/bin",
88
"semver": "^4.3.6"
99
},
1010
"devDependencies": {

0 commit comments

Comments
 (0)