我有一个在沙箱中运行的应用程序,它使用NSTask启动一个帮助应用程序包(帮助程序包含在应用程序包中).
使用正确的权利,主应用程序能够使用NSTask启动帮助程序,沙箱继承而不会崩溃.唯一的问题似乎是当我打开一个NSOpenPanel时,我得到了下面的崩溃.请注意,使用NSOpenPanel时,调用者应用程序不会崩溃,只需要帮助程序.
这看起来像是系统中的一个错误,所以如果有人在遇到这种情况之前遇到过这个错误.
以下是主应用程序的权利:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.device.usb</key>
<true/>
<key>com.apple.security.files.bookmarks.app-scope</key>
<true/>
<key>com.apple.security.device.serial</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
帮助者的权利:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
NSOpenPanel打开时发生崩溃:
2015-12-09 10:35:56.879 Desktops[29807:22090051] -[NSVBSavePanel init] caught non-fatal NSObjectNotAvailableException 'service com.apple.appkit.xpc.openAndSavePanelService failed to init an instance of NSOpenPanelService on behalf of <NSLayerCentricRemoteView: 0x1077fd0> due to {
callStackSymbols = ( …Run Code Online (Sandbox Code Playgroud) 我是使用 IOKit 的新手,并注意到我认为是沙箱导致它失败。
这是我正在尝试的测试(在 Pascal 中),它在沙箱外运行良好,但是当我启用它时,IOServiceOpen 每次都会返回错误 kIOReturnNotPermitted。
对于某些服务,IOKit 在沙箱中不安全吗?我试图获得一些风扇速度/cpu 温度,我看到 AppStore(沙盒)中有一些应用程序这样做,所以我相信这是可能的。我唯一能确认的似乎有一个与应用程序捆绑在一起的 XPC 服务作为助手,所以也许这是使 IOKit 工作的线索?我基本上尝试了所有的权利,但似乎没有一个对任何人有帮助。
感谢您的任何想法。
procedure TestIOKit;
var
err: kern_return_t;
masterPort: mach_port_t;
iterator: io_iterator_t;
device: io_object_t;
matchingDictionary: CFMutableDictionaryRef;
conn: io_connect_t;
begin
IOMasterPort(0, masterPort);
matchingDictionary := IOServiceMatching('AppleSMC');
err := IOServiceGetMatchingServices(masterPort, matchingDictionary, iterator);
if err <> kIOReturnSuccess then
writeln('IOServiceGetMatchingServices: ', err);
device := IOIteratorNext(iterator);
IOObjectRelease(iterator);
if device = 0 then
writeln('no smc found');
err := IOServiceOpen(device, mach_task_self_, 0, conn);
if err <> kIOReturnSuccess then
writeln('IOServiceOpen: ', err);
end;
Run Code Online (Sandbox Code Playgroud) 我已成功为 TestFlight 上传了一个应用程序,但现在存档和上传后,它给了我这个我无法解释的错误。只是为了确保我取消选中功能目标选项卡中的所有权利,但这似乎无关紧要。
我查看了所有应用程序 ID、证书和配置文件,但没有任何异常。我会查看由 Xcode 生成的实际 .plist 文件,但我看不到它在哪里,或者它是否存在。我应该在哪里检查以验证发生了什么?Xcode 是一团糟,所以我什至不相信这不是一些随机错误(我当然清理了目标只是为了确保)。
自动签名无法解决“...”目标的权利问题。切换到手动签名并通过从开发人员网站下载匹配的配置文件来解决问题。或者,要继续使用自动签名,请从您的权利文件中删除这些权利,并从您的代码中删除它们的相关功能。然后重建您的存档并重试。
供应配置文件失败的资格配置文件与应用程序标识符权利的权利文件值不匹配。
当我在沙盒程序中调用 AXIsProcessTrustedWithOptions 时,请求权限的对话框未打开,并且我在控制台中收到“sandbox Deny(1) mach-lookup com.apple.universalaccessAuthWarn”错误。
如果我为 com.apple.universalaccessAuthWarn 添加临时权利 com.apple.security.temporary-exception.mach-lookup.global-name ,错误就会消失并出现对话框。然而,这没有任何意义,如果我需要这个权利来简单地询问用户的许可,我怀疑它会被 AppStore 拒绝。
有谁知道我所做的是否正确?
我正在尝试使用 WebGL,并希望将一些不同类型混合到一个字节缓冲区中。我知道 TypedArrays 可以达到这个目的,但不清楚我是否可以与它们混合类型(OpenGL 顶点数据通常是与无符号字节或整数混合的浮点数)。
在我的测试中,我想将 2 个浮点数打包到 using 中UInt8Array,set()但它似乎只是将 2 个浮点数放入 的前 2 个元素中UInt8Array。当然,我希望它能填满数组,因为我们有 8 个字节的数据。
无论如何,有没有办法在 JavaScript 中实现这一点,或者我是否需要将所有顶点数据保留为浮点数?
src = new Float32Array(2); // 2 elements = 8 bytes
src[0] = 100;
src[1] = 200;
dest = new UInt8Array(8); // 8 elements = 8 bytes
dest.set(src, 0); // insert src at offset 0
dest = 100,200,0,0,0,0,0,0 (only the first 2 bytes are set)
Run Code Online (Sandbox Code Playgroud) cocoa ×2
macos ×2
code-signing ×1
entitlements ×1
iokit ×1
javascript ×1
nsopenpanel ×1
typed-arrays ×1
webgl ×1
xcode ×1