При разработке настроек iOS я не могу перезаписать / записать файл с помощью метода: writeToFile: atomically - PullRequest
0 голосов
/ 12 июля 2020

Прежде всего, я новичок в разработке настроек iOS и извиняюсь, если я спросил, что действительно кажется глупым. Однако я пока не могу понять, в чем заключается реальная проблема.

В следующем коде я хочу сделать:

  • Отредактируйте целочисленное значение в словаре.

Итак, что я сделал (ожидалось):

  1. Прочтите файл plist приложения в контейнере данных. (/var/mobile/Containers/Data/Application//Library/Preferences/...plist)

  2. Отредактируйте заданное целочисленное значение c из списка путем сброса (удаление и установка значение снова), потому что значение неизменяемо.

  3. Сохранить в файл с помощью метода 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>

1 Ответ

0 голосов
/ 12 июля 2020

Попробуйте это - замените

 [applicationPreference writeToFile:@applicationPreferencePath atomically:YES];

на

 [applicationPreference writeToFile:applicationPreferencePath atomically:YES];

ie удалите @.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...