【问题标题】:Shared code base for iOS and OS X development用于 iOS 和 OS X 开发的共享代码库
【发布时间】:2012-08-01 22:35:36
【问题描述】:

我们有一个相当丰富的电子学习应用程序,主要使用 cocos2d 构建。目前我们处于 alpha 阶段,想要设置我们的项目结构,以便我们还可以构建一个 Mac 版本以针对 Mac App Store。大约 80% cocos2d 在 UIKit 中有一些初始屏幕,必须移植到 Mac(重写)。

对于从单个代码库同时定位 Mac 和 iOS 应用商店的推荐设置是什么?我假设选择是:

  1. 在同一个应用程序源代码根文件夹中创建 2 个 xCode 项目,并使用每个项目构建一个目标。这将是:Project.xcodeproj 和 ProjectMac.xcodeproj
  2. 将新的 Mac 目标添加到我们现有的 iPad 应用程序项目中,然后调整目标成员资格以获得所需的结果。这只是:Project.xcodeproj

更复杂的情况是我们目前使用 cocos2d 作为 iOS 应用程序的静态库。我们还有一个名为 CoreInfrastructure 的库,其中包含我们在所有项目中使用的大量代码。最近我发现我可以创建一个项目,从同一代码库同时构建一个针对 Mac 的框架和一个针对 iOS 的库。这是通过从一个框架项目开始并添加一个目标来为 iOS 构建一个静态库来完成的。

所以只是想得到大家的意见和见解。任何人都知道在上述选择中需要注意的任何警告?任何同时为 Mac 和 iOS 应用商店构建的人愿意分享他们的结构吗?在我们的库代码上添加一个目标......这也是应用程序的方式吗?

对于任一选择进行存档和分发构建是否有任何问题?

提前致谢。

【问题讨论】:

    标签: ios xcode macos multiplatform code-sharing


    【解决方案1】:

    WWDC 会议“在 iOS 和 OS X 之间共享代码”回答了本主题中的所有基本问题。 iWork 团队展示了他们如何通过共享代码库为 iOS 和 OS X 创建 Pages、Keynote 和 Numbers。

    他们项目的关键是使用:

    • iOS 和 OS X 的单独 Xcode 目标
    • .framework 的形式为共享代码创建单独的项目
    • 从上述角度定位对框架的依赖

    我鼓励观看视频或阅读本次会议的记录:

    WWDC 2014 Sharing code between iOS and OS X

    ASCIIWWDC transcript

    【讨论】:

      【解决方案2】:

      我最近使用kstenerud's iOS Universal Framework 构建了一个适用于 iOS 和 Mac 应用程序的共享框架代码库。在为 iOS 框架创建项目后,我只需要手动为 Cocoa 框架添加目标。这样我就可以在框架中开发可共享的代码,并将其链接到 iOS 和 Mac 应用程序中。您甚至可以使框架包含 iOS 应用程序的 UIKit 特定代码和 Mac 应用程序的 AppKit 特定代码。如果您有兴趣,我在我的blog 中写过。

      【讨论】:

        【解决方案3】:

        对于应用程序,请使用两个单独的项目。如果 iOS 和 Mac 共享一个库或框架,则在一个项目中使用多个目标非常有用。但是,在您的顶级应用程序中,几乎没有共享任何内容。 UIKit 代码将需要完全重写才能使用 AppKit,依赖项会有所不同,甚至大部分项目设置也会有所不同。

        当然,如果您真的想一次查看所有内容,您可以将特定于平台的应用程序项目和所有共享的依赖库/框架项目放在一个工作区中。这更多是工作方式的问题。如果您想经常在两者之间来回切换,这是最有意义的。如果您想简化您正在查看的内容,您可以将它们放在共享许多相同项目的单独工作区中。单独的工作区的缺点是一次只能在一个工作区中打开一个项目,因此您实际上一次只能在一个工作区上工作。

        【讨论】:

          【解决方案4】:

          我只是为共享源使用多平台静态库目标。但是,您需要将其扩展到依赖项。如果您有依赖于平台的实现,您可能需要为这些符号创建补充导出库。

          所以你的结构可能采用这种形式:

          • CoreInfrastructure - 跨平台静态库。
          • PlatShared - 跨平台静态库。
          • PlatSpecific-OS X - OS X 静态库(或框架)。
          • PlatSpecific-iOS - iOS 静态库。

          OS X 应用链接到 CoreInfrastructure、PlatShared、PlatSpecific-OSX、Cocos for OS X 和系统库。

          iOS 应用链接到 CoreInfrastructure、PlatShared、PlatSpecific-iOS、Cocos for iOS 和 sys 库。

          问题(我发现)是,有很多人在 Xcode 中开发和维护复杂的项目结构没有太多/任何经验。设置重复目标并在它们增长时正确维护它们是一种痛苦(IMO)——即使它们都引用相同的源文件。这就是为什么我更喜欢最小的目标和适当的依赖结构。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-24
            • 2017-06-10
            • 1970-01-01
            • 2012-04-08
            • 2012-06-26
            相关资源
            最近更新 更多