2014-10-08 38 views
1

我想以編程方式訪問safari歷史文件,在出現若干問題後,我發現safari歷史存儲在以下路徑:/var/mobile/Library/Safari/History.plist,但我無法查看歷史記錄。 plist文件,Safari目錄中只存在Safari瀏覽器書籤相關文件。safari history.plist文件在iOS7中缺失

History.plist文件是否已被移動到iOS7中的其他路徑。
我使用iFile在越獄的iPhone 5S(iOS 7.1.1)和iPhone 5C(iOS 7.1.2)上進行了檢查。

回答

2

你可以去:

/var/mobile/Applications/-safari app identifier-/Library/Safari/History.plist

爲了找到Safari瀏覽器的完整路徑(或任何其他系統/用戶應用程序),你可以檢查名爲com.apple.mobile.installation.plist的plist。該文件位於/var/mobile/Library/Caches/com.apple.mobile.installation.plist。這個plist文件包含我們想要的。 plist中是一樣的東西如下:

-Root 
    ... 
    +System (Dictionary) 
    +User (Dictionary) 
    ... 

Safari是一個系統的應用使系統內的字典,我們可以看到一個名爲com.apple.mobilesafari關鍵這是一本字典的關鍵了。這本字典包含一個字符串鍵Path這就是你想要的。正如你所看到的,通過了解應用程序類型和包標識符,可以知道任何其他應用程序的路徑。所以,你的代碼應該是這樣的:

- (NSString*) safariPath { 
    return [self applicaitonFullPath:@"com.apple.mobilesafari" appType:@"System"]; 
} 

- (NSString*) applicaitonFullPath:(NSString*)bundleIdentifier appType:(NSString*)appType { 
    //appType shoud be `System` or `User` case sensitive!! 
    NSDictionary *mobileInstallationDict = [NSDictionary dictionaryWithContentsOfFile:@"/var/mobile/Library/Caches/com.apple.mobile.installation.plist"]; 
    return mobileInstallationDict[appType][bundleIdentifier][@"Path"]; 
} 
+0

非常感謝Hamed,這是一個很好的解釋和解決方案爲我工作。 – user3932883 2014-10-09 07:10:39

+0

不知道爲什麼我的更改被拒絕,但我仍然想提到bindleIdentifier應該是bundleIdentifier,而不是使用[type]鍵應該是[appType]。 – user3932883 2014-10-09 07:51:46

+0

@ user3932883感謝您提到的修改。我糾正它們:) – Hamed 2014-10-10 12:51:59

0

入住在此路徑:

/private/var/mobile/Applications/Library/Safari/History.plist 
+0

謝謝,我得到了History.plist文件,但問題是,路徑是/ var /移動/應用/ <應用程序標識符> /庫/ Safari瀏覽器/歷史。 plist中;而且這個應用程序標識符在不同的iphones中是不同的;在這種情況下,我怎麼能硬編碼我的代碼中的路徑,因爲這個路徑依賴於應用程序標識符。 – user3932883 2014-10-08 09:43:23

+1

你不能。您必須在您的應用程序內創建動態路徑。你可以標記你接受的答案;)? – 2014-10-08 09:51:03

+0

謝謝,但您能告訴我如何動態獲取此路徑,或者我可以直接使用您列出的路徑嗎? – user3932883 2014-10-08 09:56:01