250x250
반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

스윞한 개발자

IOS(#UIkit) - WeatherKit 본문

Swift 실습

IOS(#UIkit) - WeatherKit

스윞남 2024. 2. 23. 15:37
728x90
반응형
SMALL

안녕하세요! 

 

오늘 포스팅은 WeatherKit에 대해서 알아보고 현재 위치를 가져와서 현재위치에 대한 날씨 정보를 가져오는 실습을 진행해 보겠습니다!

 

WeatherKit 이란? 

weatherKit은 사용자가 최신 정보를 확인하고 안전하게 미리 대비하는 데 도움이 되는 여러 가지 유요한 기상 데이터를 앱과 서비스에 제공하는 것을 말합니다!

 

Swift API를 사용하여 iOS 16, iPadOS 16, macOS 13, tvOS 16 및 watchOS 9에서 사용할 수 있습니다!

또한 다른 플랫폼에서도 REST API를 사용하여 다양한 서비스에 적용할 수 있습니다.

 

 

Apple Weather은 현재 날씨를 비롯한 기온, 강수량, 바람, UV 지수 등 많은 날씨 정보에 대한 10일간의 시간별 예보를 제공할 수 있습니다. 향후 1시간 동안의 분 단위 강수량과 악천후 경보도 일부 지역에서 사용할 수 있습니다!! 그리고 Alert도 줄 수 있다는 사실!!

 

저는 현재 위치를 가져와 WeatherKIt에 사용하였고, 제공되는 WeatherKit은 CoreLocation API에 빌드되었기 때문에 간단하게 측량 형식을 맞추고, 단위를 변환하고 지역정보를 가져와 WeatherKit을 사용할 수 있습니다.

 

WeatherKit을 사용하기 위해서는 먼저 애플 개발자 계정이 있어야 합니다! 애플 개발자 계정에 들어가서 사용가능한 서비스에 여러 서비스들과 마찬가지로 WeatherKit을 추가하셔야 합니다.

 

 

 

이렇게 추가를 한 후, Xcode에서의 Signing & Capabilities, Capability에 WeatherKit을 추가해줘야 합니다.

 

현재 위치에 맞는 날씨 데이터를 가져오기 위해, 먼저 현재 위치 정보를 가져와야 합니다!

# 위치 데이터(CoreLocation)

Core Location은 iOS 및 macOS 애플리케이션에서 위치 기반 서비스를 사용할 수 있도록 지원하는 프레임워크입니다. 이 프레임워크는 사용자의 현재 위치를 결정하고 지리적인 정보를 제공하는 데 사용됩니다.

 


# 주요 기능

1. 위치 관리:

Core Location은 GPS, Wi-Fi, 셀룰러 네트워크 및 기타 센서를 활용하여 사용자의 현재 위치를 결정합니다. 이를 통해 위치 기반 서비스를 제공하는 애플리케이션은 사용자의 위치를 추적하고 지리적인 기능을 제공할 수 있습니다.

 

2. 지리적 좌표 및 주소 변환:

Core Location은 지리적인 좌표를 표현하고 변환하는 기능을 제공합니다. 이를 통해 지도상의 특정 위치를 식별하고 주소를 표시할 수 있습니다.

 

3. 지역 감지 및 리전 모니터링:

애플리케이션은 Core Location을 사용하여 특정 지리적인 영역에 들어가거나 나오는 것을 감지할 수 있습니다. 이를 통해 지리적인 이벤트를 트리거하고 사용자에게 관련된 정보를 제공할 수 있습니다.

 

4. 나침반 및 방향성:

Core Location은 디바이스의 방향성을 결정하는 데 사용될 수 있는 나침반 데이터를 제공합니다. 이를 활용하여 방향을 표시하거나 관련된 기능을 제공할 수 있습니다.

 

5. 배터리 수명 최적화:

Core Location은 배터리 수명을 고려하여 위치 서비스를 관리합니다. 이를 통해 사용자 경험을 향상하고 배터리 소모를 최소화할 수 있습니다. Core Location은 CLLocationManager 클래스를 통해 제공됩니다. 이 클래스를 사용하여 위치 서비스를 구성하고 위치 업데이트를 요청하며, 이벤트를 처리할 수 있습니다. 또한 Core Location은 CLLocation 및 CLPlacemark 클래스를 통해 위치 정보를 표현하고 처리합니다.

 

728x90

# CoreLocation에서 위치 정보를 가져오기

1. Info.plist에 사용자 위치 정보 허용 요청 추가

 

2. CLLocationManager 클래스 선언

private let locationManager = CLLocationManager()

 

3. Delegate 선언, 사용자에게 위치정보 허용 요청

locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
locationManager.requestLocation()

 

4. 사용자 위치 정보를 가져오기

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let location = locations.first {
            mainViewModel.inputTrigger.onNext(location)
        }else{
            //에러가 났을 경우 다시 요청
            locationManager.requestWhenInUseAuthorization()
            locationManager.requestLocation()
        }
    }
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print("Failed to find user's location: \(error.localizedDescription)")
    }

 

위의 코드에서는 사용자의 위치 정보를 가져오고, 그 후 메인 뷰모델에서의 InputTrigger를 발생시켜 현재 위치 정보를 보내줍니다.

 

#WeatherKit으로 현재 위치 정보에 맞는 날씨 가져오기

static func weatherFetch(location : CLLocation) -> Observable<weatherModel>

 

저는 weatherFetch 함수를 만들어 현재 위치를 받아 제가 사용할 현재 온도, 최고기온, 최저기온, symbol을 사용할 모델 형태로 반환해 줬습니다! 

 

 

let weather = try await WeatherService.shared.weather(for: location)

 

위와 같이 WeatherKit을 이용해 날씨 정보를 가져옵니다.

 

# WeatherKit 사용 기능

WeatherKit은 위에서 언급한 바와 같이 다양한 기능을 가지고 있습니다. 그중에서 몇 가지 나열해 볼게요!

 

1. weather.currentWeather.temperature : 현재 날씨의 온도를 나타냅니다.

2. weather.currentWeather.symbolName : 애플에서 제공하는 systemSymbol 도 날씨에 맞게 제공해 줍니다!

3. weather.dailyForecast.first?.highTemperature : 오늘 날씨의 최고기온입니다.

4. weather.dailyForecast.first?.lowTemperature : 오늘 날씨의 최저기온입니다.

 

여러 기능이 있지만 저는 위의 4가지 정보들을 이용해 날씨를 알려주겠습니다!

 

위의 서비스를 뷰모델에서 트리거를 시켜 output으로 반환받아 뷰컨트롤러에서 textField, imageView 등에 넣어보겠습니다!

 

최종적으로는 

 

간단하게 WeatherKit을 이용해 현재위치의 날씨를 가져오는 실습을 진행해 보았습니다!

 

728x90
반응형
LIST