iOS如何在Apple的私有API中找到字符串

时间:2018-05-06 10:26:14

标签: ios mpmediaitem

让我们跳过关于使用私有API的讨论,它只是用于测试某些东西。

我正在寻找一种方法来使用MPMediaItem来访问value(forProperty:)的隐藏字段,但我正在寻找的字符串不公开。我查看了MPMediaItem标题here但我找不到我要找的内容但是这并不让我感到惊讶,因为在查看MPMediaPlaylist.h时我也找不到任何关于parentPersistentID

可以轻松访问“isFolder”或“value(forProperty: "isFolder") as Bool”属性

通常您会通过value(forProperty: MPMediaPlaylistPropertyName)之类的内容访问播放列表的名称或其他字段,因为MPMediaPlaylistPropertyName是公开的,MPMediaPlaylistPropertyIsFolder不是,所以我们必须使用“isFolder

是否有可能找到那些隐藏的字符串?我想知道在猜测名称时是否是运气问题,或者有一个包含这些字符串的标题

以下是可公开发布的字符串

enter image description here

1 个答案:

答案 0 :(得分:0)

我认为你真的需要在这一点上重新思考你的应用程序。 我认为一个人永远不应该使用私有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属性(对于这个很好的术语而言很抱歉),这些属性也可能是私有的,您可能想知道它。

你也可以尝试添加:

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]);
}