2016-03-04 183 views
3

我已经将MobileCoreServices.framework添加到我的Xcode项目中,并且在我的文件顶部有语句import MobileCoreServices在Swift中使用LSApplicationWorkspace

我的代码

let test = LSApplicationWorkspace.defaultWorkSpace()

而且Xcode中说Unresolved Identifier LSApplicationWorkspace

行我试图清理并重建项目。有任何想法吗?

+1

您是否找到了获取LSApplicationWorkspace的方法? – User9527

回答

4

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

  1. 创建私有模块映射文件where you import a header you somehow acquired for the private framework that contains LSApplicationWorkspace。这种调用LSApplicationWorkspace的方式(实际上涉及使用移动CoreServices头文件的任何方法 - 即除了performSelector以外提到的任何方法)几乎肯定会让您的应用程序提交从App Store评论启动,因为这种(最终)Objective- C方法调用对于静态分析方法是可见的,Apple作为App Store评估的一部分在您的代码上运行。

  2. 使用NSClassFromString:

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

与上面的代码,你现在得到与您可以用performSelector执行代码LSApplicationWorkspace的实例 - 你应该知道选择它响应(...在您正在运行的特定操作系统版本中)。但是,再次使用LSApplicationWorkspace做任何事情可能都是一个坏主意。

+0

提及NSClassFromString的奖励分数。 :) – Gero

3

Point 1: LSApplicationWorkspace是私有的api,所以如果你使用它并将你的应用上传到应用商店,它将被拒绝。

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

  1. 添加MobileCoreServices框架组合中的
  2. 创建LSApplicationWorkspace.h文件的代码作为这里“https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/MobileCoreServices.framework/LSApplicationWorkspace.h”提供的代码完全相同。
  3. 现在加上这个LSApplicationWorkspace.h文件到您的包
  4. 创建桥接报为您迅速应用
  5. 添加#import "LSApplicationWorkspace.h"在桥接报
  6. 现在,在当前的文件中添加import MobileCoreServices并添加代码let test = LSApplicationWorkspace.defaultWorkSpace(),它会正常工作。

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

+0

非常感谢您的文档!我遵循你的指示,但是在创建'LSApplicationWorkspace.h'并导入代码后,我收到了多个错误,说:'未知的类型名称',后面跟着例如:''LSInstallProgressDelegate“'。我忘记了什么吗? – user3191334

+0

其实上面的描述是针对iOS 8的,在iOS 8之后,很多东西都已经更新了..而目前我并没有在这方面开展工作..所以我认为你必须挖掘更多,需要做更多的研发来发现更多的细节 –