Запись при первой установке


#1

Подскажите, пожалуйста, куда лучше записать дату первой установки и как это лучше сделать, чтобы пользователь не злоупотреблял демо-периодом?

Я могу вот так сделать запись в UserDefaults, но это бесполезно …

    let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
     if launchedBefore {
        print("НЕ первый запуск")
     } else {
        print("первый запуск")
        UserDefaults.standard.set(true, forKey: "launchedBefore")
     }

Урок Ивана по Keychain смотрела. Лучший ли вариант использовать Keychain + синхронизацию с iCloud в этом случае? И можно ли как-то это сделать, без использования каких-либо Pod-ов? И как я понимаю в Keychain записать дату можно только в string? Объясните, как мне быть лучше?

Мне понравилась вот эта штука https://github.com/jrendel/SwiftKeychainWrapper Но здесь всё в стринг формате. А я вычитала, что можно как-то сразу дату сохранить, … keychain[data: “secret”] = NSData(contentsOfFile: “secret.bin”) … помогите разобраться, что это за зверь secret.bin и не усложняю ли я себе жизнь опять (боюсь, что если сохранять дату в стринг-формате и потом обратно конвертировать, не будет ли ошибок).

И если хранить в keychain … будет ли пользователь видеть это?
И достаточно ли этого, чтобы решить мой вопрос?


#2

Привет. Ну если я не ошибаюсь UserDefaults хранит свои данные в песочнице приложения в .plist, когда Keychain шифрует данные и хранит на телефоне но не в песочнице.С точки зрения безопасности Keychain круче. И в чем проблема данные преобразовать в формат числ и сохранять как String и потом обратно? Вот тебе ссылка на библиотеку которой я пользуюсь https://github.com/matthewpalmer/Locksmith
Там если я не ошибаюсь можно создать структуру которая имеет переменную Data и логин с паролем, после подписав структуру под протоколы можно сохранять и выгружать данные. Я думаю тебе понравится !))


#3

Если не знаете как сохранить в keychain дату, то зачем мучаться? Сохраняйте строкой.
Преобразуете дату в unix time stamp и сохраняете строкой.
Вот пример как преобразовать дату в строку и потом обратно в NSDate:

let timestamp = String(Int(NSDate().timeIntervalSince1970))

NSDate(timeIntervalSince1970: Double(timestamp)!)

От такого решения нет никаких проблем, вы же не собираетесь по этой дате делать выборки и сортировки в бд keychain’а.