以编程方式扩展iOS词典应用程序的词库

8
在苹果应用商店中有一个应用程序,它可以下载自定义字典并将其程序化地添加到iOS内置的Dictionary.app中,无需用户干预。它在原始固件上正常工作,即不需要越狱或任何类似的操作。
我想知道这是如何可能实现的,因为苹果从未记录过这样的“功能”。在iOS和Dictionary.app文档中没有API或提示来解释这是如何完成的。
这是如何实现的?

1
  1. "Dictionary.app"是什么?iOS默认情况下没有这样的应用程序。
  2. 你指的是哪个应用商店的应用程序?如果不告诉我们应用程序的名称,我们无法提供帮助。
- creker
iOS内置的词典是通过选择一个单词,然后从弹出菜单中选择“定义”来激活的应用程序。请参见此处:http://forums.imore.com/attachments/guides-how-articles/49391d1392595078t-guide-how-define-word-using-ios7-s-built-dictionary-step1.jpg - user3524743
另一个我提到的应用程序,可以下载并添加自定义词典,名为“Dictionary.appender”,可以在此处找到:https://itunes.apple.com/us/app/dictionary.appender/id650562573?mt=8 - user3524743
@user3524743 你应该查看iOS 7.1中的任何应用程序,你会发现现在可以通过点击和长按任何可选择文本,然后在上下文菜单中点击“学习”项来添加用户快捷方式的功能。这使得用户可以更新快捷方式列表,扩展用户词汇表。同时,在同一上下文菜单中点击“定义”将显示字典,用户可以下载所有主要字典。这是免费内置的,你只需将一个textview添加到应用程序中并使其可选择即可实现。 - Tommie C.
@TommieC.,我们正在谈论的应用程序实现了iOS SDK中没有的功能 - 下载和添加自定义词典。该应用程序使用私有API来完成此操作。 - creker
1个回答

7

Dictionary.appender 应用程序使用私有框架MobileAsset.framework。 该应用程序使用几个选择器:

  • setQueriesLocalAssetInformationOnly:

  • runQueryAndReturnError:

  • initWithAssetType:attributes:。 资产类型为和 iOS≥7的com.apple.MobileAsset.DictionaryServices.dictionary2。 它们保存在/var/mobile/Library/Assets/中。

这是该框架的类转储https://github.com/nst/iOS-Runtime-Headers/tree/master/PrivateFrameworks/MobileAsset.framework,您可以在其中找到具有这些选择器的方法。

为了调用它们,该应用程序使用非常简单的技术 - 在运行时使用NSClassFromString获得类对象。在我们的情况下,是ASAssetASAssetQuery类。我不知道这是如何在App Store中得到批准的,但它就是这样工作的。非常简单的技术,选择器和类名甚至没有加密。
更新: 该应用程序没有明确链接私有的MobileAsset.framework。它不使用任何通常用于动态加载框架的技术 - 没有dlopenNSBundle调用。导入表中也不包含私有的MobileAsset.framework。但是它通过显然由应用程序链接的UIKit.framework进行了链接。我进行了一个简单的测试。编写了一个只链接所需框架的剥离掉的控制台应用程序,关闭所有可能自动链接框架的项目设置。没有UIKit.framework,执行NSClassFromString(@"ASAsset")将返回nil。有了UIKit.framework,它将返回ASAsset类对象。

这听起来不错。我认为下一步是了解应用程序如何链接该框架。因此,我会继续寻找。谢谢Creker。 - user3524743
1
此外,内置的字典不是一个应用程序。它只是一个视图控制器,可能是在UIKit或其他框架中实现的。就像UIImagePickerController一样。 - creker
非常感谢您的更新,Creker。它使我或任何想要复制该功能的人更接近目标。 - user3524743
我认为如果您想这样做,将具有类似功能的应用程序提交到App Store并不是一个好主意。最终,Dictionary.appender将被移除。我不明白审查人员如何会批准这样的应用程序,但我希望他们最终会将其删除。 如果我的回答解决了您的问题,请接受答案。 - creker
1
@creker 谢谢老兄,这看起来非常有趣 :D。我已经尝试过谷歌搜索,但未找到有用的内容,只有一些书籍章节。是否还有其他资源可以了解更多相关信息? - 0xKayvan
显示剩余2条评论

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