【发布时间】:2020-02-17 16:18:47
【问题描述】:
我们希望将 2 个版本的 iOS 应用程序放在同一个包中。这样,我们的客户可以在推送更新后恢复到旧版本。我曾希望通过将当前和以前的版本构建到框架中并在提示用户后调用适当的版本来实现这一点。
作为测试,我创建了两个框架,LibA 和 LibB,每个都包含类 Thing。
我遇到的问题是这个运行时警告...
objc[21117]: Class Thing is implemented in both /private/var/containers/Bundle/Application/0E6374C5-52FB-421F-90D6-ADC9A4C22B5D/DualBootTestApp.app/Frameworks/LibA.framework/LibA (0x102b144b0) and /private/var/containers/Bundle/Application/0E6374C5-52FB-421F-90D6-ADC9A4C22B5D/DualBootTestApp.app/Frameworks/LibB.framework/LibB (0x102ba4460). One of the two will be used. Which one is undefined.
在现实世界中,这些框架将是同一个应用程序的两个版本,因此 99% 的类名在每个版本中都是相同的。
每个框架实际上都调用了自己的 Thing 版本,但运行时警告提示我不能依赖这种行为。
更新
我刚刚尝试改用 Cocoa Touch 静态库。使用静态库时,我不会收到运行时警告,但始终会调用来自 LibB 的类 Thing 版本,即使调用来自 LibA。
我开始相信在目标 c 类名称前面加上某种宏可能是唯一的解决方案。大量共享代码使这成为一个严峻的前景。
有谁知道我可以隐藏类名以便只有每个框架都可以看到自己的类?
有没有更好的方法将一个应用的两个版本添加到同一个包中?甚至可能吗? Appstore 审核会有问题吗?
【问题讨论】:
标签: ios objective-c ios-frameworks