2014-10-08 91 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