Создайте iOS-приложение, отображающее список блюд

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

Графическое представление серии показано ниже:

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

В ноябре 2021 года я начал новую серию, чтобы продемонстрировать Salesforce Mobile SDK, который использует возможности платформы Salesforce в автономных мобильных приложениях.

Графическое представление этой новой серии показано ниже:

Изучение мобильного SDK Salesforce с помощью React Native — первая статья в этой серии Mobile SDK. Затем я переключился на статью Изучение мобильного SDK Salesforce с помощью Android Studio для использования Android Studio. В этой статье я сосредоточусь на использовании Xcode для создания того же приложения.

Преимущества Salesforce Mobile SDK

Salesforce Mobile SDK предоставляет ряд преимуществ для разработчиков программного обеспечения:

  • Позволяет пользовательским приложениям для мобильных устройств использовать функции и возможности Salesforce.
  • Полный доступ к функциям Salesforce (не нужно изобретать велосипед)
  • Приложения можно распространять с помощью магазина приложений нативного устройства.
  • Обработка push-уведомлений от Salesforce
  • Возможность работы с данными Salesforce в автономном режиме

Если среда вашего приложения использует Salesforce для ключевых аспектов функционирования бизнеса, рассмотрите возможность использования Salesforce Mobile SDK. Таким образом, вы можете интегрировать данные, хранящиеся в Salesforce, в расположения ключевых компонентов, что позволит вам принимать важные бизнес-решения.

Преимущества использования Xcode

Если вашей клиентской базе требуется поддержка устройств iOS и вы хотите использовать Xcode для разработки приложений, вам будет полезен интерфейс командной строки forceios для быстрого начала работы с функциями Salesforce.

Основные функции для команд, использующих Xcode, включают:

  • Позволяет использовать Swift или Objective-C в качестве базового языка программирования.
  • Обеспечивает 100% встроенную поддержку функций и функций на устройствах iOS.
  • Позволяет опытным разработчикам iOS быстро использовать функциональные возможности Salesforce Mobile SDK.
  • Улучшения в обработке ошибок, потому что и Swift, и Objective-C поддерживают строгую структуру типизации и обработки ошибок.
  • Легче выявлять и устранять проблемы со сборкой

Это может быть очевидно, но для использования Xcode у вас должен быть компьютер Apple. Для этой статьи я буду использовать свой 16-дюймовый MacBook Pro марта 2020 года.

Теперь, когда мы готовы погрузиться, давайте кратко рассмотрим наш вариант использования.

Finny’s Foods: пример использования

Рождение сына (Финни) с особыми потребностями привело к личному желанию понять и оценить продукты, которые мы используем в нашей повседневной жизни. За несколько лет до рождения Финни мы с женой (Николь) вели здоровый образ жизни. Однако когда Николь начала углубляться в изучение ингредиентов продуктов, составляющих наш ежедневный рацион, мы получили столь необходимый тревожный сигнал.

Перенесемся в сегодняшний день: наша диета состоит из небольшого количества обработанных продуктов, без глютена, с низким содержанием сахара и очень небольшим количеством молочных продуктов. Насколько это возможно, наш белок поступает из источников травяного откорма, и мы всегда отдаем предпочтение органическим вариантам. Не заводи меня на ГМО.

Для этой серии наше приложение Finny’s Foods предоставляет простой список блюд, которые приемлемы для нас и нравятся Финни. Сейчас мы включим два простых атрибута для каждого приема пищи:

  • Название блюда
  • Рейтинг (от 1 до 5, где рейтинг 5 — абсолютный фаворит для Финни)

Со временем я планирую ввести другие атрибуты (такие как резюме, ингредиенты, направления и даже фото), но давайте пройдемся, прежде чем бежать.

Начало работы с Xcode

В дополнение к установке gitи npm на свой MacBook Pro я убедился, что моя версия Xcode обновлена. Затем я посетил следующий URL-адрес, чтобы убедиться, что все установлено и настроено должным образом:

Настройте среду разработки iOS

Эти шаги включают установку Xcode, CocoaPods, node.js, npm и forceios CLI.

Затем я выполнил forceios из сеанса терминала со следующими параметрами:

forceios create
Enter your application type (native_swift or native, leave empty for native_swift): native_swift
Enter your application name: FinnysFoodsIOS
Enter your package name: com.gitlab.johnjvester.finnysfoods.ios
Enter your organization name (Acme, Inc.): JVC
Enter output directory for your app (leave empty for the current directory):
Once completed, I followed the steps provided by the forceios CLI:
******************************************************************************
*
*   Next steps:
*
*   Your application project is ready in FinnysFoodsIOS.
*   To use your new application in XCode, do the following:
*      - open FinnysFoodsIOS/FinnysFoodsIOS.xcworkspace in XCode
*      - build and run
*   Before you ship, make sure to plug your OAuth Client ID and Callback URI,
*   and OAuth Scopes into FinnysFoodsIOS/FinnysFoodsIOS/bootconfig.plist
*
******************************************************************************

Создание объекта Meal в Salesforce

Прежде чем я смог приступить к созданию нового приложения в Xcode, мне нужно было установить объект Meal в Salesforce.

У меня уже была организация разработчиков, которую я мог использовать. (Вы можете создать новую здесь.) Итак, я просто вошел в систему, используя свой адрес электронной почты и пароль для этой организации. Затем я перешел к приложениям | Диспетчер приложений и проекция Настройка в Salesforce.

Я создал новое приложение Lightning под названием Meal:

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

Затем я посетил Объекты и поля | Параметр меню «Диспетчер объектов» в настройках Salesforce. Как только я нашел только что созданный элемент питания, я использовал раскрывающийся компонент для редактирования объекта.

Я переключился с подменю «Сведения» на параметр «Поля и отношения». Я быстро понял, что мне не нужно создавать свойство Name для объекта Meal, поскольку Salesforce уже позаботилась об этом за меня. Мне просто нужно было добавить поле Рейтинг.

С помощью кнопки «Создать» я выбрал тип числового поля и заполнил второй шаг, как указано ниже:

Я использовал значения по умолчанию и сохранил свое новое поле. Теперь я могу использовать поля имени и рейтинга в своем приложении для iOS.

Используя клиент Salesforce, я заполнил некоторые исходные данные для разработки приложения в Xcode. Ниже приводится сводка представленных значений:

Судя по выборочным данным, Финни всегда предпочитает «Пиццу», а не «Курицу с рисом».

Добавление функциональности еды в Xcode

С настроенным исходным объектом и данными я использовал свое приложение Xcode, чтобы впервые открыть проект finnys-foods-ios.

По умолчанию интерфейс командной строки forceios создает работающее приложение, в котором при первом запуске отображается информация об учетной записи и контактной информации для организации Salesforce, связанная с учетной записью пользователя. Чтобы упростить задачу, я решил удалить из проекта следующие файлы:

  • AccountsListModel.swift
  • AccountsListView.swift
  • ContactDetailModel.swift
  • ContactDetailsView.swift
  • ContactsForAccountListView.swift
  • ContactsForAccountModel.swift

Поскольку я планирую рассказать об автономной работе в одной из будущих статей, я обновил данные конфигурации в userstore.json до:

{
  "soups": [
  ]
}

Файл usersyncs.json также был очищен, как показано ниже:

{
  "syncs": [ ]
}

Затем я создал базовое представление списка для объекта Meal__c в Salesforce под названием MealsListView.swift.

Чтобы использовать представление списка блюд при запуске приложения, я обновил метод setupRootViewController() в файле SceneDelegate.swift, как показано ниже:

func setupRootViewController() {
       // Setup store based on config userstore.json
       MobileSyncSDKManager.shared.setupUserStoreFromDefaultConfig()
       // Setup syncs based on config usersyncs.json
       MobileSyncSDKManager.shared.setupUserSyncsFromDefaultConfig()
    
       self.window?.rootViewController = UIHostingController(
           rootView: MealsListView()
       )
   }

На данный момент у нас есть функциональное приложение для iOS, которое будет просто отображать «Finny’s Foods (iOS)» жирным шрифтом.

Использование Font Awesome в Xcode

Прежде чем приступить к созданию остальной части приложения, я хотел посмотреть, насколько просто будет добавить значки Font Awesome в приложение Swift, созданное в Xcode. Как вы помните, эта задача была очень простой с React Native и не такой простой в студии Android.

Я смог использовать шаги, указанные по следующему URL-адресу, чтобы все заработало примерно за 15 минут. Я полностью ожидаю, что те, у кого есть опыт работы с Xcode, выполнят эти шаги за долю времени:

Easy Font Awesome в SwiftUI

В результате этих шагов следующие вспомогательные файлы теперь являются частью моего проекта:

  • fa-brands-400.ttf
  • fa-regular-400.ttf
  • fa-solid-900.ttf
  • icons.json

Создание модели списка приемов пищи

Приложение Xcode должно понимать объект Meal__c, который управляет приложением Finny’s Foods. Я создал файл MealsListModel.swift, который содержал следующую информацию:

В этом файле представлен объект Meal, который содержит метаданные для каждого объекта Meal__c, хранящегося в Salesforce. Существует также объект MealResponse, представляющий полезные данные, предоставляемые Salesforce при запросе данных Meal__c.

После определения этих двух ключевых структур метод fetchMeals() выполняет вызов RESTful API для Salesforce, а затем сопоставляет любые данные ответа со списком объектов Meal. Созданный ранее файл MealsListView.swift затем обрабатывает эти данные.

Обновление представления списка приемов пищи

Когда модель списка блюд готова, представление списка блюд теперь можно расширить для интеграции с Salesforce и представления данных на устройстве iOS. Первое, что мне нужно было сделать, это установить переменную для модели списка приемов пищи в файле MealsListView.swift:

struct MealsListView: View {
  @ObservedObject var viewModel = MealsListModel()

Затем я обновил переменную body в файле MealsListView.swift, как показано ниже:

На этом этапе приложение iOS показывает название каждого приема пищи в новой строке. Вызов метода fetchMeals() извлекает данные из Salesforce, обрабатывая каждый элемент Meal__c как элемент данных.

Однако мне очень хотелось добавить звездную рейтинговую систему, используемую в проекте React Native. Для этого я обновил самый внутренний объект HStack, как показано ниже:

После внесения этих изменений приложение для iOS готово к использованию.

Продукты Финни в действии

Используя Xcode, я использовал пункт меню «Продукт» и выбрал параметр «Выполнить».

При первом использовании будет автоматически перенаправлено на экран входа в систему Salesforce, где я использовал тот же адрес электронной почты и пароль для доступа к моей организации разработчиков. После входа в систему появилось приложение Finny’s Foods, включая пятизвездочное значение рейтинга для каждого элемента.

За считанные минуты мы смогли создать приложение для iOS с помощью Xcode и Salesforce Mobile SDK.

Заключение

В этой статье я представил пользовательское мобильное приложение, которое изначально развертывается в магазине Apple и использует исходный код, написанный на Swift. Попутно мы получили общее представление о том, как устроены приложения для iOS.

Начиная с 2021 года, я пытаюсь жить в соответствии со следующим заявлением о миссии, которое, как мне кажется, применимо к любому ИТ-специалисту:

«Сосредоточьте свое время на предоставлении функций/функций, которые повышают ценность вашей интеллектуальной собственности. Используйте фреймворки, продукты и услуги для всего остального».

— Дж. Вестер

Salesforce Mobile SDK, безусловно, соответствует моему личному заявлению о миссии, которое принесет пользу любой специализированной группе, которой требуется функциональность Salesforce как часть пользовательских мобильных приложений, работающих на устройствах iOS. Разработчикам программного обеспечения в этой области разработки обязательно следует рассмотреть возможность добавления Salesforce Mobile SDK в качестве зависимости от проекта.

Если вы хотите увидеть полный исходный код этой статьи, посетите мой проект на GitLab:



Хорошего дня!