diff --git a/.DS_Store b/.DS_Store index e8a5f2e..ca1644b 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/README.md b/README.md index 2f32942..ca5a9a1 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,107 @@ # Introducción al Uso de ResearchKit: Innovación en Ensayos Clínicos con Tecnología Wearable -ResearchKit ha demostrado ser una herramienta bastante util en la obtención de datos para ensayos clínicos como lo es el consentimiento informado, historias clínicas, tareas entre otras. Por ello, es importante aprender a utilizar los recursos que este ofrece para poder hacer uso de ellos cuando se requiera programar un software para uso médico. +ResearchKit ha demostrado ser una herramienta útil en la recolección de datos para ensayos clínicos, permitiendo gestionar actividades como el consentimiento informado, el manejo de historias clínicas, y la realización de tareas específicas. Esto resalta la importancia de aprender a utilizar los recursos que ResearchKit ofrece para facilitar el desarrollo de software en el ámbito médico. -## Creación de documento +### Creación de proyecto -El primer paso será crear un proyecto nuevo en Xcode recordando tenerlo actualizado a su última versión, al abrir Xcode, mostrará un menú en el que se seleccionará la opción "Create New Project..." +El primer paso consiste en crear un proyecto nuevo en Xcode, asegurando que esté actualizado a la última versión. Al abrir Xcode, se desplegará un menú en el que debe seleccionarse la opción "Create New Project...". ![](imagenes/createP.png) -Posteriormente al presionar, mostrará una ventana con las opciones de proyecto, para este caso, se seleccionará App de iOS, debido a que la aplicación será para uso de iPhone y iPad al que se le asignará un nombre, el tipo de interfaz, el lenguaje a utilizar entre otros datos, además de ubicar el lugar donde se alojará +Luego, al hacer clic, se abrirá una ventana con opciones de proyecto. En este caso, debe seleccionarse "App de iOS" ya que la aplicación estará destinada a iPhone y iPad. A continuación, se asignará un nombre, se definirá el tipo de interfaz, el lenguaje a utilizar, entre otros datos, además de especificar la ubicación del proyecto. ![](imagenes/appios.png) ![](imagenes/nameApp.png) ![](imagenes/ubiApp.png) -Cuando se termina la creación del proyecto, se muestra el entorno con el que trabaja Xcode, aquí podemos observar las diferentes áreas con las que se trabaja cuando se desarrolla una app para iOS. +Una vez completada la creación del proyecto, se mostrará el entorno de trabajo de Xcode, que permite visualizar las áreas involucradas en el desarrollo de una app para iOS. ![](imagenes/entornoXcode.png) -Teniendo listo el proyecto, se hará la descarga del framework de ResearchKit, que es la parte principal de este repositorio, por lo tanto, se hará la descarga del repositorio en ZIP del Framework ResearchKit alojado en [GitHub](https://github.com/ResearchKit/ResearchKit), donde en el botón que dice **Code** se dará click y posteriormente en **Download ZIP** +Con el proyecto listo, el siguiente paso es descargar el framework de ResearchKit, la parte central de este repositorio. Para ello, se descargará el repositorio en formato ZIP desde [GitHub](https://github.com/ResearchKit/ResearchKit), seleccionando el botón **Code** y luego **Download ZIP**. + +### Integración de Frameworks ![](imagenes/descargaZIP.png) -Al descargarse el Repositorio en ZIP, podremos hacer uso del Framework, y para importarlo solo se tiene que arrastrar el archivo *ResearchKit.xcodeproj* al navegador de proyectos solo por debajo del proyecto general. +Después de descargar el repositorio en ZIP, se puede acceder al framework. Para importarlo, basta con arrastrar el archivo *ResearchKit.xcodeproj* al navegador de proyectos, ubicándolo justo debajo del proyecto general. ![](imagenes/ArrasRK.png) ![](imagenes/ArrasRK2.png) -para posteriormente activar los Frameworks de Researchkit; se dirjirá a el navegador de proyectos, en el proyecto principal, en el target unico que está, se dará hacia abajo hasta el menú *Frameworks, Libraries, and Embedden Content* sobre el botón "+" y ahí se seleccionará los frameworks de Researchkit. +Para activar los frameworks de ResearchKit, se debe dirigir al navegador de proyectos, seleccionar el proyecto principal y, en el único target disponible, desplazarse hasta el menú *Frameworks, Libraries, and Embedden Content*. En este menú, seleccionando el botón "+", se eligen los frameworks de ResearchKit. ![](imagenes/frameRK1.png) ![](imagenes/frameRK2.png) -Estos 3 frameworks serán los encargados de hacer que nuestra aplicación funcionecon las actividades, formularios y actividades de esta herramienta de Apple. +Estos tres frameworks permiten que la aplicación funcione con las actividades, formularios y tareas que ofrece esta herramienta de Apple. + +### Estructura de la aplicación + +Para comenzar la creación de la aplicación, en el archivo *Main.storyboard* es necesario crear dos controladores de vista adicionales: uno para el inicio, otro para el consentimiento y un tercero para las actividades. + +Para agregar estos controladores de vista, se abre el archivo *Main* en el navegador de proyectos. En la esquina superior derecha aparecerá un signo "+", en el cual se hace clic y se escribe **View Controller**. Luego, se arrastra dos veces hacia la ventana de visualización para crear los controladores de vista adicionales. + +![](imagenes/vc1.png) +![](imagenes/vc2.png) +![](imagenes/vc3.png) +![](imagenes/vc4.png) +![](imagenes/vc5.png) + +En uno de los controladores de vista, se necesita añadir un botón para "unirse al estudio", ya que antes de comenzar a recolectar datos es esencial contar con el consentimiento de los usuarios. Para añadir el botón, se hace clic en el "+" de la esquina superior, y se arrastra el elemento "button" hacia el controlador de vista deseado. + +![](imagenes/bt1.png) +![](imagenes/bt2.png) + +A continuación, el botón puede posicionarse, y su texto, tamaño, colores y otros elementos se modifican desde el inspector, ubicado en la esquina superior derecha. + +![](imagenes/bt3.png) + +Para mantener la posición del botón en diferentes dispositivos, se añaden *constraints*. Esto se logra haciendo clic en el icono de un cuadro con cotas, ubicado en la parte inferior, para acceder y configurar las restricciones de acuerdo con las necesidades, como se muestra en la imagen siguiente: + +![](imagenes/constrains.png) + +Es necesario asignar una clase a cada controlador de vista: **IntroViewController**, **ConsentViewController** y **TaskViewController**. El controlador principal, donde se encuentra la flecha de navegación, es el *IntroViewController*; el que contiene el botón para unirse al estudio es el *ConsentViewController*, y el controlador en blanco es el *TaskViewController*. Los identificadores se asignan seleccionando cada controlador de vista, luego haciendo clic en el menú del inspector en el icono de identificación y modificando la clase con el nombre correspondiente. + +![](imagenes/ident.png) + +Cuando cada controlador ha sido asignado a su clase correspondiente, el menú de controladores de vista se verá de la siguiente manera: + +![](imagenes/identAll.png) + +De esta manera, se tiene la base estructurada para el desarrollo de la aplicación. + +Para la unión de los diferentes controladores de vista se hará uso de segues o transiciones entre vistas de la aplicación, por ello, desde **IntroViewController** se arrastra con click derecho la *Vista* a los 2 ViewController restantes y al soltar, se selecciona el segue manual *Custom*. + +![](imagenes/segue1.png) +![](imagenes/segue2.png) + +Se realiza para los 2 ViewControllers y quedaría de la siguiente manera: + +![](imagenes/seguef.png) + +Los segues de igual manera deben tener un identificador, por ello, al selecionar un segue, se abrirá el Inspector y los identificadores a poner será *toConsent* y *toTasks* para cada uno de los segues creados anteriormente. + +![](imagenes/identSegue.png) + +Para cada controlador de vistas se necesita crear un archico de tipo **Cocoa Touch Class** con el mismo nombre que la clase, para crear un archivo de este tipo, en la pestaña *File* hay una opción de *New* y se selecciona la opción *File from Template...*. + +![](imagenes/newfile.png) + +Se desplegará un menú y se seleccionará la opción Cocoa Touch Class, asegurandose que esté en iOS. + +![](imagenes/type.png) + +Pedirá una clase, se pone las creadas en los controladores de vista con subclase UIViewController. + +![](imagenes/type2.png) + +y se guardará en la misma ruta del archivo, como viene predeterminado. + +![](imagenes/savefile.png) + +al termino de los 3 archivos, deberálucir de la siguiente forma: + +![](imagenes/allVC.png) diff --git a/RK-Journals/RK-Journals.xcodeproj/project.xcworkspace/xcuserdata/JD2207.xcuserdatad/UserInterfaceState.xcuserstate b/RK-Journals/RK-Journals.xcodeproj/project.xcworkspace/xcuserdata/JD2207.xcuserdatad/UserInterfaceState.xcuserstate index 1ef03d0..4bdeb3c 100644 Binary files a/RK-Journals/RK-Journals.xcodeproj/project.xcworkspace/xcuserdata/JD2207.xcuserdatad/UserInterfaceState.xcuserstate and b/RK-Journals/RK-Journals.xcodeproj/project.xcworkspace/xcuserdata/JD2207.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/RK-Journals/RK-Journals/Base.lproj/Main.storyboard b/RK-Journals/RK-Journals/Base.lproj/Main.storyboard index 25a7638..3d6b016 100644 --- a/RK-Journals/RK-Journals/Base.lproj/Main.storyboard +++ b/RK-Journals/RK-Journals/Base.lproj/Main.storyboard @@ -1,24 +1,86 @@ - + + - + + + - + - + + - + - + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RK-Journals/RK-Journals/ConsentViewController.swift b/RK-Journals/RK-Journals/ConsentViewController.swift new file mode 100644 index 0000000..92fca7c --- /dev/null +++ b/RK-Journals/RK-Journals/ConsentViewController.swift @@ -0,0 +1,29 @@ +// +// ConsentViewController.swift +// RK-Journals +// +// Created by Juan David Lopez Regalado on 11/11/24. +// + +import UIKit + +class ConsentViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/RK-Journals/RK-Journals/IntroViewController.swift b/RK-Journals/RK-Journals/IntroViewController.swift new file mode 100644 index 0000000..5749c69 --- /dev/null +++ b/RK-Journals/RK-Journals/IntroViewController.swift @@ -0,0 +1,29 @@ +// +// IntroViewController.swift +// RK-Journals +// +// Created by Juan David Lopez Regalado on 11/11/24. +// + +import UIKit + +class IntroViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/RK-Journals/RK-Journals/TasksViewController.swift b/RK-Journals/RK-Journals/TasksViewController.swift new file mode 100644 index 0000000..d717856 --- /dev/null +++ b/RK-Journals/RK-Journals/TasksViewController.swift @@ -0,0 +1,29 @@ +// +// TasksViewController.swift +// RK-Journals +// +// Created by Juan David Lopez Regalado on 11/11/24. +// + +import UIKit + +class TasksViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/imagenes/allVC.png b/imagenes/allVC.png new file mode 100644 index 0000000..c92434d Binary files /dev/null and b/imagenes/allVC.png differ diff --git a/imagenes/bt1.png b/imagenes/bt1.png new file mode 100644 index 0000000..e2cefe2 Binary files /dev/null and b/imagenes/bt1.png differ diff --git a/imagenes/bt2.png b/imagenes/bt2.png new file mode 100644 index 0000000..fa5c127 Binary files /dev/null and b/imagenes/bt2.png differ diff --git a/imagenes/bt3.png b/imagenes/bt3.png new file mode 100644 index 0000000..5590ad3 Binary files /dev/null and b/imagenes/bt3.png differ diff --git a/imagenes/constrains.png b/imagenes/constrains.png new file mode 100644 index 0000000..3b1c29b Binary files /dev/null and b/imagenes/constrains.png differ diff --git a/imagenes/ident.png b/imagenes/ident.png new file mode 100644 index 0000000..2360c4d Binary files /dev/null and b/imagenes/ident.png differ diff --git a/imagenes/identAll.png b/imagenes/identAll.png new file mode 100644 index 0000000..610fde6 Binary files /dev/null and b/imagenes/identAll.png differ diff --git a/imagenes/identSegue.png b/imagenes/identSegue.png new file mode 100644 index 0000000..8043260 Binary files /dev/null and b/imagenes/identSegue.png differ diff --git a/imagenes/newfile.png b/imagenes/newfile.png new file mode 100644 index 0000000..d4e8539 Binary files /dev/null and b/imagenes/newfile.png differ diff --git a/imagenes/savefile.png b/imagenes/savefile.png new file mode 100644 index 0000000..274bbf5 Binary files /dev/null and b/imagenes/savefile.png differ diff --git a/imagenes/segue1.png b/imagenes/segue1.png new file mode 100644 index 0000000..37b00d9 Binary files /dev/null and b/imagenes/segue1.png differ diff --git a/imagenes/segue2.png b/imagenes/segue2.png new file mode 100644 index 0000000..3acfa22 Binary files /dev/null and b/imagenes/segue2.png differ diff --git a/imagenes/seguef.png b/imagenes/seguef.png new file mode 100644 index 0000000..0c666fc Binary files /dev/null and b/imagenes/seguef.png differ diff --git a/imagenes/type.png b/imagenes/type.png new file mode 100644 index 0000000..041e689 Binary files /dev/null and b/imagenes/type.png differ diff --git a/imagenes/type2.png b/imagenes/type2.png new file mode 100644 index 0000000..429176e Binary files /dev/null and b/imagenes/type2.png differ diff --git a/imagenes/vc1.png b/imagenes/vc1.png new file mode 100644 index 0000000..7d95e8b Binary files /dev/null and b/imagenes/vc1.png differ diff --git a/imagenes/vc2.png b/imagenes/vc2.png new file mode 100644 index 0000000..d17eede Binary files /dev/null and b/imagenes/vc2.png differ diff --git a/imagenes/vc3.png b/imagenes/vc3.png new file mode 100644 index 0000000..2b8ca4d Binary files /dev/null and b/imagenes/vc3.png differ diff --git a/imagenes/vc4.png b/imagenes/vc4.png new file mode 100644 index 0000000..8c1b2a8 Binary files /dev/null and b/imagenes/vc4.png differ diff --git a/imagenes/vc5.png b/imagenes/vc5.png new file mode 100644 index 0000000..b29676c Binary files /dev/null and b/imagenes/vc5.png differ