MAUI iOS在调试版本中保存首选项,但不在部署到应用商店的发布版本中保存首选项

eeq64g8w  于 2023-06-25  发布在  iOS
关注(0)|答案(1)|浏览(134)

当我在Mac或Windows上以调试配置在VS 2022中构建应用时,首选项保存并读取良好。然而,一旦我在Release配置中构建应用程序并将其部署到应用程序商店以在TestFlight上进行测试,首选项就不再保存/读取。
注意:当我构建并发布Android发布版本时,首选项会正确保存/读取。
下面是保存和读取方法:

public void CreateItem(string key, dynamic value) {
    Preferences.Default.Set(key, value);
}

public string GetString(string key) {
    String contents = null;

    try {
        contents = Preferences.Get(key, null);
    }
    catch (Exception ex) {
    }
    return contents;
}

更新我在DEBUG中构建了应用程序,并以以下两种方式将其部署到我的手机上,结果不同:

1.使用应用程序的“开发人员证书”和“开发人员配置文件”,这导致保存/读取首选项工作。
1.使用应用程序的“分发证书”和“分发配置文件”,这会导致保存/读取首选项 * 不 * 工作。

ulmd4ohb

ulmd4ohb1#

所以,我无法解决保存到首选项的问题,也无法得到一个明确的错误消息,因为它是一个发布版本,不能连接到VS进行调试,在那里我可以看到我的控制台打印语句在我的try/catch块。我想一个解决方法是尝试在警报中打印这些消息,如下所示:DisplayAlert("Alert", "<error message body here>", "OK");
然而,我确实找到了一个有利可图的解决方案,那就是将我的JSON对象和字符串保存到如下文件中:

public class LocalStorageService {
    private string documentsFolder;

    public LocalStorageService() {
        this.documentsFolder = FileSystem.AppDataDirectory;
    }

    public string ReadTextFile(string fileName) {
        string data = null;

        try
        {
            string path = Path.Combine(documentsFolder, $"{fileName}.json");

            if (File.Exists(path))
            {
                data = File.ReadAllText(path);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error in LocalStorageService::ReadTextFile(): {ex.Message}");
    }

        return data;
    }

    public void WriteToFile(string fileName, string json) {
        try
        {
            string path = Path.Combine(documentsFolder, $"{fileName}.json");
            File.WriteAllText(path, json);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error in LocalStorageService::WriteToFile(): {ex.Message}");
        }
    }
}

我调用保存和阅读如下:

//write
localStorageService.WriteToFile(LocalStorageItemNames.USER_PROFILE, JsonConvert.SerializeObject(profileModel)

//read
string model = localStorageService.ReadTextFile(LocalStorageItemNames.USER_METAS);
if (!string.IsNullOrEmpty(model)) {
    profileModel = JsonConvert.DeserializeObject<ProfileModel>(model);
}

相关问题