2014-04-11 70 views
4

Apple App Store中有一款應用程序可下載自定義字典,並以編程方式將它們添加到iOS的內置Dictionary.app,無需用戶干預。它通常與股票ROM一起工作,即不需要越獄或任何類型的事情。以編程方式擴展iOS字典應用程序詞典

我想知道這是如何可能的,因爲蘋果從未記錄過這樣的「功能」。 iOS和Dictionary.app文檔中沒有API或提示來解釋如何完成此操作。

這怎麼能實現?

+1

1.什麼「Dictionary.app」?默認情況下,iOS中沒有這樣的應用程序。 2.你的意思是哪個App Store應用程序?如果您不告訴我們應用程序的名稱,我們無法幫助您。 – creker

+0

1.在Dictionary中內置的iOS是通過選擇一個單詞然後從彈出菜單中選擇「Define」來激活的應用程序。看到這裏:http://forums.imore.com/attachments/guides-how-articles/49391d1392595078t-guide-how-define-word-using-ios7-s-built-dictionary-step1.jpg – user3524743

+0

2.其他應用程序我指的是,可以下載和添加自定義字典,被稱爲「Dictionary.appender」,可以在這裏找到:https://itunes.apple.com/us/app/dictionary.appender/id650562573?mt= 8 – user3524743

回答

5

Dictionary.appender應用程序使用私有框架MobileAsset.framework。有幾種選擇該應用程序使用:

  • setQueriesLocalAssetInformationOnly:

  • runQueryAndReturnError:

  • initWithAssetType:attributes:。資產類型爲iOS的7和com.apple.MobileAsset.DictionaryServices.dictionary2com.apple.MobileAsset.DictionaryServices.dictionary(iOS> = 7)。它們保存在/var/mobile/Library/Assets/中。

這裏是框架https://github.com/nst/iOS-Runtime-Headers/tree/master/PrivateFrameworks/MobileAsset.framework的類轉儲,您可以在其中找到使用這些選擇器的方法。

爲了給他們打電話,應用程序使用非常簡單的技術 - NSClassFromString在運行時獲取類對象。在我們的例子中,ASAssetASAssetQuery類。我不知道這是如何得到App Store的批准,但它是如何工作的。非常簡單的技術,選擇器和類名甚至不加密。

UPDATE

應用程序不明確地將私人MobileAsset.framework。它不使用任何常用技術來動態加載框架 - 不調用dlopenNSBundle調用。導入表不包含專用MobileAsset.framework。但它通過UIKit.framework鏈接顯然是由應用程序鏈接。我做了一個簡單的測試。通過關閉所有可能自動鏈接框架的項目設置,寫了一個剝離出來的控制檯應用程序,該應用程序僅鏈接需要的框架。沒有UIKit.framework執行NSClassFromString(@"ASAsset")返回零。使用UIKit.framework它將返回ASAsset類對象。

+0

這聽起來不錯。我認爲下一步是瞭解應用程序如何鏈接該框架。所以,會繼續尋找。謝謝克裏克。 – user3524743

+0

更新了答案。 – creker

+0

另外,內置的字典不是一個應用程序。這只是一個視圖控制器,可能在'UIKit'或其他框架中實現。就像'UIImagePickerController'一樣。 – creker