ios - iOS 如何在 Apple 的私有 API 中找到字符串
问题描述
让我们跳过关于使用私有 API 的讨论,它只是为了测试一些东西。
我正在寻找一种MPMediaItem
通过使用来访问隐藏字段的方法,value(forProperty:)
但我正在寻找的字符串不公开。我在这里MPMediaItem
查看了标题,但找不到我要找的东西,但这并不让我感到惊讶,因为在查看MPMediaPlaylist.h时,我也找不到任何关于 " " 或 " " 属性的信息,这两个属性都很容易访问者parentPersistentID
isFolder
value(forProperty: "isFolder") as Bool
通常你会通过类似的方式访问播放列表的名称或其他字段value(forProperty: MPMediaPlaylistPropertyName)
,因为MPMediaPlaylistPropertyName
它是公开可用的,MPMediaPlaylistPropertyIsFolder
所以我们必须使用“ isFolder
”
是否有可能找到那些隐藏的字符串?我想知道猜测名称时是否是运气问题,或者是否有包含这些字符串的标题
以下是公开可用的字符串
解决方案
我认为你真的需要在这一点上重新考虑你的应用程序。我认为永远不应该使用私有 API,它是出于某种目的而设为私有的。
但是这个 Objective-C 代码,可以显示私有变量:
unsigned int o;
Ivar *d = class_copyIvarList([MPMediaItem class], &o);
for(int i=0;i<o;i++) {
NSLog(@"%@", [NSString stringWithCString:ivar_getName(d[i]) encoding:NSUTF8StringEncoding]);
}
free(d);
您可能还需要属性,有时会有computed
属性(对不起,swifty 术语),这些属性也可能是私有的,您可能想知道它。
您也可以尝试添加以下内容:
objc_property_t *prop = class_copyPropertyList([something class], &l);
for (int i = 0; i < l; i++) {
NSLog(@"%@", [NSString stringWithCString: property_getName(prop[i]) encoding:NSUTF8StringEncoding]);
}
推荐阅读
- excel - 我 trq 将 API_MENU 从 32 位转换为 64 位,但“类型不匹配”
- faker - 在没有特定值的情况下调用 Faker
- cucumber - 如何向 Cucumber 报告添加选项以删除具有特定标签的场景
- linux-kernel - 为什么进程限制与 Linux 内核中的信号相关联?
- java - 自应用签名以来,文档已被更改或损坏 itext 5.5.11
- html - 如何使用引导程序水平对齐多个项目?
- sql-server - Windows 更新导致 SSMS 与我的服务器的连接出现问题
- r - 带有 R 中位置的热图
- javascript - 如何在 React Redux 中访问全局状态
- c++ - 有没有办法用 std::function 而不是结构调用 std::equal_range ?