在 iOS 和 tvOS 的两个嵌入式框架之间共享模块名称

Share a module name between two embedded frameworks for iOS and tvOS

我想为我的 iOS 通用应用添加一个 tvOS 版本。 我的应用程序完全用 Swift 编写,没有使用任何花哨的东西。相反,我们坚持 Cocoa Touch 并尽可能与平台保持一致。

令人惊奇的是,它的效果如此完美...

不过我有个小问题。 iOS 目标使用 3 个嵌入式框架。我似乎无法在项目中找到正确的设置来在 iOS 和 tvOS 目标之间共享那些嵌入式框架。

嵌入式框架都是3编译时编译的。没有静态库。一切都在 Swift.

显然,tvOS 的框架编译方式与 iOS 不同,但我真的需要为 tvOS 框架创建额外的目标吗?这并不是一个问题,因为框架的两个版本使用物理上相同的源文件 - 但框架必须具有不同的名称,因为两个目标(框架是目标)不能具有相同的名称。

这很不幸,因为现在所有共享代码都需要编译器指令来导入不同命名的框架。 :-(

#if os(tvOS)
  import myFrameworkTV
#else
  import myFramework
#endif

访问那些框架中的对象现在也有同样的问题,如果出于某种原因你需要使用完全限定 "path"。

#if os(tvOS)
  let someVar = myFrameworkTV.aClass.aType()
#else
  let someVar = myFramework.aClass.aType()
#endif

有没有办法设置它,以便我可以在两个平台上为我的框架使用相同的名称?

我用的两个cocoaPods是干什么的?

是否需要在同一工作区内创建第二个项目,而不是仅向现有项目添加目标?

如果是这样,与向 iOS 项目添加 tvOS 目标相比,嵌入式项目的缺点是什么?

其中之一当然是 cocoaPods 集成可能无法像它那样无忧无虑地工作,如果我只是添加一个新目标并再次发出 'pod install'。

写下所有内容后不久,我找到了我的问题的简单答案(像往常一样...):

How to create a single shared framework between iOS and OS X

我只需要更改 PRODUCT_NAME 我额外的 xxx-TV 框架,所以我不需要处理两个不同的框架名称。