Пропустите ручной ввод учетных данных с помощью брейкпоинтов Xcode

02 мая 2023

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

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

В некоторых случаях вы можете реализовать логику, чтобы во время разработки совсем пропускать экран с логином. Но иногда вам необходимо войти в систему.

 

Брейкпоинты Xcode

Брейкпоинты, они же - точки прерывания, Xcode - это замечательный инструмент, который мы имеем в своем распоряжении для всего, что связано с отладкой. Но также они помогают ускорить наш процесс разработки.

С их помощью вы можете настроить свои учетные данные во время разработки так, чтобы вам не приходилось вводить их вручную каждый раз при запуске приложения.

 

Пример кода с вводом учетных данных в SwiftUI

Я использую образец экрана входа в систему с двумя TextFields, представленными в виде полноразмерного модального экрана. Когда приложение запускается с функцией initiateLogin(), оно скрывает модальный экран, если поля содержат верные учетные данные.

Если есть желание попробовать его самим, вот вам код.

LoginView.swift

import SwiftUI

struct LoginView: View {
    @State private var username: String = ""
    @State private var password: String = ""
    @Environment(\.dismiss) var dismiss

    var body: some View {
        VStack(alignment: .center, spacing: 20) {
            HStack {
                Image(systemName: "person")
                TextField("Enter username", text: $username)
            }
            HStack {
                Image(systemName: "key")
                TextField("Enter password", text: $password)
            }
            Button("LOG IN") {
                // BREAKPOINT HERE
                initiateLogin()
            }
            .buttonStyle(.borderedProminent)
        }
        .padding()
        .textFieldStyle(.roundedBorder)
    }

    // Login Function
    func initiateLogin() {
        if username == "Danijela" && password == "123456!" {
            // Short pause - dismiss is too fast
            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
                dismiss()
            }
        }
    }
}


ContentView.swift

import SwiftUI

struct ContentView: View {
    @State private var isPresented = true

    var body: some View {
        VStack {
            Text("Hello! You've successfully logged in.")
        }
        .onAppear {
            isPresented = true
        }
        .fullScreenCover(isPresented: $isPresented) {
            LoginView()
        }
    }
}

 

 

Создаем брейкпоинт

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

Щелкните правой кнопкой мыши по брейкпоинту и выберите Edit Breakpoint...
При желании, вы можете дать ему(*ей - точке) имя. В разделе Action нажмите Add Action, это добавит новое поле Debugger Command. Нажмите на "+" чтобы добавить еще одно действие.

Эти два действия будут заполнять текстовые поля верными учетными данными.

В первом действии добавьте expr _username.wrappedValue = "[USERNAME]". Во втором - expr _password.wrappedValue = "[PASSWORD]". Измените строки имени пользователя и пароля в соответствии с вашими данными для входа.

Поскольку оба свойства, username и password, - это @State-свойства, то, чтобы передать данные в текстовые поля, вам необходимо напрямую получать доступ к их значениям, используя wrappedValue.

Xcode edit breakpoint window

Убедитесь, что вы выбрали Automatically continue after evaluating actions (Автоматически продолжать после выполнения действий), таким образом ваше приложение продолжит работу после брейкпоинта. Вам же не хочется, чтобы ваше приложение останавливалось здесь.

Вот и все! Теперь запустите приложение, нажмите кнопку входа и ваши учетные данные для входа будут заполнены автоматически.

Login button populates credentials automatically

Вероятно, вы будете использовать одни и те же учетные данные при работе с чем-то в вашем приложении, поэтому это сэкономит массу времени на наборе. Если вам нужно использовать разные учетные данные и вы знаете, что вам придется вводить их несколько раз, просто измените их значения в точке прерывания.

 

Выражения брейкпоинтов в UIKit

Если у вас есть приложение UIKit с UITextField, то ваш брейкпоинт выглядит немного иначе. Вместо использования wrappedValue вам нужно использовать значение .text текстового поля.

Xcode edit breakpoint window

 

Автоматический вход без нажатия кнопки

Другой вариант - автоматический вход без нажатия кнопки входа.

Вы хотите, чтобы вход в систему происходил при отображении вью, чтобы вам не приходилось нажимать никакие кнопки. Ввод данных будет выполнен автоматически, и вы автоматически войдете в систему. Создайте точку прерывания вашего вью с логином: для приложения UIKit - в методе viewWillAppear(), для приложения SwiftUI - в .onAppear().

Затем добавьте третье поле Debugger Command к вашей точке прерывания с expr initiateLogin(), изменяя вызов метода на имя вашего метода.

Откройте ваше приложение, и когда появится экран входа в систему, он заполнит текстовые поля и вызовет метод логина. Вы войдете в систему, не вводя ничего. Вот и все.

 

Заключительные размышления

Мне нравится сокращать выполнение работы вручную, насколько это возможно.
Это помогает мне ускорить время разработки и уменьшает количество вещей, о которых нужно думать.

Об этом замечательном совете я узнал совсем недавно и хотел бы знать о нем раньше! Все те разы, когда мне приходилось вводить учетные данные вручную…

Надеюсь, вам понравился этот классный совет, который поможет вам сэкономить немного времени! Есть ли у вас какие-либо рекомендации, которые вы используете в своей повседневной работе? Мне было бы интересно узнать о них!

Пожалуйста, не стесняйтесь писать мне в Twitter, если у вас есть какие-либо вопросы, комментарии или отзывы.

Спасибо за чтение и удачи в кодинге!
 

Оригинал статьи

Содержание