iOS Как найти строки в частных API Apple - PullRequest
0 голосов
/ 06 мая 2018

Давайте пропустим обсуждение использования частных API, это просто для того, чтобы что-то протестировать.

Я ищу способ доступа к скрытому полю MPMediaItem с помощью value(forProperty:), но искомая строка недоступна для публичного доступа. Я просмотрел MPMediaItem заголовок здесь и не смог найти то, что искал, однако это меня не удивило, потому что, глядя на MPMediaPlaylist.h , я тоже не смог найти любую информацию о свойствах "parentPersistentID" или "isFolder", к которым можно легко получить доступ value(forProperty: "isFolder") as Bool

Обычно вы можете получить доступ к имени плейлиста или другим полям, например, value(forProperty: MPMediaPlaylistPropertyName), потому что MPMediaPlaylistPropertyName общедоступно, MPMediaPlaylistPropertyIsFolder нет, поэтому мы должны использовать "isFolder"

Можно ли найти эти скрытые строки? Мне интересно, удачно ли угадать имя или есть заголовок, содержащий эти строки

Ниже приведены те строки, которые доступны публично

enter image description here

1 Ответ

0 голосов
/ 06 мая 2018

Я думаю, что вам действительно нужно переосмыслить ваше приложение на данный момент. Я думаю, что никогда не следует играть с частными 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]);
}
...