0

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”一个小的 FORTRAN 二进制文件,它显示一个 X11 窗口和对话框。在导入 Xcode 之前,“winteracter”被签名/硬化/沙盒化(继承)。它放在 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/>

该应用程序成功公证(因此签名、强化和沙盒都可以) High Sierra:它可以工作。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 对“禁用库验证”的描述相矛盾 2-2019 年 12 月我通过简单地使用带有“-o 运行时”的命令行代码设计获得了一个功能性公证应用程序. 这不再有效。

有什么建议吗?

4

1 回答 1

0

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

我终于找到了一个解决方案来获得一个经过公证的功能性应用程序。捆绑包的组织如下:

  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”基于使用 OpenMotif 和 Xquartz的 Winteracter 库 < http://www.winteracter.com >

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.

即使您从 Capabilities 界面中删除“Sandboxing”,它也可能保持填写状态。  

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

但我的错误是什么?

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

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

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

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

5- 我进行了如此多的尝试和错误,以至于我完全不记得我迷路的所有死胡同。

于 2020-04-29T18:26:11.613 回答