2016-03-04 188 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之後,很多東西都已經更新了..而目前我並沒有在這方面開展工作..所以我認爲你必須挖掘更多,需要做更多的研發來發現更多的細節 –