Прежде всего, я новичок в разработке настроек iOS и извиняюсь, если я спросил, что действительно кажется глупым. Однако я пока не могу понять, в чем заключается реальная проблема.
В следующем коде я хочу сделать:
- Отредактируйте целочисленное значение в словаре.
Итак, что я сделал (ожидалось):
Прочтите файл plist приложения в контейнере данных. (/var/mobile/Containers/Data/Application//Library/Preferences/...plist)
Отредактируйте заданное целочисленное значение c из списка путем сброса (удаление и установка значение снова), потому что значение неизменяемо.
Сохранить в файл с помощью метода writeToFile
.
Среда:
- THEOS с WSL1.0 (Windows Pro 1909)
- iPhone 10,4 с iOS 13,5 (Unc0ver)
Также следующий код находится в шаблоне пакета предпочтений.
КОД:
// NOTE: Show alert<loading>(applying);
UIAlertController *alertLoading = [UIAlertController
alertControllerWithTitle:@"Applying settings"
message:@"The settings are being applied..."
preferredStyle:UIAlertControllerStyleAlert
];
[self presentViewController:alertLoading animated:YES completion:nil];
// NOTE: Get application UUID and data container path.
FBApplicationInfo *applicationProxy = [LSApplicationProxy applicationProxyForIdentifier:applicationBundleIdentifier];
NSString *applicationDataContainerPath = applicationProxy.dataContainerURL.path;
NSString *applicationPreferencePath = [NSString stringWithFormat:@"%@/Library/Preference/%@.plist", applicationDataContainerPath, tweakBundleIdentifier];
// NOTE: Read preference file into memory and find the object.
NSMutableDictionary *applicationPreference = [[NSMutableDictionary alloc] initWithContentsOfFile:applicationPreferencePath];
NSMutableDictionary *applicationPreferenceAdUnitSetting = [applicationPreference[@"AdFitStore"][@"AdUnitSetting"] objectAtIndex:0];
int KakaotalkAdfitUnitPreferenceMaxReqCount = 0;
// NOTE: Check if the extension is enabled;
if ([isEnabled isEqual:@0]) {
// NOTE: Disabled;
KakaotalkAdfitUnitPreferenceMaxReqCount = 20;
}
// NOTE: Update the value.
[applicationPreferenceAdUnitSetting removeObjectForKey:@"fcMaxCount"];
[applicationPreferenceAdUnitSetting setObject:[NSNumber numberWithInt:KakaotalkAdfitUnitPreferenceMaxReqCount] forKey:@"fcMaxCount"];
// NOTE: Write preference file into original path.
[applicationPreference writeToFile:@applicationPreferencePath atomically:YES];
// NOTE: Hide alert<loading>(applied);
[self dismissViewControllerAnimated:YES completion:nil];
Исходный файл PLIST:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AdFitStore</key>
<dict>
<key>userAgent</key>
<string>Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148</string>
<key>AdFitSDKVersion</key>
<string>3.3.4</string>
<key>AdFitSAL</key>
<dict>
...
</dict>
<key>AdUnitSetting</key>
<dict>
<key>DAN-1hux82hxke720</key>
<dict>
<key>reqInterval</key>
<integer>0</integer>
<key>fcMaxCount</key>
<integer>0</integer>
<key>lastViewabledDate</key>
<date>2020-07-09T12:25:30Z</date>
<key>nextResetDate</key>
<date>2020-07-09T15:00:00Z</date>
<key>lastRequestedDate</key>
<date>2020-07-11T17:14:51Z</date>
<key>fcInterval</key>
<integer>0</integer>
<key>viewableCount</key>
<integer>1</integer>
</dict>
</dict>
</dict>
</dict>
</plist>