Новый бесплатный API от Apple позволяет бесплатно совершать 500 000 вызовов API в месяц.

Большая часть сложности запуска и запуска WeatherKit заключается в обеспечении необходимых возможностей. Перейдите к создать идентификатор приложения на веб-сайте Apple для разработчиков.

Вам нужно будет включить WeatherKit на ОБЕИХ вкладках, называемых «Возможности» и «Службы приложений». Ваш идентификатор пакета должен быть явным, и вам нужно будет подождать не менее 30 минут после создания идентификатора приложения, прежде чем пытаться использовать WeatherKit.

Теперь создайте новый проект приложения в бета-версии Xcode 14, обязательно добавив возможность WeatherKit на вкладке Подписание и возможности вашего файла проекта, как показано ниже.

Надеюсь, вы создали свой идентификатор приложения с нужными возможностями и службами приложений и подождали полчаса, затем вы создали проект приложения с тем же идентификатором пакета, что и ваш идентификатор приложения, и, наконец, вы добавили эту возможность в свой файл проекта.

Теперь мы можем перейти к самой интересной части — созданию интерфейса SwiftUI, отображающего данные о погоде.

Для простоты я делаю приложение, которое отображает только температуру в Купертино в текущее время:

Широта и долгота Куптертино были рассчитаны с помощью latlong.net и сохранены как статический объект CLLocation. Для того, чтобы температура на экране была большой, был выбран огромный размер шрифта с минимальным коэффициентом масштабирования. Вот как мы получаем доступ к функции автоматического сжатия, известной в UIKit. Ограничение строки используется для того, чтобы единицы измерения не переносились на вторую строку, что произойдет, если строка станет слишком длинной.

Когда объект weather равен нулю, появляется счетчик в форме ProgressView, а модификатор .task используется для получения погоды при первом появлении счетчика. И этот ProgressView, и Text, которые отображают температуру, находятся внутри группы, поэтому они оба могут иметь одинаковый навигационный заголовок. Это отображается в верхней части экрана, сообщая нам местоположение отображаемой температуры.

WeatherService имеет синглтон shared, и именно так мы получаем доступ к WeatherKit API. Нет необходимости добавлять какую-либо аутентификацию, так как это делается с помощью возможностей идентификатора приложения. Передача WeatherService местоположения дает нам объект с кучей полезных данных, но сейчас нас интересует только текущая погода.

Текущая погода заканчивается структурой типа этот JSON.

Если вы не подождали полчаса после создания своего идентификатора приложения, вы можете получить fatalError, в котором говорится, что вы получили недопустимый ответ JWT с кодом ошибки 401. Если вы все еще получаете эту ошибку через полчаса ожидания, возможно, ваш идентификатор приложения был настроен неправильно (или серверы Apple просто медленные).

Я также столкнулся с ошибками, которые жаловались на отсутствие частей объекта погоды.

Возможно, вы сможете предотвратить сбой приложения, изменив fatalError на печать ошибки, поскольку они не обязательно являются фатальными ошибками.

Это все на данный момент!