Cómo desarrollar aplicaciones iOS en Delphi XE2 utilizando componentes de acceso a datos de Devart

Delphi XE2 le permite desarrollar aplicaciones para iOS, así como aplicaciones para 32 bits, 64 bits y Mac OS. En este artículo intentaremos explicar cómo desarrollar aplicaciones para iPhone en Delphi XE2. Sin embargo, todo lo siguiente se puede usar al desarrollar aplicaciones para iPad y iPod, ya que también son compatibles con la plataforma móvil iOS.

El desarrollo de aplicaciones iOS es ligeramente diferente al desarrollo de aplicaciones de escritorio convencionales y consta de dos etapas principales:

  1. Desarrollo de aplicaciones en Delphi XE2
  2. Compile y cree aplicaciones en Xcode en Mac OS

Esto se debe al hecho de que Delphi no tiene su propio compilador para la plataforma iOS y debe usar el compilador FPC para compilar.

También tenga en cuenta que la aplicación de iOS solo puede funcionar con varias bases de datos (donde no se requiere una biblioteca de cliente o si tiene su propio cliente de iOS). Esta limitación se debe al hecho de que, según la política de Apple, las aplicaciones de iOS no deben escribirse con bibliotecas dinámicas externas a menos que estén integradas en el SDK de iOS o vinculadas estáticamente a la propia aplicación (puede encontrar más información en el sitio web de Apple).

Por lo tanto, con la ayuda de Devart Data Access Components, puede trabajar con las siguientes bases de datos en iOS:

  1. SQLite (la biblioteca viene con iOS)
  2. MySQL en vivo (no se requiere cliente)
  3. PostgreSQL en vivo (no se requiere cliente)

Usamos UniDAC para desarrollar nuestro ejemplo, y usa las tres bases de datos.

Como alternativa, puede desarrollar aplicaciones de base de datos para iOS utilizando los siguientes productos individuales de Devart:

  • PgDAC para trabajar con PostgreSQL
  • MyDAC para trabajar con MySQL
  • LiteDAC para trabajar con SQLite

El proceso de desarrollo de aplicaciones con estos productos es similar al que se describe a continuación, excepto que debe usar componentes de conexión y consultas que coincidan con el producto en lugar de TUniConnection y TUniQuery enumerados en nuestros ejemplos de código.

Índice

    Desarrollo de aplicaciones en Delphi

    En la primera etapa, puede crear una nueva aplicación iOS usando el menú "Archivo -> Nuevo -> Otro -> Aplicación iOS FireMonkey HD". Puede crear una nueva aplicación para iOS. Entonces el programa está diseñado de manera similar a cualquier otra aplicación, es decir, puedes colocar componentes visuales en el formulario, implementar la lógica de la aplicación, etc.

    Nuestro formulario de demostración se puede ver a continuación:

    Sin embargo, Delphi XE2 tiene algunas limitaciones si su aplicación necesita trabajar con una base de datos:

    1. Los componentes de acceso a datos no se pueden colocar en un formulario durante el diseño y deben crearse, configurarse y liberarse manualmente en tiempo de ejecución.
    2. Hay algunas funciones al generar rutas relacionadas con un proyecto (por ejemplo, al especificar un nombre de base de datos para conectarse) en iOS.
    3. No es posible establecer un vínculo entre los componentes de acceso a datos y los controles visuales (como la conexión TStringGrid y el conjunto de datos con el mecanismo LiveBindings en la aplicación trivial FireMonkey). El proceso de visualización y edición de datos debe realizarse manualmente.

    Creación de componentes de acceso a datos

    Entonces, al desarrollar su aplicación iOS, primero ve que todos los componentes de acceso a datos en la barra de herramientas no están disponibles, como se muestra a continuación:

    Para usar UniDAC en nuestra aplicación, declaramos dos variables en la sección privada del formulario de declaración y luego creamos instancias de TUniConnection y TUniQuery en el controlador de eventos OnClick del botón "Conectar":

    TiForm = class(TForm)
    private
      UniConnection: TUniConnection;
      UniQuery: TUniQuery;
    end;
    
    ...
    
    procedure TiForm.btConnectClick(Sender: TObject);
    begin
      if not Assigned(UniConnection) then
        UniConnection := TUniConnection.Create(Self);
      UniConnection.ProviderName := 'SQLite';
      UniConnection.Base de datos := GetDatabasePath + edDataBase.Text;
      UniConnection.Connect;
    
      if not Assigned(UniQuery) then
        UniQuery := TUniQuery.Create(Self);
      UniQuery.Connection := UniConnection;
      UniQuery.SQL.Text := 'SELECT ID, Common_Name, Graphic, SpeciesName, Category, Notes  FROM FISH';
      UniQuery.Open;
    end;

    Configuración de la ruta a la base de datos

    Como puede ver, en el ejemplo de código anterior, usamos la función GetDatabasePath al configurar la propiedad UniConnection.Base de datos.

    El hecho es que en iOS no es posible usar la función habitual ParamStr (0) para obtener la ruta a la aplicación (por ejemplo, para generar una ruta a la base de datos relativa al proyecto). En nuestra aplicación de muestra, implementamos la función GetDatabasePath de la siguiente manera:

    function GetDatabasePath: string;
    {$IFDEF FPC}
    var
      Paths : NSArray;
      FileName : NSString;
    begin
      Paths := NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, True);
      FileName := Paths.objectAtIndex(0);
      Result := String(FileName.UTF8String) + '/';
    {$ELSE}
    begin
      Result := ExtractFilePath(ParamStr(0));
    {$ENDIF}
    end;

    Si el programa se ejecuta en Windows, la función devolverá la ruta al programa.

    Pero si la aplicación se ejecuta en iOS, la función devolverá la ruta a una subcarpeta especial "Documentos" ubicada en la carpeta raíz de la aplicación en el dispositivo iOS. La subcarpeta "Documentos" se crea automáticamente para cada aplicación de iOS cuando se instala. Todos los datos de la aplicación, incluida la base de datos, deben estar ubicados en esta subcarpeta.

    Desafortunadamente, no es posible incluir un archivo de base de datos en el proyecto, por lo que cuando instala el programa, se ubica automáticamente en la subcarpeta "Documentos". Por lo tanto, debe copiar manualmente el archivo de la base de datos en su dispositivo iOS después de instalar la aplicación.

    Extracción y visualización de datos.

    La tarea entonces es mostrar los datos obtenidos a pedido en los controles visuales. Como se describió anteriormente, Delphi XE2 no tiene la capacidad de hacer esto de la misma manera que se usa el componente TDataSource en VCL o LiveBindings en FMX. Para mostrar y editar datos para cada caso, debe implementar los métodos propios del desarrollador.

    En nuestra aplicación no utilizamos componentes sensibles a los datos como TDBGrid o TStringGrid, por lo que simplemente configuramos las propiedades de los controles visuales con los valores de los campos de consulta correspondientes cuando la barra de seguimiento en la parte inferior del formulario cambia de posición:

    procedure TiForm.TrackBar1Change(Sender: TObject);
    begin
      if Assigned(UniQuery) and UniQuery.Active then begin
        UniQuery.Locate('ID', VarArrayOf([Round(TrackBar1.Value + 1)]), [loPartialKey]);
        lbCommon_Name.Text := UniQuery.FieldByName('Common_Name').AsString;
        lbSpeciesName.Text := UniQuery.FieldByName('SpeciesName').AsString;
        lbCategory.Text := UniQuery.FieldByName('Category').AsString;
        meDescription.Text := UniQuery.FieldByName('Notes').AsString;
      end;
    end;

    Los datos se pueden mostrar en línea de una manera similar. Puede recorrer los registros en el conjunto de datos e ingresar los valores de cada campo en la celda de red correspondiente de la siguiente manera:

    var
      UniConnection: TUniConnection;
      UniQuery: TUniQuery;
      i: Integer;
    begin
      UniConnection := TUniConnection.Create(nil);
      try
        UniConnection.ProviderName := 'SQLite';
        UniConnection.Base de datos := GetDatabasePath + 'fish.db3';
        UniConnection.Connect;
    
        UniQuery := TUniQuery.Create(nil);
        try
          UniQuery.Connection := UniConnection;
          UniQuery.SQL.Text := 'Select Category, Common_Name, Notes from FISH';
          UniQuery.Open;
    
          while not UniQuery.Eof do begin
            for i := 0 to UniQuery.Fields.Count - 1 do
              StringGrid1.Cells[i, UniQuery.RecNo - 1] := UniQuery.Fields[i].AsString;
            UniQuery.Next;
          end;
    
        finally
          UniQuery.Free;
        end;
    
      finally
        UniConnection.Free;
      end;
    end;

    La edición de datos también debe realizarse manualmente, es decir, llamar a los métodos Insertar/Actualizar/Eliminar apropiados, completar los campos del conjunto de datos con los valores correctos y luego llamar al método Publicar, etc.

    Compilación y despliegue

    La segunda etapa es compilar e implementar aplicaciones directamente en la plataforma iOS.

    La etapa consta de tres etapas:

    1. Cree un proyecto Xcode para el proyecto Delphi.
    2. Compilación de un proyecto Xcode en MacOS.
    3. Implemente la aplicación en su dispositivo iOS.

    Creación de un proyecto Xcode

    Para compilar un proyecto de Delphi en MacOS, debe crear un proyecto Xcode especial. El proyecto consta de varios archivos adicionales que se crean en la subcarpeta "xcode" en la carpeta raíz del proyecto.

    Para crear un proyecto Xcode para un proyecto Delphi existente, utilice la utilidad de línea de comandos dpr2Xcode.exe. La utilidad viene con Delphi XE2 y está en la carpeta Bin.

    Para que el uso de la utilidad sea más cómodo, puede personalizar el menú Herramientas del IDE.

    Abra el menú "Herramientas-> Personalizar herramientas", haga clic en "Agregar ..." y complete las propiedades de la siguiente manera:

    • Título: Exportar a Xcode
    • Programa: dpr2Xcode.exe
    • Parámetros: $ PROYECTO

    Ahora puede abrir su proyecto de iOS en el IDE y usar el menú "Herramientas -> Exportar a Xcode" para crear un proyecto de Xcode. Como se describió anteriormente, se creará una subcarpeta "xcode" en la carpeta raíz del proyecto.

    Luego, debe copiar todos los archivos UniDAC de origen en la carpeta raíz del proyecto de iOS, ya que el compilador FPC también necesitará los archivos UniDAC para crear el proyecto.

    Compilación de un proyecto Xcode en MacOS

    Ahora el proyecto iOS está listo para compilar desde Xcode a MacOS.

    El sistema MacOS utilizado para la compilación debe cumplir los siguientes requisitos:

    • Sistema operativo: OS X 10.6 Snow Leopard o OS X 10.7 Lion
    • Versión gratuita de Pascal 2.6.0, instalada en MacOS
    • SDK de Xcode e iOS instalado en MacOS
      (Probamos las versiones 3.2.5 y 4.2 de Xcode y las versiones 4.2.x, 4.3.x y 5.0 del SDK de iOS)
    • Paquete FireMonkey-iOS-XE2.dmg instalado en MacOS
      (El paquete requiere FPC para compilar proyectos Delphi. Viene con Delphi XE2 y está en la carpeta FireMonkey-iOS)
    • un dispositivo móvil iOS (iPhone, iPod o iPad) conectado a una Mac a través de un puerto USB
      (Si no lo tiene, puede probar la aplicación en el simulador de dispositivo iOS incluido con Xcode)

    Entonces, si tiene el sistema MacOS apropiado, necesita copiar la carpeta del proyecto a MacOS, abrir el proyecto en Xcode, luego seleccionar el dispositivo de salida apropiado en Xcode (dispositivo iOS real o simulador) y construir el proyecto.

    Si se selecciona un simulador como dispositivo de salida, luego de un ensamblaje exitoso, la aplicación se abrirá en el simulador directamente en MacOS.

    Si se selecciona un dispositivo conectado válido como dispositivo de salida, el programa se transferirá e instalará automáticamente en el dispositivo, y su etiqueta aparecerá en el escritorio del dispositivo.

    Además, dado que todos los archivos de origen se transfieren a Mac OS, es posible depurar la aplicación directamente en Xcode.

    Implemente la aplicación en su dispositivo iOS

    El proceso de implementación de la aplicación no es el propósito de este artículo, se describe ampliamente en línea. Como se mencionó anteriormente, no necesita implementar bibliotecas adicionales con una aplicación escrita con UniDAC, PgDAC, MyDAC o LiteDAC.

    También tenga en cuenta que para desarrollar aplicaciones en un iPhone, iPod o iPad real, debe registrarse en la aplicación de desarrollador iOS paga de Apple y configurar un dispositivo de desarrollo. Puede obtener más información sobre la aplicación para iOS aquí. Sin esta licencia, la aplicación solo se puede probar en el simulador de iOS incluido con Xcode.

    Artículos de interés

    Subir