Orbit-swiftui - Orbit design system implemented in SwiftUI for iOS

Overview

Kiwi.com library swiftui-version swift-version swift-package-manager

Orbit is a SwiftUI component library which provides developers the easiest possible way of building Kiwi.com’s products.

Orbit Mission

Orbit aims to bring order and consistency to all of our products and processes. We elevate user experience and increase the speed and efficiency of how we design and build products.

Orbit is an open-source design system created for specific needs of Kiwi.com and together with that – for needs of travel projects.

This library allows you to integrate the Orbit design system into your iOS SwiftUI project.

Requirements

  • iOS 13
  • Xcode 13
  • Swift Package Manager

Installation

Add Orbit package to your project by adding the package dependency:

.package(name: "Orbit", url: "https://github.com/kiwicom/orbit-swiftui.git", .upToNextMajor(from: "0.8.0")),

Usage

  1. Import fonts that are used in orbit-components.
Font.registerOrbitFonts()
  1. Include any of our components in your project and use them.
HStack {
    Text("Hello Orbit!")
    Button("Continue")
}

You can also check the OrbitStorybookComponentsScreen preview to see all supported components.

File structure and naming conventions

File structure and component names reflect the Orbit design system structure.

As some Orbit components already exist in standard SwiftUI library (Text for example), Orbit components shadows them. In order to access standard component, a SwifUI. prefix can be used.

Components

To use Orbit components in SwiftUI, import the Orbit library and use the components using their matching Orbit name.

import Orbit

...

VStack(spacing: .medium) {
    Heading("Messages", style: .title2)
    Illustration(.mailbox)
    Text("...<strong>...</strong>...<a href="...">here</a>.")
    Button("Continue", style: .secondary)
}

Foundation

Most Foundation types and values are accessed using extensions on related types.

Spacing

Use Spacing enum with CGFloat extensions to access values.

VStack(spacing: .medium) {
    ...
}
.padding(.large)

Colors

Use Color and UIColor extensions to access values.

.foregroundColor(.cloudDarker)

Borders

Use BorderRadius and BorderWidth enums.

Typography

Use Font and UIFont extensions. Orbit components use the Orbit font automatically.

Comments
  • OrbitStorybook target

    OrbitStorybook target

    Previews prefixed with "storybook" that were used in the Storybook view were copied over to the new OrbitStorybook target as new types (akin to StorybookTypography).

    This means that Orbit's previews get to stay internal, but can now go out of sync with what is in the storybook. According to @PavelHolec, this isn't a problem since each serves a different purpose/audience.

    Closes #323.

    documentation automation feature maintenance 
    opened by sjavora 11
  • Add Heading and Icon concatenation support

    Add Heading and Icon concatenation support

    Add the ability to concatenate Icon and Heading of various styles in any order. Inspired by How to insert images into text.

    This addition will allow us to create layouts with text akin to this Screenshot 2022-08-22 at 23 47 17

    opened by bul-nick-al 6
  • ListChoice height should be based on content

    ListChoice height should be based on content

    From slack:

    Height of ListChoice is based on the content. Inner paddings are always the same. Why - to make it easier to develop and understand. We should always stick to the same padding if possible (it wouldn’t make sense to have dynamic padding, it wouldn’t be a systematic approach). You might object - “But different ListChoices can have different sizes then!” - and it’s true but it shouldn’t be a problem as typical list is usually homogenous - all ListChoices are of the same type so they have the same height.

    enhancement 
    opened by sjavora 6
  • Customizing Colors for system

    Customizing Colors for system

    Hello, I'm just wondering if there are any plans to add custom color themes. I'd like to use my "product" color that's different than the one baked in. I'm working with a local copy of the repo and changing a couple of the hues, but I'm wondering if there's a better way to go about this? Maybe I could contribute to this if it's not on the docket. I did see a "Prepare design tokens for native platforms" item on the roadmap on your website.

    enhancement question 
    opened by matthewnaples 5
  • Create TileGroup component

    Create TileGroup component

    This task can refactor the "border" parameter to be more close to the new iOS15+ SwiftUI List/row behaviour.

    The "border" parameter would be replaced by the environment key, mimicking the listRowSeparator.

    SwiftUI.List

    // Modifier
    func listRowSeparator(_ visibility: Visibility, edges: VerticalEdge.Set = .all) -> some View
    // `Visibility` is iOS15+, we could also mimic that, but probably not needed
    

    TileGroup/Tile

    // Modifier (comment mimicking the listRowSeparator)
    
    /// Sets the visibility for the bottom separator associated with this specific `Tile`.
    ///
    /// This modifier expresses a preference to the containing ``TileGroup``.
    ///
    /// The following example shows a simple `TagGroup` whose `Tile` separators
    /// are hidden:
    ///
    ///     TagGroup {
    ///         ForEach(garage.cars) { car in
    ///             Tile(car.model)
    ///                 .tileSeparator(false)
    ///         }
    ///     }
    public func tileSeparator(_ isVisible: Bool) -> some View
    // This will just set the `IsTileSeparatorVisible` environment key
    
    // EnvironmentKey
    public struct IsTileSeparatorVisible: EnvironmentKey {
        public static var defaultValue: Bool = true
    }
    
    // EnvironmentKey
    (internal only) struct IsInsideTileGroup: EnvironmentKey {
        public static var defaultValue: Bool = false
    }
    
    

    TileGroup and Tile definitions would be changed to something like this, to

    • remove the dependency on Card
    • removing the Status as well, as status "borders" would be separated to another, elevation-like, decorator
    public struct TileGroup<Content: View>: View {
    
        @Environment(\.horizontalSizeClass) var horizontalSizeClass
    
        let status: Status?
        let backgroundColor: Color?
        let width: ContainerWidth
        @ViewBuilder let content: Content
    
        public var body: some View {
            if isEmpty == false {
                VStack(alignment: .leading, spacing: 0)
                    content
                      .environmentKey(\.isInsideTileGroup, true)  // Instructs tiles to be in "TileGroup" context
                }
                .clipShape(clipShape)
                .elevation(.level1)
            }
        }
    
        var clipShape: OffsetableShape {
          RoundedRectangle(cornerRadius: BorderRadius.default)
            .inset(by: Separator.Thickness.default) // To "hide" the last separator automatically
        }
    }
    
    public struct Tile<Content: View>: View {
    
      @Environment(\.isInsideTileGroup) var isInsideTileGroup
      @Environment(\.isTileSeparatorVisible) var isTileSeparatorVisible
      ...
      if isInsideTileGroup, isTileSeparatorVisible .. else ....
    }
    

    It would then work this way:

    TileGroup {
      Tile(...)
      Tile(...)
        .tileSeparator(false)  // Each tile can still opt out to hide the separator
      Tile(...)
    }
    
    Tile(...)  // Standalone tile would still draw itself normally, with `isInsideTileGroup` being false by default
    

    If this goes well, we will do the equivalent thing for ListChoice in a follow-up.

    feature 
    opened by PavelHolec 5
  • Add `Collapse` component

    Add `Collapse` component

    Should more things be customizable? Mainly thinking of the title/header and whether the separator should be hideable...

    Resolves #352.

    testCollapse 1

    https://user-images.githubusercontent.com/12349477/208420408-13b07028-09d6-451c-b93b-eed4369fb6c1.mov

    feature 
    opened by sjavora 4
  • Update timeline design

    Update timeline design

    Snímek obrazovky 2022-10-26 v 15 13 29

    Update the Timeline component to the latest design.

    1. Add animation for the current state
    2. Extend TimelineItemStyle to support past, current and future items
    3. Make the progress line dashed for future / inactive steps
    4. Make progress line's color a gradient of colors of the steps it connects
    5. Replace Badge with Heading in TimelineSteps's Header
    6. Remove TimelineStepBadgeText, TimelineStepBottomText, Content and Header from TimelineItem
    7. Rename TimelineStep to TimelineItem

    Animations:

    https://user-images.githubusercontent.com/13184609/198676302-772473e9-7dd4-461f-9ec7-15ef3dc1baf8.mov

    documentation feature maintenance 
    opened by bul-nick-al 4
  • Restrict `NotificationBadge` to always be a circle

    Restrict `NotificationBadge` to always be a circle

    It's no longer possible to have both icon and text - this matches the orbit.kiwi definition.

    Screenshot 2022-06-24 at 11 31 43

    Overflow behavior is also the same - the text is simply shown outside of the circle.

    Screenshot 2022-06-24 at 11 32 00

    Resolves #159.

    feature 
    opened by sjavora 4
  • Add Skeleton component

    Add Skeleton component

    Figma

    https://www.figma.com/file/YMfJkmUMV8xiY7fgeW6QAr/%5BOrbit%5D-Native-Components?node-id=5797%3A3217

    Orbit

    https://orbit.kiwi/components/progress-indicators/skeleton/

    image image image feature 
    opened by PavelHolec 4
  • Add `Heading` and `Icon` concatenation support

    Add `Heading` and `Icon` concatenation support

    Add the ability to concatenate Icon and Heading of various styles in any order. Inspired by How to insert images into text.

    This addition will allow us to create layouts with text akin to this Screenshot 2022-08-22 at 23 47 17

    Clone of !276

    feature 
    opened by bul-nick-al 3
  • Add first Orbit tutorial

    Add first Orbit tutorial

    An "hello world" tutorial. Wording is rough, any copy suggestions welcome 🙏

    How to run:

    • open the package in XCode
    • run Product > Build Documentation

    image

    documentation 
    opened by PavelHolec 3
  • Remove `idealSize` usage from expanding components

    Remove `idealSize` usage from expanding components

    The idealSize modifier is useful for components that should have fixed size by default, but can be optionally made expandable (Tag).

    But for components like Alert or Button, the fixedSize modifier is enough to restrict the size, even for container components like Alert (containing expanding Button) and should be removed.

    maintenance 
    opened by PavelHolec 0
  • Simplify icon related alignments and paddings

    Simplify icon related alignments and paddings

    #317

    Text line height is updated to match designs (independently on specific font). This makes it possible to simplify icon alignment, as now the .top alignment can be used for same-size icon and text.

    The firstBaseline alignment for icons is still supported, but the calculation is not as precise, so it is not used in most components, unless needed (BadgeList).

    image

    Icon alignment is simplified (all vertical guidelines can be used) as the icon size is equal to line height

    image

    Component sizes match design sizing independently on used font

    image image image maintenance 
    opened by PavelHolec 0
  • Support native modifiers on text concatenating component

    Support native modifiers on text concatenating component

    Native modifiers such as baselineOffset should be supported on Orbit Text (and Icon and Heading) components to mimic native Text behaviour (and make Text and related inits more lightweight and allow newer composing modifiers supporting newer iOS versions).

    It can be done as native components probably do it - by reconstructing Self with different parameters, using internal rich initializer. This would allow concatenation of Text-like components even with modifiers.

    Modifiers:

    • baselineOffset
    • bold
    • bold(isActive:)
    • font (ability to override the default font)
    • fontWeight
    • fontWidth (iOS 16)
    • foregroundColor
    • italic(isActive:) (iOS 16)
    • kerning
    • monospacedDigit (iOS 15)
    • strikethrough
    • tracking
    • underline

    Usage:

    Text("Text").baselineOffset(3).underline() + Icon(.grid).bold()
    Text("Text with default color")
    Text("Text with non-default color").foregroundColor(.blueNormal)
    
    enhancement 
    opened by PavelHolec 0
  • Enhance relevant inits with binding parameter

    Enhance relevant inits with binding parameter

    Some components might need to use both initializers:

    • with a simple property
    • with a binding, to inform call-site

    Example is the native DisclosureGroup component that as an additional initializer that takes binding:

    This initializer also let you set or read the expanded state programmatically.

    Components:

    • Tag
    • Collapse
    • Checkbox
    • Radio
    • Switch
    • TBD...
    enhancement 
    opened by PavelHolec 0
  • Replace `none` enumeration cases with optional enumeration type

    Replace `none` enumeration cases with optional enumeration type

    As suggested, the use of none case in enums should be avoided (even though Apple API uses it too at some places)

    https://www.swiftbysundell.com/articles/avoiding-problematic-enum-cases-in-swift/

    maintenance 
    opened by PavelHolec 0
Releases(0.9.3)
  • 0.9.3(Dec 8, 2022)

    Changes in this release:

    🚀 Features

    • Allow specifying horizontal size classes for ignoreScreenLayoutHorizontalPadding @PavelHolec (#357)
    • Update timeline design @bul-nick-al (#346)
    • Update default BarButton Icon size, make it configurable @PavelHolec (#388)
    • Allow ButtonLink style in Card @PavelHolec (#381)
    • Update BarButton and NavigationButton @PavelHolec (#379)

    🐛 Bug Fixes

    • Show ButtonLink Tile disclosure for fully custom content @PavelHolec (#389)
    • Fix the text concatenation runtime warning @bul-nick-al (#367)

    🧰 Maintenance

    • Include more support files @PavelHolec (#378)
    • Add missing illustrations @PavelHolec (#376)
    • Conform AccessibilityID to Equatable and Hashable @sjavora (#371)
    • Design Tokens Icons Update on 2022-12-05 @kiwiprbot (#385)
    Source code(tar.gz)
    Source code(zip)
  • 0.9.2(Nov 2, 2022)

    Changes in this release:

    🚀 Features

    • Support text formatting for Heading @PavelHolec (#351)
    • Make AccessibilityID reusable and extensible by client @PavelHolec (#356)

    🧰 Maintenance

    • Check types are referenced in DocC @sjavora (#347)
    • Separate OrbitStorybook target @sjavora (#345)
    • Cleanup and rename MessageType and related components @PavelHolec (#350)

    📖 Documentation

    • Cleanup and rename MessageType and related components @PavelHolec (#350)
    Source code(tar.gz)
    Source code(zip)
  • 0.9.1(Oct 26, 2022)

    Changes in this release:

    🧰 Maintenance

    • Fix horizontal size of Tag content @PavelHolec (#343)
    • Update breaking change colors @PavelHolec (#342)
    • Design Tokens Icons Update on 2022-10-24 @kiwiprbot (#340)
    • Design Tokens Icons Update on 2022-10-17 @kiwiprbot (#334)
    • chore(deps): update dependency pointfreeco/swift-snapshot-testing to from: "1.10.0" @renovate (#312)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.23(Sep 27, 2022)

    Changes in this release:

    🚀 Features

    • Update Checkbox and Radio font and layout @PavelHolec (#311)
    • Update Dialog padding @PavelHolec (#310)
    • Limit resizing of certain components @PavelHolec (#315)
    • Allow tag to expand horizontally @PavelHolec (#314)

    🐛 Bug Fixes

    • Fix Text color override in Xcode 14 @PavelHolec (#309)

    🧰 Maintenance

    • Design Tokens Icons Update on 2022-09-19 @kiwiprbot (#303)
    • Design Tokens Icons Update on 2022-09-26 @kiwiprbot (#319)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.22(Sep 1, 2022)

    Changes in this release:

    🚀 Features

    • Add basic TextRepresentable support to Text @PavelHolec (#294)
    • Use TextLink-enabled FormFieldLabel in InputField and Select @PavelHolec (#292)
    • Add Heading and Icon concatenation support @bul-nick-al (#278)
    • Support TextLinks in FormField wrapper @PavelHolec (#288)
    • Design Tokens Icons Update on 2022-08-29 @kiwiprbot (#285)

    🐛 Bug Fixes

    • Remove fixed size of EmptyState button @PavelHolec (#273)

    🧰 Maintenance

    • Release fixes @PavelHolec (#296)
    • Make PreviewWrapper internal @sjavora (#281)
    • Add ScreenLayoutPaddingKey @PavelHolec (#272)

    📖 Documentation

    • Fix screenLayout-related documentation @sjavora (#282)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.21(Aug 5, 2022)

    Changes in this release:

    🚀 Features

    • Add compact variant to InputField @PavelHolec (#255)
    • Design Tokens Icons Update on 2022-08-01 @kiwiprbot (#264)
    • Make Dialog content alignment configurable @PavelHolec (#248)
    • Add ViewBuilder to TimelineStep init @Parabak (#234)
    • Allow multiline content in Badge @PavelHolec (#226)

    🐛 Bug Fixes

    • Fix height reader @PavelHolec (#247)
    • Reduce compression resistance for SecureTextFied to fit wrapper @Parabak (#229)

    🧰 Maintenance

    • Remove unused FeatureIcons @PavelHolec (#256)

    📖 Documentation

    • Update README.md @PavelHolec (#253)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.20(Jul 13, 2022)

    Changes in this release:

    🚀 Features

    • Create a screen layout modifier @PavelHolec (#214)
    • Unify text sizing for missing fonts @PavelHolec (#202)
    • CountryFlag: fallback to unknown flag @sjavora (#201)
    • Add elevation levels @sjavora (#188)
    • Use elevation on Tile and ChoiceTile @PavelHolec (#212)
    • Remove clear button from InputField @PavelHolec (#203)
    • Create/update TileGroup @sjavora (#200)
    • Restrict NotificationBadge to always be a circle @sjavora (#194)
    • Fix storybook crashes on component selection @PavelHolec (#192)
    • Add missing BadgeList variants. @PavelHolec (#217)

    🐛 Bug Fixes

    • Unify text sizing for missing fonts @PavelHolec (#202)
    • Fix storybook crashes on component selection @PavelHolec (#192)
    • Provide default ListItem init with specific sizing of dot icon. @PavelHolec (#177)

    🧰 Maintenance

    • Simplify Illustration API @PavelHolec (#211)
    • Remove .product style from Tabs. Update paddings. @PavelHolec (#213)
    • Improve prerendered shadows in elevation @sjavora (#199)
    • Remove some unused images @sjavora (#197)
    • Hide input trailing button in disabled state @Parabak (#179)

    📖 Documentation

    • Add first Orbit tutorial @PavelHolec (#193)
    • Remove "related components" from documentation comments @sjavora (#184)
    • Update documentation structure @sjavora (#182)
    • Streamline README by linking to generated DocC @sjavora (#178)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.19(Jun 15, 2022)

    Changes in this release:

    🚀 Features

    • Support custom formatting in InputField @Parabak (#143)

    🐛 Bug Fixes

    • Remove duplicate accessibility element for text plus textlinks @PavelHolec (#171)

    🧰 Maintenance

    • Refactor custom content evaluation @PavelHolec (#174)
    • Update component accessibility @PavelHolec (#167)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.18(Jun 7, 2022)

    Changes in this release:

    • Remove padding from Separator and support Dynamic Type @PavelHolec (#161)
    • Add custom header content to ListChoice @PavelHolec (#142)
    • PasswordStrengthIndicator @Parabak (#81)
    • Support TextLink in BadgeList @PavelHolec (#141)
    • Design Tokens Update on 2022-05-23 @kiwiprbot (#140)

    🧰 Maintenance

    • Add accessibility identifiers to wrapping component parts @PavelHolec (#154)
    • Unify HairlineSeparator and Separator @sjavora (#156)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.17(May 20, 2022)

    Changes in this release:

    🐛 Bug Fixes

    • Fix accessibility for TextStruct and Tag @PavelHolec (#138)
    • Fix Select and InputField suffix touchability @PavelHolec (#136)
    • Use linkColor from ListItem style @PavelHolec (#137)
    • Remove accessibility from TextStrut. @PavelHolec (#135)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.16(May 19, 2022)

    Changes in this release:

    • Support leading icon in Tag @PavelHolec (#128)
    • Design Tokens Update on 2022-05-13 @kiwiprbot (#123)
    • Icon baseline calculation for dynamic fonts @PavelHolec (#121)
    • Create a unified wrapper for form fields @PavelHolec (#119)
    • Basic text support for dynamic type @PavelHolec (#120)

    🚀 Features

    • Create NotificationBadge component @PavelHolec (#125)
    • Add Skeleton component @PavelHolec (#103)

    🐛 Bug Fixes

    • Components should have minimal height not fixed @PavelHolec (#124)

    🧰 Maintenance

    • Speed up ToastQueue typecheck @sjavora (#133)
    • Components should have minimal height not fixed @PavelHolec (#124)
    • Clean internal CollectionView component. @PavelHolec (#117)
    • Update README.md @PavelHolec (#115)
    • Remove CircularPro font from package @sjavora (#102)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.15(Apr 8, 2022)

    Changes in this release:

    🚀 Features

    • Update dialog component @PavelHolec (#90)
    • Added Tabs component @PavelHolec (#97)
    • Added KeyValue component @PavelHolec (#91)
    • Add support for strikethrough and kerning for Text @PavelHolec (#94)

    🐛 Bug Fixes

    • Fix Tile with empty header @PavelHolec (#95)
    • apply changes to the textfield.text instead of state @Parabak (#85)

    🧰 Maintenance

    • Update HorizontalScroll component @PavelHolec (#92)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.14(Mar 23, 2022)

    Changes in this release:

    • Update Text and Heading sizes @PavelHolec (#61)

    🚀 Features

    • Implement Secured InputField component @Parabak (#46)
    • Simplify Card content padding and spacing @PavelHolec (#66)
    • Update icon sizes @PavelHolec (#62)

    🧰 Maintenance

    • Implement ListItem using Label @PavelHolec (#73)
    • Fixes for upcoming 0.8.14 @PavelHolec (#67)
    • Simplify Card content padding and spacing @PavelHolec (#66)
    • Update icon sizes @PavelHolec (#62)
    • Rename Heading to Label and unify spacing @PavelHolec (#59)
    • Replace ListChoiceGroup with Card @PavelHolec (#60)
    • Update ChoiceTile states @PavelHolec (#58)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.13(Mar 14, 2022)

  • 0.8.12(Mar 14, 2022)

    Changes in this release:

    🚀 Features

    • Update ListChoice @sjavora (#54)
    • Toast component @PavelHolec (#45)
    • CarrierLogo component @sjavora (#44)

    🐛 Bug Fixes

    • Fix ListItem @PavelHolec (#43)

    🧰 Maintenance

    • Added bundle colors for use in UIKit. @PavelHolec (#47)
    • BarButton unofficial component @sjavora (#49)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.11(Feb 24, 2022)

    Changes in this release:

    🚀 Features

    • Update Illustration layout options. @PavelHolec (#42)
    • Update color and position of ListChoice disclosure to match Tile disc… @PavelHolec (#37)

    🐛 Bug Fixes

    • Add width option to adjust horizontal sizing for wrapper components. @PavelHolec (#35)

    🧰 Maintenance

    • Replace Illustration sizing with single enum option. @PavelHolec (#36)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.10(Feb 15, 2022)

    Changes in this release:

    🐛 Bug Fixes

    • Fix custom content spacing for Alert. @PavelHolec (#31)
    • Fix iOS13 button tap area. @PavelHolec (#30)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.9(Feb 23, 2022)

    Changes in this release:

    • Design Tokens Update on 2022-02-11 @kiwiprbot (#26)

    🚀 Features

    • Allow custom content in Alert. @PavelHolec (#28)
    • Fix choicetile status @PavelHolec (#27)
    • Added EmptyState component. @PavelHolec (#25)
    • Fix formatted text font sizing. @PavelHolec (#24)

    🐛 Bug Fixes

    • Fix choicetile status @PavelHolec (#27)
    • Fix formatted text font sizing. @PavelHolec (#24)
    Source code(tar.gz)
    Source code(zip)
Owner
Kiwi.com
Kiwi.com
WeChat-like Moments App implemented using Swift 5.5 and SwiftUI

Moments SwiftUI This is a re-implementation of Moments App using Swift 5.5 and SwiftUI. Features: Aysnc/Await Actor AysncImage MVVM BFF Screenshot Als

Jake Lin 46 Jan 5, 2023
Diagrams of Combine Publishers implemented with SwiftUI

CombineMarbles for iOS Diagrams of Combine Publishers implemented with SwiftUI Combine is a new library for composing asynchronous events over time (R

Antoine Garcia 53 Dec 11, 2021
This is a mastodon sample SwiftUI app implemented with the architecture of state management with normalized cache.

MastodonNormalizedCacheSample This is a mastodon sample SwiftUI app. This app is implemented with the architecture of state management with Normalized

null 5 Nov 27, 2022
Implemented MVVM-C (Coordinator) architecture pattern for the project. Which is satisfying SOLID principles altogether. Protocol oriented development has been followed.

BreakingBad BreakingBad API doc Implemented MVVM-C (Coordinator) architecture pattern for the project. Which is satisfying SOLID principples altogethe

Dhruvik Rao 2 Mar 10, 2022
The Discord API implementation behind Swiftcord, implemented completely from scratch in Swift

DiscordKit The Discord API implementation that powers Swiftcord This implementation has fully functional REST and Gateway support, but is mainly geare

Swiftcord 71 Dec 20, 2022
Lentit iOS app developed in Swift with SwiftUI using MVVM design pattern

Lentit Track things you lend with Lentit Features 100% Swift 100% SwiftUI MVVM d

W1W1-M 2 Jun 26, 2022
Aplikasi iOS Advanced Level To Do List dengan Firebase Auth, SwiftUI, MVVM Design Pattern, dan Firebase Firestore

Aplikasi Tasker adalah aplikasi iOS To Do List yang dibuat menggunakan Autentikasi Firebase / Firestore dan MVVM Design Pattern.

DK 10 Oct 17, 2022
Aplikasi iOS Statistik Internasional Penyebaran Covid-19 dengan SwiftUI, MVVM Design Pattern, dan REST APIs dari rapidapi.com

CovStats CovStats adalah aplikasi iOS Data Statistik Internasional Covid-19 yang datanya didapatkan dari rapidapi.com dengan struktur REST API. Dibuat

DK 7 Aug 1, 2022
A SwiftUI system components and interactions demo app

SwiftUI Kit A SwiftUI system components and interactions demo app based on iOS 14, macOS Big Sur, watchOS 7, and tvOS 14. Use the SwiftUI Kit app to s

Jordan Singer 2k Jan 6, 2023
A SwiftUI wrapper around the `Add to Siri` button used to donate INIntents to the system.

AddToSiri A SwiftUI wrapper around the Add to Siri button used to donate INIntents to the system. Originally created by Reddit user u/dippnerd (Github

Florian Schweizer 5 Nov 23, 2022
A SwiftUI App that displays information about the planets in our solar system.

MySpaceApp Created by Noman Ahmad Current Version : 1.0 Description: MySpaceApp is a simple ios app designed for space enthusiasts. With this app, you

Noman Ahmad 1 Nov 2, 2021
Joseph Heck 21 Dec 14, 2022
📱 An app fully written in SwiftUI showcasing beautiful design and animations.

DesignCode DesignCode is an app fully built using Apple's latest SwiftUI and Combine framework. Beautifully written code that is well intended for eas

Mithun 704 Jan 3, 2023
A lightweight and efficient bus tracker app for the Miami-Dade Transit System

A lightweight bus tracker app for the Miami-Dade Transit System Built in Swift, this app features a favorites page, real-time bus location and ETA, us

Jacob Schuster 1 Dec 10, 2021
A macOS app to simulate the system update

Goaf-Happy-Fishing A macOS app to simulate the system update. Turn on the app, t

Logeast 1 Dec 23, 2021
COVID Safe Paths (based on Private Kit) is an open and privacy preserving system to use personal information to battle COVID

COVID Safe Paths is a mobile app for digital contract tracing (DCT) sponsored by Path Check a nonprofit and developed by a growing global community of engineers, designers, and contributors. Safe Paths is based on research originally conducted at the MIT Media Lab.

PathCheck Foundation 470 Nov 6, 2022
The concept took third place in the Design Concept Award contest Season 1 in 2021.

SpringAnimation Developed by Yurii Sameliuk as part of the You are launched "Design Concept Award" contest Season #1. SpringAnimation demo. Inspired b

You are launched 5 Jul 10, 2022
The concept took second place in the Design Concept Award contest Season 1 in 2021.

SmileRate Developed by Alex Kryvodub as part of the You are launched "Design Concept Award" contest Season #1. SmileRate demo. Inspired by Duy Luong c

You are launched 1 Jan 12, 2022
🎲 100% SwiftUI 2.0, classic 2048 game [SwiftUI 2.0, iOS 14.0+, iPadOS 14.0+, macOS 11.0+, Swift 5.3].

swiftui-2048 If you like the project, please give it a star ⭐ It will show the creator your appreciation and help others to discover the repo. ✍️ Abou

Astemir Eleev 174 Dec 17, 2022