在Swift中使用LSApplicationWorkspace

4

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

我有以下代码行:

let test = LSApplicationWorkspace.defaultWorkSpace()

但是Xcode提示未解决标识符LSApplicationWorkspace

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


1
你找到获取LSApplicationWorkspace的方法了吗? - DàChún
2个回答

6

注意点1:LSApplicationWorkspace是私有API,如果您使用此API并上传您的应用程序到应用商店,它将被拒绝。

注意点2:如果您拥有任何企业内部应用程序并仍想在您的应用程序中使用此API,则可以按以下方式使用。

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

注意:要使用任何私有头文件,必须将其 .h 文件包含在您的代码中。您可以通过在谷歌中搜索“运行时头文件”来查找任何私有头文件。您将获得所有运行时头文件。要在您的Swift代码中包含该头文件,您需要通过桥接头文件进行操作。


非常感谢您提供的这份文档!我按照您的指示进行操作,但在创建LSApplicationWorkspace.h并导入代码后,出现了多个错误,显示“未知类型名称”,例如:“LSInstallProgressDelegate”。我是不是漏掉了什么? - user3191334
实际上,上面的描述是针对 iOS 8 的。在 iOS 8 之后,许多事情已经更新了...目前我不在这方面工作,所以我认为您需要更深入地挖掘并进行更多的研究和开发,以找出更多细节。 - Mehul Thakkar
iOS 12 中甚至没有 MobileCoreServices.framework。有什么想法吗? - Bagusflyer

4
Swift编译器告诉您,它对一个名为LSApplicationWorkspace的类一无所知。这是因为它是一个私有类,在第三方开发者可用的任何头文件中都没有描述。如果您在App Store审核期间使用LSApplicationWorkspace API,您的提交将被拒绝。考虑到该类包含随着操作系统版本更改而更改的API(由于未记录和私有),以及出于良好隐私原因不可用于第三方开发人员的API,即使您在技术上可以使用以下两种方法之一,使用它几乎肯定是一个非常糟糕的想法。
1.创建一个私有模块映射文件在其中导入您获得的私有框架的标题。这种调用LSApplicationWorkspace的方式(或者涉及使用Mobile 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 

通过上述代码,您现在可以获得LSApplicationWorkspace的实例,使用它可以执行performSelector的代码 - 如果您知道它响应的选择器(...在您运行的特定操作系统版本中)。但是再次提醒,使用LSApplicationWorkspace做任何事情可能都不是一个好主意。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接