ios - 添加 XSuperObject 时项目无法在 iOS 中启动

标签 ios delphi firemonkey delphi-xe8 xsuperobject

我已经 reported this directly to the X-SuperObject project ,但我想我可能会在 Stack Overflow 上获得更多高质量的帮助。

使用 Delphi XE8,我在 iOS 模拟器(7.1、8.1、8.2 和 8.3)上使用 XSuperObject 时遇到问题。所以我启动了一个空的 Firemonkey 应用程序,开始添加我之前项目中的一些内容(此时我不知道问题是什么)。一切工作正常,直到我将最新的 XSuperObject 和 XSuperJSON 单元添加到我的应用程序中。

uses
  XSuperObject, XSuperJSON;

在 iOS 模拟器中运行时,出现异常:

项目 dyld_sim 引发异常类 EOSError 并显示消息“系统错误”。代码:2.没有这样的文件或目录。

我没有代码,除了添加单元(XSuperObject、XSuperJSON)和一些基本控件(面板、按钮和组合框)之外,没有进行任何更改。

当我休息时,我会:

System.SysUtils.RaiseLastOSError - 最后一行引发错误;

...这只是引发实际异常本身的地方,没有任何相关性。

因此,我打开了主项目文件,并在第一行 Application.Initialize; 上放置了一个断点,但从未到达该断点。我还在 XSuperObject 和 XSuperJSON 的“初始化”中放置了断点,它们都没有停止。

Call Stack

当我移除这两个单元后,一切又恢复正常了。

这里出了什么问题以及如何修复它?

  • X-SuperObject 版本:已拉取更新 from here就在报告之前
  • Delphi XE8 版本 22.0.19027.8951(无更新)
  • IDE 操作系统:Windows 7 SP1(版本 6.1,内部版本 7601,64 位)
  • Mac 操作系统:OS-X 10.10.3
  • 目标操作系统:iOS 模拟器 - iPad Air/iOS 8.2 (12D508)

注意:以上版本详细信息只是一个具体示例,但我无法让它在任何 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 版本都完美匹配。但问题仍然存在。

最佳答案

请安装iOS 8 Simulator Hotfix ,那么它应该可以正常工作。

关于ios - 添加 XSuperObject 时项目无法在 iOS 中启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30547414/

相关文章:

ios - 单个 IOS 应用程序可以连接到多个 Parse.com 应用程序吗?

delphi - 何时引发异常?

android - MultiView 首秀,FPS 很低的动画

android - 使用 TObject 后代调用 std::vector::push_back 时出现 C++ Builder bccarm 错误

Delphi:将异常捕获到TTask中并引发到主线程

delphi - 如何为 firemonkey TForm OnKeyDown 事件 : 分配快捷键

iOS CGColor 与 UIColor

iphone - 在选定的选项卡栏项目上点击两次隐藏当前 View Controller

ios - Json 解析失败

delphi - 在Delphi 2007中将事件处理程序分配给窗体上的所有控件