1

これについては X-SuperObject プロジェクトに直接報告済みですが、Stack Overflow でより質の高いヘルプが得られるのではないかと考えました。

Delphi XE8 を使用して、iOS シミュレーター (7.1、8.1、8.2、および 8.3) で XSuperObject を使用すると問題が発生します。そこで、空の Firemonkey アプリを開始し、以前のプロジェクトにあったものをいくつか追加し始めました (この時点では、何が問題なのかわかりませんでした)。最新の XSuperObject および XSuperJSON ユニットをアプリに追加するまで、すべて正常に機能していました。

uses
  XSuperObject, XSuperJSON;

iOS シミュレーターで実行すると、例外が発生します。

Project dyld_sim raised exception class EOSError with message 'System Error. Code: 2. No such file or directory.

コードはなく、ユニット (XSuperObject、XSuperJSON) といくつかの基本的なコントロール (パネル、ボタン、およびコンボ ボックス) を追加する以外は何も変更していません。

休憩すると、次のことが起こります。

System.SysUtils.RaiseLastOSError- 最後の行raise Error;

...これは、実際の例外自体が発生した場所であり、関連性はありません。

そのため、メイン プロジェクト ファイルを開き、最初の行にブレーク ポイントを配置しましたApplication.Initialize;が、そのブレーク ポイントに到達することはありません。また、XSuperObject と XSuperJSON の両方の「初期化」にブレークポイントを設定しましたが、どちらも停止しませんでした。

コール スタック

両方のユニットを取り外すと、すべてが再び機能しました。

ここで何が問題になっていますか?どうすれば修正できますか?

  • X-SuperObject バージョン:報告の直前にここから更新をプルしました
  • Delphi XE8 バージョン 22.0.19027.8951 (更新なし)
  • IDE OS: Windows 7 SP1 (バージョン 6.1、ビルド 7601、64 ビット)
  • Mac OS: OS-X 10.10.3
  • 対象OS:iOSシミュレータ - iPad Air / iOS 8.2 (12D508)

注: 上記のバージョンの詳細は具体的な例の 1 つにすぎませんが、どの iOS デバイス/バージョンでも動作させることはできません。

更新: システムをデバッグした後 (115 番目のユニットの初期化)、例外が発生するポイントを知るようになりました。System.RegularExpressionsCore680番線で...

{$IFDEF DYNAMIC_LIB}
class constructor TPerlRegEx.Create;
begin
  if not LoadPCRELib then
    RaiseLastOSError; //<-- Exception raised here
end;
{$ENDIF DYNAMIC_LIB}

そして中にはLoadPCRELib

{$IFDEF DYNAMIC_LIB}
function LoadPCRELib: Boolean;

  function GetProcAddr(const ProcName: MarshaledAString): Pointer;
  begin
    dlerror;
    Result := dlsym(_PCRELib, ProcName);
  end;

  procedure SetCallback(const cbName: MarshaledAString; ProcPointer: Pointer);
  begin
    Pointer(GetProcAddr(cbName)^) := ProcPointer;
  end;

begin
  Result := True;
  if _PCRELib = 0 then
  begin
    Result := False;
    _PCRELib := HMODULE(dlopen(PCRELib, RTLD_LAZY)); //<-- Returns 0 (no handle)
    if _PCRELib <> 0 then
    begin
      // Setup the function pointers
      ...
      Result := True;
    end;
  end;
end;
{$ENDIF}

このユニットのみを使用してプロジェクトを実行している間は、問題なく動作します。

を見つけることができないよう/usr/lib/libpcre.dylibですが、X-SuperObject を使用している場合のみです。

OS-X、XCode、iOS シミュレータ、および Delphi IDE の SDK リンクを含むすべての環境を更新しました (すべて削除して再作成しました)。SDK と iOS のバージョンがすべて完全に一致することを確認しました。しかし、問題はまだ解決していません。

4

1 に答える 1

3

iOS 8 Simulator Hotfixをインストールしてください。正常に動作するはずです。

于 2015-05-31T05:29:42.813 に答える