我已经使用Swift Packages开发iOS/macOS客户端和Vapor后端一段时间了。我正在将所学的教训整理成一组通用的开源代码库:
VaporExampleLabs/Synergy*
。
可以使用Swift Packages在Swift服务器端、iOS设备和macOS应用程序上运行。在视图(Vapor
View
,iOS
UIView
,macOS
NSView
)和底层应用逻辑之间实现更大的分离,可以让更多的Swift Packages在各平台之间共享代码。
VaporExampleLabs/Synergy*
集合提供了各种工作片段,说明如何设置一个Vapor服务器、iOS设备客户端和macOS客户端使用相同的Swift Packages。
每个部分都强调了使用Swift代码在服务器后端和客户端设备软件开发中的一些关键发现。
主要观察点:
- 尽可能将应用逻辑与视图分离,放置到Swift Packages中。
- 考虑使用跨平台的Swift和/或C库。
- Xcode有时需要额外的手动步骤,例如在构建阶段添加C头文件。
- Swift Packages可以生成为Xcode项目,作为iOS和macOS应用程序中的子项目使用。Swift Package子项目可作为解决方法,直到iOS/macOS/tvOS应用程序可以使用SPM构建为止。
注意:Synergy项目和Packages集合仍然是一个正在进行中的工作,目标是创建一个完整(自包含)的后端到客户端连接示例集,共享通用的Swift Packages。
SynergySqliteC
有时候低级别的库在服务器和设备之间不常见。例如,数据库对象关系模型(ORM)对于Vapor和iOS/macOS来说是不同的。Vapor提供Fluent,而iOS/macOS则提供CoreData。
此示例演示了直接使用最底层的SQLite C源代码。
SynergySqliteC ⇗
展示了如何将跨平台的C库设置为Swift Package。
纯C包可能需要手动将*.h文件添加到项目树中以在Xcode项目中进行构建。
SynergySQLiteFramework
SynergySQLiteFramework ⇗
提供了一个通用的Swift框架,用于使用基于C的Swift Package
SynergySqliteC
。
SynergyAPI
SynergyAPI ⇗
提供了用于 Synergy 应用程序集合的 Codable 接口。它使用泛型 SQLite 包 SynergySQLiteFramework
。
SynergyVapor
SynergyVapor ⇗
提供了一个使用 SynergyAPI
的示例 Vapor web 应用程序。
Synergy Clients
Synergy ⇗
提供了 iOS 和 macOS 客户端 Xcode 项目。iOS 和 macOS 客户端都使用 SynergyAPI
包。
iOS/macOS 应用程序中的 Swift 包
Swift Package Manager 项目在2019.06.03之前说明:
请注意,目前软件包管理器不支持 iOS、watchOS 或 tvOS 平台。
在2019.06.03,Swift Package Manager 项目已更新,指出 Xcode 11 中存在一些 SPM 支持。
Xcode 11 集成了 libSwiftPM,以提供对 iOS、watchOS 和 tvOS 平台的支持。
尽管 Swift Package Manager 无法直接 创建 iOS 或 macOS 应用程序,但 Swift Packages 仍可用作相应 Xcode 应用程序项目中的子项目。
cd SynergyAPI
swift package generate-xcodeproj \
--xcconfig-overrides Package.iOS.xcconfig \
--output SynergyAPI_iOS
swift package generate-xcodeproj \
--xcconfig-overrides Package.macOS.xcconfig \
--output SynergyAPI_macOS
资源