如何使用 Xcode 编译 C 程序,以便在沙箱中使用二进制文件?

Posted

技术标签:

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

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

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

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

【问题讨论】:

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

我明白了。

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

codesign -s "Me" theBinary

问题出在我的 Swift 行,

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

我改成,

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

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

【讨论】:

以上是关于如何使用 Xcode 编译 C 程序,以便在沙箱中使用二进制文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 C 中的命令行在 Xcode 中执行和编译程序以及可执行文件在哪里?

如何为 Xcode UI 测试禁用沙箱

在 Xcode 中添加链接器标志

xcode 如何编译

Xcode 7.3 如何将我现有的 iPhone 应用程序转换为通用应用程序,以便在 iOS 中与 iPad 一起使用

如何编译依赖项以在 cabal 沙箱中进行分析