Изучение Salesforce Mobile SDK с помощью Xcode

Изучение Salesforce Mobile SDK с помощью Xcode

5 апреля 2022 г.

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


  • [Использование Salesforce с помощью Spring Boot] (https://hackernoon.com/how-to-leverage-the-salesforce-api-without-the-salesforce-client)

  • [Использование Salesforce с помощью клиента, написанного на Svelte] (https://hackernoon.com/how-to-leverage-salesforce-using-a-client-writing-in-svelte)

  • [Использование Salesforce с помощью клиента, написанного на Vue.js] (https://hackernoon.com/leveraging-salesforce-using-a-client-writing-in-vuejs)

  • [Использование Salesforce с помощью мобильных приложений, написанных (один раз) на React Native] (https://hackernoon.com/leveraging-salesforce-using-mobile-applications-writing-once-in-react-native)

  • [Использование Salesforce с помощью клиента, написанного на Angular] (https://hackernoon.com/how-to-leverage-salesforce-via-a-client-writing-in-angular)

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



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


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


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



«[Изучение мобильного SDK Salesforce с помощью React Native] (https://hackernoon.com/build-a-mobile-app-using-react-native-and-the-salesforce-mobile-sdk)» — первая статья в эта серия Mobile SDK. Затем я переключился на статью «[Изучение мобильного SDK Salesforce с помощью Android Studio] (https://hackernoon.com/using-android-studio-to-explore-the-salesforce-mobile-sdk)», чтобы использовать 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 и CLI forceios.


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


```javascript


Forceios создать


Введите тип вашего приложения (native_swift или native, оставьте пустым для native_swift): native_swift


Введите имя вашего приложения: FinnysFoodsIOS


Введите имя вашего пакета: com.gitlab.johnjvester.finnysfoods.ios


Введите название вашей организации (Acme, Inc.): JVC


Введите выходной каталог для вашего приложения (оставьте пустым для текущего каталога):


После завершения я выполнил шаги, предоставленные интерфейсом командной строки forceios:


  • Следующие шаги:

  • Ваш проект приложения готов в FinnysFoodsIOS.

  • Чтобы использовать ваше новое приложение в XCode, сделайте следующее:

    • открыть FinnysFoodsIOS/FinnysFoodsIOS.xcworkspace в XCode

    • построить и запустить

  • Перед отправкой обязательно укажите свой идентификатор клиента OAuth и URI обратного вызова,

  • и области OAuth в FinnysFoodsIOS/FinnysFoodsIOS/bootconfig.plist

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


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


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


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



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


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


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


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



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



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



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


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


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


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


  • AccountsListModel.swift

  • AccountsListView.swift

  • ContactDetailModel.swift

  • ContactDetailsView.swift

  • КонтактыForAccountListView.swift

  • КонтактыForAccountModel.swift

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


```javascript


"супы": [


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


```javascript


"синхронизирует": [ ]


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


```javascript


Фонд импорта


импорт SwiftUI


импорт Комбинировать


импортировать SalesforceSDKCore


struct MealsListView: Просмотр {


var body: некоторый View {


Text("Finny's Foods (iOS)").bold()


struct MealsList_Previews: PreviewProvider {


превью статических переменных: некоторые View {


ПитаниеСписокView()


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


```javascript


функция setupRootViewController() {


// Настройка хранилища на основе конфигурации userstore.json


MobileSyncSDKManager.shared.setupUserStoreFromDefaultConfig()


// Настройка синхронизации на основе конфигурации 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] (https://iosexample.com/easy-font-awesome-in-swiftui/)


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


  • фа-бренды-400.ttf

  • fa-regular-400.ttf

  • fa-solid-900.ttf

  • иконки.json

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


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


```javascript


импорт Комбинировать


импортировать SmartStore


импортировать MobileSync


struct Еда: хешируемая, идентифицируемая, декодируемая {


пусть идентификатор: UUID = UUID()


пусть идентификатор: строка


пусть Имя: Строка


пусть Rating__c: Int


struct MealResponse: декодируемый {


var totalSize: Int


var сделано: Bool


var записи: [Еда]


класс MealsListModel: ObservableObject {


@Published var food: [Meal] = []


частные обедыCancellable: AnyCancellable?


функция fetchMeals(){


let request = RestClient.shared.request(forQuery: "ВЫБЕРИТЕ Id, Name, Rating__c FROM Meal__c ORDER BY Name ASC", apiVersion: nil)


foodCancellable = RestClient.shared.publisher (для: запроса)


.receive(на: RunLoop.main)


.tryMap({ (ответ) -> Данные в


ответ.asData()


.decode(тип: MealResponse.self, декодер: JSONDecoder())


.map({ (запись) -> [Еда] в


запись.записи


.catch({ ошибка в


Только что([])


.assign(кому: .meals, на: себя)


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


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


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


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


```javascript


struct MealsListView: Просмотр {


@ObservedObject var viewModel = MealsListModel()


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


```javascript


var body: некоторый View {


Text("Finny's Foods (iOS)").bold()


Список (viewModel.meals) { dataItem в


HStack(интервал: 10) {


VStack(выравнивание: .leading, интервал: 3) {


ХСтэк {


Текст (элемент данных. Имя)


.onAppear{ self.viewModel.fetchMeals() }


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


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


```javascript


ХСтэк {


Текст (элемент данных. Имя)


Текст (" ")


переключить dataItem.Rating__c {


случай 5:


FAText (iconName: "звезда", размер: 15, стиль: .solid)


FAText (iconName: "звезда", размер: 15, стиль: .solid)


FAText (iconName: "звезда", размер: 15, стиль: .solid)


FAText (iconName: "звезда", размер: 15, стиль: .solid)


FAText (iconName: "звезда", размер: 15, стиль: .solid)


случай 4:


FAText (iconName: "звезда", размер: 15, стиль: .solid)


FAText (iconName: "звезда", размер: 15, стиль: .solid)


FAText (iconName: "звезда", размер: 15, стиль: .solid)


FAText (iconName: "звезда", размер: 15, стиль: .solid)


FAText(iconName: "звезда", размер: 15)


случай 3:


FAText (iconName: "звезда", размер: 15, стиль: .solid)


FAText (iconName: "звезда", размер: 15, стиль: .solid)


FAText (iconName: "звезда", размер: 15, стиль: .solid)


FAText(iconName: "звезда", размер: 15)


FAText(iconName: "звезда", размер: 15)


случай 2:


FAText (iconName: "звезда", размер: 15, стиль: .solid)


FAText (iconName: "звезда", размер: 15, стиль: .solid)


FAText(iconName: "звезда", размер: 15)


FAText(iconName: "звезда", размер: 15)


FAText(iconName: "звезда", размер: 15)


По умолчанию:


FAText (iconName: "звезда", размер: 15, стиль: .solid)


FAText(iconName: "звезда", размер: 15)


FAText(iconName: "звезда", размер: 15)


FAText(iconName: "звезда", размер: 15)


FAText(iconName: "звезда", размер: 15)


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


Finny’s Foods в действии


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


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



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


Заключение


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


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


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


- Дж. Вестер


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


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


https://gitlab.com/johnjvester/finnys-foods-ios


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



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE