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

Hace seis meses publicamos un artículo describiendo el proceso de desarrollo de aplicaciones iOS en Delphi XE2. Hemos recibido bastantes críticas positivas sobre este artículo, pero lo principal es que el artículo ayudó a muchos de nuestros usuarios a crear sus primeras aplicaciones para iPhone, iPad y iPod. Ha pasado mucho tiempo desde entonces, y el nuevo RAD Studio XE4 vio por primera vez un mundo en el que el proceso de desarrollo de aplicaciones iOS ha cambiado mucho. Pero, afortunadamente, todos los cambios tenían como objetivo que el desarrollo fuera simple y claro.

Índice

    ¡Las restricciones para el desarrollo de iOS no son para nosotros!

    El hecho es que iOS tiene limitaciones bastante severas para implementar aplicaciones en dispositivos iOS: no puede implementar ninguna biblioteca (* .dylib) junto con su aplicación. Si anteriormente has desarrollado aplicaciones para trabajar con bases de datos, debes saber que para trabajar con cualquier base de datos se requiere o bien un cliente instalado o bien una librería que te permita conectarte a una base de datos específica. Esto puede ser una pared de ladrillos muy seria cuando se intenta crear una aplicación comercial que debería funcionar con bases de datos en iOS.

    Pero el hecho es que los componentes de acceso a datos de Devart le permiten trabajar con las bases de datos más populares sin instalar software de cliente y no requieren bibliotecas. Por lo tanto, las restricciones en la implementación de la biblioteca (* .dylib) no se aplican a los programas desarrollados con los componentes de acceso a datos de Devart, ya que su aplicación simplemente no necesita estas bibliotecas.

    Además, nosotros, como desarrolladores, hemos hecho todo lo posible para mejorar la funcionalidad de nuestros productos, y ahora podemos decirlo con orgullo. Oráculo y Interbase ToGo se agregan a la lista de bases de datos que puede trabajar con iOS. Aquí hay una lista de bases de datos con las que sus aplicaciones iOS podrán trabajar:

    • SQLite
    • Oráculo
    • mysql
    • postgresql
    • Interbase ToGo

    Si desea que su aplicación funcione con todas estas bases de datos, puede usar UniDAC; si desea trabajar con una base de datos, cualquiera de los siguientes productos le conviene:

    Acceso directo a datos o DataSnap

    Al trabajar con bases de datos, debemos elegir cómo trabajar con datos: directamente o usando DataSnap. Puede encontrar fácilmente una descripción del trabajo con una base de datos utilizando DataSnap en el artículo Uso de productos DAC en el desarrollo de aplicaciones de bases de datos multinivel, por lo que consideraremos el segundo método.

    DAC para dbExpress iPhoneLas plataformas móviles modernas aún no tienen la potencia de hardware de las ordenadors modernas, por lo que el requisito principal para una aplicación móvil es un bajo consumo de recursos del sistema. En base a esto, consideremos crear una aplicación que funcione directamente con la base de datos y muestre el máximo rendimiento en los recursos que tienen.

    Conéctese a una base de datos desde la aplicación iOS

    En la etapa de diseño y desarrollo de una aplicación móvil, trabajar con UniDAC se ve exactamente igual que cuando se desarrolla una aplicación de escritorio normal.

    Podemos colocar TUniConnection, TUniQuery y otros componentes en el formulario durante el diseño:

    De lo contrario, podemos crear todos los componentes necesarios en tiempo de ejecución. La creación de componentes en sí es bastante trivial, así que veamos ejemplos de cómo inicializar una conexión UniDAC para que funcione en iOS.

    Conectar

    SQLite

    Debido a que SQLite es una base de datos local, no necesitamos un host y un puerto. Solo necesitamos especificar la base de datos, la ruta al archivo de la base de datos en el disco duro. Pero dado que iOS tiene ciertas restricciones para trabajar con el sistema de archivos, para obtener la ruta a la base de datos (a la carpeta donde el programa puede crear y modificar archivos), puede usar la siguiente función:

    DocumentPath := TPath.GetDocumentsPath;

    Además, si no está seguro de que la base de datos SQLite exista en su dispositivo iOS (por ejemplo, cuando inicia su aplicación por primera vez) y desea crearla en este caso, debe configurar la siguiente opción:

    UniConnection.SpecificOptions.Values['ForceCreateDatabase'] := 'True';

    Y lo más importante: debemos mostrar el proveedor que usaremos. En otras palabras, el proveedor determina la base de datos con la que queremos trabajar:

    var
      UniConnection:  TUniConnection;
    begin
      UniConnection := TUniConnection.Create(nil);
      try
        UniConnection.ProviderName := 'SQLite';
    
        UniConnection.SpecificOptions.Values['ForceCreateDatabase'] := 'True';
        UniConnection.Base de datos := IncludeTrailingPathDelimiter(TPath.GetDocumentsPath) + 'db.sqlite3';
    
        try
          UniConnection.Connect;
        except
          on E: Exception do
            ShowMessage(E.Message);
        end;
      finally
        UniConnection.Free;
      end;
    end;

    Oráculo

    La conexión a Oracle en iOS solo es posible directamente, ya que no requiere la instalación de un cliente de Oracle. El modo de conexión se puede configurar de la siguiente manera:

    UniConnection.SpecificOptions.Values['Direct'] := 'True';

    Además, el nombre del servidor debe generarse correctamente, ya que si no tenemos un cliente, tampoco tenemos un archivo tnsnames.ora con una lista de servidores. Entonces, para establecer una conexión en iOS, necesitamos conocer el host y el puerto del servidor, así como su SID o nombre de servicio.

    Para conectarse a través de SID, el servidor debe instalarse de la siguiente manera:

    UniConnection.Server := 'Host:Port:sid=SID';

    o de forma simplificada:

    UniConnection.Server := 'Host:Port:SID';

    Para conectarse a través del nombre del servicio, de la siguiente manera:

    UniConnection.Server := 'Host:Port:sn=SID';

    En otras palabras, el prefijo 'sid =' del tercer parámetro indica que la conexión se establece a través de SID, y el prefijo 'sn =' indica que la conexión se establece a través del Nombre del Servicio. Si no se especifica el prefijo, por defecto se supone que queremos establecer una conexión a través de SID.

    La mayoría de los servidores de Oracle tienen el mismo SID y el mismo nombre de servicio, por lo que probablemente no tendrá que entrar en esos matices.

    Y no olvide especificar el proveedor:

    UniConnection.ProviderName := 'Oracle';

    Ejemplo:

    var
      UniConnection:  TUniConnection;
    begin
      UniConnection := TUniConnection.Create(nil);
      try
        UniConnection.ProviderName := 'Oracle';
    
        UniConnection.SpecificOptions.Values['Direct'] := 'True';
    
        UniConnection.Server := 'server:1521:orcl';
        UniConnection.Username := 'user_name';
        UniConnection.Password := 'password';
    
        try
          UniConnection.Connect;
        except
          on E: Exception do
            ShowMessage(E.Message);
        end;
      finally
        UniConnection.Free;
      end;
    end;

    mysql

    También es posible trabajar con el servidor MySQL solo en modo Directo, y este parámetro no difiere de Oracle:

    UniConnection.SpecificOptions.Values['Direct'] := 'True';

    Para establecer una conexión, necesita conocer el host y el puerto. El host se puede representar con ambos nombres de servidor:

    UniConnection.Server := 'server';

    y su IP:

    UniConnection.Server := '192.168.0.1';

    Debido a que puede haber varias bases de datos en un servidor MySQL, debemos especificar la base de datos exacta con la que queremos trabajar:

    UniConnection.Base de datos := 'database_name';

    Y, por supuesto, no nos olvidamos de especificar el proveedor:

    UniConnection.ProviderName := 'MySQL';

    Ejemplo:

    var
      UniConnection:  TUniConnection;
    begin
      UniConnection := TUniConnection.Create(nil);
      try
        UniConnection.ProviderName := 'MySQL';
    
        UniConnection.SpecificOptions.Values['Direct'] := 'True';
    
        UniConnection.Server := 'server';
        UniConnection.Port := 3306;
        UniConnection.Base de datos := 'database_name';
        UniConnection.Username := 'user_name';
        UniConnection.Password := 'password';
    
        try
          UniConnection.Connect;
        except
          on E: Exception do
            ShowMessage(E.Message);
        end;
      finally
        UniConnection.Free;
      end;
    end;

    postgresql

    UniDAC le permite trabajar con PostgreSQL solo en modo directo, por lo que se puede omitir la configuración del modo. El resto de la conexión con PostgreSQL es casi igual que con MySQL. También puede haber múltiples bases de datos en un solo servidor PostgreSQL, pero además, cada base de datos puede tener múltiples esquemas. Si queremos trabajar con un esquema diferente al público, necesitamos especificar su nombre:

    UniConnection.SpecificOptions.Values['Schema'] := 'schema_name';

    Ejemplo:

    var
      UniConnection:  TUniConnection;
    begin
      UniConnection := TUniConnection.Create(nil);
      try
        UniConnection.ProviderName := 'PostgreSQL';
    
        UniConnection.Server := 'server';
        UniConnection.Port := 5432;
        UniConnection.Base de datos := 'database_name';
        UniConnection.SpecificOptions.Values['Schema'] := 'schema_name';
        UniConnection.Username := 'user_name';
        UniConnection.Password := 'password';
    
        try
          UniConnection.Connect;
        except
          on E: Exception do
            ShowMessage(E.Message);
        end;
      finally
        UniConnection.Free;
      end;
    end;

    interbase

    Puede trabajar con bases de datos InterBase locales y remotas con iOS. Consideremos ambos enfoques. Primero, como siempre, especifica el proveedor:

    UniConnection.ProviderName := 'InterBase';

    Para una base de datos local, especifique la ruta al archivo local:

    UniConnection.Base de datos := IncludeTrailingPathDelimiter(TPath.GetDocumentsPath) + 'db.gdb';

    Para una base de datos remota, especifique el nombre del servidor y la ruta del archivo en el servidor:

    UniConnection.Server := 'server';
    UniConnection.Base de datos := 'D:db.gdb';

    Ejemplo de conexión a una base de datos local:

    var
      UniConnection:  TUniConnection;
    begin
      UniConnection := TUniConnection.Create(nil);
      try
        UniConnection.ProviderName := 'InterBase';
    
        UniConnection.Base de datos := IncludeTrailingPathDelimiter(TPath.GetDocumentsPath) + 'db.gdb';
        UniConnection.Username := 'user_name';
        UniConnection.Password := 'password';
    
        try
          UniConnection.Connect;
        except
          on E: Exception do
            ShowMessage(E.Message);
        end;
      finally
        UniConnection.Free;
      end;
    end;

    Ejemplo de conexión a una base de datos remota:

    var
      UniConnection:  TUniConnection;
    begin
      UniConnection := TUniConnection.Create(nil);
      try
        UniConnection.ProviderName := 'InterBase';
    
        UniConnection.Server := 'server';
        UniConnection.Base de datos := 'D:db.gdb';
        UniConnection.Username := 'user_name';
        UniConnection.Password := 'password';
    
        try
          UniConnection.Connect;
        except
          on E: Exception do
            ShowMessage(E.Message);
        end;
      finally
        UniConnection.Free;
      end;
    end;

    Implementar la base de datos en iOS

    Para que nuestra aplicación funcione con las bases de datos locales SQLite e InterBase ToGo, debemos asegurarnos de que estas bases de datos se implementarán en el dispositivo iOS. No hay nada complicado al respecto. Primero necesitamos llamar al menú Proyecto-> Despliegue:

    Luego agregue nuestras bases de datos para SQLite e InterBase a la lista de archivos que deben implementarse en su dispositivo iOS junto con su aplicación.

    Asegúrese de cambiar el valor predeterminado remoto a "". con los "Documentos de inicio" correctos para los archivos agregados.

    Depuración de aplicaciones en simuladores de iOS

    Digamos que creó su primera aplicación (o recogió un proyecto de demostración listo para usar que se puede encontrar en la carpeta donde se instaló UniDAC). El siguiente paso será iniciar la aplicación en iOS Simulator. Para hacer esto, necesitas:

    1. Mac OS Lion (OS X 10.7) o Mountain Lion (OS X 10.8): supongamos que tiene Mac OS, porque sin él el desarrollo de aplicaciones iOS es simplemente imposible;
    2. Xcode 4.3 para iOS 5.1 o Xcode 4.5 para iOS 6: es simple: en Mac OS, vaya a https://developer.apple.com/downloads/ y descargue el Xcode requerido;
    3. PAServer - nada complicado aquí tampoco. La carpeta PAServer se encuentra en la carpeta donde instaló RAD Studio XE4. Esta carpeta tiene el paquete RADPAServerXE4.pkg, es un instalador de PAServer para Mac OS. Cópielo en su sistema operativo Mac y ejecútelo.

    Estos son todos los requisitos para ejecutar su aplicación en iOS Simulator. Ahora podemos ir directamente al inicio de la aplicación.

    El primer paso es ejecutar PAServer en Mac OS:

    servidor PAEstablezca la contraseña que necesita especificar en RAD Studio XE4 para conectarse al PAServer en ejecución (la contraseña puede estar vacía). Luego vemos una ventana que le solicita que ingrese la contraseña de administrador:

    contraseñaIntroduzca la contraseña de administrador. La preparación de Mac OS y PAServer está completa.

    Ahora ejecute RAD Studio XE4, abra nuestra aplicación y seleccione la plataforma - iOS Simulator:

    Seleccione el simulador de iOSSi se selecciona la plataforma, podemos intentar ejecutar la aplicación. Lo más probable es que el perfil eliminado aún no se haya creado, por lo que se le pedirá que cree uno nuevo:

    Nuevo perfilNo hay nada complicado en crear un nuevo perfil remoto. Debe especificar lo siguiente:

    • nombre de perfil;
    • el nombre de host o la dirección IP de la ordenador Mac OS que ejecuta PAServer;
    • la contraseña que especificó al iniciar PAServer (si la especificó).

    Crear un perfilFinalmente, siguiendo estos sencillos pasos, inicie nuestra aplicación en iOS Simulator:

    Aplicación en el simulador

    Inicie la aplicación en un dispositivo iOS real

    Una vez que su aplicación comience a ejecutarse en iOS Simulator, queda el último paso: ejecútelo en su iPhone, iPad o iPod. Si completó todos los pasos anteriores y lanzó la aplicación en iOS Simulator, significa que su sistema operativo Mac ya está configurado y listo para implementar la aplicación creada en su dispositivo iOS. Solo queda elegir la plataforma - Dispositivo iOS:

    Seleccione su dispositivo iOSY, por supuesto, ejecutar la aplicación. Cuando intente ejecutar la aplicación en un dispositivo iOS real, lo más probable es que vea la siguiente ventana:

    Agregar un nuevo SDKPara ejecutar la aplicación en un dispositivo iOS real que no sea el perfil remoto, debe seleccionar la versión SDK. Para seleccionar el SDK, debe crear un nuevo perfil remoto (porque el perfil remoto para iOS Simulator es diferente del perfil remoto para el dispositivo real).

    Entonces creamos un nuevo perfil remoto (su creación no es diferente de crear un perfil remoto para el simulador) y elegimos un SDK compatible con la versión de iOS en su dispositivo:

    Agregar un nuevo SDK

    Ahora puede ver el resultado de su aplicación no en un simulador abstracto, sino en un dispositivo real:

    aplicación para iPod

    Conclusión

    Revisamos una muestra de cómo crear las aplicaciones de base de datos más simples para iOS en Delphi XE4 que pueden conectarse a SQLite, Oracle, MySQL, PostgreSQL e InterBase ToGo usando UniDAC. Y esperamos que este artículo lo ayude a dar el primer paso para crear sus propias aplicaciones iOS.

    Artículos de interés

    Subir