gpt4 book ai didi

ios - 以编程方式扩展 iOS 词典应用词典

转载 作者:可可西里 更新时间:2023-11-01 04:38:59 27 4
gpt4 key购买 nike

Apple App Store 中有一个应用程序可以下载自定义词典并以编程方式将它们添加到 iOS 的内置 Dictionary.app 中,而无需用户干预。它可以正常使用库存 ROM,即不需要越狱或任何类似的东西。

我想知道这怎么可能,因为 Apple 从未记录过这样的“功能”。 iOS 和 Dictionary.app 文档中没有 API 或提示来解释这是如何完成的。

如何实现?

最佳答案

Dictionary.appender 应用程序使用私有(private)框架 MobileAsset.framework。该应用程序使用了多个选择器:

  • setQueriesLocalAssetInformationOnly:

  • runQueryAndReturnError:

  • initWithAssetType:attributes:。 iOS < 7 的 Assets 类型为 com.apple.MobileAsset.DictionaryServices.dictionary,iOS >= 7 的 Assets 类型为 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 中获得批准的,但这就是它的工作原理。非常简单的技术,选择器和类名甚至没有加密。

更新

该应用未明确链接私有(private) MobileAsset.framework。它不使用任何常用技术来动态加载框架 - 没有 dlopenNSBundle 调用。导入表也不包含私有(private) MobileAsset.framework。但它由 UIKit.framework 链接,这显然是由应用程序链接的。我做了一个简单的测试。编写了一个剥离的控制台应用程序,通过关闭所有可能自动链接框架的项目设置来仅链接需要的框架。没有 UIKit.framework 执行 NSClassFromString(@"ASAsset") 返回 nil。使用 UIKit.framework 它返回 ASAsset 类对象。

关于ios - 以编程方式扩展 iOS 词典应用词典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23019109/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com