Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Unterschied zwischen Debug und Anwendungs-Store Modi bei iOS (https://www.delphipraxis.net/181643-unterschied-zwischen-debug-und-anwendungs-store-modi-bei-ios.html)

Peter666 31. Aug 2014 19:08

Unterschied zwischen Debug und Anwendungs-Store Modi bei iOS
 
Hi,

ich habe hier ein Problem mit einer 200mb großen Datei die ich für eine App unter iOS laden will. Im Debugmodus klappt das ganze problemlos, aber im Anwendungs-Store-Modes stimmt die Dateigröße nicht und da ich meine Indexinformationen am Dateiende habe sind die Indexdaten natürlich Schrott.

Die Klasse schaut so aus:

Delphi-Quellcode:
unit UMyDB;

interface

uses System.Classes, System.SysUtils;

type
  TIndex = packed record
    Offset: Int64;
    len: Cardinal;
    flags: Cardinal;
  end;

  TMyDB = class
  private
    FStream: TFileStream;
    FIndex: Array of TIndex;
    function GetCount: Cardinal;
  public
    constructor Create(const Filename: String);
    destructor Destroy; override;
    function Read(index: integer; Stream: TMemorystream): Boolean;
    property Count: Cardinal read GetCount;
  end;

implementation

constructor TMyDB.Create(const Filename: String);
var
  len: Cardinal;
  sz: Int64;
begin
  SetLength(FIndex, 0);
  if FileExists(Filename) then
  begin
    FStream := TFileStream.Create(Filename, fmOpenRead);
    FStream.Position := FStream.Size - 4;
    FStream.Read(len, 4);
    SetLength(FIndex, len);
    sz := sizeof(TIndex) * len;
    FStream.Position := FStream.Size - 4 - sz;
    FStream.Read(FIndex[0], sz);
  end;
end;

destructor TMyDB.Destroy;
begin
  FreeAndNil(FStream);
  SetLength(FIndex, 0);
  inherited;
end;

function TMyDB.GetCount: Cardinal;
begin
  result := Length(FIndex);
end;

function TMyDB.Read(index: integer; Stream: TMemorystream): Boolean;
begin
  result := (index >= 0) and (index <= high(FIndex));
  if result and assigned(Stream) then
  begin
    Stream.SetSize(FIndex[index].len);
    FStream.Position := FIndex[index].Offset;
    FStream.Read(Stream.Memory^, Stream.Size);
    FStream.Seek(0, 0);
  end;
end;

end.

Sir Rufo 31. Aug 2014 21:57

AW: Unterschied zwischen Debug und Anwendungs-Store Modi bei iOS
 
Im Debug-Modus die Dateigröße eh anders als im Release-Modus (hatten wir gerade erst das Thema). Bie iOS werden zudem noch andere Bibliotheken (*.dcu) benutzt als für den Emulator.

Schau dir mal bei den Projekt-Optionen die Pfade der Bibliotheken an. Da gibt es durchaus Unterschiede.

Wirklich sinnvoll erscheint mir diese Vorgehensweise schon mal gar nicht und ob das beim Review gut ankommt, kann ich mir auch nicht vorstellen.

Warum keine eigene Datei, die du in das Paket mit einbindest?

Peter666 1. Sep 2014 11:49

AW: Unterschied zwischen Debug und Anwendungs-Store Modi bei iOS
 
Ich hab mich wahrscheinlich falsch ausgedrückt. Die "Datenbank" ist 180mb groß und besteht aus knapp 20000 Records. Diese sind in der Datei gespeichert und werden mit obiger Klasse gelesen. Nun ist aber in der Anwendungs-Store Konfiguration die Dateigröße eine andere als die eigentliche. Es ist als ob TFileStream auch nicht an die richtige Position springt, sofern man eine bestimmte KB Größe überschritten hat.

himitsu 1. Sep 2014 11:57

AW: Unterschied zwischen Debug und Anwendungs-Store Modi bei iOS
 
Welche Dateigröße?

Die von der EXE Anwendung oder die der DB-Datei?

mkinzler 1. Sep 2014 12:00

AW: Unterschied zwischen Debug und Anwendungs-Store Modi bei iOS
 
Da er von seiner "Datenbank" redet, wird er diese meinen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz