代码之家  ›  专栏  ›  技术社区  ›  ivanmoskalev

iOS库中C++运行时兼容性

  •  1
  • ivanmoskalev  · 技术社区  · 7 年前

    .framework ),它使用C++内部,并在模块边界暴露Objy-C API。这个库将被许多客户在他们的应用程序中使用。

    libc++.dylib . 所以问题是:iOS版本/编译器版本之间的运行时是否兼容?我的客户机在使用我的库时是否会遇到二进制兼容性问题(例如,操作系统随不同的运行时版本一起提供,在我的库中产生细微的错误)?

    旁注(关于这个问题的来源):

    0 回复  |  直到 7 年前
        1
  •  3
  •   J.R.    7 年前

    只有苹果知道是否或何时不再支持某些C++库。我的猜测是,依赖于不再受支持的运行时的应用程序将完全停止工作,或者不会首先使用库构建。我在这里找到了这个信息( Xcode 10 (iOS 12) does not contain libstdc++6.0.9 )这表明,随着时间的推移,可能会放弃对旧运行时的支持,然后需要构建另一个库。

    从过去的经验来看,我们在App Store中有一个应用程序——我知道,和库不太一样——它有C++核心和ObjuleC SIMM,不关心C++运行时兼容性。这从来就不是问题。相反,时不时地(经过几年和iOS的迭代)有一些用户界面上的小问题需要解决(我认为iOS7可能没有用户界面),然后强制迁移到64位,然后一些API改变了苹果想要的东西。。。当出现问题时,我们使用最新的XCode进行了构建,这将有助于保持运行,但是旧版本继续工作。

    结果是,你需要准备好维护你的库,或者在C++运行时成为问题之前的其他“给予”,然后你只需要为你的客户做另一个构建。

        2
  •  3
  •   Marek R    7 年前

    如果你正在使用 libc++.dylib 这是系统范围的库,任何应用程序都可以使用它。 如果兼容性被破坏,成千上万的应用程序将被破坏。

    另一方面,如果您使用的是此库的某个自定义版本,则应随附 *.framework . 在这种情况下,不存在破坏兼容性的风险,因为它是随框架一起提供的。

    所以基本上你没有理由担心这个。 如果有东西坏了,那么很多应用程序就会坏掉。

        3
  •  3
  •   Codo    7 年前

    在过去,新的iOS版本与现有的应用程序提供了极好的兼容性。如果应用程序是为旧的iOS版本构建的,那么它也会在新的iOS版本上运行。苹果似乎模仿了老版本的iOS,包括他们的视觉风格和怪癖。如果你运行一个为iOS 6或更早版本构建的应用程序,它仍然会有灰色的外观,而不是iOS 7引入的新样式。

    一旦一个应用程序被更新,情况就不同了:你需要使用最新的Xcode,新的规则将被应用,许多旧的功能将被停用。作为其中的一部分,苹果可能会删除API,切换到一个新的C++编译器,改变标准的C和C++库等。

    所以:

    • 应用程序商店中发布的应用程序应该继续使用C++库工作很多年。
    • 然而,为了开发新的应用程序或新版本的现有应用程序,您需要定期检查库的兼容性,并可能提供更新的版本。