项目作者: mkj-is

项目描述 :
Native App Center Client for Apple platforms made in SwiftUI
高级语言: Swift
项目地址: git://github.com/mkj-is/AppCenterSwiftUI.git
创建时间: 2019-11-03T22:36:13Z
项目社区:https://github.com/mkj-is/AppCenterSwiftUI

开源协议:GNU General Public License v3.0

下载


App Center Client for iOS, macOS and tvOS in SwiftUI

Native client for VS App Center on Apple platforms. For simplying app installation for mobile QA teams and distributing internal builds.

This app was made as an experiment for learning SwiftUI and testing my implementation of uni-directional data flow/architecture.

Features

  • Three platforms: iOS, macOS and tvOS.
  • Login using your App Center account.
  • List of apps and their releases.
  • Ability to install/download those releases.

Mac screenshot

iPad screenshot

Points of interest for a curious developer

  • Architecture & functional programming
    • Uni-directional architecture using Elementary framework.
    • Cross-platform core Swift package instead of a using Xcode framework target.
    • No-op functions for providing previews with no-op functions as callbacks instead of using many braces and underlines.
    • Lift operator to simplify passing of views as closures where no auto-closure annotation is present, to remove braces count in SwiftUI. Typical use-case is Button and its label.
  • SwiftUI
    • WebImage cross-platform view for loading and presenting image using URLSession and Combine.
    • System view for using different view hierarchies based on platform.
    • Modal view encapsulating button and modal sheet into one view.
    • ActivityIndicator adding UIViewController support to SwiftUI on iOS.
    • View+error view modifier for presentation of alert sheets if optional error is present.

Known issues

  • tvOS app does not work well just yet.
  • Selecting apps in split view on iPad crashes inside SwiftUI.

Contributing

All contributions are welcome.

Project was created by Matěj Kašpar Jirásek.

AppCenterSwiftUI client is available under the GNU GPL v3 license. See the LICENSE file for more info.