2013-10-25 2 views
2

Как я могу отредактировать файл Info.plist в jailbroken приложении, которое я пишу? Я знаю, что это обычно невозможно, но учитывая тот факт, что это будет выпущено в Cydia, я чувствую, что должен быть способ. Я не разбираюсь в модификациях файлов в jailbroken среде, поэтому любая информация оценивается.Редактировать Info.plist программно в приложении jailbroken

Причина, по которой я хочу отредактировать файл Info.plist, - это программно зарегистрировать схему URL. Так что, если есть альтернативный способ сделать это, я хотел бы услышать :-)

ответ

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 

Вы видите, что вы не можете писать на этот файл как пользователь mobile, который, как ваше приложение будет работать в нормальном режиме. Таким образом, один из способов обойти это - предоставить привилегии для вашего приложения. See here for how to do that.

После того, как вы используете этот код и предоставите свои права доступа к корню, все равно может понадобиться respring, прежде чем вы узнаете, что ваша настраиваемая схема URL признана. У меня не было времени проверить эту часть.

0

Вот как я решил это для Facebook SDK в Swift

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)