2

如何在我正在编写的越狱应用程序中编辑 Info.plist 文件?我知道这通常是不可能的,但考虑到这将在 Cydia 中发布,我觉得一定有办法。我不精通越狱环境中的文件修改,因此感谢您提供任何信息。

我想编辑 Info.plist 文件的原因是以编程方式注册 URL 方案。因此,如果有另一种方法可以做到这一点,我很想听听 :-)

4

2 回答 2

2

如果您想在运行时以编程方式编辑您自己的应用程序的 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 方案被识别。我没有时间测试那部分。

于 2013-10-26T09:27:32.980 回答
0

这是我在 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)
于 2015-09-02T11:16:11.667 回答