libraries - 映射进程和映射文件具有不同的团队 ID

标签 libraries sandbox notarize

macOS 10.14.5 --> 抱歉,我的 Catalina 在工作中处于隔离状态! Xcode 11.2.1

com.apple.security.cs.disable-library-validation 的行为与文档不符。

我的测试应用程序基于 X11 (XQuartz),因此需要/opt/X11/和/usr/lib/中的库,它们的团队 ID 与我的不同。

该应用程序包含一个 C 二进制文件,其工作方式称为“winteracter”,这是一个显示 X11 窗口和对话的小型 FORTRAN 二进制文件。 “winteracter”在导入到 Xcode 之前已被签名/强化/沙盒化(继承)。它被放置在 Resources 文件夹中,但放置在 MacOS 中没有区别。

权利如下: 主要应用:

<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.temporary-exception.files.absolute-path.read-only</key>
<array>
    <string>/opt/X11/lib/</string>
    <string>/usr/lib/</string>
</array>

辅助二进制文件:

<key>com.apple.security.inherit</key>
<true/>

应用程序成功公证(因此签名、强化和沙箱都可以) 高塞拉:有效。 Mojave:它给出运行时错误(控制台:error+fault+winteracter):

Library Validation failed: Rejecting '/opt/X11/lib/libXt.6.dylib' (Team ID: NA574AWV7E, platform: no) for process 'winteracter(11592)' (Team ID: P65398CN49, platform: no), reason: mapping process and mapped file (non-platform) **have different Team IDs**

这很奇怪,原因有二: 1-拒绝不同的团队ID与Apple对“disable-library-validation”的描述相矛盾 2019 年 12 月 2 日,我通过简单地使用带有“-o runtime”的命令行协同设计获得了一个功能性的公证应用程序。这不再有效。

有什么建议吗?

最佳答案

这里是我的解决方案的更详细描述。

我终于找到了一个解决方案来获得功能齐全的经过公证的应用程序。 该 bundle 的组织方式如下:

  TestApp.app
     Contents
        MacOS
           testAppp  <--  a launcher (C binary)
           myAlert     <-- an alert dialogue (Cocoa binary)
        Resources
           winteracter <-- an X11 (Xquartz) window and dialogue (Fortran binary)

二进制文件“winteracter”基于Winteracter 库<http://www.winteracter.com > 使用 OpenMotif 和 Xquartz

winteracter 二进制文件

此二进制文件先于其他二进制文件手动强化(即从 Xcode 外部):

codesign -d --force --options runtime --verbose=4 -s "$DEV_CERTIFICATE" --entitlements "winteracter.entitlements" "winteracter"

winteracter.entitlements 应仅包含以下键:

<key>com.apple.security.cs.disable-library-validation</key>
<true>

testAppmyAlert 二进制文件

这些是手动签名和强化的:

codesign -d --force --options runtime --verbose=4 -s "$DEV_CERTIFICATE" "$MYBINARY"

或使用 Xcode:

In that case be sure to manually erase the field "*Code Signing Entitlements*" in Build Settings.

即使您从功能界面中删除“沙盒”,它也可能会保持填充状态。

经过公证后,该应用程序即可正常运行。 我尝试对其进行沙箱处理,但臭名昭著的错误“映射进程和映射文件(非平台)具有不同的团队 ID”又出现了!

但是我的错误是什么?

1- Apple 表示,沙箱 key 只能在主二进制文件的权利文件中出现一次,其他 key 仅具有“继承” key 。我错误地认为 com.apple.security.cs.disable-library-validation 也被继承了。

2-我认为 com.apple.security.app-sandbox key 在权利文件中是强制性的。一点也不!

3-我错误地认为将 com.apple.security.app-sandbox 设置为 false 相当于没有授权文件。又错了!

4-我错误地认为 Xcode 界面“签名和功能”正确管理build设置。

5-我执行了太多的尝试错误,以至于我不记得我迷路的所有死胡同。

关于libraries - 映射进程和映射文件具有不同的团队 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61449772/

相关文章:

订阅域事件时的 C# AppDomain 沙箱安全异常

silverlight - Silverlight 可以包含 ActiveX 吗?

java - 无法在 MacOS Catalina 下安装经过公证的 Java 应用程序

libraries - Qt 通用错误消息

Android导入库报错DefaultGroovyMavenDeveloper

objective-c - 如何为 IOKit 属性设置临时权利?

macos - 我需要公证应用程序和 dmg 图像吗?

macos - 为什么使用 Homebrew 软件安装的可执行文件在 MacOS 上受信任?

c++ - 如何构建 Boost::program_options

c++ - 如何在 Objective-C 中使用 C++ 库