【发布时间】:2017-04-20 21:12:31
【问题描述】:
我目前正在开发一个可在 Android 和 iOS 平台上使用的 SDK。
对于 Android,我们在 Gradle 文件中列出依赖项并使用 Maven 提供 SDK(因此我们的依赖项在 .pom 文件中列出)。
对于 iOS,我们使用 cocoapods 来处理依赖项。
问题如下: * 我们的 SDK 在版本 X 中使用依赖项 * 我们的一位客户可能使用相同的依赖项,但版本 Y * 另一个客户端也可能在版本 Z 中使用完全相同的依赖项
因此,这导致我们的 SDK 可能在我们的一个客户端(如果不是两者)上被破坏,因为我们确保它适用于依赖项 X,但不适用于 Y 和 Z。
目前,遗留代码只是简单地导入导致此问题的库的源代码并将其命名空间,这样它就可以模拟我们不使用同一个库。
但在我看来,这不是一个合适的解决方案:我们没有最新的修复程序,更新很痛苦,客户端的库是两倍而不是一个。
所以,目前,我正在尝试考虑一个潜在的好解决方案,但在 Google 上找不到我想要的(也许我没有使用正确的关键字:/)。
我当时的想法是为每个依赖项提供一系列版本的支持。有点像“如果这里有这个方法,就执行它,否则,使用以前版本的那个方法”(就像iOS上的选择器respondTo)。然后,客户端应该能够在支持范围内的条件下使用任何版本的依赖项。
但是,我不知道这是否正确? 还有其他解决方案吗?
谢谢:)
【问题讨论】:
-
我不认为你想要达到的目标是可能的。即使您将
code更改为与版本无关,您的库仍然需要准确提及它所依赖的其他库。如果您不指定版本,则将假定为最新版本(至少在 cocoapods 中)。您不能在依赖项下提及同一库的多个版本。除非版本明确创建为同时使用。 -
但是,您可以做的是制作多个版本的 base sdk,唯一的区别是
dependency版本。正如您所说,您可以更改您的 基本代码 以支持您计划为其创建单独版本的所有依赖项版本。然后,不同版本的 sdk 之间的唯一区别是 pom/pod 文件提及特定版本的依赖项。您必须维护所有依赖版本组合的矩阵,以便您的客户选择正确的 sdk 版本。 -
通过上述方法,客户端仍然不能按照您的计划只使用一个单一版本的 sdk,而是可以简单地选择客户端中支持其他依赖版本的版本代码。由于您的 sdk 是通过 maven/cocoapods 添加的,因此更改 sdk 的版本只是客户端依赖配置文件(pom/pod)中的数字更改。它并不理想,但我认为它很接近。
-
使用cocoa pods添加依赖并将SDK的代码拖到项目中?
-
@lukya 我明白了。实际上,正如您所说,我打算支持多个版本,并指定库默认使用的特定版本。但是这个版本可以被客户在技术上覆盖,谁可以在支持的范围内选择一个版本?但我想它需要大量的工作来支持多个库的多个版本,所以不确定它是否是正确的选择.. 显然这方面的信息很少。您的解决方案很有趣,尽管我猜它似乎很难实现并且让客户感到困惑?
标签: android ios sdk dependencies