{ "id": "107380", "key": "TIMOB-12207", "fields": { "issuetype": { "id": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [ { "id": "14980", "description": "2013 Sprint 02 JS", "name": "2013 Sprint 02 JS", "archived": true, "released": true, "releaseDate": "2013-01-28" }, { "id": "14812", "description": "2013 Sprint 02", "name": "2013 Sprint 02", "archived": true, "released": true, "releaseDate": "2013-01-28" } ], "resolution": { "id": "2", "description": "The problem described is an issue which will never be fixed.", "name": "Won't Fix" }, "resolutiondate": "2013-02-12T19:38:40.000+0000", "created": "2013-01-04T11:03:17.000+0000", "priority": { "name": "Medium", "id": "3" }, "labels": [ "SupportTeam", "js" ], "versions": [], "issuelinks": [], "assignee": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "updated": "2017-03-22T17:56:23.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "13103", "name": "CLI", "description": "Node-based command line interface" } ], "description": "h6.Feature Request\r\nThis feature is to add *lower case* message in our logs as follows:\r\n\r\n{code}\r\nlogger.error(__('Invalid app id \"%s\"', cli.argv.id) + '\\n');\r\nlogger.log(__('The app id must consist of letters, numbers, and underscores.'));\r\nlogger.log(__('The first character must be a letter or underscore.'));\r\nlogger.log(__(\"Usually the app id is your company's reversed Internet domain name. (i.e. com.example.myapp)\") + '\\n');\r\n{code}\r\n\r\nSuggest is just adding \"lower case\":\r\n\r\n{code}\r\nlogger.error(__('Invalid app id \"%s\"', cli.argv.id) + '\\n');\r\nlogger.log(__('The app id must consist of lower case letters, numbers, and underscores.'));\r\nlogger.log(__('The first character must be a letter or underscore.'));\r\nlogger.log(__(\"Usually the app id is your company's reversed Internet domain name. (i.e. com.example.myapp)\") + '\\n');\r\n{code}\r\n\r\n- [Source code|https://github.com/cb1kenobi/titanium_mobile/commit/55c150d112bc944333072c080700ecaf925c916a#L0R156]\r\n\r\nh6.Customer remarks\r\n{quote}\r\n\"I have no particular reason to have mixed case other than aesthetics. We had just blindly created one with mixed case. It wasn't a problem until I tried a CI sdk and suddenly our app id was invalid, and I had to dig into the code to find out why, lower case is not mentioned as a requirement in the error.\r\n\r\nWe are just now getting to the release phase of the iphone version of our app, so maybe we would have run into problems down the road.\r\n\r\nSo I'd suggest to specify in the error that lower case is required. It'll probably help others.\"\r\n{quote}", "attachment": [], "flagged": false, "summary": "CLI: Enforce lower-case app IDs", "creator": { "name": "egomez", "key": "egomez", "displayName": "Eduardo Gomez", "active": false, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "egomez", "key": "egomez", "displayName": "Eduardo Gomez", "active": false, "timeZone": "America/Los_Angeles" }, "environment": "Product: Mobile\r\nTitanium SDK: Mobile CI\r\nPlatform OS: iOS\r\nPlatform OS Version: 5.1", "comment": { "comments": [ { "id": "233261", "author": { "name": "strautman", "key": "strautman", "displayName": "Steve Trautman", "active": true, "timeZone": "America/New_York" }, "body": "The same error message in in there twice at lines 67 and 141 of:\r\n\r\ntitanium_mobile / support / cli / commands / create.js", "updateAuthor": { "name": "strautman", "key": "strautman", "displayName": "Steve Trautman", "active": true, "timeZone": "America/New_York" }, "created": "2013-01-04T11:24:42.000+0000", "updated": "2013-01-04T11:24:42.000+0000" }, { "id": "234206", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "Master pull request: https://github.com/appcelerator/titanium_mobile/pull/3705\n3.0.x pull request: https://github.com/appcelerator/titanium_mobile/pull/3706", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2013-01-14T12:57:02.000+0000", "updated": "2013-01-14T12:57:02.000+0000" }, { "id": "237908", "author": { "name": "emerriman", "key": "emerriman", "displayName": "Eric Merriman ", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Either I am crazy, or I am not seeing these fixes in either 3.1.0.v20130210021015 or 3.0.2.v20130207164659.\r\nFrom create.js:\r\n{code}\r\n\t\t\t\t\t\t// general app id validation\r\n\t\t\t\t\t\tif (!/^([a-zA-Z_]{1}[a-zA-Z0-9_]*(\\.[a-zA-Z0-9_]*)*)$/.test(id)) {\r\n\t\t\t\t\t\t\tthrow new appc.exception(__('Invalid app id \"%s\"', id), [\r\n\t\t\t\t\t\t\t\t__('The app id must consist of letters, numbers, and underscores.'),\r\n\t\t\t\t\t\t\t\t__('The first character must be a letter or underscore.'),\r\n\t\t\t\t\t\t\t\t__(\"Usually the app id is your company's reversed Internet domain name. (i.e. com.example.myapp)\")\r\n\t\t\t\t\t\t\t]);\r\n\t\t\t\t\t\t}\r\n{code}\r\n\r\n{code}\r\n\t// general app id validation\r\n\tif (!/^([a-zA-Z_]{1}[a-zA-Z0-9_]*(\\.[a-zA-Z0-9_]*)*)$/.test(cli.argv.id)) {\r\n\t\tlogger.error(__('Invalid app id \"%s\"', cli.argv.id) + '\\n');\r\n\t\tlogger.log(__('The app id must consist of letters, numbers, and underscores.'));\r\n\t\tlogger.log(__('The first character must be a letter or underscore.'));\r\n\t\tlogger.log(__(\"Usually the app id is your company's reversed Internet domain name. (i.e. com.example.myapp)\") + '\\n');\r\n\t\tprocess.exit(1);\r\n\t}\r\n{code}\r\n\r\nBoth builds have the same content, no \"lower case\"\r\n\r\nAnd from:\r\n~/Library/Application Support/Titanium/mobilesdk/osx/3.0.2.v20130207164659/node_modules/titanium-sdk/lib/titanium.js:\r\n\r\n{code}\r\nexports.validateTiappXml = function (logger, tiapp) {\r\n\tif (!tiapp.id) {\r\n\t\tlogger.error(__('tiapp.xml is missing the element') + '\\n');\r\n\t\tlogger.log(__('The app id must consist of letters, numbers, and underscores.'));\r\n\t\tlogger.log(__('The first character must be a letter or underscore.'));\r\n\t\tlogger.log(__(\"Usually the app id is your company's reversed Internet domain name. (i.e. com.example.myapp)\") + '\\n');\r\n\t\tprocess.exit(1);\r\n\t}\r\n\t\r\n\tif (!/^([a-zA-Z_]{1}[a-zA-Z0-9_]*(\\.[a-zA-Z0-9_]*)*)$/.test(tiapp.id)) {\r\n\t\tlogger.error(__('tiapp.xml contains an invalid app id \"%s\"', tiapp.id) + '\\n');\r\n\t\tlogger.log(__('The app id must consist of letters, numbers, and underscores.'));\r\n\t\tlogger.log(__('The first character must be a letter or underscore.'));\r\n\t\tlogger.log(__(\"Usually the app id is your company's reversed Internet domain name. (i.e. com.example.myapp)\") + '\\n');\r\n\t\tprocess.exit(1);\r\n\t}\r\n{code}\r\nAlso no \"lower case\".", "updateAuthor": { "name": "emerriman", "key": "emerriman", "displayName": "Eric Merriman ", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-02-10T19:13:04.000+0000", "updated": "2013-02-10T19:13:36.000+0000" }, { "id": "237913", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "@Eric, at one point in time, we mandated that you could only use lower case letters, but that caused issues, so now we allow lower case letters, hence why \"lower case\" is no longer printed in the error message. We now have more relaxed app id validation when the app is created and strict app id validation when building for Android. Android is the only platform with strict app id validation.", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2013-02-10T20:18:43.000+0000", "updated": "2013-02-10T20:18:43.000+0000" }, { "id": "238180", "author": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "We decided that lower-case IDs are no longer mandatory.", "updateAuthor": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-02-12T19:38:40.000+0000", "updated": "2013-02-12T19:38:40.000+0000" }, { "id": "242967", "author": { "name": "cd", "key": "cd", "displayName": "Christian Dietrich", "active": true, "timeZone": "America/Los_Angeles" }, "body": "@Ingo, please can you also allow the \"-\" as valid character in the Application Id as it was until 3.0.0.GA (for IOS)?\r\n\r\nMy Application ID of my app looks like \"de.company.abc-def-ghi\" and is already available in the app store.\r\n\r\nOtherwise I can't use newer versions than 3.0.0.GA if I want update my app (if I change the application id \r\nthe provisioning file gets invalid, etc.).", "updateAuthor": { "name": "cd", "key": "cd", "displayName": "Christian Dietrich", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-03-19T18:21:35.000+0000", "updated": "2013-03-19T18:21:35.000+0000" }, { "id": "414825", "author": { "name": "lmorris", "key": "lmorris", "displayName": "Lee Morris", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Closing ticket as the issue will not fix and with reference to the above comments. ", "updateAuthor": { "name": "lmorris", "key": "lmorris", "displayName": "Lee Morris", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2017-03-22T17:56:23.000+0000", "updated": "2017-03-22T17:56:23.000+0000" } ], "maxResults": 10, "total": 10, "startAt": 0 } } }