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得到了一个功能性公证的应用程序。这不再工作。
任何建议?
这里详细介绍一下我的解决方案。
我终于找到了一个解决方法来获得一个可以使用的公证应用程序,这个捆绑包组织如下。
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>
testApp 和 myAlert 二进制
这些都是手动签署和硬化的。
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- 我进行了这么多的试错,以至于我不记得所有的死胡同,我迷路了。