Visual studio cordova 如何传递和使用Android和IOS的web api服务器地址,这将在调试、QA和Prod三种环境中有所不同?
Visual studio cordova 如何传递和使用Android和IOS的web api服务器地址,这将在调试、QA和Prod三种环境中有所不同?,visual-studio-cordova,Visual Studio Cordova,我想制作一个基于Cordova的应用程序,它将使用web API中的数据。
web API部分将在3个不同的URL上运行:example.local、example.qa和example.com
我应该如何传递和使用Android和IOS的web api服务器地址,这对于所有3种环境都是不同的调试、QA和Prod?这可以通过使用$(ConfigurationName)的预构建事件来完成。不幸的是,Cordova项目似乎不能有构建事件。
我们向解决方案中添加了一个虚拟项目,其中包含一个生成后事件,
我想制作一个基于Cordova的应用程序,它将使用web API中的数据。
web API部分将在3个不同的URL上运行:example.local、example.qa和example.com
我应该如何传递和使用Android和IOS的web api服务器地址,这对于所有3种环境都是不同的调试、QA和Prod?这可以通过使用$(ConfigurationName)的预构建事件来完成。不幸的是,Cordova项目似乎不能有构建事件。
我们向解决方案中添加了一个虚拟项目,其中包含一个生成后事件,该事件使用$(ConfigurationName)将3个“config.js”文件中的一个复制到项目文件夹中。
然后,您可以依赖正在调试、发布或分发的配置来完成此任务。您可能需要添加自定义配置才能拥有更多的环境。由于我不想修改原始构建脚本,因此我解决的问题与@pauloya略有不同。以下是我所做的:
我在解决方案中添加了一个虚拟C#控制台项目
为解决方案定义了新的构建配置(在我的例子中是Beta和QA)
按如下所示设置所有项目的生成选项(确保选中虚拟项目的生成复选框):
TestCordovaApp:Debug | Dummy:Debug
TestCordovaApp:Debug | Dummy:Beta
TestCordovaApp:Debug | Dummy:QA
TestCordovaApp:释放|虚拟:释放
TestCordovaApp:Distribution | Dummy:Distribution
将每个环境的配置文件添加到虚拟项目中
手动编辑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>
从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);
}
私有字符串GetStringResource(字符串资源密钥)
{
字符串packageName=cordova.getActivity().getPackageName();
int resourceId=cordova.getActivity().getResources().getIdentifier(resourceKey,“string”,packageName);
返回cordova.getActivity().getString(resourceId);
}
对于使用iOS中的值,我使用了此链接中的代码:[添加自定义配置不可能。我收到一个错误:不支持请求的生成配置。只支持调试、发布和分发。除此之外,我已成功为iOS实现了以下解决方案:。我仍在为Android寻找类似的解决方案,否则我将使用您的解决方案进行“管理”ant.properties文件。我们能够使自定义配置正常工作,但需要对文件进行大量调整才能使其正常工作。我认为我们传递了错误“不支持请求的生成配置”通过编辑csproj/jsproj文件来添加自定义配置……我们的解决方案远远不够理想,因为我们仍然需要单独重建项目,重建解决方案似乎不会触发所有构建,而对于iOS,我们仍然需要将配置更改为“分发”对于cordova项目,或者它不会在mac上构建。非常混乱,但不知怎么地工作。。。
private String GetStringResource(String resourceKey)
{
String packageName = cordova.getActivity().getPackageName();
int resourceId = cordova.getActivity().getResources().getIdentifier(resourceKey, "string", packageName);
return cordova.getActivity().getString(resourceId);
}