iOS симулятор – это небольшой встроенный в Xcode апплет, который позволяет легко протестировать созданное приложение даже без использования тестового физического устройства. Любому разработчику доступно несколько симуляторов на выбор для проверки своего приложения на всех актуальных мобильных устройствах Apple с разными размерами экрана. Симулятор здорово упрощает проверку приложений на разных устройствах, т.к. не требуется наличия в руках физического устройства.
Цель урока: научится создавать простые мобильные приложения с интерфейсом для iOS.
Запуск приложения в эмуляторе iOS
Сначала необходимо открыть проект любого приложения. И в верхней панели нажать на кнопку рядом с названием проекта, чтобы выбрать устройство для эмуляции. Для примера, на рисунке выбран «iPhone 6s»:
Затем необходимо открыть эмулятор, который находится по пути Xcode->Open Developer Tool->Simulator:
После этого необходимо запустить компиляцию мобильного приложения путем нажатия кнопки «выполнения»:
На экране появится следующее окно, эмулирующее работу выбранного устройства «iPhone 6s» с версией iOS 11.2, о чем сообщает подпись снизу:
Приложение уже скомпилировано внутри эмулятора. Перейдя на другую вкладку экрана, можно произвести его запуск (в данном случае оно имеет название «Calc v.1.1»):
Теперь можно тестировать приложение и проверять его работу на данном устройстве в эмуляторе:
Запуск приложения на физическом устройстве
Существует возможность запуска приложения на реальном устройстве для тестирования. Для этого необходимо подключить устройство usb-кабелем и открыть список устройств, выбрать в нём появившееся устройство (в данном случае «iPhone»):
Далее необходимо запустить процесс компиляции и дождаться появления иконки приложения на устройстве:
Необходимо кликнуть по иконке приложения на устройстве и в появившемся окне-предупреждении нажать кнопку «отменить».
Затем необходимо осуществить переход в пункт Настройки->Основные->Управление устройством. Здесь необходимо найти свою учетную запись разработчика и выбрать её путем нажатия, чтобы перейти в следующий пункт настройки:
Далее необходимо нажать кнопку «доверять» и подтвердить это действие:
После этих действий, мобильное приложение успешно запустится на физическом устройстве:
Создание приложения конвертации из 10 в 2 систему счисления и наоборот
Создадим приложение, которое будет производить конвертацию из десятичной системы счисления в двоичную и наоборот. Приложение содержит 2 TextField для ввода чисел пользователем, несколько элементов label, кнопку, по нажатию на которую и происходит перевод чисел, и элемент Switch. Если Switch находится в активном положении, то перевод будет осуществлять из 10 системы в 2, в обратном случае будет производится перевод из 2 системы в 10.
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import UIKit class ViewController: UIViewController { @IBOutlet weak var DEC: UITextField! @IBOutlet weak var BIN: UITextField! @IBOutlet weak var Switch_Dec: UISwitch! @IBOutlet weak var Status: UILabel! @IBAction func OK(_ sender: Any){ var dec=Int(DEC.text!) var bin_len=BIN.text?.count if (Switch_Dec.isOn==true) { Status.text="Переводим из 10 в 2 систему" var i=Int(dec!) var bin=[Int]() var count=0 while i>1 {bin.insert(i%2, at: count) i=i/2 count=count+1} bin.insert(1, at: count) bin.reverse() i=0 while i<count+1{ BIN.insertText(String(bin[i])) i=i+1}} else {Status.text="Переводим из 2 в 10 систему" var dec_mas=[Int]() for Symb in String(BIN.text!) { let someString = String(Symb) if let someInt = Int(someString) {dec_mas += [someInt]}} dec_mas.reverse() var count=0 var rez_bin=0.0 while count<Int(bin_len!){ rez_bin=rez_bin+pow(Double(2),Double(count)) count=count+1 } DEC.text=String(Int(rez_bin))} } |
Результат скомпилированной программы изображён на рисунке. Число «6784542191» успешно переведено в двоичную систему:
Создание простого калькулятора в Xcode для iOS
Создадим более сложное приложение, которое будет являться калькулятором. Результат скомпилированного приложения приведен на рисунке.
Этот проект будет позволять выполнять простые арифметические операции с двумя числами, такие как: умножение, деление, сложение, вычитание, полная очистка и удаление одного символа. Для каждой цифры необходимо создать свою отдельную кнопку, а также для всех арифметических операций и очистки полей. Код программы приведён ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | import UIKit func last_check(sign:[String], mass:String) -> Int {var temp: [String] = [""] if !mass.isEmpty {temp[0]=String(mass[mass.index(before: mass.endIndex)]) for element in 0...sign.count-1 {if temp[0] == sign[element] {return 1}}} return 0} class ViewController: UIViewController { @IBOutlet weak var output: UILabel! var check_rez=0 var mas="" var check_sign=0 var signs: [String] = ["+", "-","*","/"] @IBAction func AC(_ sender: Any) {output.text="" mas.removeAll() check_sign=0 check_rez=0} @IBAction func back(_ sender: Any) {if check_rez==1 / {output.text="" mas.removeAll() check_rez=0 check_sign=0} else {if last_check(sign: signs,mass: mas)==1 {check_sign=0} var DropEnd=mas.dropLast() output.text=String(DropEnd) mas=String(DropEnd)}} @IBAction func one(_ sender: Any) {if check_rez==1 {output.text="" mas.removeAll() check_rez=0 check_sign=0} else {mas=String(output.text!+"1") output.text=mas}} @IBAction func two(_ sender: Any) {if check_rez==1 {output.text="" mas.removeAll() check_rez=0 check_sign=0} else {mas=String(output.text!+"2") output.text=mas} }@IBAction func three(_ sender: Any) {if check_rez==1 {output.text="" mas.removeAll() check_rez=0 check_sign=0} else {mas=String(output.text!+"3") output.text=mas}} @IBAction func four(_ sender: Any) {if check_rez==1 {output.text="" mas.removeAll() check_rez=0 check_sign=0} else {mas=String(output.text!+"4") output.text=mas}} @IBAction func five(_ sender: Any) {if check_rez==1 {output.text="" mas.removeAll() check_rez=0 check_sign=0} else {mas=String(output.text!+"5") output.text=mas}} @IBAction func six(_ sender: Any) {if check_rez==1 {output.text="" mas.removeAll() check_rez=0 check_sign=0} else {mas=String(output.text!+"6") output.text=mas}} @IBAction func seven(_ sender: Any) {if check_rez==1 {output.text="" mas.removeAll() check_rez=0 check_sign=0} else {mas=String(output.text!+"7") output.text=mas} }@IBAction func eight(_ sender: Any) {if check_rez==1 {output.text="" mas.removeAll() check_rez=0 check_sign=0} else {mas=String(output.text!+"8") output.text=mas}} @IBAction func nine(_ sender: Any) {if check_rez==1 {output.text="" mas.removeAll() check_rez=0 check_sign=0} else {mas=String(output.text!+"9") output.text=mas}} @IBAction func null(_ sender: Any) {if check_rez==1 {output.text="" mas.removeAll() check_rez=0 check_sign=0} mas=String(output.text!+"0") output.text=mas} @IBAction func sum(_ sender: Any) //сумма { if !mas.isEmpty && mas[mas.index(before: mas.endIndex)] != "+" && check_sign==0 {mas=String(output.text!+"+") output.text=mas check_sign=1}} @IBAction func dif(_ sender: Any) { if !mas.isEmpty && mas[mas.index(before: mas.endIndex)] != "-" && check_sign==0 {mas=String(output.text!+"-") output.text=mas check_sign=1} } @IBAction func mult(_ sender: Any) { if !mas.isEmpty && mas[mas.index(before: mas.endIndex)] != "+" && check_sign==0 {mas=String(output.text!+"*") output.text=mas check_sign=1} } @IBAction func div(_ sender: Any) { if !mas.isEmpty && mas[mas.index(before: mas.endIndex)] != "/" && check_sign==0 {mas=String(output.text!+"/") output.text=mas check_sign=1} } @IBAction func rez(_ sender: Any) { var int_ch1=0 var int_ch2=0 var double_ch1=0.0 var double_ch2=0.0 var massive : [String] var separated: [String]=[""] var rez="" if check_rez==0 && !mas.isEmpty {for element in 0...signs.count-1 {massive=mas.components(separatedBy: signs[element]) if massive.count==2 {separated[0]=signs[element] } massive=mas.components(separatedBy: separated[0]) if massive.count==2 && massive[massive.count-1] != "" { if separated[0]=="/" {double_ch1=Double(massive[massive.count-2])! double_ch2=Double(massive[massive.count-1])!} else {int_ch1=Int(massive[massive.count-2])! int_ch2=Int(massive[massive.count-1])!} if separated[0]=="+" {rez=String(int_ch1+int_ch2)} if separated[0]=="-" {rez=String(int_ch1-int_ch2)} if separated[0]=="*" {rez=String(int_ch1*int_ch2)} if separated[0]=="/" {if double_ch1==0 || double_ch2==0 {rez="Ошибка"} else {rez=String(double_ch1/double_ch2)}} mas=String(output.text!+"="+String(rez)) output.text=mas check_rez=1 } } } |
На рисунке выше также приведен результат выполнения операции умножения чисел «9896» и «8547».
Вопросы для проверки себя
- В чем разница между свойствами IBActions и IBOutlets?
- Как привязать элемент интерфейса к коду программы?
- Как получить доступ к тексту элемента label?
- Как скомпилировать приложение в Xcode?
- Что такое iOS симулятор?
- Существует ли возможность компиляции приложения на физическом устройстве? Что для этого нужно сделать?