如何使用类似于Lister App的iOS和watchOS 2之间的共享框架设置项目?

Sen*_*ful 5 ios ios-frameworks apple-watch

利斯特应用是苹果的只有苹果观察样本项目之一.它首先是为支持watchOS 1而编写的,后来在2015年9月16日更新以支持watchOS 2.因此,有许多目标,组等不能一致地命名,因此很难理解是什么.

我想创建一个类似的项目,我有一个iOS和带有共享代码/框架的watchOS 2.由于Lister应用程序的复杂性,我很难理解如何设置这样的项目.

我应该如何设置项目以便在watchOS 2和iOS应用程序之间共享代码?(注意:不要求支持watchOS 1.)


作为参考,以下是Lister应用程序中的目标,方案和组的列表:

  • 目标: Lister,Lister Tests,Lister Today,Lister WatchKit Extension,Lister WatchKit App,ListerKit,ListerKit Tests,Lister Watch Extension,Lister Watch App,ListerKit(watchOS),Lister(OS X),Lister Today(OS X),ListerKit (OS X),ListerKit测试(OS X)
  • 方案: Lister,Lister Today,Lister WatchKit App,Glance - Lister WatchKit App,ListerKit,Lister Watch App,Glance - Lister Watch App,ListerKit(watchOS),Lister(OS X),Lister Today(OS X),ListerKit(OS) X)
  • 团体: Lister iOS App,Lister WatchKit App,共享Lister WatchKit代码,Lister Watch App,Lister OS X App,共享ListerKit框架代码,共享Lister资源

Sen*_*ful 12

该项目非常复杂,因为它支持watchOS 1和watchOS 2.

摘要

如果你想要的是支持watchOS 2并在iOS和watchOS 2之间共享代码,你需要创建两个框架,每个平台一个.

watchOS 1:

  • 只需在两个目标(和)中包含.swift文件,即可在watchOS 1和watchOS 2之间共享代码.(请参阅共享Lister WatchKit代码组.)Lister WatchKit ExtensionLister Watch Extension
  • 代码在watchOS 1和iOS之间通过Lister iOS Framework(ListerKit)共享.

watchOS 2:

  • 只需在两个目标(,和)中包含.swift文件,即可在watchOS 2和watchOS 1之间共享代码.(请参阅共享Lister WatchKit代码组.)Lister WatchKit ExtensionLister Watch Extension
  • 通过在Lister iOS Framework()和Lister watchOS 2 Framework()中包含共享文件(例如),在watchOS 2和iOS之间共享代码.(请参阅共享ListerKit框架代码组.)List.swiftListerKitListerKit (watchOS)

    在watchOS 2 Transition Guide 的iOS应用程序和watchOS App部分之间共享代码中,他们确认了watchOS 2的这种设置:

    在watchOS 2中,您可以在iOS应用和Watch应用之间共享代码,但不能共享框架.由于应用程序在具有不同体系结构的不同平台上运行,因此必须为每个平台单独编译源文件.如果您仍希望使用框架来管理任何共享源文件,则必须为每个平台创建单独的框架目标,并将共享源文件添加到每个框架.

    [...]

    注意

    为WatchKit扩展创建单独的框架目标后,必须分别为iOS和watchOS管理该框架的内容.如果您将文件添加到框架的iOS版本,请记住将它们添加到watchOS版本.


详细的目标信息

注意:在这个项目中,无论你在哪里看到WatchKit,通常都是指watchOS 1,而Watch则是指watchOS 2.

Lister iOS App(Lister):

  • 目标: Lister
  • 产品名称: Lister
  • 支持的平台: iOS
  • 组: Lister iOS App/Main App
  • 目标依赖项: Lister iOS Framework(ListerKit)
  • 目标依赖项: Lister iOS Today小部件(Lister Today)
  • 目标依赖关系: Lister watchOS 2 App(Lister Watch App)
  • 目标依赖关系: Lister watchOS 1 Extension(Lister WatchKit Extension)
  • 链接: Lister iOS Framework(ListerKit.framework)
  • 嵌入: Lister iOS Framework(ListerKit.framework)
  • 嵌入: Lister watchOS 1 Extension(Lister WatchKit Extension.appex)
  • 嵌入: Lister iOS App(Lister.appex)
  • 嵌入: Lister watchOS 2 App(Lister Watch App.app)

Lister iOS Today小工具(Lister TodayLister):

  • 目标: Lister Today
  • 产品名称: Lister
  • 支持的平台: iOS
  • 组: Lister iOS App/Today Widget
  • 目标依赖项: Lister iOS Framework(ListerKit)
  • 链接: Lister iOS Framework(ListerKit.framework)
  • 使用者: Lister iOS App(Lister)

Lister iOS Framework(ListerKit):

  • 目标: ListerKit
  • 产品名称: ListerKit
  • 支持的平台: iOS
  • Group: Lister iOS App/ListerKit Framework(iOS)
  • 组:共享ListerKit框架代码
  • 使用者: Lister iOS App(Lister)
  • 使用者: Lister iOS Today小工具(Lister Today)
  • 使用者: Lister watchOS 1 Extension(Lister WatchKit Extension)

Lister watchOS 1 Extension(Lister WatchKit Extension):

  • 目标: Lister WatchKit Extension
  • 产品名称: Lister WatchKit Extension
  • 支持的平台: iOS
  • 组: Lister WatchKit App/Lister WatchKit Extension
  • 组:共享Lister WatchKit代码
  • 目标依赖项: Lister iOS Framework(ListerKit)
  • 目标依赖性: Lister watchOS 1 App(Lister WatchKit App)
  • 使用者: Lister iOS App(Lister)

Lister watchOS 1 App(Lister WatchKit App):

  • 目标: Lister WatchKit App
  • 产品名称: Lister WatchKit App
  • 支持的平台: iOS
  • 组: Lister WatchKit App/Lister WatchKit App
  • 使用者: Lister watchOS 1 Extension(Lister WatchKit Extension)

Lister watchOS 2 Extension(Lister Watch Extension):

  • 目标: Lister Watch Extension
  • 产品名称: Lister Watch Extension
  • 支持的平台: watchOS
  • 组: Lister Watch App/Lister Watch Extension
  • 组:共享Lister WatchKit代码
  • 组: Lister Watch App/ListerKit Framework(watchOS)
  • 目标依赖关系: Lister watchOS 2 Framework(ListerKit (watchOS))
  • 链接: Lister watchOS 2 Framework(ListerWatchKit.framework)
  • 嵌入: Lister watchOS 2 Framework(ListerWatchKit.framework)

Lister watchOS 2 App(Lister Watch App):

  • 目标: Lister Watch App
  • 产品名称: Lister Watch App
  • 支持的平台: watchOS
  • 组: Lister Watch App/Lister Watch App
  • 使用者: Lister iOS App(Lister)

Lister watchOS 2框架(ListerKit (watchOS)ListerWatchKit):

  • 目标: ListerKit(watchOS)
  • 产品名称: ListerWatchKit
  • 支持的平台: watchOS
  • Group: Lister iOS App/ListerKit Framework(iOS)/ iCloud&Local Storage/ListUtilities.swift
  • 组:共享ListerKit框架代码`
  • 使用者: Lister watchOS 2 Extension(Lister Watch Extension)

注意事项:

  • Shared Lister WatchKit Code组包含watchOS 1和watchOS 2 扩展共享的代码.
  • Lister Watch App/ListerKit Framework (watchOS)组的名称暗示它应该是ListerKit (watchOS)目标的一部分,但它是Lister Watch Extension目标的一部分.
  • *Shared ListerKit Framework Code主要用于在iOS,watchOS和OS X ListerKit框架之间共享代码.不过,也有来自省略了一些文件ListerKit (watchOS)的目标:SegueHandlerType.swift,CheckBoxLayer.swift
  • 尽管该项WatchKit主要用于指代本项目中的watchOS 1,但Lister watchOS 2 Framework的产品名称是ListerWatchKit,但它仅用于watchOS 2.注意:watchOS 1不使用框架.
  • 我从列表中省略了OS X groups/targets/etc.