以编程方式扩展iOS字典应用程序词典
Apple app Store中有一个应用程序可以下载自定义词典,并以编程方式将其添加到iOS的内置Dictionary.app中,而无需用户干预。它通常与库存ROM一起工作,也就是说,不需要越狱或任何类似的东西 我想知道这是怎么可能的,因为苹果从未记录过这样的“功能”。iOS和Dictionary.app文档中没有API或提示来解释这是如何实现的以编程方式扩展iOS字典应用程序词典,ios,dictionary,Ios,Dictionary,Apple app Store中有一个应用程序可以下载自定义词典,并以编程方式将其添加到iOS的内置Dictionary.app中,而无需用户干预。它通常与库存ROM一起工作,也就是说,不需要越狱或任何类似的东西 我想知道这是怎么可能的,因为苹果从未记录过这样的“功能”。iOS和Dictionary.app文档中没有API或提示来解释这是如何实现的 这是如何实现的?Dictionary.appender应用程序使用私有框架mobileaset.framework。应用程序使用多个选择器: se
这是如何实现的?Dictionary.appender应用程序使用私有框架
mobileaset.framework
。应用程序使用多个选择器:
setQueriesLocalAssetInformationOnly:
runQueryAndReturnError:
。对于iOS<7,资产类型为initWithAssetType:属性:
;对于iOS>=7,资产类型为com.apple.MobileAsset.DictionaryServices.dictionary
。它们保存在com.apple.MobileAsset.DictionaryServices.dictionary2
中/var/mobile/Library/Assets/
NSClassFromString
在运行时获取类对象。在我们的例子中,ASAsset
和ASAssetQuery
类。我不知道这是怎么在App Store中获得批准的,但这就是它的工作原理。非常简单的技术,选择器和类名甚至不加密
更新
应用程序没有显式链接private
mobileaset.framework
。它不使用任何常用的技术来动态加载框架—无dlopen
或NSBundle
调用。导入表也不包含privatemobileaset.framework
。但是它是通过UIKit.framework
链接的,而UIKit.framework显然是通过应用程序链接的。我做了一个简单的测试。编写了一个精简控制台应用程序,通过关闭所有可能自动链接框架的项目设置,只链接需要的框架。没有UIKit.framework
执行NSClassFromString(@“ASAsset”)
返回nil。使用UIKit.framework
返回ASAsset
类对象 一,。什么“Dictionary.app”?默认情况下,iOS中没有此类应用程序。2.你指的是哪个应用商店应用?如果您不告诉我们应用程序的名称,我们将无法帮助您。1。iOS内置字典是一个应用程序,通过选择一个单词,然后从弹出菜单中选择“定义”来激活它。请看这里:2。我指的另一个可以下载和添加自定义词典的应用程序叫做“Dictionary.appender”您可以在此处找到:@user3524743您应该查看iOS 7.1中的任何应用程序,您将看到,通过点击并按住任何可选文本,然后单击上下文菜单中的学习项,现在可以添加用户快捷方式。这允许用户更新扩展用户词典的快捷方式列表。同时,单击同一上下文菜单中的Define将显示字典,您可以在其中下载所有主要字典。这是免费内置的,您可以通过向应用程序添加textview并使其可选择来实现。@TommieC.,我们正在讨论的应用程序实现了iOS SDK中不可用的功能-下载和添加自定义词典。应用程序使用私有API来实现这一点。这听起来不错。我认为下一步是了解应用程序如何链接该框架。所以,我会继续寻找。谢谢你,克雷克。另外,内置字典不是一个应用程序。它只是一个视图控制器,可能是在UIKit
或其他框架中实现的。就像UIImagePickerController
。非常感谢您的更新。它让我或任何希望复制该功能的人更接近目标。如果你想这样做,我认为向应用商店提交具有类似功能的应用不是一个好主意。最终将删除Dictionary.appender。我不明白为什么评论者如此盲目,以至于他们批准了这样一个应用程序,但我希望他们最终会删除它。如果我回答了你的问题,那么请接受我的回答。@creker你是怎么发现的?