paint-brush
Exploración del SDK móvil de Salesforce con Xcodepor@johnjvester
231 lecturas

Exploración del SDK móvil de Salesforce con Xcode

por John Vester2022/04/04
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

En el tercer artículo de la serie, cree una aplicación iOS nativa que aproveche la plataforma Salesforce y el SDK móvil de Salesforce.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Exploración del SDK móvil de Salesforce con Xcode
John Vester HackerNoon profile picture

En julio pasado, comencé a escribir una serie centrada en cómo se puede utilizar la plataforma Salesforce sin un cliente tradicional de Salesforce. Aquí hay enlaces a los otros artículos de la serie:



A continuación se muestra una representación gráfica de la serie:


La ilustración anterior muestra cómo varios marcos de clientes pueden acceder a los datos de Salesforce sin utilizar realmente los clientes proporcionados por el ecosistema de Salesforce.


En noviembre de 2021, comencé una nueva serie para demostrar el SDK móvil de Salesforce , que aprovecha el poder de la plataforma de Salesforce dentro de las aplicaciones móviles independientes.


A continuación se muestra una representación gráfica de esta nueva serie:


Explorando el SDK móvil de Salesforce con React Native ” fue el primer artículo de esta serie SDK móvil. Luego cambié de tema para el artículo “ Explorando el SDK móvil de Salesforce usando Android Studio ” para aprovechar Android Studio. En este artículo, me enfocaré en usar Xcode para producir la misma aplicación.

Beneficios del SDK móvil de Salesforce

El SDK móvil de Salesforce proporciona varios beneficios para los ingenieros de software:


  • Permite que las aplicaciones de dispositivos móviles personalizadas utilicen funciones y funciones de Salesforce
  • Acceso completo a la funcionalidad de Salesforce (sin necesidad de reinventar la rueda)
  • Las aplicaciones se pueden distribuir usando la tienda de aplicaciones del dispositivo nativo
  • Procesamiento de notificaciones push de Salesforce
  • La capacidad de trabajar con datos de Salesforce en un modo fuera de línea


Si su panorama de aplicaciones utiliza Salesforce para aspectos clave de la operatividad comercial, entonces considere aprovechar el SDK móvil de Salesforce. Al hacerlo, puede integrar datos mantenidos por Salesforce en ubicaciones de componentes clave, lo que le permite tomar decisiones comerciales sólidas.

Beneficios de usar Xcode

Si su base de clientes requiere soporte para dispositivos iOS y desea utilizar Xcode para el desarrollo de aplicaciones, encontrará valor en la CLI de forceios para comenzar rápidamente con la funcionalidad de Salesforce.


Las características clave para los equipos que emplean Xcode incluyen:


  • Permite el uso de Swift u Objective-C como lenguaje de programación base
  • Brinda soporte 100% nativo para funciones y funciones en dispositivos iOS
  • Permite a los desarrolladores de iOS experimentados aprovechar rápidamente la funcionalidad del SDK móvil de Salesforce
  • Mejoras en el manejo de errores, porque tanto Swift como Objective-C mantienen un diseño sólido de tipeo y manejo de errores.
  • Identifique y solucione problemas de compilación más fácilmente


Puede ser obvio, pero debe tener una computadora Apple para usar Xcode. Para este artículo, usaré mi MacBook Pro de 16” de marzo de 2020.


Ahora que estamos listos para sumergirnos, revisemos brevemente nuestro caso de uso.

Finny's Foods: un ejemplo de caso de uso

Tener un hijo (Finny) nacido con necesidades especiales introdujo un deseo personal de comprender y apreciar los productos que usamos en nuestra vida diaria. Años antes de que naciera Finny, mi esposa (Nicole) y yo llevábamos un estilo de vida saludable. Sin embargo, cuando Nicole comenzó a profundizar en los ingredientes de los alimentos que componían nuestra dieta diaria, recibimos una llamada de atención muy necesaria.


Avance rápido hasta hoy, nuestra dieta consiste en pocos alimentos procesados, sin gluten, bajo en azúcar y muy pocos productos lácteos. En la medida de lo posible, nuestra proteína proviene de fuentes alimentadas con pasto y siempre favorecemos las opciones orgánicas. No me hagas empezar con OMG.


Para esta serie, nuestra aplicación Finny's Foods proporciona una lista simple de comidas que son aceptables para nosotros y que Finny prefiere. Por ahora, incluiremos dos atributos simples para cada comida:


  • nombre de la comida
  • Calificación (1 a 5, donde una calificación de 5 es un favorito absoluto para Finny)


Con el tiempo, planeo introducir otros atributos (como resumen, ingredientes, direcciones e incluso una foto), pero caminemos antes de correr.

Primeros pasos con Xcode

Además de instalar git y npm en mi MacBook Pro, me aseguré de que mi versión de Xcode estuviera actualizada. Luego, visité la siguiente URL para asegurarme de que todo estaba configurado y configurado como se esperaba:


Configure su entorno de desarrollo de iOS


Estos pasos incluyen asegurarse de que Xcode, CocoaPods, node.js, npm y la CLI de forceios estén todos instalados.


A continuación, forceios desde una sesión de terminal con las siguientes opciones:


 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 * ******************************************************************************


Creación del objeto de comida en Salesforce

Antes de poder comenzar a crear una nueva aplicación en Xcode, necesitaba establecer el objeto Meal en Salesforce.


Ya tenía una organización de desarrollador que podía usar. (Puede crear uno nuevo aquí ). Entonces, simplemente inicié sesión con mi dirección de correo electrónico y contraseña para esa organización. A continuación, navegué a Aplicaciones | App Manager y la perspectiva de Configuración en Salesforce.


Creé una nueva aplicación Lightning llamada Meal:




En las pantallas de configuración restantes, seleccioné todas las configuraciones predeterminadas y otorgué acceso a todos los perfiles de usuario de Salesforce.


A continuación, visité Objetos y campos | Opción de menú Gestor de objetos en la Configuración de Salesforce. Una vez que localicé el elemento de comida recién creado, usé el componente desplegable para editar el objeto.


Cambié del submenú Detalles a la opción Campos y relaciones . Rápidamente me di cuenta de que no necesitaba crear una propiedad Nombre para mi objeto Comida, ya que Salesforce ya se encargó de eso por mí. Solo necesitaba agregar el campo Calificación.


Con el botón Nuevo , seleccioné el tipo de campo numérico y completé el Paso dos como se indica a continuación:




Usé los valores predeterminados y guardé mi nuevo campo. Ahora, puedo usar los campos de nombre y calificación en mi aplicación de iOS.




Con el cliente de Salesforce, rellené algunos datos de origen para desarrollar la aplicación en Xcode. A continuación se muestra un resumen de los valores enviados:




Según los datos de la muestra, Finny siempre prefiere "Pizza" a "Pollo y arroz".

Agregar funcionalidad de comida en Xcode

Con el objeto de origen y los datos configurados, utilicé mi aplicación Xcode para abrir el proyecto finnys-foods-ios por primera vez.


De forma predeterminada, la CLI de forceios crea una aplicación funcional que muestra información de cuenta y contacto para la organización de Salesforce vinculada a la cuenta de usuario cuando se ejecuta por primera vez. Para facilitar las cosas, decidí seguir adelante y eliminar los siguientes archivos del proyecto:


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


Dado que planeo cubrir la funcionalidad fuera de línea en un artículo futuro, actualicé los datos de configuración en userstore.json a:


 { "soups": [ ] }


El archivo usersyncs.json también se eliminó como se muestra a continuación:


 { "syncs": [ ] }


A continuación, creé una vista de lista básica para el objeto Meal__c en Salesforce, llamada MealsListView.swift .


 import Foundation import SwiftUI import Combine import SalesforceSDKCore struct MealsListView: View { var body: some View { Text("Finny's Foods (iOS)").bold() } } struct MealsList_Previews: PreviewProvider { static var previews: some View { MealsListView() } }


Para usar la vista de lista de comidas cuando se inicia la aplicación, actualicé el método setupRootViewController() en el archivo SceneDelegate.swift como se muestra a continuación:


 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() ) }


En este punto, tenemos una aplicación iOS funcional que simplemente mostrará "Finny's Foods (iOS)" en negrita.

Usando Font Awesome en Xcode

Antes de construir el resto de la aplicación, quería ver lo fácil que sería agregar íconos de Font Awesome en una aplicación Swift creada en Xcode. Como recordará, esta tarea fue muy fácil con React Native y no tan fácil en Android Studio.


Pude seguir los pasos proporcionados en la siguiente URL para que todo funcionara en unos 15 minutos. Espero que aquellos con experiencia en Xcode completen estos pasos en una fracción del tiempo:


Easy Font Awesome en SwiftUI


Como resultado de estos pasos, los siguientes archivos de soporte ahora forman parte de mi proyecto:


  • fa-marcas-400.ttf
  • fa-regular-400.ttf
  • fa-solid-900.ttf
  • iconos.json

Creación de un modelo de lista de comidas

La aplicación Xcode necesita comprender el objeto Meal__c que está impulsando la aplicación Finny's Foods. Creé un archivo MealsListModel.swift que contenía la siguiente información:


 import Combine import SmartStore import MobileSync struct Meal: Hashable, Identifiable, Decodable { let id: UUID = UUID() let Id: String let Name: String let Rating__c: Int } struct MealResponse: Decodable { var totalSize: Int var done: Bool var records: [Meal] } class MealsListModel: ObservableObject { @Published var meals: [Meal] = [] private var mealsCancellable: AnyCancellable? func fetchMeals(){ let request = RestClient.shared.request(forQuery: "SELECT Id, Name, Rating__c FROM Meal__c ORDER BY Name ASC", apiVersion: nil) mealsCancellable = RestClient.shared.publisher(for: request) .receive(on: RunLoop.main) .tryMap({ (response) -> Data in response.asData() }) .decode(type: MealResponse.self, decoder: JSONDecoder()) .map({ (record) -> [Meal] in record.records }) .catch( { error in Just([]) }) .assign(to: \.meals, on:self) } }


Este archivo presenta un objeto Meal que contiene los metadatos para cada objeto Meal__c almacenado en Salesforce. También hay un objeto MealResponse , que representa la carga proporcionada por Salesforce cuando solicita datos de Meal__c .

Con esas dos estructuras clave definidas, el método fetchMeals() realiza una llamada API RESTful a Salesforce y luego asigna cualquier dato de respuesta a una lista de objetos Meal . El archivo MealsListView.swift creado anteriormente procesa estos datos.

Actualización de la vista de lista de comidas

Con el modelo de lista de comidas listo, la vista de lista de comidas ahora se puede expandir para integrarse con Salesforce y presentar datos en un dispositivo iOS. Lo primero que tuve que hacer fue establecer una variable para el Modelo de Lista de Comidas en el archivo MealsListView.swift :


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


A continuación, actualicé la variable del cuerpo en el archivo MealsListView.swift como se muestra a continuación:


 var body: some View { Text("Finny's Foods (iOS)").bold() List(viewModel.meals) { dataItem in HStack(spacing: 10) { VStack(alignment: .leading, spacing: 3) { HStack { Text(dataItem.Name) } } } } .onAppear{ self.viewModel.fetchMeals() }


En este punto, la aplicación de iOS muestra el nombre de cada comida en una nueva línea. La llamada al método fetchMeals() recupera datos de Salesforce y procesa cada elemento Meal__c como elemento de datos.


Sin embargo, realmente quería agregar el sistema de clasificación por estrellas utilizado en el proyecto React Native. Para hacer esto, actualicé el objeto HStack más interno como se muestra a continuación:


 HStack { Text(dataItem.Name) Text(" ") switch dataItem.Rating__c { case 5: FAText(iconName: "star", size: 15, style: .solid) FAText(iconName: "star", size: 15, style: .solid) FAText(iconName: "star", size: 15, style: .solid) FAText(iconName: "star", size: 15, style: .solid) FAText(iconName: "star", size: 15, style: .solid) case 4: FAText(iconName: "star", size: 15, style: .solid) FAText(iconName: "star", size: 15, style: .solid) FAText(iconName: "star", size: 15, style: .solid) FAText(iconName: "star", size: 15, style: .solid) FAText(iconName: "star", size: 15) case 3: FAText(iconName: "star", size: 15, style: .solid) FAText(iconName: "star", size: 15, style: .solid) FAText(iconName: "star", size: 15, style: .solid) FAText(iconName: "star", size: 15) FAText(iconName: "star", size: 15) case 2: FAText(iconName: "star", size: 15, style: .solid) FAText(iconName: "star", size: 15, style: .solid) FAText(iconName: "star", size: 15) FAText(iconName: "star", size: 15) FAText(iconName: "star", size: 15) default: FAText(iconName: "star", size: 15, style: .solid) FAText(iconName: "star", size: 15) FAText(iconName: "star", size: 15) FAText(iconName: "star", size: 15) FAText(iconName: "star", size: 15) } }


Con estos cambios implementados, la aplicación de iOS está lista para usar.

Los alimentos de Finny en acción

Usando Xcode, usé la opción de menú Producto y seleccioné la opción Ejecutar .

El primer uso redirigirá automáticamente a una pantalla de inicio de sesión de Salesforce, donde utilicé la misma dirección de correo electrónico y contraseña para acceder a mi organización de Desarrollador. Después de iniciar sesión, apareció la aplicación Finny's Foods, incluido el valor de calificación de cinco estrellas para cada artículo.


En cuestión de minutos, pudimos crear una aplicación para iOS utilizando Xcode y el SDK móvil de Salesforce.

Conclusión

En este artículo, presenté una aplicación móvil personalizada que se implementa de forma nativa desde la tienda de Apple y usa código fuente escrito en Swift. En el camino, obtuvimos una comprensión básica de cómo se estructuran las aplicaciones basadas en iOS.


A partir de 2021, he estado tratando de cumplir con la siguiente declaración de misión, que creo que se puede aplicar a cualquier profesional de TI:


“Concentre su tiempo en ofrecer características/funcionalidades que amplíen el valor de su propiedad intelectual. Aproveche los marcos, productos y servicios para todo lo demás”.


-J. Vester


El SDK móvil de Salesforce ciertamente se adhiere a mi declaración de misión personal, lo que beneficiará a cualquier equipo de funciones que requiera la funcionalidad de Salesforce como parte de las aplicaciones móviles personalizadas que se ejecutan en dispositivos iOS. Los ingenieros de software en este ámbito de desarrollo sin duda deberían considerar agregar el SDK móvil de Salesforce como una dependencia del proyecto.


Si desea ver el código fuente completo de este artículo, visite mi proyecto en GitLab:


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


¡Que tengas un gran día!