在Swift中使用LSApplicationWorkspace

我已经将MobileCoreServices.framework添加到我的Xcode项目中,并将语句import MobileCoreServices到我的文件顶部。

我有代码行

let test = LSApplicationWorkspace.defaultWorkSpace()

而xcode表示Unresolved Identifier LSApplicationWorkspace

我试图清理和重build项目。 有任何想法吗?

Swift编译器告诉你它并不知道一个名为LSApplicationWorkspace的类。 这是因为它是一个私人类,不作为第三方开发者提供给你的任何头文件中描述。 如果您在App Store审查过程中使用LSApplicationWorkspace API,您的提交将被拒绝。 鉴于这个类包含的操作系统版本之间的变化(由于没有文档和私人)和API是为了良好的隐私原因不提供给第三方开发,使用它几乎肯定是一个非常糟糕的主意,即使你在技术上可以通过以下任一方法来完成。

  1. 创build一个专用模块映射文件,您可以在其中导入您以某种方式为包含LSApplicationWorkspace的私有框架获取的头文件。 这种调用LSApplicationWorkspace的方法(实际上涉及使用移动CoreServices的头文件的任何方法 – 即除了performSelector以外的任何方法)几乎肯定会让你的应用程序提交从App Store评论引导,因为这种(最终)Objective- C方法调用对于静态分析方法是可见的,苹果在你的代码上运行,作为App Store评论的一部分。

  2. 使用NSClassFromString:

 let LSApplicationWorkspace_class:AnyObject = NSClassFromString("LSApplicationWorkspace")! as AnyObject let workspace = LSApplicationWorkspace_class.perform(NSSelectorFromString("defaultWorkspace"))! as AnyObject 

通过上面的代码,你现在可以得到一个LSApplicationWorkspace的实例,你可以用performSelector来执行代码 – 你应该知道它响应的是什么select器(…在你正在运行的特定操作系统版本中)。 再次,LSApplicationWorkspace做任何事情可能是一个坏主意。

要点1: LSApplicationWorkspace是私人api,所以如果你使用这个,并将你的应用上传到app store,它将被拒绝。

第二点:如果你有任何内部的应用程序,仍然想在你的应用程序中使用它,那么下面是使用它的方式。

  1. 在您的包中添加MobileCoreServices框架
  2. 使用与此处提供的代码完全相同的代码创buildLSApplicationWorkspace.h文件“ https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/MobileCoreServices.framework/LSApplicationWorkspace.h ”。
  3. 现在将这个LSApplicationWorkspace.h文件添加到你的包中
  4. 为您的swift应用程序创build桥接头
  5. 在桥接头中添加#import "LSApplicationWorkspace.h"
  6. 现在添加import MobileCoreServices在您当前的文件,并添加您的代码let test = LSApplicationWorkspace.defaultWorkSpace() ,它将正常工作。

注意:对于使用任何专用标头,您必须包含其.h文件到您的代码。 你可以通过在谷歌search“运行时间标题”find任何私人标题。 您将获得所有运行时标题。 为了在你的swift代码中包含这个头文件,你需要通过桥接头。