Запуск мобильного приложения в iOS

Xcode уроки. Урок 5. Запуск мобильного приложения для iOS

iOS симулятор – это небольшой встроенный в Xcode апплет, который позволяет легко протестировать созданное приложение даже без использования тестового физического устройства. Любому разработчику доступно несколько симуляторов на выбор для проверки своего приложения на всех актуальных мобильных устройствах Apple с разными размерами экрана. Симулятор здорово упрощает проверку приложений на разных устройствах, т.к. не требуется наличия в руках физического устройства.

Цель урока: научится создавать простые мобильные приложения с интерфейсом для iOS.

Запуск приложения в эмуляторе iOS

Сначала необходимо открыть проект любого приложения. И в верхней панели нажать на кнопку рядом с названием проекта, чтобы выбрать устройство для эмуляции. Для примера, на рисунке выбран «iPhone 6s»:

1

Затем необходимо открыть эмулятор, который находится по пути Xcode->Open Developer Tool->Simulator:

3

После этого необходимо запустить компиляцию мобильного приложения путем нажатия кнопки «выполнения»:

2

На экране появится следующее окно, эмулирующее работу выбранного устройства «iPhone 6s» с версией iOS 11.2, о чем сообщает подпись снизу:

4

Приложение уже скомпилировано внутри эмулятора. Перейдя на другую вкладку экрана, можно произвести его запуск (в данном случае оно имеет название «Calc v.1.1»):

Xcode уроки. Урок 5. Запуск мобильного приложения для iOS

Теперь можно тестировать приложение и проверять его работу на данном устройстве в эмуляторе:

6

Запуск приложения на физическом устройстве

Существует возможность запуска приложения на реальном устройстве для тестирования. Для этого необходимо подключить устройство usb-кабелем и открыть список устройств, выбрать в нём появившееся устройство (в данном случае «iPhone»):

7

Далее необходимо запустить процесс компиляции и дождаться появления иконки приложения на устройстве:

8

Необходимо кликнуть по иконке приложения на устройстве и в появившемся окне-предупреждении нажать кнопку «отменить».

9

Затем необходимо осуществить переход в пункт Настройки->Основные->Управление устройством. Здесь необходимо найти свою учетную запись разработчика и выбрать её путем нажатия, чтобы перейти в следующий пункт настройки:

10

Далее необходимо нажать кнопку «доверять» и подтвердить это действие:

11

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

12

Создание приложения конвертации из 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 уроки. Урок 5. Запуск мобильного приложения для iOS

Создание простого калькулятора в Xcode для iOS

Создадим более сложное приложение, которое будет являться калькулятором. Результат скомпилированного приложения приведен на рисунке.

Xcode уроки. Урок 5. Запуск мобильного приложения для 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».

Вопросы для проверки себя

  1. В чем разница между свойствами IBActions и IBOutlets?
  2. Как привязать элемент интерфейса к коду программы?
  3. Как получить доступ к тексту элемента label?
  4. Как скомпилировать приложение в Xcode?
  5. Что такое iOS симулятор?
  6. Существует ли возможность компиляции приложения на физическом устройстве? Что для этого нужно сделать?