This is an app to fetch and show data from OpenWeather

App Demo

? Features

UIKit mixed with SwiftUI
MVVM pattern
TDD development

? Overlays

Based on MVVM pattern
    * Views
        RootViewController
            Used UIKit, UISearchBar, UIButton
            // this view split two parts
            // (1)   up part based on UIKit and will show search bar
            // (2)   bottom part based on SwiftUI
            // (2.1) show time bar
            // (2.2) show weather information
           // (2.3) show location or map information
        MainInfoView
            Used SwiftUI             
    * ViewModel
        load data and combine with views
	In loadData function, It will followed this sequence to fetch data
	(1) searched city Name.If it is not nil, it will saved into userDefault.
	(2) userDefault value
	(3) user's location
	(4) default cityName (Landon)
    * Model
        defined data structure
    * Service
        Network:
            URLs
                save the real URLs and return available URLs
            NetworkManager
                send data by async/wait and closure method
        LocationService:
            Support Location Manager
        MockService
            supply mock data for test and developing
    * Global
        Global
            defined some global properties, like appId
        Utils
            defined global function, like data convert, string operation. Logger. 

TDD: 
    WeatherIcon_JLTests
	test_networkManager_FetchByName()
	test_networkManager_FetchByPosition()
	test_networkManager_FetchIcon()
	test_locationService()
    WeatherIcon_JLUITests
	MainInfoView_Previews
	testExample()
		(1) auto start app, input "tokyo"
		(2) delete "tokyo"
		(3) input "atlanta"

WeatherIcon_JLUITests Demo

? Appearance / Behavior Customization

? Adapt visibility of:

? Custom controls

? Supported Platforms

? iOS 13+
? macOS 10.15+
? tvOS 13+
⌚️ watchOS 6+

? Annotations: The old-fashioned approach

GitHub

View Github