如何在我正在编写的越狱应用程序中编辑 Info.plist 文件?我知道这通常是不可能的,但考虑到这将在 Cydia 中发布,我觉得一定有办法。我不精通越狱环境中的文件修改,因此感谢您提供任何信息。
我想编辑 Info.plist 文件的原因是以编程方式注册 URL 方案。因此,如果有另一种方法可以做到这一点,我很想听听 :-)
如果您想在运行时以编程方式编辑您自己的应用程序的 Info.plist 文件,您可以使用以下代码:
- (BOOL) registerForScheme: (NSString*) scheme {
NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"Info"
ofType:@"plist"];
NSMutableDictionary* plist = [NSMutableDictionary dictionaryWithContentsOfFile: plistPath];
NSDictionary* urlType = [NSDictionary dictionaryWithObjectsAndKeys:
@"com.mycompany.myscheme", @"CFBundleURLName",
[NSArray arrayWithObject: scheme], @"CFBundleURLSchemes",
nil];
[plist setObject: [NSArray arrayWithObject: urlType] forKey: @"CFBundleURLTypes"];
return [plist writeToFile: plistPath atomically: YES];
}
如果你这样称呼它:
BOOL succeeded = [self registerForScheme: @"stack"];
那么您的应用程序可以使用如下 URL 打开:
stack://overflow
但是,如果您查看 Info.plist 文件权限:
-rw-r--r-- 1 root wheel 1167 Oct 26 02:17 Info.plist
您会看到您无法以 user 身份写入该文件mobile
,这就是您的应用程序正常运行的方式。因此,解决此问题的一种方法是授予您的应用程序 root 权限。 请参阅此处了解如何执行此操作。
在您使用此代码并为您的应用授予 root 权限后,您可能仍需要重新启动才能看到您的自定义 URL 方案被识别。我没有时间测试那部分。
这是我在 Swift 中为 Facebook SDK 解决的方法
var appid: NSMutableDictionary = ["FacebookAppID": "123456789"]
var plistPath = NSBundle.mainBundle().pathForResource("Info", ofType: "plist")
appid.writeToFile(plistPath!, atomically: true)
var appName: NSMutableDictionary = ["FacebookDisplayName": "AppName-Test"]
appName.writeToFile(plistPath!, atomically: true)
var urlStuff = NSMutableDictionary(contentsOfFile: plistPath!)
var urlType = NSDictionary(objectsAndKeys: "com.appprefix.AppName", "CFBundleURLName", NSArray(object: "fb123456789"), "CFBundleURLSchemes")
urlStuff?.setObject(NSArray(object: urlType), forKey: "CFBundleURLTypes")
urlStuff?.writeToFile(plistPath!, atomically: true)