【问题标题】:Building a C/C++ external for LiveCode 9.01 with Xcode 10使用 Xcode 10 为 LiveCode 9.01 构建 C/C++ 外部
【发布时间】:2018-10-07 20:25:22
【问题描述】:

我已经接管了一个旧的 LiveCode 应用程序的维护工作,该应用程序使用了一个用 C 编写的自定义外部库。该应用程序不再适用于最近的平台,我有理由确定外部的复杂性是罪魁祸首。我是 LiveCode 新手,不经常使用 Xcode。

我决定使用我能找到的最新 LiveCode 文档(从 2006 年 11 月开始)构建一个简单的外部:

http://newsletters.livecode.com/november/issue13/newsletter5.php

由于不再支持 i386 架构,我已从所有 Xcode 项目构建目标配置中删除了 PowerPC-32 和 x86-32,并从有效架构列表中删除了 i386。这些更改允许项目在 Xcode 中正确构建。

Xcode 10 似乎没有旧文章中引用的用于在发布模式下构建的相同接口。为了在 Release 配置中执行构建的初始步骤,我从菜单中运行了 Product > Archive。

当我“运行”项目时,确保“管理方案”界面中的构建配置为“调试”,LiveCode 测试堆栈 rnaHelloStack.rev 不会自动打开。我可以通过为该方案定义 LiveCode Indy 9.0.1.app 可执行文件来实现这一点:

1) 在方案选项中定义工作目录并将 rnaHelloStack.rev 作为参数传递。 2) 选择方案的 Launch 选项为“等待启动可执行文件”,并在运行项目后直接从 Finder 中打开 rnaHelloTest.rev 文件。

在所有情况下,当在 LiveCode 中打开 rnaHelloTest.rev 并添加按钮处理程序脚本时,代码会在调用外部函数时停止执行。

我已经修改了 LiveCode 代码和变量。我最好的猜测是外部没有正确加载到堆栈中。我搜索了更新的文档,但除了这个旧论坛帖子尝试类似的事情之外,什么也没找到:

https://forums.livecode.com/viewtopic.php?f=17&t=11295&sid=380a6fe4b12111f767fc863262a3acf9

如何确保通过更新的 LiveCode 9.0.1 IDE 和 Xcode 10 将文档中的此类简单外部用于 LiveCode 堆栈?

【问题讨论】:

    标签: external livecode xcode10


    【解决方案1】:

    正如@jjsjjs 所提到的,现在使用 Xcode 9.4 会更简单,因为 LiveCode 本身仍然支持 i386 构建,但 Xcode 不再这样做。您可能暂时想为 i386 和 x86_64 构建一个通用二进制文件,除非您确定该应用程序将仅构建为 x86_64。如果只为 x86_64 构建,请确保 LiveCode 未通过 Get Info 面板上的复选框以 32 位模式打开。 FWIW 我们在 macOS 10.9 sdk 中使用 Xcode 9.4 和符号链接,并针对它构建 LiveCode。

    外部文档非常过时了。这些天来,我们正在引导人们使用 LiveCode Builder 中的 FFI 功能,但是,如果您只想让外部重新工作而不是从头开始,我建议克隆我的一个开源外部并以此为基础。 mergJSONmergMarkdown。请注意,两者都使用子模块,因此请确保递归克隆。

    这些外部都没有在 IDE 中启动的测试目标。您将构建的外部文件复制到 these instructions 之后的插件文件夹中,然后启动 LiveCode。在开发新的外部时,我通常会添加一个构建阶段,该阶段通过脚本执行这些步骤以节省时间。

    在我们的engine repo 中也有一些示例,但是因为我们使用 gyp 生成我们的项目文件,它们可能没有那么有用。

    【讨论】:

    • 感谢您的回复,@monte-goulding。我对此问题的进一步研究和 LiveCode 论坛的反馈确实表明 FFI 功能是可行的方法。
    【解决方案2】:

    Xcode 10 尚不支持,可能很快就会出现新版本。 Livecode 总是在新的 Apple 版本之后运行。但这似乎是合乎逻辑的。 所以使用 Xcode 9.4

    【讨论】:

    • 今天我将 Xcode 降级到 9.4 版,并重复了“官方”文档中的 rnaHelloTest 教程。 Xcode 9.4 与版本 10 共享大致相同的界面,这使得许多文档的说明同样令人困惑。此外,它的性能基本相同,即 IDE 没有自动加载 rnaHelloTest.rev 堆栈,并且稍微调整项目以强制这种情况发生,导致在单击按钮时脚本出错,可能表明未加载外部库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2020-02-16
    相关资源
    最近更新 更多