以编程方式锁定设备上的屏幕

时间:2013-08-22 18:27:24

标签: ios objective-c cocoa-touch

我已经阅读了有关相同的其他问题,但每个人只是说“越狱”,“它永远不会被Apple批准”,“这是不可能的”和'私有API,GraphicsServices.framework'。

让我澄清一些事情,我不是为越狱手机做这个,我这样做是因为手机上的锁定按钮被打破了,我只是想不必等待1分钟才能看到屏幕锁。所以我想我可以在lockScreen的开头有一个名为AppDelegate.h的应用。这不适用于AppStore,只适合我。

我见过有人说他们可以在GSEventLockDevice();导入GSEvent.h时使用GraphicsServices.framework,但是当我尝试运行它时(在设备和模拟器上)我得到了这个,它不会建立:

    Undefined symbols for architecture armv7s:
  "_GSEventLockDevice", referenced from:
      -[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o
ld: symbol(s) not found for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我不完全确定这意味着什么。如果我删除了行GSEventLockDevice();但仍导入GSEvent.h,则一切正常。 我的设备是否需要越狱才能使用此功能?

3 个答案:

答案 0 :(得分:3)

其他人已经解决了这个问题。你可以在Github上找到它:https://github.com/neuroo/LockMeNow

char *gsDylib = "/System/Library/PrivateFrameworks/GraphicsServices.framework/GraphicsServices";
void *handle = dlopen(gsDylib, RTLD_NOW);
if (handle) {
  BOOL locked = FALSE;
  void (*_GSEventLockDevice)() = dlsym(handle, "GSEventLockDevice");
  if (_GSEventLockDevice)  {
    _GSEventLockDevice();
    //...
  }
  dlclose(handle);
  //...
}

答案 1 :(得分:3)

没有理由对应用进行编码以锁定手机。在辅助功能设置中使用辅助触摸可以从屏幕上的按钮完成硬件按钮任务。这个按钮可以从手机上的任何地方在屏幕上访问(但可以很容易地隐藏),因为您的“锁定应用程序”只能从主屏幕访问。看看这个support article。相信我,我的锁定按钮也被打破了。

答案 2 :(得分:0)

您收到了未定义的符号错误,因为您没有链接到应用中的私有框架。它需要包含在您的构建阶段链接二进制文件库步骤。

由于GraphicsServices.framework不是公共框架,因此它不会显示在框架列表中。我发现这个答案提供了链接到私有框架的步骤。我没试过,所以YMMV。

How do I add the following private frameworks to my iPhone app?