FOSUtilities

Run unit tests Swift Package Manager

FOSUtilities 包提供了三个库:FOSFoundation、FOSMVVM 和 FOSTesting。

文档

有关指南、文章和 API 文档,请参阅Web 上的库文档或 Xcode 中的文档。

FOSFoundation

FOSFoundation 是一个协议、模式、类型和例程的库,我发现在我的项目中通常很有用。支持的领域包括:

有关指南、文章和 API 文档,请参阅Web 上的库文档或 Xcode 中的文档。

FOSMVVM

FOSMVVM 是一个库,它实现了 Model-View-ViewModel 模式,用于将 SwiftUI 项目绑定到 Vapor Web 服务。

有关指南、文章和 API 文档,请参阅Web 上的库文档或 Xcode 中的文档。

快速浏览

这是一个设置新的基于 Model-View-ViewModel 的客户端应用程序的示例

ViewModel

public struct LandingPageViewModel: RequestableViewModel {
    public typealias Request = LandingPageRequest

    @LocalizedString public var pageTitle

    public var vmId = ViewModelId()

    public init() {}

    public static func stub() -> Self { .init() }
}

View

struct LandingPageView: ViewModelView {
    let viewModel: LandingPageViewModel

    var body: some View {
        VStack {
            Text(viewModel.pageTitle)
                .font(.headline)
                .padding(.bottom, 30)
        }
        .padding()
    }
}

客户端应用程序 Main

@main
struct MyApp: App {
    @State private var viewModel: LandingPageViewModel?

    var body: some Scene {
        WindowGroup {
            let vmBinding = $viewModel

            LandingPageView.bind(
                viewModel: vmBinding
            )
        }
        .environment(
             MVVMEnvironment(
                 currentVersion: .currentApplicationVersion,
                 appBundle: Bundle.main,
                 deploymentURLs: [
                    .production, .init(serverBaseURL: URL(string: "http://api.mywebserver.com")!),
                    .staging, .init(serverBaseURL: URL(string: "http://staging-api.mywebserver.com")!),
                    .debug, .init(serverBaseURL: URL(string: "https://:8080")!)
                 ]
            )
        )
    }
}

Vapor 服务器应用程序

public func configure(_ app: Application) async throws {
    // uncomment to serve files from /Public folder
    // app.middleware.use(FileMiddleware(publicDirectory: app.directory.publicDirectory))
    // register routes
    try routes(app)

    try app.initYamlLocalization(
        bundle: Bundle.module,
        resourceDirectoryName: "Resources"
    )
}

func routes(_ app: Application) throws {
    app.routesregister(viewModel: LandingPageViewModel.self)
}

FOSTesting

FOSTestingUtilities 是一个测试模式、类型和例程的包,我发现在我的项目中通常很有用。

有关指南、文章和 API 文档,请参阅Web 上的库文档或 Xcode 中的文档。

Swift Package Manager

FOSUtilities 支持 Swift Package Manager。 要在项目中包含 FOSUtilities,请将以下内容添加到您的 Package.swift 文件中

.package(url: "git@github.com:foscomputerservices/FOSUtilities.git", branch: "main"),

要使用其中一个库,请在 Package.swift 文件中的目标的依赖项列表中添加一个或多个条目

.target(
    name: "MyTarget",
    dependencies: [
        .product(name: "FOSFoundation", package: "FOSUtilities"),
        .product(name: "FOSMVVM", package: "FOSUtilities")
        // ...
    ]
),
.testTarget(
    name: "MyTests",
    dependencies: [
        .byName(name: "MyTarget"),
        .byName(name: "FOSFoundation"),
        .byName(name: "FOSMVVM"),
        .byName(name: "FOSTesting"),
        .product(name: "Testing", package: "swift-testing")
    ]
)

贡献

欢迎所有贡献! 有关更多详细信息,请参阅 CONTRIBUTING.md

维护者

此项目由 David Hunt 维护,他是 FOS Computer Services, LLC 的所有者。

许可

FOSUtilities 采用 Apache 许可证。 有关更多信息,请参阅 LICENSE 文件。