【问题标题】:How can I use Xcode to compile a C program so I can use the binary in the sandbox?如何使用 Xcode 编译 C 程序,以便在沙箱中使用二进制文件?
【发布时间】:2019-02-26 13:57:29
【问题描述】:

我有一个 Cocoa 应用程序,它运行我包含在项目中的二进制可执行文件,除非我打开沙盒。我想要沙盒,所以我需要一种方法来授权该程序的运行。我有源代码——这个二进制可执行文件是一个大包的一部分,它带有一个 shell 脚本,用于制作软件和一堆其他程序。它在我的 Mac 上使用此脚本成功编译。

我在 stackoverflow 上发现了另一篇文章,其中建议可以在 XCode 中编译 C 代码以及应用程序的其余部分,并且允许以这种方式执行。

这是真的吗?我想将 C 代码编译为我的应用程序的一部分并运行它创建的二进制可执行文件。

【问题讨论】:

  • 您可以将二进制文件嵌入到您的应用程序中,只要它使用与应用程序相同的证书进行签名,您就可以在打开沙盒的情况下运行它。 Apple Developer 网站上一定有一些关于这个的东西......
  • @trojanfoe 好的,谢谢,这为我指明了正确的方向。现在来了解如何使用现有的 make 脚本在 Xcode 中编译它。
  • 扔掉makefile。只需在 Xcode 项目中添加一个新目标,它应该很容易配置。
  • 我会这样做,看看结果如何。我需要的可执行文件通常与一堆其他东西一起编译,作为一种大库(NCBI 的 C 工具包)的一部分。我只是尝试使用codesign -s "Me" theBinary 对二进制可执行文件进行代码设计,并使用Bundle.main.url(forAuxiliaryExecutable: "theBinary") 从我的应用程序访问它,但它仍然失败并报告“必须提供启动路径”,然后在 () 中跟踪一些其他注释。跨度>

标签: c swift xcode sandbox entitlements


【解决方案1】:

我明白了。

正如 trojanfoe 所建议的那样,代码签名奏效了。

codesign -s "Me" theBinary

问题出在我的 Swift 行,

Bundle.main.url(forAuxiliaryExecutable: "theBinary")

我改成,

Bundle.main.url(forResource: "theBinary", withExtension: nil)

现在它可以工作了。好的!只花了我 99 美元。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多