2015-02-08 2 views
2

Я хочу сделать приложение на основе Кордовы, которое будет потреблять данные из веб-API. Часть веб-API будет работать на трех разных URL: example.local, example.qa и example.com.Как передать и использовать адрес веб-сервера api для Android и IOS, которые будут отличаться для всех трех сред Debug, QA, Prod?

Как передать и использовать адрес веб-сервера api для Android и IOS, который будет отличаться для всех трех сред Debug, QA, Prod?

ответ

1

Поскольку я не хотел изменять исходные скрипты сборки, я решил проблему немного иначе, чем @pauloya. Так вот что я сделал:

  1. Я добавил проект пустышки C# консольного к решению
  2. Defined новых конфигураций сборки для решения (в моем случае бете и QA)
  3. Установите сборку варианты для всех проектов следующим образом (не забудьте проверить сборки флажок для проекта пустышки):

     
        TestCordovaApp: Debug  | Dummy: Debug 
        TestCordovaApp: Debug  | Dummy: Beta 
        TestCordovaApp: Debug  | Dummy: QA 
        TestCordovaApp: Release  | Dummy: Release  
        TestCordovaApp: Distribution | Dummy: Distribution 
    
  4. Добавлена ​​конфигурационный файл для каждой среды к проекту пустышки

  5. вручную отредактировали Dummy.csproj выполнить это волшебство после создания как так

     
        <Target Name="AfterBuild"> 
         <!-- Environments.plist --> 
         <Copy Condition="Exists('$(ProjectDir)configurations\ios\Environments.$(ConfigurationName).plist')" SourceFiles="$(ProjectDir)configurations\ios\Environments.$(ConfigurationName).plist" DestinationFiles="$(ProjectDir)..\TestCordovaApp\plugins\TestPlugin\src\ios\config\Environments.plist" /> 
         <!-- TestConfig.xml --> 
         <Copy Condition="Exists('$(ProjectDir)configurations\android\TestConfig.$(ConfigurationName).xml')" SourceFiles="$(ProjectDir)configurations\android\TestConfig.$(ConfigurationName).xml" DestinationFiles="$(ProjectDir)..\TestCordovaApp\plugins\TestPlugin\src\android\config\TestConfig.xml" /> 
        </Target> 
    
  6. Добавлена ​​ссылка на проект пустышки из TestCordovaApp (просто игнорировать эту ошибку, что ссылочный тип не поддерживается этим типом проекта)

ПРИМЕЧАНИЕ: восстанавливание требуется каждый раз, когда вы хотите изменить конфигурацию сборки, но с CTP3 восстановления требуется для почти каждого редактирования один внести в приложение, так что это не должно быть проблемой.

Для потребляя значения в Android предполагая один файл ресурс со строками может быть достигнут с помощью метода хелперов, как это:

 
     private String GetStringResource(String resourceKey) 
     { 
      String packageName = cordova.getActivity().getPackageName(); 
      int resourceId = cordova.getActivity().getResources().getIdentifier(resourceKey, "string", packageName); 
      return cordova.getActivity().getString(resourceId); 
     } 

Для потребляя значения из прошивки я использовал код по этой ссылке: [ https://gist.github.com/besi/2782045]

1

Это можно сделать, используя событие Pre-build, используя $ (ConfigurationName). К сожалению, похоже, что проекты Кордовы не могут строить события.
Мы добавили фиктивный проект в решение с событием post-build, которое использует $ (ConfigurationName) для копирования одного из 3 файлов «config.js» в папку проекта.
Для этого вы можете полагаться на конфигурацию Debug, Release или Distribution. Возможно, вам придется добавить настраиваемые конфигурации, чтобы иметь больше окружения.

+0

Похоже, что добавление настраиваемых конфигураций невозможно. Я получаю сообщение об ошибке: Запрошенная конфигурация сборки не поддерживается. Поддерживаются только отладка, выпуск и распространение. Кроме этого, мне удалось реализовать следующее решение для iOS: https://gist.github.com/besi/2782045. Я все еще ищу аналогичное решение для Android, или я пойду на ваше решение для «управления» файлами ant.properties. – user1992449

+0

Мы смогли настроить пользовательские конфигурации, но потребовалось значительное количество настроек с файлами, чтобы добиться этого.Я думаю, мы передали эту ошибку «Запрошенная конфигурация сборки не поддерживается», отредактировав файл csproj/jsproj, чтобы добавить настраиваемую конфигурацию ... – pauloya

+0

Наше решение далека от идеала, потому что нам все равно нужно перестраивать проекты индивидуально, перестраивая решение, t, похоже, запускает все сборки, и для iOS нам все равно нужно изменить конфигурацию на «Распространение» для проекта cordova или он не будет построен на Mac. Очень грязно, но работает как-то ... – pauloya