映射过程和映射文件有不同的团队ID。

问题描述 投票:0回答:1

macOS 10.14.5 --> 对不起,我的Catalina在工作中被隔离!Xcode 11.2.1。

com.apple.security.cs.disable-library-validation并没有按照文档的规定行事。

我的测试应用程序是基于X11(XQuartz)的,因此需要来自opX11和usrlib的库,它们与我的团队ID不同。

这个应用程序包含一个C语言二进制文件,它的工作原理是调用 "winteracter "这个小的FORTRAN二进制文件来显示一个X11窗口和对话。"winteracter "在导入Xcode之前已经被signedhardenedsandboxed(继承)。它被放置在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/>

应用程序成功公证(因此签名、硬化和沙盒都是Ok)High Sierra:它可以工作。Mojave:它给出了运行时错误(Console: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与苹果的描述 "disable-library-validation "相矛盾2-2019年12月,我通过简单地使用带有"-o runtime "的命令行codesign得到了一个功能性公证的应用程序。这不再工作。

任何建议?

libraries sandbox notarize
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 "是基于Winteracter库<http:/www.winteracter.com> 它使用OpenMotif和Xquartz。

冬字 二进制

这个二进制文件是在其他文件之前手动硬化的(即从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- 苹果说沙盒键必须在主二进制的 entitlement 文件中只出现一次,其他的只有 "继承 "键。我误以为com.apple.security.cs.disable-library-validation也是继承的。

2- 我以为com.apple.security.app-sandbox这个键在权限文件中是强制性的。完全不是!

3- 我误以为把com.apple.security.app-sandbox设置为false就等于没有权限文件。又错了!

4-我错误地认为Xcode界面 "Signing & Capabilities "可以正确管理Build Settings。

5- 我进行了这么多的试错,以至于我不记得所有的死胡同,我迷路了。

© www.soinside.com 2019 - 2024. All rights reserved.