๋ด๊ฐ ํ์ํด์ ๋ง๋ค์ด๋ณด๋ ์ ํ์์น ์ฑ (2)
์๋ 10์์ ๊ฐ๋จํ๊ฒ UI ๊ทธ๋ฆฌ๋ ๊ฒ์ผ๋ก ์์ํ๊ณ ์ค๋๋ง์ ์๊ฐ์ด ์ ๊น ์ฌ์ ๊ฐ ๋ผ์ ์์ ์ ํ๊ฒ ๋์๋ค.
์ค๋๋ง์ ์ฝ๋๋ฅผ ๋ณด๋ ๋ถ๋ถ๋ง ๊ธฐ์ต์ด ๋์ ๋ค์ ํ๋ฒ ๋ด๊ฐ ๋ง๋ค์๋ ์ฝ๋๋ฅผ ์ ๊ฒํ๊ณ ๊ณฐ๊ณฐ์ด ์๊ฐํด ๋ณด์๋๋ฐ..
์.. ์ข ๊ฐ์์์๋ค ํฐ ํ์ ๋น์ทํ์ง๋ง ๋ด๊ฐ ๊ณ ์น ์ ์๋ ๋ถ๋ถ ๊ณ ์น๊ณ ์ ๋ฐ์ ์ผ๋ก ๋ค์ ์๋ดค๋ ๊ฑฐ ๊ฐ๋ค.๐๐
๋ง์ง๋ง ์์ ์ UI๋ฅผ ๊ตฌ์ฑํ๊ณ ๋ ์จ API์ธ Weather API๋ฅผ ์์ ์ค์ด์๋๋ฐ ์ฝ๋ ํ์ผ์ ๋ณด๋ ์ค๊ฐ์ ๋ทฐ์ ๋ฟ๋ ค์ง๊ธฐ ์ ์ ์ ์ ๋ฉ์ท๋ ๊ฑฐ ๊ฐ๋ค. ์ด์ ๋ ๋ด๊ฐ ์ ํ ๊ฐ๋ฐ์ ๊ณ์ ์ด ์๊ฒจ ์๊ฐํด ๋ณด๋ ์ ํ์ด ์ ๊ณตํ๋ WeatherKit์ ์ฌ์ฉํ ์ ์์ด?!
์ ํ์ด ์ ๊ณตํ๋ Kit ํ๋ฒ ์จ๋ณด์ ๋ง์์ ๋จน์๋ค. WeatherKit ๊ด๋ จ๋ WWDC๋ฅผ ๋ณด๋ฉด์ ๋๋ต ์ด๋ค ๊ธฐ๋ฅ์ธ์ง ํ์ธํ์๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ๋ก ์ ๊ณตํด ์ฃผ๋ ์ฝ๋๋ฅผ ๋ณด๋ ์ค! ์ด๊ฑฐ ๊ฟ์ด๋ค. ์ด์ฉํ๊ธฐ ๋๋ฌด ๊ฐ๋จํ๋ค๊ณ ๋๊ผ๋ค.
๊ธฐ๋ณธ ์ฝ๋๋ก ์ ๊ณตํด ์ฃผ๋ ๋ ์ฝ๋๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์๋ค.
์ฒซ ๋ฒ์งธ๋ import WeatherKit๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ์ด์ฉํด ๋ณด๋ ์ฝ๋
import WeatherKit
import CoreLocation
let weatherService = WeatherService()
let syracuse = CLLocation(latitude: 43, longitude: -76)
let weather = try! await weatherService.weather(for: syracuse)
let temperature = weather.currentWeather.temperature
let uvIndex = weather.currentWeather.uvIndex
๋ ๋ฒ์งธ๋ REST API๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด์๋ค
/* Request a token */
const tokenResponse = await fetch('https://example.com/token');
const token = await tokenResponse.text();
/* Get my weather object */
const url = "https://weatherkit.apple.com/1/weather/en-US/41.029/-74.642?dataSets=weatherAlerts&country=US"
const weatherResponse = await fetch(url, {
headers: {
"Authorization": token
}
});
const weather = await weatherResponse.json();
/* Check for active weather alerts */
const alerts = weather.weatherAlerts;
const detailsUrl = weather.weatherAlerts.detailsUrl;
๋๋ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ํ๊ธฐ ์ํด ๊ตฌํ ๊ฐ๋ฅ์ฑ์ด ๋๋์ง ํ๋ ์ด๊ทธ๋ผ์ด๋์์ ์คํํด ๋ณด์๊ณ ์ค์ ๋ก ๊ธ๋ฐฉ ๊ฐ์ด ๋์ค๊ณ ์ข ๋ ์ฝ๋๋ฅผ ๊ตฌํ ์ ํด๋ ์ฝ๊ฒ ๊ฐ์ด ๋์ ์ด๊ฑธ ์ ์จ?? ๋ฌด์กฐ๊ฑด ์ด๊ฑฐ ์จ์ผ์ง ๋ง์์ ๋จน์๋ค. ๊ทธ๋์ ์ข ๋ ์ ๋ณด๋ฅผ ์ฐพ๊ธฐ ์ํด ๊ฒ์ํ ๊ฒฐ๊ณผ ์ด์ฉํ ์ ์๋ ๋ฐฉ๋ฒ๊ณผ ํฌ๋ผ์ ์ฐพ์๋ค.
WeatherKit ํฌ๋ผ
WeatherKit ํ๋ ์์ํฌ ๋ฌธ์
์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ฉด์ ๊ธฐ๋ณธ์ ๋ง๋ ํ๋ก์ ํธ์ ์ ์ฉํ๋ ค๊ณ ํ๋ค. ์ฌ๊ธฐ์์ ํํผ์ง์ ๋ง์ด ํ๋คใ ใ
๋ถ๋ช ๋ฐฉ๋ฒ๋๋ก ํ๋๋ฐ ํ๋ก์ ํธ App Capabilities์ WeatherKit์ด ๋จ์ง ์์… ๋นํฉ์ ํ์๊ณ ์ด๊ฒ์ ๊ฒ ์ฐพ์๋ณด๋ฉด์ ๋ฐฉ๋ฒ์ ์ฐพ์๋ด๋ ค๊ณ ํด ๋ณด๋ ค๊ณ ํ๋ค. ํฌ๋ผ์๋ ๋์ ๊ฐ์ ํ์์ ๊ฐ์ง๊ณ ์๋ ๊ฐ๋ฐ์๊ฐ ์๋์ง ์ฐพ์๋ณด๊ธฐ๋ ํ๋ค. ์๋นํ ๋ง์ ์๊ฐ์ ์จ์ ์ด์ฉ ์ ์์ด ๊ทธ๋ผ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก ํํด์ผ ํ๋ค. ๋ธ๋ก๊ทธ ๋ด์ฉ์ ๋ณด๋ฉด์ ํ ํฐ ์ด์ผ๊ธฐ.. node?? ์ด์ผ๊ธฐ๊ฐ ๋์จ ๊ฒ์ ๋ณด๊ณ ์….. ๋๋ง๊ฐ๊น?ใ ใ ใ ์๊ฐ์ ํ์๋ค. ๊ทธ๋์ ๋ฌด์กฐ๊ฑด ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ฑ๊ณต์ํค๊ธฐ ์ํด ๋ ์ฐพ์ ํค๋งธ๋ค.
iOS ์ฑ ํ๋ก์ ํธ๋ก ๋ง๋ค๋ฉด App Capabilities์ WeatherKit์ด ๋์ค๊ณ WatchOS๋ก ํ๋ก์ ํธ ๋ง๋ค์ด์ App Capabilities๋ฅผ ํ์ธํ๋ฉด ์ ๋จ๋ ๊ฒ ์๋ฌธ์ด์๋ค. ์๊ฐ ๋ ์๊ฐ์ด ์์ดํฐ๊ณผ ๋ค๋ฅด๊ฒ ์ ํ์์น์ฌ์ ์ด๋ฐ ํ๋ ์์ํฌ๋ฅผ ๋ด์ฅ ์ ์ํค๋ ๊ฑด๊ฐ? ์๋ฌธ๋ ๋ค๊ณ ๊ทธ๋ผ ์ ํ์์น์ ์๋ ๋ ์จ ์ ๋ณด๋ค์ ๋ด ํด๋ํฐ์์ ๋๊ฒจ์ฃผ๋ ๊ฑด๊ฐ? ์๊ฐ๋ ๋ค์๋ ์ ์ด ์๋ค. ์ง์ง ์ค๋ง ๊ทธ๋ฌ๊ฒ ์ด๋ผ๋ ์๊ฐ์ผ๋ก ์ถ๊ฐํ๋ ํ๋ฉด์ผ๋ก ๋์ด๊ฐ์ ์์ธํ ์ดํด๋ดค๋ค.
๊ทธ๋ ์ด๊ฑฐ์ง ์ ๊ณต์ ์ ํ ๋ฆฌ๊ฐ ์์ง!
์ด๊ฒ์ ๋น๊ทผ ์ผ์ ๊ฐ๋ฅ์ฑ ์๋ค! ๋ด๊ฐ ํด๋ต์ ๋ชป ์ฐพ์ ๊ฑฐ๋ผ๋ ์๊ฐ์ผ๋ก ํ๋์ฉ ์ดํด๋ณด๊ธฐ ์์ํ๊ณ ๊ด๋ จ๋ ๊ฒ์ ๋ชจ๋ ์ฒดํฌํ๊ณ ๋์ด๊ฐ๊ณ ์ด ์ฌ์ดํธ์์ ๋ง๋ค์ด์ผ ํ๋ ๊ฒ๋ค์ ์ ๋ถ ๋ง๋ค๊ณ ๊ธฐ๋ณธ ๊ณ์ ์ธํ ๊ฐ์ ๊ฒ์ ํ๋ ๊ฑฐ ๊ฐ๋ค?!
๊ฐ์๊ธฐ ๋จธ๋ฆฟ์์ ๋ ์ค๋ ๊ฒ์ ์ด๋ ๊ฒ ๊ตฌ์ฑํ๊ณ ๋ฐ๋ก ์ ์ฉ๋๋ ๊ฒ์ด ์๋ ์ด๋ ์ ๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค๋ ๋ฌธ๊ตฌ๊ฐ ์๊ฐ์ด ๋ ์ ๋ฐ ๋ผ๋ผ ๊ธฐ๋ํ๋ฉด์ ๊ธฐ๋ค๋ ธ๋คใ ใ ์ด๋ ์๊ฐ App Capabilities์ WeatherKit์ด ๋จ๋ฉด์ ๋๋์ด ์์ ์ ํ ์ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค!!
์ด์ฌํ WeatherKit ํ๋ ์์ํฌ ๋ฌธ์๋ฅผ ๋ณด๋ฉด์ ๋ด๊ฐ ํ์ํ ๊ธฐ๋ฅ๋ค์ ๋ฝ์์ ์ฌ์ฉํ์๋ค.
์์ ํ๋ฉด์ ๋๋ ์ ์ ์๋ฌด๋๋ ์ ํ์ด ์ ๊ณตํ๋ ํ๋ ์์ํฌ๋ค ๋ณด๋ ๊ผผ๊ผผํ๊ฒ ํ์ ์ ํ์ด ์ ์ธ๋์ด ์์๊ณ ๋๋ ๊ทธ๊ฒ์ ์ ์ ํ ๋ทฐ์์ ๋ณด์ผ ์ ์๋๋ก ๊ฐ์ ๋ฝ์๋ด๊ณ ์์ด๋ก ์ ์ธ๋์ด ์๋ ๊ฒ๋ค์ switch ๋ฌธ๋ค ํตํด ํ๊ธ๋ก ๋ฐ๊พธ๋ ์์ ์ ํด๋ณผ ์ ์์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ์จ ๋ฐ์ดํฐ๋ค ๋ณด๋ ์ฌ๋ฌ ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ฌ ๋ฐ์ดํฐ๋ค์ ๋ง๋ค์ด ๋ ๊ฒ ๊ฐ๋ค.
๋ ์จ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์์ ์ ๋๋ฌ์ง๋ง ์ด ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์๋ฅผ ํ๋ ค๋ฉด ์ถ๊ฐ์ ์ผ๋ก ๋ช ์ํด์ผ ํ ๋ฐ์ดํฐ๋ค์ด ์์ด ๊ทธ ๋ถ๋ถ์ ์ถ๊ฐ์ ์ผ๋ก ์์ ํ๊ณ ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํด ๋ณผ ์๊ฐ์ด๋ค.
์ค๋๋ง์ ํ๋ก์ ํธ๋ฅผ ์ด์ด๋ณด๊ณ ์ฝ๋๋ฅผ ๋ณด๋ ์ด์ง ์ด์ํ ๊ฐ์ด ์์์ง๋ง ์ด์ ๋ ์๊ฐ์ด ์ฌ์ ๊ฐ ์์ ๋ ์กฐ๊ธ์ฉ ํด๋ด์ผ๊ฒ ๋ค. ๊ทธ๋์ผ SwiftUI ๊ฐ์ ์์ง ์์ ์ ์๋ค๊ณ ์๊ฐํ๋คใ ใ !!
์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ ๋ด์ฉ์ ๋๋ค!!
https://ios-daniel-yang.tistory.com/20
https://sujinnaljin.medium.com/ios-weatherkit-rest-api-%EC%9D%B8%EC%A6%9D-%EC%9A%94%EC%B2%AD-b3fad82d1c71
https://blog.makwanbk.com/weatherkit-build-a-simple-ios-weather-app