在我的应用程序中,我有一个相对较长的lib链,它们相互调用并从Yosemite开始,它的一部分功能因代码签名问题而被破坏。这一切都很好地适用于Maverics。
我的cocoa应用程序使用Java来运行单独的代码部分,这是访问java库(hbci4java.jar)所必需的。然后,该库使用jni调用我提供的包装器dylib来访问系统的PCSC.framework(智能卡)。
由于优胜美地不再适用,可能是因为:
28.10.14 15:29:201296 com.apple.ctkpcscd [40978]:拒绝没有com.apple.security.smartcard权利的沙盒PCSC.framework客户端
到目前为止这么容易。我将这个智能卡权利添加到应用程序权利以及我对java的权限(有一个单独的java.entitlements文件) - 无济于事。
我现在有点卡住而不知道如何继续。智能卡权利没有提到,所以我不知道实际设置了什么(我使用了bool和YES),也没有确定必须设置的地方。
是否可以向第三方库添加权利?我想尝试将它添加到包装器dylib(由我签名),以查看它是否可以正确访问PCSC.framework?
答案 0 :(得分:0)
如果您正在查看代码签名问题,我认为此链接是您应阅读的源代码。关于第三方图书馆有一个模糊点:
Apple uses the industry-standard form and format of code signing certificates. Therefore, if your company already has a third-party signing identity that you use to sign code on other systems, you can use it with the OS X codesign command. Similarly, if your company is a certificate issuing authority, contact your IT department to find out how to get a signing certificate issued by your company.
这是权利和代码签名的“引擎盖下”解释。我发现它非常有用,并认为它也可能对你有益。
http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood
如果此信息不能完全回答您的问题,我希望它至少可以帮助您走上正确的道路。干杯!
答案 1 :(得分:0)
事实证明,这是涉及智能卡dylib的一个非常特殊的问题。 Apple决定不允许在已签名的应用程序之外访问它(这在开发过程中很麻烦,我们只在部署阶段签署应用程序)。签署java二进制文件(jar + dylib)没有什么区别,但是没有权限+完全签署Java文件我们得到了更多(签署子组件不再有任何问题)。
在这里发挥作用的另一个问题是看起来智能卡授权的继承不起作用(这使得这对沙盒应用程序也不起作用)。使用简单的纯cocoa应用程序,然后访问智能卡,因此我们需要一个不同的解决方案(可能将智能卡的访问层移动到应用程序中并通过回调与Java部分通信)。