如何在 iOS 和 watchOS 2 之间建立一个类似于 Lister App 的具有共享框架的项目?
Posted
技术标签:
【中文标题】如何在 iOS 和 watchOS 2 之间建立一个类似于 Lister App 的具有共享框架的项目?【英文标题】:How to set up a project with shared frameworks between iOS and watchOS 2 similar to Lister App? 【发布时间】:2015-12-20 23:35:12 【问题描述】:Lister app 是 Apple 仅有的 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 应用、Lister WatchKit 应用、共享 Lister WatchKit 代码、Lister Watch 应用、Lister OS X 应用、共享 ListerKit 框架代码、共享 Lister 资源【问题讨论】:
【参考方案1】:该项目非常复杂,因为它同时支持 watchOS 1 和 watchOS 2。
总结
如果您只想支持 watchOS 2 并在 iOS 和 watchOS 2 之间共享代码,您将需要创建两个框架,每个平台一个。
watchOS 1:
代码在 watchOS 1 和 watchOS 2 之间共享,只需在两个目标(Lister WatchKit Extension
和 Lister Watch Extension
)中包含 .swift 文件即可。 (参见Shared Lister WatchKit 代码组。)
代码通过 Lister iOS 框架 (ListerKit
) 在 watchOS 1 和 iOS 之间共享。
watchOS 2:
代码在 watchOS 2 和 watchOS 1 之间共享,只需在两个目标(Lister WatchKit Extension
和 Lister Watch Extension
)中包含 .swift 文件即可。 (参见Shared Lister WatchKit 代码组。)
代码在 watchOS 2 和 iOS 之间共享,方法是在 Lister iOS 框架 (ListerKit
) 和 Lister watchOS 2 框架 (ListerKit (watchOS)
) 中包含共享文件(例如 List.swift
)。 (请参阅共享 ListerKit 框架代码组。)
在 watchOS 2 过渡指南的 Sharing Code Between an iOS App and a watchOS App 部分,他们确认了 watchOS 2 的这种设置:
在 watchOS 2 中,您可以在 iOS 应用和 Watch 应用之间共享代码,但不能共享框架。由于应用程序在不同架构的不同平台上运行,因此必须为每个平台单独编译源文件。如果您仍想使用框架来管理任何共享源文件,则必须为每个平台创建单独的框架目标并将您的共享源文件添加到每个框架。
[...]
注意
为 WatchKit 扩展创建单独的框架目标后,您必须为 iOS 和 watchOS 分别管理该框架的内容。如果您将文件添加到框架的 iOS 版本,请记住将它们添加到 watchOS 版本。
详细的目标信息
注意:在这个项目中,无论你在哪里看到WatchKit,这个通常指的是watchOS 1,而Watch指的是watchOS 2。 p>
Lister iOS 应用 (Lister
):
目标:Lister
产品名称: Lister
支持的平台: iOS
组: Lister iOS 应用/主应用
目标依赖: Lister iOS 框架 (ListerKit
)
目标依赖: Lister iOS Today Widget (Lister Today
)
目标依赖: Lister watchOS 2 App (Lister Watch App
)
目标依赖: Lister watchOS 1 Extension (Lister WatchKit Extension
)
链接至: Lister iOS 框架 (ListerKit.framework
)
嵌入: Lister iOS 框架 (ListerKit.framework
)
嵌入: Lister watchOS 1 扩展 (Lister WatchKit Extension.appex
)
嵌入: Lister iOS 应用 (Lister.appex
)
嵌入: Lister watchOS 2 应用 (Lister Watch App.app
)
Lister iOS Today 小部件(Lister Today
或 Lister
):
目标:今天的Lister
产品名称: Lister
支持的平台: iOS
组: Lister iOS App/Today Widget
目标依赖: Lister iOS 框架 (ListerKit
)
链接到: Lister iOS 框架 (ListerKit.framework
)
使用者: Lister iOS App (Lister
)
Lister iOS 框架 (ListerKit
):
目标: ListerKit
产品名称: ListerKit
支持的平台: iOS
组: Lister iOS App/ListerKit Framework (iOS)
组: 共享 ListerKit 框架代码
使用者: Lister iOS App (Lister
)
使用者: Lister iOS Today Widget (Lister Today
)
使用者: Lister watchOS 1 Extension (Lister WatchKit Extension
)
Lister watchOS 1 扩展 (Lister WatchKit Extension
):
目标: Lister WatchKit 扩展
产品名称: Lister WatchKit Extension
支持的平台: iOS
组: Lister WatchKit 应用/Lister WatchKit 扩展
组: 共享 Lister WatchKit 代码
目标依赖: Lister iOS 框架 (ListerKit
)
目标依赖: Lister watchOS 1 App (Lister WatchKit App
)
使用者: Lister iOS App (Lister
)
Lister watchOS 1 App (Lister WatchKit App
):
目标: Lister WatchKit 应用
产品名称: Lister WatchKit 应用程序
支持的平台: iOS
组: Lister WatchKit App/Lister WatchKit App
使用者: Lister watchOS 1 Extension (Lister WatchKit Extension
)
Lister watchOS 2 扩展 (Lister Watch Extension
):
目标: Lister Watch 扩展
产品名称: Lister Watch Extension
支持的平台: watchOS
组:Lister Watch 应用/Lister Watch 扩展程序
组: 共享 Lister WatchKit 代码
组: Lister Watch 应用/ListerKit 框架 (watchOS)
目标依赖: Lister watchOS 2 框架 (ListerKit (watchOS)
)
链接至: Lister watchOS 2 框架 (ListerWatchKit.framework
)
嵌入: Lister watchOS 2 框架 (ListerWatchKit.framework
)
Lister watchOS 2 App (Lister Watch App
):
目标: Lister Watch 应用
产品名称: Lister Watch 应用
支持的平台: watchOS
组:Lister Watch App/Lister Watch App
使用者: Lister iOS App (Lister
)
Lister watchOS 2 框架(ListerKit (watchOS)
或 ListerWatchKit
):
目标: ListerKit (watchOS)
产品名称: ListerWatchKit
支持的平台: watchOS
组: 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框架的产品名称是ListerWatchKit
,但它仅用于watchOS 2。注意:watchOS 1不使用框架。
我从列表中省略了 OS X 组/目标/等。
【讨论】:
以上是关于如何在 iOS 和 watchOS 2 之间建立一个类似于 Lister App 的具有共享框架的项目?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 iOS 和 WatchOS 应用之间共享 Firebase Auth 登录?
如何支持 iOS 9.3 和 watchOS 2.2 的多个手表