簡體   English   中英

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

[英]iOS How do I find Strings in Apple's private APIs

讓我們跳過有關使用私有API的討論,這只是為了測試某些東西。

我正在尋找一種通過使用value(forProperty:)訪問MPMediaItem的隱藏字段的MPMediaItem ,但是我正在尋找的String並不公開。 我在這里查看了MPMediaItem標頭,但找不到我想要的東西,但這並不令我感到驚訝,因為在查看MPMediaPlaylist.h時,我也找不到有關“ parentPersistentID ”或“ isFolder ”屬性的任何信息可以通過value(forProperty: "isFolder") as Bool輕松訪問

通常,您可以通過諸如value(forProperty: MPMediaPlaylistPropertyName)類的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屬性(對不起,此術語很抱歉),這些屬性也可能是私有的,您可能想知道。

您也可以嘗試添加以下內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM