Uploaded image for project: 'Titanium SDK/CLI'
  1. Titanium SDK/CLI
  2. TIMOB-14449

Include platform-specific dependency information underneath Mobile SDK platform subfolder


    • Type: Story
    • Status: Closed
    • Priority: High
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: Release 3.0.0
    • Component/s: Tooling
    • Labels:
    • Story Points:
    • Sprint:
      2016 Sprint 18 Tooling


      Titanium/Appcelerator Studio has a file named sdk_info.json that we grab from a server and use to determine extra dependencies for specific platforms. An example is that we have entries that point the range of Tizen SDKs we support, XCode versions, Android addons/api levels, etc. This information is not something Studio should be maintaining, and it does not take into context the current project's Mobile SDK - so we apply the dependencies globally, regardless of whether the user is using 1.7.5 or 3.2.0 - which can mean the dependencies are not correct (older versions of the SDK supported older ranges of XCode and Tizen, e.g.).

      This knowledge and maintenance of dependencies should be pushed to the individual platforms, ideally in some relatively standard dependency.json file that is effectively just the segment of the sdk_info.json for that platform.

      Here's the current sdk_info.json file. This is a good starting point, but there are deficencies I will point out after:

          "win32":{"requiredAddOns":["addon.+google.+apis.+10"],"requiredSDKTools":"14","requiredPlatformTools":"10","requiredPlatforms":["Android\\s*2\\.3.*"],"sdkURL":"http://dl.google.com/android/android-sdk_r21.1-windows.zip", "jdkURL":"http://titanium-studio.s3.amazonaws.com/jdk/jdk-6u25-windows-i586.exe"}
         "macosx":{"requiredPlatforms":["[5.0, 6.2)"],"sdkURL":"http://itunes.apple.com/us/app/xcode/id497799835?ls=1&mt=12"}
        "mobileweb": {
          "win32": {"Firefox": ["[10.0, 30.0)"], "InternetExplorer": ["[9.0, 30.0)"], "Chrome": ["[10.0, 30.0)"], "Safari": ["[5.0, 10.0)"]},
          "macosx": {"Firefox": ["[10.0, 30.0)"], "Chrome": ["[10.0, 30.0)"], "Safari": ["[5.0, 10.0)"]},
          "linux": {"Firefox": ["[10.0, 20.0)"], "Chrome": ["[10.0, 20.0)"]}

      In particular for Android the regular expressions used are brittle and difficult to reconstruct since they match against the expected installed directory/filenames, while we need to compare against an xml file with the segments broke out into "fields". i.e. "addon-google_apis-google-10" is the directory on disk, but in xml the "google_apis" is the "name-id" value, "google" is the vendor_id" value and "10" is the api level. Ideally we'd break that out more explicitly: Here's a suggestion for how the android platforms' file would look:

      "android": {
      	"mobile": {
      		"addons": [],
      		"tools": ">=14",
      		"platform-tools": ">=10",
      		"platforms": ["2.3.3"]
      	"module": {
      		"addons": [
      			"google_apis-google": {
      				"apiLevel": ">=10"
      		"java": ">=1.6.0_25",
      		"plugins": [
      			"jdt": {
      				"name": "Java Development Tools",
      				"id": "org.eclipse.jdt.feature.group",
      				"url": "http://download.eclipse.org/releases/kepler",
      				"version": ">= 3.0"

      In general my suggestions are to use Node/npm semantic versioning strings rather than our haphazard version, range or regex approach. Additionally, explicitly state the addon unique id as a key (here I'm assuming the unique id is a combination of name_id and vendor_id). Lastly, break out the dependencies required by mobile versus module development.

      As for the URLs we have here, I'm not sure if we should be including them here or not.


          Issue Links



              • Assignee:
                cbarber Chris Barber
                cwilliams Christopher Williams
              • Watchers:
                0 Start watching this issue


                • Created:

                  Backbone Issue Sync

                  • Titanium SDK/CLI <> Titanium Mobile
                    Synced with:
                    Sync status:
                    Last received:
                    Last sent:

                    Git Integration