14

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

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

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

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

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

为这两种选择进行归档和分发构建是否有任何问题?

提前致谢。

4

4 回答 4

19

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

他们项目的关键是使用:

  • 用于 iOS 和 OS X 的单独 Xcode 目标
  • .framework形式的共享代码的单独项目
  • 从上面的角度来看,目标对框架的依赖

我鼓励观看视频或阅读本次会议的成绩单:

WWDC 2014 在 iOS 和 OS X 之间共享代码

ASCIIWWDC 成绩单

于 2015-07-20T10:55:16.637 回答
4

I recently used kstenerud's iOS Universal Framework to build a shared framework codebase that works for both iOS and Mac apps. I just needed to manually add a target for a Cocoa framework after I had created a project for an iOS framework. That way I can develop the sharable code once in the framework and link it in both the iOS and Mac apps. You can even make the framework contain UIKit-specific code for your iOS app and AppKit-specific code for your Mac apps. I wrote about it in my blog if you are interested.

于 2013-04-16T16:29:23.830 回答
3

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

因此,您的结构可能采用以下形式:

  • 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)——即使它们都引用相同的源文件。这就是为什么我更喜欢最小的目标和适当的依赖结构。

于 2012-08-01T22:49:40.830 回答
3

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

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

于 2012-08-01T22:56:29.973 回答