Tag: 达尔文

从主屏幕检测密码locking状态

我想知道是否有任何方法(应在Appstore上批准)来检测设备密码何时在主屏幕上激活。 基本上,我的应用程序想知道这些电话事件: 设备屏幕打开/closures 手机locking/解锁(通过自动locking设置/按电源button) 密码激活(通过需要密码设置) 据我研究, Darwin Notification Center和notify_get_state结合4个事件可以达到1和2: com.apple.springboard.lockstate com.apple.springboard.lockcomplete com.apple.springboard.hasBlankedScreen com.apple.iokit.hid.displayStatus 我得到的问题是这些事件只告诉我有关locking/解锁状态,而不是密码状态。 这意味着如果您需要密码5分钟后,您可以在第一个4分钟内locking/解锁手机,无需密码。 我也知道有一种方法可以通过使用SBGetScreenLockStatus(port, &locked, &passcode)来获得锁状态和密码状态。 但它使用私有框架,所以它会被苹果拒绝。 从这个主题( 编程检查是否设置了密码锁 )我只会得到如果密码设置在手机上或没有。 更新:我发现有一个事件callback时密码是有效的。 com.apple.mobile.keybagd.lock_status但找不到任何关于它的文档。 当我使用notify_get_state时,它不会改变值。

如何在Swift for iOS中正确使用CFNotificationCenterAddObserver

把我的头发拿出来让CFNotificationCenterAddObserver在Swift中工作。 CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), UnsafePointer<Void>(self), iosLocked, "com.apple.springboard.lockcomputer" as CFString, nil, CFNotificationSuspensionBehavior.DeliverImmediately) iOS文档有它列出,我已经尝试了无数次的callback和不安全的指针,没有成功。 上面的函数调用导致这个错误消息,这似乎是正确的init: Cannot invoke 'init' with an argument list of type '(CFNotificationCenter!, $T4, () -> (), CFString, NilLiteralConvertible, CFNotificationSuspensionBehavior)' 我也尝试过桥接objc 这个post在这里build议,但没有成功。 这是我的桥: LockNotifierCallback.h: #import <Foundation/Foundation.h> @interface LockNotifierCallback : NSObject + (void(*)(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo))notifierProc; @end 和LockNotifierCallback.m: #import "LockNotifierCallback.h" static […]