Problem description
Environment specific global values are not respected, the value returned is always the one relative to the 'env:development'
Steps to reproduce
1. Run the sample code
config.json
{
"global": {
"key": "defaultValue",
"anotherKey": 12345
},
"env:development": {
"environment": "development"
},
"env:test": {
"environment": "test"
},
"env:production": {
"environment": "production"
},
"os:ios": {
"key": "iosValue"
},
"os:android": {
"key": "androidValue"
},
"dependencies": {}
}
index.xml
<Alloy>
<Window id="win" backgroundColor="white" exitOnClose="true" fullscreen="false" title="ScrollView Demo">
<View id="view" backgroundColor="#336699">
<Label id='label1' top='20'>platform key: </Label>
<Label id='label2' top='80'>global key: </Label>
<Label id='label3' top='140'>environment: </Label>
</View>
</Window>
</Alloy>
index.js
// Alloy.Globals.someGlobalObject = { key: 'value' };
$.label1.text = $.label1.text + ' ' + Alloy.CFG.key;
$.label2.text = $.label2.text + ' ' + Alloy.CFG.anotherKey;
$.label3.text = $.label3.text + ' ' + Alloy.CFG.environment;
if ((Alloy.isHandheld) && (OS_IOS)){
alert('iphone handheld!')
}
else if ((Alloy.isHandheld) && (OS_ANDROID)){
alert('android handheld')
}
else if ((Alloy.isTablet)&&(OS_IOS)){
alert('ipad tablet!')
}
else if ((Alloy.isTablet)&&(OS_ANDROID)){
alert('android tablet')
}
else if (OS_MOBILEWEB){
alert('mobileweb!')
}
else {
alert("I don't know!'")
}
$.win.open();
2. Build for packaging (tested on Android)
3. Install the package on device and run the app
Result: 'environment: development' label is displayed
Expected result: "environment: production" label should be displayed.
Note
This is not reproducible on Alloy 1.1.3, so is a regression.
Notes so far: I am able to see this problem even on 1.1.3, doing both test and production builds, they always show up as development. I've also tried various versions of the CLI (3.1.0-3.2.0) and the TiSDK. All behave the same way for android builds. In perusing the CLI android build command code, it appears that the deploy type is never actually set. Unfortunately, due to the way the CLI is structured, this appears to be a change that needs to be made in the TiSDK, not the CLI node module. https://github.com/appcelerator/titanium_mobile/blob/master/android/cli/commands/_build.js If you look in the above file you'll see that "deploy-type" is not implemented as an option (it's commented out). In addition, when specifying a device build, you'd use the "--target, -T" option, which does not modify the deploy type in anyway. In fact, as Federico confirmed with the packaging test, no where in the _build.js file does it appear that the deploy type is taken into account. The "deployTypes" defined at the top of the file appear to be unused. This appears to be a TIMOB CLI issue, but I will need to confirm with [~fcasali].
PR: https://github.com/appcelerator/alloy/pull/221 [~fcasali] can you test this against the test app you laid out in the ticket here and make sure that it behaves as expected for all builds? Please install alloy with the following command:
Re-opening to address issue with CFG.js not updating when deploy type changes. Also is affected by TIMOB-14884.
PR: https://github.com/appcelerator/alloy/pull/222 [~fcasali] try all the tests again. All mentioned issues should now pass when installing from the 1_2_X branch as mentioned above.
Confirmed as resolved. Pushed alloy 1.2.0-beta as a result.
Verified fixed. Environment specific global variables are returned correctly depending on the deploy. Titanium SDK 3.1.2.v20130814124556 Alloy 1.2.0-beta Appcelerator Studio 3.1.2.201308091728 CLI 3.1.2-alpha Node 0.10.13 Android, iOS and MobileWeb Closing.