Редактировать Info.plist программно в приложении с распакованным приложением

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

Причина, по которой я хочу отредактировать файл 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 

Вы видите, что вы не можете писать в этот файл как пользовательский mobile , так как ваше приложение будет работать нормально. Таким образом, один из способов обойти это – предоставить привилегии для вашего приложения. См. Здесь, как это сделать .

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

Вот как я решил это для 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) 
  • Как использовать значение в PSLinkListCell в наборе предпочтений?
  • Преобразование проекта xcode в iOSOpenDev
  • Реализация ключевого журнала iOS
  • Как я могу отслеживать вызовы API приложения на jailbroken iOS-устройстве?
  • Коренные привилегии для настройки мобильного субстрата
  • Settings.bundle & keychain для приложений от Cydia не работает
  • Разработка приложения iOS для Cydia
  • Могут ли приложения Cydia использовать параметр UIFileSharingEnabled?
  • инструкция программы патча iOS во время выполнения
  • Создание Cydia Logos Tweak, теперь требуется повторная установка после установки (как это сделать)
  • Любые хорошие примеры кода / справочных материалов iOSOpenDev?
  • Давайте будем гением компьютера.