如何为 Android 和 IOS 传递和使用 web api 服务器地址,这对于调试、QA、Prod 三种环境都不同?
How to pass and consume web api server address for Android and IOS that will differ for all 3 environments Debug, QA, Prod?
我想制作一个基于 Cordova 的应用程序,它将使用来自网络的数据 API。
Web API 部分将在 3 个不同的 URL 上 运行:example.local、example.qa 和 example.com.
我应该如何为 Android 和 IOS 传递和使用 web api 服务器地址,这将在调试、QA、Prod 的所有 3 个环境中有所不同?
这可以通过使用 $(ConfigurationName) 的预构建事件来完成。不幸的是,Cordova 项目似乎没有构建事件。
我们通过 post-build 事件向解决方案添加了一个虚拟项目,该事件使用 $(ConfigurationName) 将 3 个 "config.js" 文件之一复制到项目文件夹中。
然后,您可以依赖调试、发布或分发的配置。您可能需要添加自定义配置才能拥有更多环境。
因为我不想修改原始构建脚本,所以我解决的问题与@pauloya 有点不同。所以这就是我所做的:
- 我已将虚拟 C# 控制台项目添加到解决方案
- 为解决方案定义了新的构建配置(在我的例子中是 Beta 和 QA)
如下设置所有项目的构建选项(确保选中 Dummy 项目的构建复选框):
TestCordovaApp: Debug | Dummy: Debug
TestCordovaApp: Debug | Dummy: Beta
TestCordovaApp: Debug | Dummy: QA
TestCordovaApp: Release | Dummy: Release
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添加了对Dummy项目的引用(忽略该类项目不支持引用类型的错误)
注意:每次您想要更改构建配置时都需要重建,但对于 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);
}
为了使用来自 iOS 的值,我使用了来自 link 的代码:[https://gist.github.com/besi/2782045]
我想制作一个基于 Cordova 的应用程序,它将使用来自网络的数据 API。 Web API 部分将在 3 个不同的 URL 上 运行:example.local、example.qa 和 example.com.
我应该如何为 Android 和 IOS 传递和使用 web api 服务器地址,这将在调试、QA、Prod 的所有 3 个环境中有所不同?
这可以通过使用 $(ConfigurationName) 的预构建事件来完成。不幸的是,Cordova 项目似乎没有构建事件。
我们通过 post-build 事件向解决方案添加了一个虚拟项目,该事件使用 $(ConfigurationName) 将 3 个 "config.js" 文件之一复制到项目文件夹中。
然后,您可以依赖调试、发布或分发的配置。您可能需要添加自定义配置才能拥有更多环境。
因为我不想修改原始构建脚本,所以我解决的问题与@pauloya 有点不同。所以这就是我所做的:
- 我已将虚拟 C# 控制台项目添加到解决方案
- 为解决方案定义了新的构建配置(在我的例子中是 Beta 和 QA)
如下设置所有项目的构建选项(确保选中 Dummy 项目的构建复选框):
TestCordovaApp: Debug | Dummy: Debug TestCordovaApp: Debug | Dummy: Beta TestCordovaApp: Debug | Dummy: QA TestCordovaApp: Release | Dummy: Release 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添加了对Dummy项目的引用(忽略该类项目不支持引用类型的错误)
注意:每次您想要更改构建配置时都需要重建,但对于 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); }
为了使用来自 iOS 的值,我使用了来自 link 的代码:[https://gist.github.com/besi/2782045]