これについては 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.RegularExpressionsCore
680番線で...
{$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 のバージョンがすべて完全に一致することを確認しました。しかし、問題はまだ解決していません。