我已将MobileCoreServices.framework添加到我的Xcode项目中,并在我的文件顶部添加了import MobileCoreServices
语句。
我有代码行
let test = LSApplicationWorkspace.defaultWorkSpace()
xcode说Unresolved Identifier LSApplicationWorkspace
我尝试过清理和重建项目。有什么想法吗?
答案 0 :(得分:4)
Swift编译器告诉你它不知道一个名为LSApplicationWorkspace的类。这是因为它是一个私有类,没有在作为第三方开发人员可用的任何标题中描述。如果您在App Store审核期间使用LSApplicationWorkspace API被捕获,您的提交将被拒绝。鉴于此类包含在OS版本之间更改的API(由于未记录和私有),以及出于良好隐私原因而不能供第三方开发人员使用的API,使用它几乎肯定是一个非常糟糕的主意,即使您在技术上能够使用以下任一方法完成此操作。
创建私有模块映射文件where you import a header you somehow acquired for the private framework that contains LSApplicationWorkspace。这种调用LSApplicationWorkspace的方式(或者实际上任何涉及使用Mobile CoreServices标头的方法 - 即除了下面提到的performSelector之外的任何方法)几乎肯定会从App Store审核中启动您的应用程序提交,因为这种方法(最终)目标 - 静态分析方法可以看到C方法调用Apple在您的代码上运行,作为App Store审核的一部分。
使用NSClassFromString:
let LSApplicationWorkspace_class:AnyObject = NSClassFromString("LSApplicationWorkspace")! as AnyObject
let workspace = LSApplicationWorkspace_class.perform(NSSelectorFromString("defaultWorkspace"))! as AnyObject
使用上面的代码,您现在可以获得一个LSApplicationWorkspace实例,您可以使用performSelector执行代码 - 如果您知道它所响应的选择器(...在您运行的特定操作系统版本中)。但是,对LSApplicationWorkspace做任何事情都可能是一个坏主意。
答案 1 :(得分:4)
第1点: LSApplicationWorkspace是私有API,因此如果您使用此API并将您的应用上传到应用商店,则会被拒绝。
第2点:如果您有任何内部应用,但仍希望在您的应用中使用此功能,则可以使用以下内容。
MobileCoreServices
框架LSApplicationWorkspace.h
文件,其代码与此处提供的代码完全相同" https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/MobileCoreServices.framework/LSApplicationWorkspace.h"。LSApplicationWorkspace.h
文件添加到您的包中#import "LSApplicationWorkspace.h"
import MobileCoreServices
并添加代码let test = LSApplicationWorkspace.defaultWorkSpace()
,它会正常工作。 注意:要使用任何私有标头,您必须在代码中包含其.h
文件。您可以通过搜索"运行时标头"找到任何私有标头。在谷歌。您将获得所有运行时标头。要在swift代码中包含该标题,您需要通过bridging-header。