Asist. dr. Vasile Silviu Lauren ț iu [623990]

UNIVERSITATEA DIN BUCUREȘTI FACULTATEA DE
MATEMATICĂ ȘI INFORMATICĂ

LUCRARE DE LICEN Ț Ă

COORDONATOR ȘTIINȚIFIC
​ Asist. dr. Vasile Silviu Lauren ț iu

Student: [anonimizat] 2017

UNIVERSITATEA DIN BUCUREȘTI FACULTATEA DE
MATEMATICĂ ȘI INFORMATICĂ

Procesare de imagini în iOS
BookZone

COORDONATOR ȘTIINȚIFIC
​ Asist. dr. Vasile Silviu Lauren ț iu

Student: [anonimizat] 2017

CUPRINS

CAPITOLUL 1 – INTRODUCERE 4
1.1 ALEGEREA TEMEI 4
1.2 Obiective propuse 6
1.3. Aplica ț ii similare 7
1.4 Structura lucrării de licen ț ă 7
CAPITOLUL 2 – TEHNOLOGII UTILIZATE ÎN DEZVOLTAREA
APLICA Ț IEI 8
2.1 iOS 8
2.1.1 Prezentare ș i istoric 8
2.1.2 Versiuni, dezvoltare, iOS 10 10
2.1.3 Arhitectura iOS 12
2.1.3.1 Cocoa Touch 13
2.1.3.2 Media 16
2.1.3.3 Core Services 17
2.1.3.3 Core OS 18
2.2 OBJECTIVE – C 18
2.2.1 Istoric ș i prezentare 18
2.3 SWIFT 20
2.3.1 Istoric ș i caracteristici 20
2.3.2 Cocoa ș i Cocoa Touch 23
2.3.3 CocoaPods 27
2.3.4 Tesseract OCR 28
2.3.4 Alamofire 32
2.3.4.1 Prezentare ș i utilizabilitate 32
2.3.4.2 Protocolul HTTP 32
2.3.4.3 JavaScript, XML ș i JSON 33
2.4. FIREBASE 35
2.4.1 Prezentare 35
2.4.2 Servicii 36
2.5. Model-View-Controller 39
Capitolul 3 – Dezvoltarea aplica ț iei 41
3.1 Încadrarea în context 41

3.2 Autentificarea 42
3.3 Încărcarea imaginii 44
3.4 Prelucrarea imaginii 46
3.5 Prelucrarea imaginii 48
3.6 Baza de date 50
3.7 Rezultatul final 51
CAPITOLUL 4 – CONCLUZII 52
BIBLIOGRAFIE 53

CAPITOLUL 1 – INTRODUCERE

1.1 ALEGEREA TEMEI

Lectura are un rol foarte important în formarea ș i educarea tinerilor întrucât contribuie
la dezvoltarea acestora din diferite puncte de vedere. Lectura este cea prin intermediul căreia,
oamenii î ș i lărgesc orizo ntul de cunoa ș tere , în toate domenii le posibile. Prin intermediul
căr ț ilor, tinerii află lucruri inedite, î ș i dezvoltă exprimarea, însu ș indu- ș i cuvinte noi,
descopera locuri, evenimente, pove ș ti în care se regăsesc, din care înva ț ă lec ț ii de via ț ă si cu
ajutorul cărora se dezvoltă psihic, intelectual dar ș i afectiv.
Din păcate, cartea a început să fie tot mai subapreciată de către omul societă ț ii
moderne. Lipsa de timp, monotonia, grijile zilnice îi împiedică pe cei mai mul ț i să se deta ș eze
chiar ș i pe o perioadă scu rtă de timp ș i să se afunde în lectură.
Întreaga lume a fost cuprinsă de multe tehnologii noi care oferă oamenilor
posibilitatea de a- ș i organiza ș i desfă ș ura activită ț ile mult mai u ș or ș i le oferă acces la
informa ț ii din orice loc, l a orice ora.
Câ ț i dintre oamen i, nu ș i-au umplut pagini de agendă cu programul zilnic sau diferite
men ț iuni sau ș i-au facut tot felul de noti ț e pe hârtie pentru a nu le uita. În ziua de astăzi, a
avea un telefon performant te scapă de toate aceste griji. Simpla răsfoire a ziarului a devenit
ș i ea mult mai accesibilă fiind la un click distan ț ă. Achizi ț ionarea produselor vestimentare sau
a electrocasnicelor ș i nu numai se află ș i ele printre facilită ț ile oferite de tehnologia din zilele
noastre. Oamenii consideră că aceste dispozitive sunt menite să le simplifice via ț a ș i să le
optimizeze activită ț ile. Ceea ce nu este în totalitate gre ș it, însă această modernizare atrage
după sine ș i dezavantaje. Mul ț i speciali ș ti sus ț in că tehnologia a ajuns să creeze dependen ț ă
ș i favorizează apari ț ia unor boli precum sedentarismul. Un alt aspect neplăcut al tehnologiei îl

reprezintă faptul că cei mai multi copii ș i nu numai, aleg să i ș i petreacă majoritatea timpului
liber pe aceste dispozitive, nu mai sunt capabili să comunice, devin tot mai introverti ț i,
retra ș i, trăiesc într-o lume ghidată de re ț elele sociale ș i plină de prejudecă ț i.
De ș i cu plusuri ș i minusuri, a ș a cum găsim oricărui lucru din jurul nostru, evolu ț ia
tehnologiei este un aspect indispensabil în via ț a omului modern. Peste tot vedem oameni cu
un telefon în mână căutând ceva, comunicând sau pur ș i simplu jucând diferite jocuri. Acest
aspect conduce la nevoia permanentă de noi aplica ț ii mobile ce sunt menite să ajute ș i să
atragă tot mai mul ț i utiliz atori fapt ce a condus la dezvoltarea unei noi industrii. Dacă în urmă
cu câ ț iva ani, nu oricine avea acces la un telefon ce suportă aplica ț ii de la dezvoltatori străini,
acum prin pătrunderea pe pia ț ă a telefoanelor cu cele doua sisteme de operare iOS ș i Android,
răspândirea noilor aplica ț ii e mult mai u ș oară.
Introducerea continuă de aplica ț ii noi, atât cele care nu mai au un analog pe pia ț ă sau
pur ș i simplu cele care aduc ceva în plus fa ț ă de cele care există deja, va atrage întotdeauna
aten ț ia utilizatorilor dornici de dezvoltare ș i de accest mai rapid la informa ț ii. De asemenea,
utilizatorii sunt din ce în ce mai critici, î ș i doresc o aplica ț ie care, beneficiind de un spa ț iu
mic de stocare, să fie capabilă să î ș i îndeplinească scopul fără probleme, cu rapiditate ș i
precizie.
Ideea aplica ț iei a pornit în primul rând de la dorin ț a de a păstra ș i cultiva pasiunea
oamenilor din jurul meu de a citi. Consider că lectura pe niciun dispozitiv electronic nu se
compară cu sentimentul inedit pe care îl ai atunci când ț ii cartea în mână si răsfoie ș ti paginile.
Cu cât sunt atentă mai mult la oamenii de lângă mine, cu atât observ că nu sunt singura care
gânde ș te a ș a. Observam oameni în mijloacele de transport, în parcuri ș i în librării ș i atunci
mi-am dorit să existe un loc accesibil tuturor unde să găsească toate informa ț iile de care au
nevoie despre o anumită carte, să î ș i poată exprima opiniile liber ș i să întâlnească persoane cu
aceea ș i dorin ț ă de cunoa ș tere.
Cu toate că o consider o tema actuală, aceasta a fost o alegere mai mult personală,
văzută din perspectiva unui om obi ș nuit cu nevoia unei aplica ț ii cu un astfel de scop ș i sunt
de parere că poate fi cu u ș urin ț ă dezvoltată ș i apreciată întrucât ​ cartea rămâne esențială în
viața omului, indiferent că generațiile se schimbă, iar lumea evoluează și involuează
deopotrivă.

1.2 Obiective propuse

Aplicatia se adresează tuturor oamenilor pasiona ț i de lectură ș i î ș i propune să atragă
câ ț mai mul ț i cititori prin cantitatea de informa ț ie pe care o poate furniza într-o manieră facilă
ș i accesibilă oricui.
Printr-o interfa ț ă prietenoasă ș i intuitivă, aplica ț ia poate fi accesată de oameni din
toate segmentele de vârstă. Este u ș or de utilizat, oferă suficente informatii, iar comenzile ș i
op ț iunile sunt destul de cl are, astfel că nu sunt necesare instruc ț iunile de folosire. Aplica ț ia î ș i
propune să dea răspunsurile de care un utilizator are nevoie într-un timp cât mai scurt, pentru
a nu fi nevoit să renun ț e înainte de a- ș i îndeplini scopul. Astfel, p rin intermediul camerei foto
a telefonului mobil, utilizatorul scaneaza ISBN-ul căr ț ii care i-a atras aten ț ia, iar în schimb
prime ș te toate informa ț iile revelante despre ea.
Pentru îndeplinirea obiectivelor, aplica ț ia a fost dezvoltată cu aten ț ie preoponderentă
asupra eficien ț ei ș i corectitudinii rezultatelor ș i a interfe ț ei grafice cât mai simple ș i mai
intuitive.
1.3. Aplica ț ii similare

Studiind aplica ț iile existente pe pia ț ă, am observat că maj oritatea se bazează pe
scanarea codului de bare, care este un proces similar dar mult mai costisitor si poate genera
multe erori. Cele mai sigure coduri de bare sunt cele bidimensionale ș i tridimensionale, însă
niciunul dintre aceste tipuri nu se găse ș te încă pe coperta niciunei căr ț i.
De asemenea, niciuna dintre aplica ț iile existente nu furnizeaza informa ț ii din punctul
de vedere al oamenilor ce deja au citit cartea respectivă. Acestea afi ș ează doar descrieri
formale asemeni celor care se găsesc pe copertă. Acest fapt nu constituie scopul unei aplica ț ii
de acest tip întrucât utilizatorul nu prime ș te nicio informa ț ie nouă ș i nici nu este influen ț at in
vreun fel.
O altă problemă semnalată în timpul studiului pie ț ei a fost spa ț iul costisitor de care au
nevoie aceste aplica ț tii. M ajoritatea folosesc o baza de date locală, ce are nevoie de spa ț iu
din dispozitivul utilizatorului. Nicio aplica ț ie existentă nu se pretează la cerin ț ele actuale,
unde toate datele sunt stocate pe servere ș i atât dezvoltatorul, cât ș i utilizatorul are acces la
ele în timp real cu foarte pu ț ine resurse.

1.4 Structura lucrării de licen ț ă

Prezenta lucrare este alcătuită din patru mari capitole după cum urmează:

➢ Primul capitol prezintă pe scurt motivul pentru care a fost aleasă această tema ș i
anume dorin ț a de a conserva plăcerea lecturii ș i de a aduce într-un singur loc persoane
cu acelea ș i pasiun i.
➢ Al doilea capitol descrie fundamentele teoretice de a căror prezen ț ă a fost nevoie
pentru alcătuirea aplica ț iei. Limbajul împreună cu tehnologiile utilizate au jucat un rol
foarte important în dezvoltarea cu succes a aplica ț iei. De asemenea, a fost inclusă o
analiză amănun ț ită a algoritmului de procesare a imaginii furnizate de utilizator ș i a
modalită ț ii în care sunt returnate rezultatele.
➢ Al treilea capitol reprezintă o analiză amănun ț ită a modului de func ț ionare al
aplica ț iei.
➢ Ultimul capitol prezintă îmbunătă ț irile ce pot fi aduse aplica ț iei precum si concluziile
si măsura în care consider că aplica ț ia ș i-a îndeplinit scop ul.

CAPITOLUL 2 – TEHNOLOGII UTILIZATE ÎN
DEZVOLTAREA APLICA Ț IEI

2.1 iOS
2.1.1 Prezentare ș i istoric

IOS, denumit ini ț ial Phone OS reprezintă un sistem de operare pentru telefoane
mobile creat ș i dezvolta t de către firma americană Apple. Acesta activează în prezent pe
multe dintre dispozitivele companiei: iPhone, iPad ș i iPod Touch ș i este al doilea cel mai
popular la nivel global sistem mobil de operare după Android.
A fost lansat în 2007, iar de atunci în fiecare an este publicată o nouă versiune. În
prezent, este disponibil iOS10 lansat în Septembrie 2016, dar iOS11 va avea lansarea oficială
în Iulie 2017.
În ​ 1976 ​ Steve Jobs ș i ​ Steve Wozniak au pus bazele unei companii de produse
electronice într-un garaj închiriat din ora ș ul ​ Palo Alto ​ , în sudul ​ Californiei ​ . Acest garaj a fost
ș i punctul de plecare a ceea ce urma să devină curând zona de înalte tehnologii „Silicon
Valley”. Au debutat cu 50 de plăci de bază, urmate de diferite componente ș i culminând cu
Macintosh, un computer care depă ș ea cu mult modelul făcut de IBM de la vremea aceea în
primul rând datorită interfe ț ei grafice u ș or de folosit, dar ș i datorită aspectului.
În 2005, când Steve Jobs a început să planifice crearea unui telefon cu sistem de
operare dezvoltat tot de ei, avea doua op ț iuni: fie să mic ș oreze Mac-ul, laptop care func ț iona
tot cu un sistem de operare propriu numit MAC OS X, fie să marească iPod-ul. Astfel, Jobs a
dat startul unei competi ț ii interne între echipele ce aveau sub dezvoltare cele două categorii
de dispozitive lansate deja, câ ș tigată de prima dintre ele prin crearea sistemului de operare
Phone OS. Decizia a favorizat succesul iPhone-ului ca platformă pentru dezvoltare prin

utilizarea ca bază a sistemului de operare desktop deja cunoscut, astfel fiind posibilă
dezvoltarea lui cu un efort minim.
Sistemul de operare a fost anun ț at ș i prezentat la Macwo rld Conference & Expo pe 9
ianuarie 2007 ș i lansat în luna iunie a aceluia ș i an. Ini ț ial, aplica ț iile „third-party” (create de
al ț i dezvoltatori decât cei din cadrul firmei Apple) nu erau suportate de către sistemul de
operare iPhone OS. La vremea respectivă, Steve Jobs motiva că dezvoltatorii puteau crea
aplica ț ii web suportate de browserul nativ Safari care să se comporte asemeni unor aplica ț ii
native. În Octombrie 2007, Apple anun ț ă că se pregăte ș te de lansare unui „Software
Development Kit” (SDK), fapt ce s-a ș i întâmplat. Astfel, în Iulie 2008, iOS App Store este
scos pe pia ț ă cu un numar ini ț ial de 500 de aplica ț ii. Magazinul online a cunoscut o
dezvoltare rapidă, astfel că în mai pu ț in de un an de la lansare avea deja 50000, iar în ianuarie
2017 număra 2.2 milioane de aplica ț ii.
În 2001, Apple scoate pe pia ț ă un audioplayer digital ce rulează tot cu iOS, numit
iPad. În 2003 a fost prezentat ​ Apple iTunes Store ​ , un magazin ​ online în web, aceasta oferind
muzică disponibilă legal pentru descărcat cu 0,99 $ pe cântec. Serviciul a devenit rapid lider
de pia ț ă, cu peste 5 miliar de de descărcări până în iunie 2008.
A ș a cum tendin ț ele dictau, în 2010, Apple lanseaza „calcu latorul tableta” iPad, special
pentru navigare pe internet, media ș i citit.
În august 2012, Apple a devenit cea mai valoroasă companie a tuturor timpurilor,
ajungând la o valoare de pia ț ă de 623 miliarde de dolari ș i depă ș ind astfel compania
Microsoft, care fusese evaluată la 620,58 miliarde de dolari în 1999 ​ .

2.1.2 Versiuni, dezvoltare, iOS 10

➢ Primele versiuni:
Primul iPhone a fost unul dintre cele mai importante dispozitive. Acesta a luat toate
ideile de la companiile din industria telefoanelor mobile ș i le-a făcut mult mai prietenoase.
Ecranul mare, sensibil la atingere a definit design-ul smartphone-urilor din zilele noastre, iar
grila „SpringBoard” – o gilă cu aplica ț ii pe ecran—nu s-a schimbat prea mult în ace ș ti zece

ani. A doua versiune a adus serviciul de localizare ș i aplica ț ii „third-party”. Au urmat ca
îmbunătă ț iri notificările P ush ș i posibilitatea de căutare eficientă prin dispozitiv,
Odată cu iOS 4, începem să vedem traiectoria de dezvoltare care urma să definească
Apple pentru urmatorii ani de zile. Prin aplica ț ia FaceTime, Apple ajută la stabilirea unei noi
ș i ambi ț ioase frontiere de comunica ț ie, transformând conceptul futurist de video telefonie în
realitate. La acea vreme, nu exista nimic altceva care să func ț ioneze la fel de bine. A fost
nevoie de câ ț iva ani ca aplica ț ii populare pentru desktop să aducă ceva func ț ional pentru
telefonul mobil. De asemenea, Apple a început sa adune tot mai multe idei de la competi ț ie ș i
sa le îmbunătă ț ească în special în ceea ce prive ș te Multitask-ing-ul spre a scoate ni ș te
func ț ionalită ț i utile ș i apreciate.
Versiunea iOS 5 aduce una dintre cele mai incredebile idei: un asistent personal
controlat vocal. De ș i ulterior a fost întrecut de Google Assistant, Siri rămâne o adevărată
descoperire pentru anul 2011 ș i o func ț ionalitate ce se află într-o continuă dezvoltare chiar ș i
în prezent. În 2012, Apple introduce propriul sistem de cartografiere care pierde teren însă în
fa ț a bine-cunoscutului Go ogle Maps.
➢ iOS 7:
Desemnat ca fiind „cea mai mare provocare a iOS-ului de la introducerea
iPhone-ului”, aceasă versiune a fost lansată în 2013 ș i aducea un sistem de operare complet
revizuit, cu un design mai simplu, pictograme plate ș i fonturi noi. Printre cele mai importante
îmbunătă ț iri se numără centrul de notificări ce con ț inea acum scurtături spre cele mai
importante setări, multitasking complet pentru toate aplica ț iile, adăugarea de func ț ii noi
pentru Siri, însă de departe cea mai importantă func ț ionalitate este „iOS în ma ș ină”. Această
aplica ț ie folosea integrar e Siri ș i oferea control asupra naviga ț iei prin satelit, telefonului, ș i
mesageriei prin ecranul telefonului fără a fi nevoie de atingerea sau privirea ș oferului. Un pas
important în securizarea telefonului a fost introducerea deblocării cu amprentă, inclusă odată
cu lansarea telefonului iPhone 5S în 2013.
➢ iOS 8 ș i iOS 9:
Odată cu această versiune, Apple introduce două concepte foarte cunoscute ș i astăzi:
Health Kit, Home Kit ș i iCloud. Primul dintre ele reprezintă un serviciu ce adună informa ț ii

din toate aplica ț iile de fitness pe care un utilizator le are instalate în telefon. De asemenea,
avea posibilitatea de a introduce istoricul medical pentru ca în caz de urgen ț ă, acesta să fie
accesibil medicilor.
Home Kit este un software care permite utilizatorului să comunice cu locuin ț a lui
„inteligentă”. Asta înseamnă că prin intermediul comenzilor vocale date lui Siri, putem avea
control asupra electrocasnicelor si accesoriilor „inteligente„. Apple a făcut un pas foarte
important odată cu această aplica ț ie pentru că înainte, fiecare aparat ce putea fi controlat
astfel, avea propria aplica ț ie, ceea ce facea controlul simultan mult mai greoi. Acest
dezavantaj a fost exploatat de Apple care a adus totul intr-o singura aplica ț ie u ș or de folosit.
ICloud vine după predecesorul MobileMe deloc apreciat. Serviciul permite
utilizatorilor sa stocheze date precum poze, videoclipuri, documente, ș i aplica ț ii pe servere
aflate la distan ț ă ș i pot fi accesate de pe orice dispozitiv. Odată ce dispozitivul este conectat
la un cont de iCloud, salvarea se face automat, ceea ce constituie un avantaj pentru că astfel
se realizează un back-up eficient al datelor. Un alt avantaj, după cum declară cei de la Apple,
este securitatea întrucat toate datele salvate sunt criptate înainte de a fi încărcate pe server. De
asemenea, acest serviciu permite găsirea telefonului în caz de pierdere sau furt.
IOS 9 aduce doar îmbunătă ț iri pentru Siri, Apple Music ș i 3D Touch. Apple încearcă
astfel sa recupereze terenul pierdut în fa ț a companiilor rivale care foloseau de ceva timp deja
ferestrele multiple. Astfel, noua versiune aduce meniuri contextuale pentru aplica ț ii, alte
scurtături ș i comenzi rapi de, dar ș i aplica ț ii customizabile pentru tastatură.
➢ iOS 10
Versiunea curentă, iOS 10 a adus în septembrie 2016, atunci când a fost lansată
schimbări la func ț ia de 3D Touch dar ș i la ecranul de blocare. De asemenea Siri, iMessages ș i
Maps au devenit aplica ț ii „third-party”, fapt ce a adus îmbunătă ț iri semnificative. Aplica ț iei
de fotografii i-a fost introdus un algoritm de căutare ce era capabil sa sorteze fisierele de
media în func ț ie de dată, eveniment, loca ț ie, persoane ș .a.m.d. ​ Cu siguran ț ă Apple a deschis o
nouă pagină pentru iOS, fiind acum un sistem de operare mult mai deschis decât a fost
vreodată.

2.1.3 Arhitectura iOS
Arhitectura iOS este una stratificată. La cel mai înalt nivel, iOS ac ț ionează ca
intermediar între hardware-ul de bază ș i aplica ț iile create. Aplica ț iile nu comunică direct cu
hardware-ul de bază. În schimb, ele au legatură cu acesta printr-un set de interfe ț e bine
definite. Aceste interfe ț e facilitează scrierea de aplica ț ii care func ț ionează în mod consistent
pe dispozitive care au diferite capabilită ț i hardware.
Implementarea tehnologiilor iOS poate fi privită ca un set de straturi, care sunt
prezentate în figura 2.1. Straturile inferioare con ț in servicii ș i tehnologii fundamentale.
Straturile de nivel superior se bazează pe straturile inferioare ș i oferă servicii ș i tehnologii
mai sofisticate.

Fig. 2.1

2.1.3.1 Cocoa Touch
Cocoa Touch se află în partea superioară a stivei iPhone OS (vezi fig. 2.1) ș i con ț ine
cadrele care sunt utilizate cel mai frecvent de dezvoltatorii de aplica ț ii pentru iPhone. Cocoa
Touch a fost extins ș i modificat pentru a satisface nevoile iPhone-ului.

Printre cele mai importante biblioteci din nivelul Cocoa Touch al arhitecturii iOS se
numără:
➢ UIKit Framework
UIKit Framework este poate cea mai importantă bibliotecă din Swift. Aceasta oferă
arhitectura ferestrelor ș i a vizualizărilor pentru implementarea interfe ț ei grafice, infrastructura
de gestionare a evenimentelor pentru aplica ț ii Multitouch ș i alte tipuri de intrări în aplica ț ii,
bucla principală de rulare necesară pentru a gestiona interac ț iunile dintre utilizator, sistem ș i
aplica ț ie. Alte caracteri stici oferite de librărie includ suport pentru anima ț ie, pentru
documente, pentru design ș i imprimare, informa ț ii despre dispozitivul curent, gestionarea ș i
afi ș area textului, suport pentru căutare, asisten ț ă pentru accesibilitate, suport pentru extensia
aplica ț iilor ș i gestionarea resurselor.
➢ Address Book UI Framework
Address Book UI reprezintă o interfa ț ă scrisă în Objective- C, folosită pentru a integra
datele din agenda telefonică în propriile aplica ț ii. Scopul principal al bibliotecii este de a
permite accesarea, afi ș area, editarea ș i introducerea informa ț iilor contactelor, în aplica ț ia
proprie. De asemenea, se asigură că aplica ț ia utilizează acelea ș i interfe ț e grafice ca ș i alte
aplica ț ii, garantând astfel coeren ț a pe platformă, un aspect la care Apple ț ine foarte mult.
➢ EventKit UI Framework
EventKit UI oferă controllere pentru alcătuirea interfe ț elor standard de sistem pentru
vizualizarea ș i editarea ev enimentelor legate de calendar.
➢ GameKit Framework
GameKit implementează suport pentru Game Center, care permite utilizatorilor să- ș i
împărtă ș ească online info rma ț iile legate de joc. Game Center ofer ă suport pentru următoarele
caracteristici:

● Aliasuri, pentru a permite utilizatorilor să- ș i creeze propriul caracter online.
Utilizatorii se conectează la Game Center ș i interac ț ionează cu ceilal ț i jucători în mod

anonim prin aliasul lor. Jucătorii pot seta mesaje de stare ș i pot marca anumite
persoane ca prietenii lor.
● Tablouri de scor, pentru a permite aplica ț iei să posteze scoruri pentru utilizatori în
Game center ș i să le recupereze mai târziu. Se poate utiliza această func ț ie pentru a
afi ș a cele mai bun e scoruri între to ț i utilizatorii aplica ț iei.
● Matchmaking, pentru a permite să crearea jocurilor multiplayer prin conectarea
jucătorilor
● Realizări, pentru a permite să înregistrarea progresulului pe care un jucător l-a făcut în
joc.
● Provocări, pentru a permite unui jucător să provoace un prieten (IOS 6 ș i versiuni
ulterioare)

➢ iAd Framework
IAd permite furnizarea reclamelor în aplica ț ie. Acestea sunt încorporate în ecranele
din interfa ț a grafică. Controllerele din această bibliotecă sunt cele care se ocupă de încărcarea
ș i prezentarea acestora către utilizatori dar ș i gestionarea răspunsurilor la atingerea reclamelor
de către utilizatori.

➢ MapKit Framework
MapKit oferă o hartă scalabilă care poate fi încorporată în interfa ț a grafică a
aplica ț iei. Dincolo de afi ș area unei hăr ț i, se poate cu u ș urin ț ă personaliza con ț inutul ș i
aspectul hăr ț ii prin interm ediul bibliotecii. Astfel, se pot semnala puncte de interes folosind
adnotări ș i se pot utiliza suprapuneri personalizate pentru a combina con ț inutul propriu cu
con ț inutul hăr ț ii. Acest lucru poate fi util pentru o aplica ț ie destinată transportului în comun,
pentru a trasa un traseu de autobuz sau utiliza adnotări pentru a eviden ț ia magazine ș i
restaurante din apropiere.
Pe lângă afi ș area hăr ț ilor, MapKit poate fi integrată foart e u ș or cu aplica ț ia nativă de
Hăr ț i ș i cu serverele de hăr ț i Apple pentru a facilita direc ț iile. Din aplica ț ia Hăr ț i, utilizatorii
pot să delege furnizarea de indica ț ii de orientare către orice aplica ț ie care acceptă acest lucru.
Aplica ț iile care oferă tipuri de direc ț ii specializate, cum ar fi rute de metrou, se pot înregistra

pentru a le oferi aceste indica ț ii atunci când sunt necesare. Aplica ț iile pot solicita, de
asemenea, instruc ț iuni de mers pe jos ș i de conducere de la serverele Apple ș i îmbinarea
acelor informa ț ii despre rute cu instruc ț iunile lor personalizate pentru a oferi o experien ț ă
completă pentru nevoile utilizatorului.

➢ Message UI Framework
Message UI oferă suport pentru compunerea de e-mail-uri sau SMS-uri din aplica ț ia
proprie. Biblioteca aduce o interfa ț ă grafică pentru controller-ului integrat în aplica ț ie. Astfel
prin intermediu interfe ț ei grafice, se pot completa câmpuri, se pot seta destinatarii, subiectul,
con ț inutuli ș i se pot ata ș a documente, fotografii sau videoclipur ce doresc a fi incluse în
mesaj. Utilizatorul are apoi op ț iunea de a edita mesajul înainte de a-l trimite.

2.1.3.2 Media
Rolul stratului Media este de a oferi sistemului de operare iPhone capabilită ț i audio,
video, anima ț ie ș i grafică. Ca ș i în cazul celorlalte straturi din arhitectura iPhone OS, stratul
Media con ț ine un număr de biblioteci care pot fi utilizate atunci când se dezvoltă aplica ț ii
iPhone. Acestea sunt:

➢ Core Graphics
Caracteristicile acestei biblioteci includ crearea ș i prezentarea de documente PDF,
desene pe bază de vectori, desene bazate pe trasee, manipulare ș i gestionare a culorilor,
redare ș i gradien ț i de imagine.

➢ Quartz Core
Scopul aceste biblioteci este de a oferi capabilită ț i de anima ț ie pe iPhone. Acesta
oferă baza pentru majoritatea efectelor vizuale ș i anima ț ie folosite de cadrul UIKit ș i con ț ine
o interfa ț ă de programar e bazată pe Objective-C pentru crearea de anima ț ii specializate în
aplica ț iile iPhone.

➢ Core Audio
Cu ajutorul acestei biblioteci sunt definite tipurile audio acceptate, redarea ș i
înregistrarea fi ș ierelor audio ș i oferă, de asemenea, acces la unită ț ile de procesare audio
încorporate ale dispozitivului.

➢ Open GL ES
Timp de mul ț i ani standardul industrial pentru desen grafic 2D ș i 3D de înaltă
performan ț ă a fost Open GL. Pentru sistemele încorporate (ES) este o versiune cu greutate
redusă a specifica ț iei OpenGL, concepută special pentru dispozitive mai mici, cum ar fi
iPhone-ul.

➢ Open AL
OpenAL este o tehnologie utilizată pentru a furniza efecte audio 3D de înaltă calitate.
Sunetul pozitiv poate fi folosit într-o varietate de aplica ț ii, de ș i este folosit în mod obi ș nuit
pentru a oferi efecte sonore în jocuri.

2.1.3.3 Core Services
➢ Core Data
Core Data este o tehnologie pentru gestionarea modelului de date al unei aplica ț ii
Model-View-Controller (MVC). Datele principale sunt destinate utilizării în aplica ț ii în care
modelul de date este deja foarte bine structurat. În loc să fie definite programatic structurile
de date, sunt utilizate instrumentele grafice.

➢ Core Location
Core Location permite să ob ț ine ț erea loca ț iei geografice curentă a dispozitivului
(latitudine ș i longitudin e) ș i citirile busolei cu propriile aplica ț ii. Metoda utilizată de
dispozitiv pentru a furniza coordonatele va depinde de datele disponibile la momentul
solicitării informa ț iilor ș i de suportul hardware furnizat de modelul particular al iPhone pe
care rulează aplica ț ia. Acest lucru se va baza fie pe citirile GPS, fie pe datele din re ț eaua
Wi-Fi.

➢ Store Kit
Scopul bibliotecii Store Kit este de a facilita tranzac ț iile comerciale între aplica ț ie ș i
Apple App Store. IPhone OS 3.0 a introdus conceptul de "achizi ț ie în aplica ț ie" prin care
utilizatorului i se poate oferi op ț iunea de a efectua plă ț i suplimentare din cadrul aplica ț iei.

2.1.3.3 Core OS
Core OS Layer este stratul inferior al arhitecturii iPhone OS ș i se află direct pe partea
de sus a hardware-ului dispozitivului. Stratul oferă o varietate de servicii, inclusiv re ț ele de
nivel scăzut, acces la accesorii externe ș i servicii de bază de operare obi ș nuite, cum ar fi
gestionarea memoriei, manipularea sistemelor de fi ș iere ș i a thread-urilor.

2.2 OBJECTIVE – C

2.2.1 Istoric ș i prezentare

Objective- C este un limbaj de programare orientat- obiect alcătuit dintr-o serie de
librării ș i biblioteci peste limbajul C. Sistemul de operare NextStep ce face parte din familia
Unix a fost scris în întregime în Objective- C. A fost limbajul principal folosit de Apple în
dezvoltarea sistemelor de operare iOS ș i OS X precum ș i în dezvoltarea interfe ț elor Cocoa ș i
Cocoa Touch.
Objective- C a fost prima data creat de Brad Cox ș i Tom Love în anul 1980 la
compania lor numită StepStone. Ace ș tia au adăugat peste limbajul C extensia de orientat-
obiect dar ș i ceva din abilită ț ile limbajului de programare SmallTalk. Astfel, în 1986, Cox
publică descrierea principală a limbajului Objective- C precum ș i toate elementele de sintaxă
în cartea sa „Object- Oriented Programming, An Evolutionary Approach”. De ș i el a avut grijă

să sublinieze faptul că există mai multe aspecte ale problemei de refolosire a codului,
Objective- C a fost adesea apreciat pentru această caracteristică. În 1988, NeXT a cumpărat
Objective- C de la StepStone ș i a extins compilatorul GCC pentru a suporta ș i acest limbaj.
Au fost dezvoltate bibliotecile AppKit ș i Foundation Kit pe care s-a bazat crearea interfe ț ei
sistemului propriu de operare. În timp ce componentele produse de NeXT nu au reu ș it să aibă
un impact prea mare pe pia ț ă, instrumentele au fost foarte apreciate în industrie. Din acest
motiv, NeXT a decis să scadă produc ț ia de hardware ș i să se concentreze asupra
instrumentelor software, vânzând NeXTSTEP ( ș i OpenStep) ca o platformă pentru
programare personalizată.
După ce a cumpărat NeXT în 1996, Apple a folosit OpenStep, un framework cunoscut
al limbajului Objective- C, in crearea sistemului de operare OS X. Acest lucru includea
Objective- C, instrumentul de dezvoltare folosit de NeXT, Project Builder, precum ș i
instrumentul de proiectare a interfe ț ei Interface Builder, toate trei îmbinate într-o singura
aplica ț ie XCode, mediu de dezvoltare folosit ș i astăzi. Majoritatea interfe ț elor Cocoa are la
bază obiectele interfe ț ei OpenStep ș i este cel mai semnificativ mediu Objective- C utilizat
pentru dezvoltare activă.
A ș a cum am am amintit mai sus, Objective- C reprezintă o extindere a limbajului de
programare C ș i este un superset strict, ceea ce înseamnă că e posibil să compilezi orice
program cu un compilator de Objective- C ș i ai posibilitatea de a include cod de C într-o
clasă de Objective- C. Sintaxa derivă din SmallTalk, dar toate opera ț iile non-obiect cum ar fi
variabilele primitive, expresii, declararea func ț iilor ș i apelurile lor sunt identice celor din C.
Modelul Objective- C de programare orientată-obiect este bazat pe trimiterea
mesajelor între instan ț ele obiectelor. In Objective- C, un obiect nu apeleaza o metodă, ci
trimite un mesaj. Diferen ț a dintre cele două concepte constă în modul în care este executat
codul referen ț iat de o metodă sau de un mesaj. În Objective – C, un mesaj este rezolvat în
timpul execu ț iei ș i interpretat de insu ș i obiectul recep ț ionat. O metodă este indentificată de un
selector sau de un SEL, sau de un ș ir de caractere ce se termina cu NULL ș i reprezintă
numele său. O consecin ț ă a acestui fapt este că sistemul de transmitere a mesajului nu trece
prin nicio verificare a tipului. Obiectul care prime ș te mesajul nu este garantat că va răspunde
la el ș i în acest caz se tran smite o excep ț ie.
Trimiterea unui mesaj ​ method ​ către obiectul ​ obj ​ în C arată astfel:
b j e t h o d ( a r g u m e n t ) ; o → m

Aceea ș i metodă în Objective- C se scrie:
o b j m e t h o d a r g u m e n t ] [ :
În limbajele de programare orientate-obiect, a ș a cum este ș i Objective- C, clasele
reprezintă blocuri ale aplica ț iei, construite din variabile si func ț ii. O func ț ie importantă a
acestui limbaj este faptul că o clasă poate fi separată in două fi ș iere: unul ce con ț ine interfa ț a
ș i unul ce con ț ine implementarea propriu-zisă. Această separ are face posibilă partajarea
informa ț iilor esen ț iale dintr-o clasă ș i ascunderea implementărilor irelevante din punctul de
vedere al clientului.
În 2014, Apple a introdus un nou limbaj numit Swift ce era caracterizat ca ”Objective-
C fără C”. Totusi, nu s-a renun ț at incă definitiv la Objective- C, existând librării care nu au
fost traduse în Swift, dar care pot fi folosite în aplica ț ii.

2.3 SWIFT
2.3.1 Istoric ș i caracteristici

Swift este un limbaj de programare dezvoltat de Apple pentru iOS, MacOS, watchOS,
tvOS ș i Linux ș i este proiectat pentru a lucra cu framework-urile Cocoa ș i CocoaTouch, dar ș i
cu predecesorul lui, Objective- C.
Noul limbaj este destinat să fie mai rezistent la cod eronat ș i mai concis. Cu toate
acestea, el suportă multe concepte de bază din Objective- C. Pentru siguran ț ă, Swift ajută la
rezolvarea erorilor de programare comune cum ar fi pointeri null ș i adaugă sintaxa ajutătoare
pentru a evita astfel de probleme. Mai exact, Swift adaugă conceptul de extensie a
protocoalelor, extensie ce poate fi aplicată unor tipuri, structuri ș i clase. Apple promovează
acest lucru ca pe o adevarată schimbare în paradigmele de programare pe care acum le
numesc „programare orientat-protocol ”
Limbajul Swift a început să fie dezvoltat de Chris Lattner împreună cu o echipă de
programatori din cadrul firmei Apple în iulie 2010 ș i a împrumutat elemente ș i concepte din
Objective- C, Rust, Haskell, Ruby, Pyhton, C#, CLU ș i multe altele. În iunie 2014, la
conferin ț a Apple Worldw ide Developers Conference, Apple a lansat o versiune beta, mai

mult pentru test, compania afirmând că versiunea finală nu este sigur că va fi compatibila cu
cea lansată atunci. Conform a ș teptărilor, limbajul a fost foarte bine primit de către
dezvoltatori din întreaga lume, în 2015 luând premiul pentru cel mai iubit limbaj de
programare. În prezent, Swift se afla la a treia versiune.
Implicit, Swift nu încurajează folosirea pointerilor sau a altor elemente ce pot genera
erori, fapt ce îl face să fie mai sigur. De asemenea, sintaxa greoaie din Objective- C a fost
înlocuită cu una mult mai familiară asemenei celei din Java sau C#. O altă modificare ar fi că
Swift suportă cinci tipuri modificatori de acces: ​ open, public, internal, fileprivate. ​ Spre
deosebire de alte limbaje orientate-obiect, ace ș ti modificatori ignoră ierarhia claselor
mo ș tenite. Astfel, câmpu rile ​ private sunt accesibile doar în clasa în care sunt declarate, cele
fileprivate sunt văzute doar în fi ș ierul respectiv, adică spre deosebire de modificatorul
anterior, un câmp declarat fileprivate este accesibil ș i în extensia unei clase. ​ Internal este
folosit pentru câmpuri ce pot fi folosite doar în cadrul aplica ț iei în care au fost declarate,
câmpurile ​ public pot fi accesate din orice modul, iar cele ​ open sunt folosite pentru clase ce
pot fi mo ș tenite în afara m odului.
O caracteristică nouă ș i importantă este tipul de date ​ optional ​ care permite ca
referin ț ele sau valorile să func ț ioneze într-o manieră similară cu modelul din C, unde un
pointer putea referi o valoare sau putea fi null. Acest lucru implică faptul că tipurile
non-op ț ionale nu pot fi null, iar compilatorul e cel care asigură că asta nu este posibil. Un
câmp op ț ional este marca t de operatorul „?”, în timp ce unul non-op ț ional prin „!”.
Swift 2 a introdus un nou cuvânt-cheie: ​ guard, ​ folosit în cazul în care execu ț ia ar
trebui să se oprească dacă anumite condi ț ii nu sunt îndeplinite. Folosirea lui aduce trei
beneficii. În primul rând, de ș i sintaxa poate ac ț iona ca un ​ if ​ , avantajul principal este evitarea
nulabilită ț ii. În al doilea rând, dacă se află în interiorul unui ​ if ​ , ​ guard î ș i asumă cazul pe baza
condi ț iei furnizate. În cele din urmă, dacă rezultatul testului executat de ​ guard este fals,
atunci Swift soliciă prezen ț a instruc ț iunii ​ else pentru a ie ș i din metodă sau din instruc ț iunea
repetitivă. Acest lucru se realizează folosind cuvintele cheie: ​ return, continue, break, throw ​ .
Predecesorul Objective- C a permis ca orice metodă să fie apelată pe orice obiect în
orice moment. Dacă apelul metodei e ș ua, exista un handler implicit în timpul execu ț iei care
revenea la 0. Asta însemna ca nu era nevoie de dubug sau de testare. Totu ș i, acest fapt
implica faptul că toate apelurile de metode trebuiau să fie dinamice, ceea ce însemna destul
timp în plus. Utilizarea op ț ionalelor în Swift oferă un mecanism similar pentru testarea si

tratarea null-urilor, dar face asta într-un mod în care îi permite compilatorului să folosească
supraîncărcarea.
O altă caracteristică principală a limbajului Swift este folosirea categoriilor ș i a
protocoalelor. Extensiile reprezintă metode ce pot fi adaugate claselor la momentul execu ț iei.
De exemplu, verificarea ortografică poate fi adăgată clasei NSString, ceea ce înseamnă că
toate instan ț ele acestei clase beneficiază de verificare. Acest lucru este folosit la o scară mai
largă, alcătuindu-se biblioteci si adăugând noi proprietă ț i, tipuri ș i enumera ț ii instan ț elor
existente.
Protocoalele sunt cunoscute in limbajele moderne de programare ca interfe ț e. Acestea
permit ca o clasă să implementeze un set de metode, însemnând că alte clase pot apela aceste
metode pe orice obiect ce suportă acel protocol. Acest mecanism este adesea folosit în
limbajele moderne ca substituent pentru mo ș tenirea multiplă de ș i nu sunt echivalente. În
Objective- C ș i în major itatea limbajelor care include concepul de protocol, programatorul
are responsabilitatea de a se asigura că metodele necesare sunt implementate în fiecare clasă.
Swift adauga capacitatea de a adăuga aceste metode folosind extensii ș i programare generică
pentru a le implementa. Combinate, cele două concepte permit ca protocoalele să fie scrise o
singura dată ș i să suporte o mare varietate de instan ț e. De asemenea, extensiile pot fi folosite
pentru a adăiga conformitatea unui protocol cu un obiect care nu con ț ine protocolul respectiv
în defini ț ia sa.
În ceea ce prive ș te managementul memoriei, Swift folose ș te ARC (Automatic
Reference Counting) din 2011, mecanism ce permite atât o alocare cât ș i o dezalocare mai
u ș oară a memoriei. Asta înseamnă că ARC eliberează automat memoria utilizată de instan ț ele
claselor când acestea nu mai sunt necesare. Acest mecanism se bazează pe re ț inerea ș i
eliberarea mesajolor cu care obiectele pot fi marcate pentru dezalocare sau reten ț ie la
momentul compilării, permi ț ând dezvoltatorului să controleze acest proces. ARC absolvă
programatorul de responsabilitatea de a implementa aceste mesaje ș i în loc se bazează pe
compilator că le va introduce automat. De fiecare dată când este creată o nouă instan ț ă a
clasei, ARC alocă o por ț iune de memorie în care sunt stocate toate datele corespunzătoare
acelei instan ț e. Pentru a se asigura că instan ț ele nu dispar cât timp încă sunt folosite, ARC
contorizează câte proprietă ț i, constante ș i variabile sunt folosite de fiecare instan ț ă a clasei. În
felul acesta, nu va dezaloca o instan ț ă cât timp încă există cel pu ț in o referin ț ă activă la ea.

ARC se diferen ț iază de garbage collector-ul din Java prin faptul că nu există niciun
proces de fundal care să permită dezalocarea obiectelor în mod asincron în timpul execu ț iei.
De asemenea, el nu tratează automat ciclurile de referin ț ă, ceea ce înseamnă că atâta timp cât
există referin ț e puternic e (strong) la un obiect, acesta nu va fi dezalocat. Referin ț ele
încruci ș ate pot, prin urmare, sa creeze blocări ș i probleme cu memoria. Este de datoria
dezvoltatorului să „rupă” aceste cicluri prin folosirea referin ț elor slabe (weak).
Totu ș i, există anumite cazuri când ARC are nevoie de mai multă aten ț ie din partea
programatorului pentru ca el să poată să managerieze corespunzător memoria pe motiv că se
poate ca o clasă să nu ajungă niciodată în punctul în care să existe zero referin ț e active. Acest
caz poate apărea în momentul în care se între două instan ț e există o referin ț ă puternică ș i
poartă numele de ciclu de referin ț ă puternic. În acest caz, unele dintre rela ț ii trebuie declarate
weak sau ​ unowned. Din cauză că o referin ț ă ​ weak nu păstrează o legătură puternică asupra
instan ț ei la care se referă , este posibil ca această instan ț ă să fie dezalocată în timp ce referin ț a
weak încă face referire la ea. Prin urmare, ARC stabile ș te automat o referin ț ă slabă la null
atunci când instan ț a la care se referă este dezalocată. Ș i, deoarece referin ț ele slabe trebuie să
permită ca valoarea lor să fie setată la null în timpul execu ț iei, ele sunt întotdeauna declarate
ca variabile de tip op ț ional, nu ca ș i constante.
Spre deosebire de referin ț ele ​ weak ​ , cele ​ unowned se folosesc atunci când instan ț a are
aceea ș i durată de via ț ă sau una mai mare, adică ea trebuie să refere întotdeauna o instan ț ă ce
nu a fost dezalocată deja. O astfel de referin ț ă trebuie să aibă mereu o valoare. Prin urmare
ARC nu setează niciodată o referin ț ă de acest tip ca null, ceea ce înseamnă că o referin ț ă
unowned ​ este definită ca o variabila non-op ț ională.

2.3.2 Cocoa ș i Cocoa Touch

Cocoa ș i Cocoa Touch reprezintă mediile de dezvoltare ale aplica ț iilor pentru OS X
respectiv iOS. Ambele includ Objective- C ș i două framework-uri de baza:

● Cocoa include Foundation ș i AppKit, folosite pentru dezvoltarea aplica ț iilor ce
rulează pe OS X.
● Cocoa Touch include Foundation ș i UIKit, folosite pentru dezvoltarea aplica ț iilor ce
rulează pe iOS.

Biblioteca Foundation implementează clasa rădăcină NSObject, care define ș te
comportamentul obiectului de bază. Această bibliotecă implementează clase care reprezintă
tipuri primitive (de exemplu ș ir de caractere ș i numere) ș i colec ț ii (de exemplu Arrays ș i
liste). Foundation oferă, de asemenea, facilită ț i pentru interna ț ionalizare, persisten ț a
obiectului, gestionarea fi ș ierelor ș i procesarea XML. Clasele sale pot fi utilizate pentru a
accesa entită ț i ș i servicii de bază, cum ar fi porturi, procese, fire de execu ț ie precum ș i
sincronizarea acestora. Foundation se bazează pe biblioteca Core Foundation, care publică o
interfa ț ă procedurală (AN SI C).
Bibliotecile AppKit ș i UIKit sunt folosite de către programatori pentru a dezvolta o
interfa ț ă grafică pentru aplica ț ie. Aceste două biblioteci sunt echivalente ca ș i scop, dar sunt
specifice unei platforme. Acestea includ clase de manipulare a evenimentelor, design,
manipulare de imagini, procesare de text, tipografie ș i transfer de date între aplica ț ii. Acestea
includ elemente de interfa ț ă grafică, cum ar fi tabele, bară de derulare, butoane, câmpuri de
text ș i ferestre de alertă.
Începând cu iOS 8, anumite zone pot fi dezvoltate furnizând o extensie a aplica ț iei,
care reprezintă un cod ce permite func ț ionalitatea personalizată în contextul unei ac ț iuni a
utilizatorului. Un exemplu de extensie de aplica ț ie ar fi distribuirea con ț inutului aplica ț iei pe
un site de socializare. După ce utilizatorii instalează ș i activează această extensie, o pot alege
atunci când este apăsat butonul Distribuie din aplica ț ia curentă. Extensia de distribuire
personalizată furnizează codul care acceptă, validează ș i publică con ț inutul utilizatorului.
Sistemul listează extensia din meniul de partajare ș i o instan ț iază atunci când utilizatorul o
alege.
IOS acceptă extensii de aplica ț ii pentru următoarele zone, cunoscute sub numele de
puncte de extensie:
➢ Distribuire: distribuie con ț inut pe re ț ele sociale ș i alte platforme web
➢ Ac ț iune: e xecută o sarcină simplă cu con ț inutul curent

➢ Widget: furnizează o actualizare rapidă sau oferă posibilitatea de a adăuga o
activitate în sec ț iunea „Astăzi” a Centrului de Notificare.
➢ Editare foto: efectuează modificări pentru o fotografie sau un videoclip în
aplica ț ia Fotografii.
➢ Furnizor de documente: furnizează o loca ț ie de stocare a documentelor care
poate fi accesată de alte aplica ț ii. Aplica ț iile care utilizează un selector de
documente pot deschide fi ș ierele gestionate de Furnizorul de documente sau
pot muta fi ș ierele în acesta.
➢ Tastatură particularizată: furnizează o altă tastatură decât cea nativă pe care
utilizatorul o poate alege în locul tastaturii de sistem pentru toate aplica ț iile de
pe dispozitiv.
➢ Handoff: extinde experien ț a de continuitate pe toate dispozitivele a
utilizatorului. Handoff permite utilizatorilor să înceapă o activitate pe un
singur dispozitiv, apoi să treacă la alt dispozitiv ș i să reia aceea ș i activitate pe
celălalt dispozitiv. De exemplu, un utilizator care răsfoie ș te un articol lung din
Safari pe web se mută pe un dispozitiv iOS care este conectat la acela ș i cod
Apple, aceea ș i pagină web se deschide automat în Safari pe iOS, având
aceea ș i pozi ț ie de defilare ca ș i pe dispozitivul original. Fiecare activitate în
desfă ș urare dintr-o aplica ț ie este reprezentată de un obiect de activitate (user
activity object) care con ț ine datele necesare pentru a relua activitatea pe un alt
dispozitiv. Când utilizatorul alege să reia această activitate, obiectul este trimis
către dispozitivul pe care se mută. Fiecare obiect de activitate al utilizatorului
are un obiect delegat care este invocat pentru a reîmprospăta starea activită ț ii
la momente diferite, cum ar fi chiar înainte ca obiectul de activitate al
utilizatorului să fie trimis între dispozitive.
➢ Document Picker: Controller-ul pentru selectarea documentelor
(UIDocumentPickerViewController) permite accesul utilizatorilor la fi ș iere în
afara spa ț iului de lucru al aplica ț iei. Este un mecanism simplu pentru
partajarea documentelor între aplica ț ii. De asemenea, permite fluxuri de lucru
mai complexe, deoarece utilizatorii pot edita un singur document cu mai multe
aplica ț ii.

➢ AirDrop: AirDrop permite utilizatorilor să partajeze fotografii, documente,
adrese URL ș i alte tipuri de date cu dispozitivele din apropiere. Suportul
pentru trimiterea de fi ș iere către alte dispozitive iOS utilizând AirDrop este
integrat în clasa UIActivityViewController existentă. Această clasă afi ș ează
diferite op ț iuni pentru partajarea con ț inutului specificat. Fi ș ierele trimise în
aplica ț ie sunt plasate în directorul Documents/Inbox din directorul aplica ț iei.
Pentru a putea fi modificat, fi ș ierul trebuie mai întai mutat din acest director.
Sistemul permite aplica ț iei să citească ș i să ș teargă numai fi ș iere din acest
director. Fi ș ierele stocate sunt criptate folosind protec ț ia datelor, deci trebuie
să fi ț i pregăti ț i pentru ca fi ș ierul să nu fie accesibil dacă dispozitivul este
blocat.
➢ TextKit: este un set complet de clase de nivel înalt pentru manipularea textului
ș i a tipogr afiei fine. Folosind TextKit, textul poate fi pus în paragrafe, coloane
ș i pagini. De asemenea se poate rula text în jurul unor regiuni arbitrare, sau se
pot gestiona mai multe fonturi. Este integrat cu toate controalele UIKit pentru
a permite aplica ț iilor să creeze, să editeze, să afi ș eze ș i să stocheze mai u ș or
textul – ș i cu un număr mai mic de cod decât era posibil anterior în iOS.
➢ Storyboard: reprezintă modalitatea recomandată de a proiecta interfa ț a grafică
a aplica ț iei. Astfel, aceasta se modelează într-un singur loc, pentru a putea
vedea toate vizualizările ș i controllerele de vizualizare ș i pentru a în ț elege cum
func ț ionea ză împreună. O parte importantă a storyboard-urilor este abilitatea
de a defini ​ segues ​ , tranzi ț ii de la un ecran la altul. Aceste tranzi ț ii pot fi
definite vizual, în mediul de lucru Xcode, sau pot fi ini ț iate programabil, adică
din cod. Un singur storyboard este suficient pentru a stoca toate controllerele
ș i ecranele aplica ț iei.
➢ Conservarea stării unei aplica ț ii: furnizeaza o experien ț ă fără probleme pentru
utilizatori prin faptul că aplica ț ia apare că rulează încontinuu. Dacă sistemul
este prea încărcat este posibil să fie nevoit să închidă câteva din aplica ț iile ce
rulează. În momentul în care acest lucru se întamplă, starea view-urilor ș i a
controllerelor poate fi păstrată ș i în acest fel atunci când utilizatorul deschide
aplica ț ia din nou să pară ca ș i cum aplica ț ia nu a fost niciodata închisă.

➢ Notificări Push: modalitate de a alerta utilizatorii despre informa ț ii noi, chiar
ș i atunci când aplica ț ia nu rulează în mod activ. Notificările pot fi doar text,
impreună cu pictograma aplica ț iei sau sub formă alerte sonore. Aceste mesaje
permit utilizatorilor să ș tie că ar trebui să deschidă aplica ț ia pentru a primi
informa ț iile asociate.
➢ Notificări locale: completează mecanismul de notificare push existent, oferind
aplica ț iilor o modalitate de a genera notificările la nivel local, în loc să se
bazeze pe un server extern. Aplica ț iile care rulează în fundal pot utiliza
notificările locale ca o modalitate de a atrage aten ț ia utilizatorului atunci când
se întâmplă evenimente importante. De exemplu, o aplica ț ie de navigare care
rulează în fundal poate utiliza notificări locale pentru a avertiza utilizatorul
când este timpul să facă o schimbare de direc ț ie. Aplica ț iile pot fi programate,
de asemenea, să emită notificări locale pentru o dată ș i o oră viitoare ș i să fie
transmise chiar dacă aplica ț ia nu este în prim-plan. Un avantaj al notificărilor
locale este că acestea sunt independente de aplica ț ie. După ce este programată
o notificare, sistemul gestionează livrarea acestuia, astfel aplica ț ia nu trebuie
să fie în func ț iune atunci când notificarea este trimisă.
➢ Recunoa ș terea gesturilor: detectează tipuri de gesturi obi ș nuite, cum ar fi
trecerea din partea stângă a ecranului în partea dreaptă ș i atingerile scurte în
ecranele aplica ț iei. Recunoa ș terea gesturilor face toată munca de urmărire a
evenimentelor brute ș i de determinare a momentului în care acestea constituie
un gest inten ț ionat ș i cu un efect asupra aplica ț iei.

2.3.3 CocoaPods

CocoaPods reprezintă un manager de dependin ț e online pentru proiectele în Swift ș i
Objective- C. Ini ț iativa a pornit în 2011, de la Eloy Durán ș i Fabio Pelosin care au fost
inspira ț i de combina ț ia proiectelor Ruby: RubyGems ș i Bundler. În prezent, cei doi continuă

să gestioneze proiectul cu ajutorul ș i contribu ț iile multor altor dezvoltatori din întreaga lume
ș i a ajuns la un numar de aproximativ 3000 de biblioteci.
Orice biblioteca de pe CocoaPods are un repository pe Github ș i poate fi inclusă în
aplica ț ie din linia de comanda, ș i nu prin copierea resurselor în proiect ca înainte. Fi ș ierul se
nume ș te Podfile ș i este inclus în proiect prin executarea comenzii ​ 'pod init' ​ în linia de
comanda din cadrul aplicatiei. Fi ș ierul arată astfel:
platform :ios, '10.0'
target 'BookZone' do
use_frameworks!
pod 'TesseractOCRiOS', '4.0.0'
end

Dependin ț ele din fi ș ierul Podfile sunt instalate prin execu tarea comenzii ​ 'pod install'
si redeschiderea proiectului. Astfel, daca biblioteca prime ș te update, aplica ț ia va merge în
continuare, dar nu i ș i va actualiza singura dependin ț ele. ​ CocoaPods a adus un beneficiu ș i în
ceea ce priveste testarea aplica ț iilor întrucât instalarea bibliotecilor pentru UI Test e mult mai
accesibilă.
​ platform :ios, '9.0'
use_frameworks!
def testing_pods
pod 'Quick', '0.5.0'
pod 'Nimble', '2.0.0-rc.1'
end
target 'BookZone' do
testing_pods
end
target 'UITests' do
testing_pods
end

2.3.4 Tesseract OCR
Recunoa ș terea optică a caracterelor reprezintă conversia mecanică sau electronică fie
a imaginilor cu text tipărit, cu scris de mână sau cu text imprimat, fie a textului dintr-un
document scanat, dintr-o poză a unui document, o poză oarecare(de exemplu textul de pe un
panou publicitar inclus într-o poză a unui peisaj) sau textul suprapus peste o imagine (de
exemplu, subtitrarea dintr-un film). Este folosit pe scară largă ca formă de introducere a
informa ț iilor din înregis trările de hârtie tipărite, documente tip pa ș aport, facturi, extrase
bancare, chitan ț e compu terizate, căr ț i de vizită, coresponden ț ă sau orice documenta ț ie
adecvată. Este o metodă obi ș nuită de digitizare a textelor tipărite, astfel încât acestea să poată
fi editate, căutate, stocate mai compact, afi ș ate on-line ș i folosite în procesele de ma ș ină, cum
ar fi computerele cognitive, traducerea automată sau extragerea textului în vorbire.
OCR reprezintă unul dintre subiectele de cercetare în domeniul inteligen ț ei artificiale
de mul ț i ani. Versiunile anterioare trebuiau să fie instruite cu imagini ale fiecărui caracter ș i
cu un singur font. Sistemele avansate sunt capabile să producă un grad ridicat de precizie a
recunoa ș terii pentru majo ritatea fonturilor ș i au suport pentru o varietate de intrări în format
de fi ș iere digitale. Unele sisteme sunt capabile să reproducă o ie ș ire formatată care se apropie
de pagina originală, inclusiv imagini, coloane ș i alte componente non-textuale.
Algoritmul de recunoa ș tere are trei pa ș i (vezi fig. 2.2):
1) Pre-procesare:
Dacă documentul nu a fost aliniat corespunzător când este scanat, poate fi necesar să
fie înclinat câteva grade pentru a face linii de text perfect orizontale sau verticale. De
asemenea, sunt eliminate petele ș i sunt netezite marginile. Un alt pas important îl reprezintă
binarizarea imaginii, o modalitate simplă de separare a textului de fundal. Cu ajutorul acestui
proces, imaginea este transformată în tonuri de la gri ș i alb-negru. Un alt pas din
pre-procesare îl reprezintă cură ț area căsu ț elor de text ș i a liniilor, identificarea coloanelor, a
paragrafelor, a legendei daca este cazul ș i separă cuvintele dacă e necesar. Ultimul pas din
pre-procesare este reprezentat de scalarea imaginii ș i ob ț inerea unui aspect ratio.

2) Procesare:
Există două tipuri de bază ale algoritmului OCR, care pot produce o listă clasată de
caractere candidate.

Primul dintre ele se bazează pe o matricea de potrivire ș i presupune compararea unei
imagini cu una stocată prin metoda „pixeli-cu-pixel”. Acest procedeu este cunoscut ca
„potrivire de model”, sau „corelarea imaginii” ș i se bazează pe faptul că „ ș irul” de intrare este
corect izolat de restul imaginii, iar imaginea stocată este într-un font similar ș i la aceea ș i
scară. Această tehnică func ț ionează cel mai bine cu textul tipărit ș i nu func ț ionează bine
atunci când se întâlnesc noi fonturi.
Al doilea tip de algoritm presupune extrac ț ia elementelor din imagine ș i
descompunerea în "caracteristici", cum ar fi linii, bucle închise, direc ț ii ș i intersec ț ii de linie.
Prin extrac ț ie se reduc dimensiunile reprezentării ș i fac din procesul de recunoa ș tere unul
eficient din punct de vedere computa ț ional. Aceste caracteristici sunt comparate cu o
reprezentare abstractă a unui vector, care ar putea fi redusă la unul sau mai multe prototipuri
de carcatere. Tehnicile generale de detectare a caracteristicilor în inteligen ț a artificială sunt
aplicabile acestui tip de OCR, care este aplicat în recunoa ș terea "inteligentă" a scrisului de
mână ș i, într-adevăr, cel m ai modern software OCR.
3) Post- procesare:
Precizia OCR poate fi mărită dacă ie ș irea este constrânsă de un lexicon – o listă de
cuvinte care sunt permise într-un document. Aceasta ar putea fi, de exemplu, toate cuvintele
dintr-o limbă sau un lexic mai tehnic pentru un anumit domeniu. Această tehnică poate fi
problematică dacă documentul con ț ine cuvinte care nu sunt în lexicon, cum ar fi proprietă ț ile
proprii, deci poate fi folosită în cazuri destul de particulare.
Cunoa ș terea gram aticii limbajului scanat poate ajuta de asemenea să se determine
dacă un cuvânt este probabil să fie un verb sau un substantiv, de exemplu, care să permită o
mai mare acurate ț e.

Fig. 2.2

Tesseract testează liniile de text pentru a determina dacă acestea con ț in caractere de
accea ș i dimensiune. În cazul în care găse ș te un astfel de text (vezi fig. 3.3), Tesseract
desparte cuvintele în caractere separate.

Fig.2.3

Dacă rezultatul dintr-un cuvânt este nesatisfăcător dintr-un motiv cum ar fi faptul ca
literele sunt lipite (vezi fig. 2.4), Tesseract încearcă să îl îmbunătă ț ească printr-o separare.
Punctele candidate pentru separare sunt cele în care se se gasesc din vârfuri concave ale
aproximarii poligonale a conturului si pot avea fie un alt vârf concav opus, fie un segment.
Este posibil să testeze până la 3 perechi de puncte de tăiere pentru a separa cu succes
caracterele integrate din setul ASCII.

Fig. 2.4

Viteza ș i precizia lui Tesseract sunt legate de calitatea dic ț ionarului ș i este întotdeauna
o provocare pentru a le maximiza, reducând în acela ș i timp spa ț iul consumat pentru a stoca
dic ț ionarul. Generarea dic ț ionarului într-o limbă extrem de inflexibilă este o sarcină deosebit
de dificilă. Frecven ț a cuvintelor în limbi foarte înclinate este distribuită mai uniform ș i, astfel,
pentru a ob ț ine aceea ș i acoperire lingvistică, este nevoie de un dic ț ionar mai amplu.

2.3.4 Alamofire

2.3.4.1 Prezentare ș i utilizabilitate
Alamofire este o bibliotecă scrisă în Swift pentru iOS ș i Mac OS X ș i se bazează pe
protocolul HTTP. Aceasta oferă o serie de metode ce simplifică un număr substan ț ial de
cereri de re ț ea. Alamo fire oferă metode de cerere/răspuns lizibil, parametru JSON,
serializare, autentificare ș i multe alte caracteristici folosind un RESTApi. Biblioteca
Alamofire se bazează pe URLSession, datele de pe Internet pot fi accesate cu trei metode:
➢ .upload: folosită pentru încarea fi ș ierelor
➢ .download: folosită pentru descărcarea fi ș ierelor sau reluarea descărcării aflate
deja în curs.
➢ .request: Orice altă solicitare HTTP care nu este asociată cu transferurile de
fi ș iere.
Aceste func ț ii Alamofire sunt incluse în biblioteca, nu într-o clasă sau structură.
Există fragmente de bază pentru Alamofire, care sunt clase ș i structuri, cum ar fi

SessionManager, DataRequest ș i DataResponse. Majoritatea cererilor primesc răspuns sub
formă de JSON sau XML, după care programatorul este liber să îl modeleze in func ț ie de
datele de care are nevoie in continuare.

2.3.4.2 Protocolul HTTP

Protocolul HTTP (Hypertext Transfer Protocol) ​ este metoda cea mai des folosită
pentru accesarea informa ț iilor de pe serverele ​ World Wide Web (WWW), adică de pe
internet. Protocolul HTTP este un protocol de tip text, fiind protocolul "implicit" al WWW ș i
presupune că pe calculatorul destina ț ie rulează un program care în ț elege protocolul. Fi ș ierul
trimis la destina ț ie poate fi un document ​ HTM ​ L, un fi ș ier grafic, audio, anima ț ie sau video,
de asemenea un program executabil pe ​ server-ul ​ respectiv sau un editor de text.
Protocolul HTTP func ț ionează astfel (vezi fig 2.5):
● Serverul HTTP așteaptă, pe portul 80, cereri de la clienți (navigator / browser), care
sunt de fapt adrese ale documentelor dorite.
● Clientul primește un document în mod text și dacă găsește în el legături către imagini
și le vrea și pe acestea le cere. Astfel transferul unei pagini hipertext constă de fapt în
una sau mai multe sesiuni de transfer informație de la și către serverul HTTP.
● Dacă dintr-un anumit motiv informa ț iile nu pot fi transmise, atunci serverul trimite
înapoi un mesaj de eroare. Modul exact de desfă ș urare a acestei ac ț iuni (cerere ș i
răspuns) este stabilit în specifica ț iile HTTP.

Fig. 2.5

Clien ț ii ș i serverele web utilizează metoda de cerere-răsp uns pentru a comunica între
ele, clien ț ii trimi ț ând cererile HTTP ș i serverele care oferă răspunsuri HTTP. Clien ț ii trimit
de obicei solicitările lor folosind metode GET sau POST, de exemplu GET/homepage.html.
Serverele Web răspund cu un mesaj de stare (200 în cazul în care cererea a avut succes) ș i
trimit resursele solicitate.

2.3.4.3 JavaScript, XML ș i JSON

JavaScript, adesea abreviat ca "JS", este un limbaj de execu ț ie interpretat la nivel
înalt, dinamic care alături de HTML ș i CSS reprezintă una cele trei tehnologii de bază ale
produc ț iei de con ț inut în World Wide Web. Majoritatea site-urilo r web îl acceptă ș i toate
browserele web moderne îl suportă fără a fi nevoie de plug-in-uri. JavaScript este un limbaj
multi-paradigm, deoarece sus ț ine prototipuri bazate pe func ț ii de primă clasă, imperative ș i
paradigme de programare func ț ională. Dispune de un API pentru lucrul cu text, matrice, date,
expresii regulate ș i manip ulare de bază a DOM-ului, dar nu include API-uri de re ț ea,
bazându-se în schimb pe API-urile oferite de mediul gazdă.
De ș i există asemă nări puternice între JavaScript ș i Java, cum ar fi sintaxa ș i
bibliotecile standard, cele două limbaje sunt distincte ș i diferă foarte mult în ceea ce prive ș te
designul; JavaScript a fost influen ț at de limbi de programare, cum ar fi Self ș i Scheme.
JavaScript este, de asemenea, utilizat în medii care nu sunt bazate pe Web, cum ar fi
documente PDF, browsere specifice site-ului ș i widget-uri desktop. Tehnicile virale
JavaScript (VM) ș i platfo rmele construite pe ele au crescut, de asemenea, popularitatea
JavaScript-ului pentru aplica ț iile Web de pe server. Pe partea clientului, dezvoltatorii au
implementat în mod tradi ț ional JavaScript ca limbaj interpretat, dar browserele mai recente
efectuează compilarea automat. Programatorii utilizează JavaScript, de asemenea, în
dezvoltarea de jocuri video ș i în aplica ț ii desktop ș i mobile.
XML (Extensible Markup Language) este un limbaj de marcare ce define ș te un set de
reguli pentru codificarea documentelor într-un format care poate fi citit de om, dar ș i de
calculator.

Obiectivele de proiectare ale limbajului XML subliniază simplitatea, generalitatea ș i
utilitatea pe Internet. Este un format de date textual cu suport puternic prin intermediul
Unicode pentru diferite limbi. De ș i proiectarea XML se concentrează pe documente, limbajul
este folosit pe scară largă pentru reprezentarea structurilor de date arbitrare, cum ar fi cele
utilizate în serviciile web.

JSON (JavaScript Object Notation) este un format de fi ș ier care utilizează text în
limbaj uzual pentru a transmite obiecte constând în perechi de atribute-valoare ș i vectori. Este
un format de date foarte comun folosit pentru comunicarea asincronă a browser-ului sau a
serverului, inclusiv ca înlocuitor pentru XML în unele sisteme de tip AJAX.
JSON reprezintă o formă mai elegantă a limbajului XML ș i a fost introdus pentru că
cel din urmă folosea prea multe elemente de sintaxă pentru o cantitate mică de date. Astfel
JSON con ț ine o cantitate neînsemnată de date redundante. Un alt avantaj este necesitatea unui
compilator deloc complex pentru în ț elegerea unui fi ș ier JSON.

Exemplu:

În XML, datele se reprezintă în felul următor:

<persoana>

<nume>Nume Prenume </nume>
<email> nume.prenume@yahoo.com</email>
<telefon> 00000000000 </telefon>

</persoana>

În JSON, reprezentarea este următoarea:

{ ”nume” : ”Nume Prenume”
”email” : nume.prenume@yahoo.com
”telefon” : 00000000000 }

2.4. FIREBASE

2.4.1 Prezentare
Firebase este o platformă de dezvoltare a aplica ț iilor mobile ș i web ș i este alcătuită
din caracteristici complementare pe care dezvoltatorii le pot îmbina ș i potrivi pentru a le
satisface nevoile. Compania a fost fondată în 2011 de către Andrew Lee ș i James Tamplin.
Produsul ini ț ial produs de Firebase a fost o bază de date în timp real, care oferea un API ș i
permitea dezvoltatorilor să stocheze ș i să sincronizeze date pentru mai mul ț i clien ț i. De-a
lungul timpului, ș i-a extins linia de produse pentru ș i a devenit o suită completă pentru
dezvoltarea aplica ț iilor. Compania a fost achizi ț ionată de Google în octombrie 2014 ș i un
număr semnificativ de caracteristici noi au fost prezentate în mai 2016 la Google I / O.

2.4.2 Servicii

➢ Statistică
Unul dintre noile servicii introduse este Firebase Analytics, o solu ț ie gratuită pentru
aplica ț ii mobile ce oferă date despre modul în care utilizatorii le folosesc. Totodată, afi ș ează
statistici despre campaniile publicitare ș i permite definirea de grupuri de utilizatori în func ț ie
de atributele pe care le au în comun. Firebase Analytics oferă analize nelimitate, gratuite,
pentru aplicatiile mobile, rapoarte pentru identificarea de noi moduri de crestere a veniturilor
si exporturi de date pentru interogari personalizate.
La această nouă unealtă au contribuit ș i inginerii Google care dezvoltă serviciul
Analytics, pentru a realiza o integrare cât mai aprofundată, până la nivel de statistici legate de
apăsarea unui buton sau efectuarea unei achizi ț ii, iar implementarea în aplica ț ii nu necesită
decât adăugarea a câtorva linii de cod.

➢ Dezvoltare

1) Firebase Cloud Messaging

Cunoscut sub numele de Google Cloud Messaging (GCM), Firebase Cloud
Messaging (FCM) este o solu ț ie de tip cross-platform pentru mesajele ș i notificările pentru
aplica ț ii Android, iOS ș i web, care pot fi folosite în mod gratuit.

2) Firebase Auth

Firebase Auth este un serviciu care poate autentifica utilizatorii folosind doar codul
client-side. Acesta sus ț ine furnizorii de servicii de conectare socială Facebook, GitHub,
Twitter ș i Google. În plus, acesta include un sistem de gestionare a utilizatorilor prin care
dezvoltatorii pot permite autentificarea utilizatorilor cu datele de conectare prin e-mail ș i
parola stocate cu Firebase.

3)Bază de date în timp real

Firebase oferă o bază de date în timp real ș i un back-end ca serviciu. Serviciul
furnizează dezvoltatorilor de aplica ț ii un API care permite sincronizarea datelor aplica ț iilor
între clien ț i ș i stocate în cloud-ul Firebase. Compania oferă biblioteci de care permit
integrarea cu aplica ț iile Android, iOS, JavaScript, Java, Objective-C, Swift ș i Node.js. Baza
de date este, de asemenea, accesibilă printr-un API REST ș i legături pentru mai multe cadre
JavaScript, cum ar fi AngularJS, React, Ember.js ș i Backbone.js. API-ul REST utilizează
protocolul Server-Sent Events, care este un API pentru crearea conexiunilor HTTP în scopul
primirii notificărilor push de la un server. Dezvoltatorii care folosesc baza de date în timp real
î ș i pot securiza datele util izând regulile impuse de server.

4) Firebase Storage

Firebase Storage oferă încărcări ș i descărcări de fi ș iere sigure pentru aplica ț iile
Firebase, indiferent de calitatea re ț elei. Dezvoltatorul poate să-l folosească pentru a stoca

imagini, audio, video sau alte con ț inuturi generate de utilizatori. Firebase Storage este
sus ț inut de Google Cloud Storage.

5) Firebase Hosting

Firebase Hosting este un serviciu static de găzduire care a fost lansat pe 13 mai 2014.
Suportă găzduirea fi ș ierelor statice cum ar fi CSS, HTML, JavaScript ș i alte fi ș iere care nu se
modifică dinamic. Serviciul livrează fi ș iere printr-o re ț ea de difuzare de con ț inut (CDN) prin
criptare HTTP Secure (HTTPS) ș i Secure Sockets Layer (SSL). Compania declară că
Firebase Hosting a crescut din cererile clien ț ilor; dezvoltatorii foloseau Firebase pentru baza
de date în timp real, dar aveau nevoie de un loc pentru a- ș i găzdui con ț inutul.

6) Firebase Crash Reporting

Raportarea Crash creează rapoarte detaliate despre erorile din aplica ț ie. Erorile sunt
grupate în grupuri de urme de stive similare ș i triajate de severitatea impactului asupra
utilizatorilor de aplica ț ii. Pe lângă rapoartele automate, dezvoltatorul poate înregistra
evenimente personalizate pentru a ajuta la captarea pa ș ilor care duc la o eroare.

➢ Evolu ț ie

1) Firebase Notificări

Firebase Notificări este un serviciu gratuit pentru dezvoltatorii de aplica ț ii mobile
care permite notificări direc ț ionate către utilizatori.

2) Firebase App Indexing
Firebase App Indexing, adaugă o aplica ț ie în Căutarea Google.

3) Firebase Link-uri dinamice
Firebase Dynamic Links sunt adrese URL inteligente care modifică dinamic
comportamentul pentru a oferi cea mai bună experien ț ă pe diferite platforme.

4) Firebase Invites

Firebase Invites este o solu ț ie pentru trimiterea invita ț iilor personalizate prin e-mail ș i
prin SMS, a utilizatorilor ș i măsurarea impactului invita ț iilor.

5) Firebase Remote Config

Firebase Remote Config este un serviciu cloud care permite dezvoltatorilor să
modifice comportamentul ș i apari ț ia aplica ț iilor lor fără a cere utilizatorilor să descarce o
actualizare a aplica ț iei.

➢ Publicitate

AdWords este un serviciu de publicitate online Google care se integrează cu Firebase
pentru a permite dezvoltatorilor să targeteze utilizatorii folosind segmentarea Firebase
Analytics

➢ Câ ș tig

Admob este un produs Google care se integrează cu Firebase ș i permite
dezvoltatorilor să câ ș tige bani prin afi ș area de anun ț uri către un public global.
 

2.5. Model-View-Controller
Modelul MVC atribuie obiectelor dintr-o aplica ț ie unul din cele trei roluri: model,
vizualizare sau controller. Modelul define ș te nu numai rolurile obiectelor, ci ș i modul în care
obiectele comunică între ele. Fiecare dintre cele trei tipuri de obiecte este separat de celelalte
prin limite abstracte ș i comunică cu obiecte de celelalte tipuri dincolo de aceste limite (vezi
fig 2.6).

Fig. 2.6
MVC este esen ț ial pentru un design bun intr-o aplica ț ie ce folose ș te Cocoa Touch.
Beneficiile adoptării acestui model sunt numeroase. Multe obiecte din aceste aplica ț ii tind să
fie mai reutilizabile, iar interfe ț ele grafice mai bine definite. Aplica ț iile care au un design
MVC sunt, de asemenea, mai u ș or de extentins decât alte aplica ț ii. Mai mult, multe tehnologii
ș i arhitecturi Cocoa se bazează pe MVC ș i necesită ca obiectele personalizate să joace unul
dintre rolurile MVC.
Obiectele cu rol de model încapsulează datele specifice unei aplica ț ii ș i definesc
logica ș i calculul care manipulează ș i procesează aceste date. De exemplu, model ar putea
reprezenta un personaj dintr-un joc sau un contact dintr-o agendă de adrese. O mare parte din
datele care fac parte din starea persistentă a aplica ț iei (indiferent dacă acea stare persistentă
este stocată în fi ș iere sau baze de date) ar trebui să se afle în obiectele model după încărcarea
datelor în aplica ț ie. Deoa rece obiectele model reprezintă cuno ș tin ț e ș i expertiză legate de un
anumit domeniu de probleme, ele pot fi reutilizate în domenii similare. În mod ideal, un
obiect model nu ar trebui să aibă nicio legătură explicită cu obiectele de vizualizare care
prezintă datele sale ș i să permită utilizatorilor să editeze acele date – nu ar trebui să se refere
la interfa ț a cu utilizatorul ș i problemele de prezentare.
Un obiect cu rol de vizualizare este un obiect dintr-o aplica ț ie pe care utilizatorii îl pot
vedea. Scopul principal al obiectelor de vizualizare este de a afi ș a date din modelele aplica ț iei
ș i de a permite editarea acelor date. În ciuda acestui fapt, obiectele de vizualizare sunt de
obicei decuplate de obiectele model într-o aplica ț ie MVC.
Un controller ac ț ionează ca intermediar între unul sau mai multe dintre obiectele de
vizualizare ale unei aplica ț ii ș i unul sau mai multe obiecte ale modelului. Controller-ul

reprezintă modul prin care obiectele din vizualizare înva ț ă despre schimbările în obiectele
model ș i invers. Elemen tele dintr-un controller pot de asemenea să efectueze sarcini de
configurare ș i coordonar e pentru o aplica ț ie ș i să gestioneze ciclurile de via ț ă ale altor
obiecte.

Capitolul 3 – Dezvoltarea aplica ț iei

3.1 Încadrarea în context

Aplica ț ia BookZ one este menită să atragă aten ț ia asupra uneia dintre cele mai
importante probleme ale societă ț ii moderne ș i anume renun ț area la lectura în format fizic ș i
îmbră ț i ș area noilor tehnologii pentru studierea căr ț ilor în format electronic. Astfel, printr-o
aplica ț ie mobilă, utilizato rii vor fi încuraja ț i la lectură, dar printr- o metodă ce le va permite să
folosească ș i tehnologia î n aceea ș i măsură.

Aplica ț ia BookZ one se adresează tuturor persoanelor pasionate de lectură. Un
utilizator aflat într-o librărie ce consideră descrierea furnizată de copertă mult prea vagă î ș i
dore ș te să afle informa ț ii de la persoane ce au citit deja ș i pot avea păreri avizate. Acesta este
momentul în care deschide aplica ț ia, se autentifică dacă este prima dată când o accesează. În
caz contrar este deja redirec ț ionat către ecranul în care alege sursa pozei pe care dore ș te a o
prelucra. Fie din galeria proprie a telefonului, fie direct din camera foto, fotografia aleasă
trebuie să con ț ină ISBN- ul căr ț ii dorite. În cazul în care poza cuprinde ș i alt text sau nu este
orizontală, utilizatorului i se pune la dispozi ț ie un cadru în care să î ș i editeze fotografia spre a
primi rezultatele dorite. Dacă ace ș ti pa ș i s-au desfă ș urat fără nicio eroare, utilizatorul
prime ș te ISBN-ul scana t spre a fi verificat de acesta. Pasul final constă în furnizarea
informa ț iilor dorite într-o maniera prietenoasă ș i u ș or de urmărit.

3.2 Autentificarea
În ceea ce prive ș te autentificarea, utilizatorului îi sunt puse la dispozi ț ie două
modalită ț i: fie prin e-mai l, fie conectându-se cu Facebook. În cazul în care nu are cont deja ș i
nici nu î ș i dore ș te să folosească re ț eaua socială, prin introducerea unui e-mail valid ș i a unei
parole, i se creează cont automat.
Aplica ț ia este identificată printr-un AppID unic, ceea ce face ca legătura dintre
Firebase ș i autentificarea Facebook să se facă mult mai simplu. (Vezi fig. 3.1)

Fig. 3.1 – Tipurile de autentificare active cu ajutorul platformei Firebase

Fig. 3.1- Identificatorul unic al aplica ț iei pentru integrarea cu Facebook

Fig. 3.2 – Utilizatorii înregistra ț i în aplica ț ie împreună cu modalitatea de autentificare

Fig. 3.3- Ecranul de încărcare ș i cel de autentificare

3.3 Încărcarea imaginii

După logare, utilizatorul are la dispozi ț ie două op ț iuni: fie să facă poza pe loc, fie să
aleagă una deja existentă în telefonul mobil (vezi fig. 3.8 ș i fig. 3.9). Pentru ca aplica ț ia să
aibă acces la fotografii, utilizatorul trebuie să î ș i dea acceptul (vezi fig. 3.10). Acordarea
permisiunii de către utilizator se face doar prima dată când se folose ș te aplica ț ia. După ce
fotografia a fost selectată, i se arată utilizatorului spre a certifica faptul că imaginea aleasă
este cea corectă. (vezi fig. 3.11)
Din punct de vedere al implementării, această func ț ionalitate a fost destul de pu ț in
costisitoare (vezi fig. 3.7) întrucât Swift pune la dispozi ț ie o serie de librării pentru
manipularea surselor unei fotografii.

Fig. 3.7 – Implementarea pentru alegerea sursei fotografiei

Fig. 3.8 ș i Fig 3.9 – Alegerea sursei fotografiei

Fig. 3.10 ș i Fig. 3.11 – Ac ordarea permisiunii pentru accesul la fotografie de către utilizator ș i
confirmarea alegerii fotografiei

3.4 Prelucrarea imaginii
Pentru ca scanarea să aibă loc cu succes ș i rapiditate, este nevoie de cât mai pu ț ine
centre de interes, ceea ce înseamnă că utilizatorul poate restrânge poza spre a capta doar
ISBN-ul. Bineîn ț eles, acest lucru nu este posibil atunci când fotografia este făcută, ș i din
acest motiv, aplica ț ia pune la dispozi ț ie un editor intern care permite tăierea, răsucirea sau
mărirea pozei (vezi fig.3.12 ). După ce are loc editarea, utilizatorului i se mai cere o data
confirmarea imaginii. (vezi fig. 3.13).
Această func ț ionalitate a fost implementată cu ajutorul librăriei AKCropperView, dar
cu toate acestea, a fost nevoie de multe opera ț ii pentru ca editarea să se facă în siguran ț ă fără
a dăuna calită ț ii imaginii în niciun fel. (vezi fig 3.14).

Fig.3.12 – Ecranul pentru modificarea imaginii Fig. 3.13 – Confirmarea editării imaginii

Fig. 3.14 – Implementarea posibilită ț ii de editare a imaginii folosind librăria AKCropperView
3.5 Prelucrarea imaginii

După ce imaginea a fost confirmată de către utilizator, are loc prelucrarea acesteia de
către aplica ț ie. Astfel, utilizatorul prime ș te înapoi ISBN-ul identi ficat spre a fi verificat încă o
dată. Acest pas este important pentru furnizarea unui rezultat corect (vezi fig. 3.15).
Imaginea este prelucrată cu ajutorul librăriei Tesseract care presupunune anumite
prelucrări înainte de extragerea textului. În primul rând imaginea trebuie scalată (vezi fig.
3.16). După declararea unui obiect de tipul librăriei, se setează limba în care este textul.
Modul CubeCombined reprezintă cea mai precisă metodă existentă în librăria Tesseract
întrucât cuprinde ș i inteli gen ț ă artificială. Implicit, imaginea este considerată un bloc de text
ș i îl desparte în paragrafe . Pentru un rezultat cât mai corect, imaginea a fost setată în tonuri de
alb-negru pentru a mări contrastul ș i a elimina filtrele de lumina. ​ Textul identificat este afi ș at
în final utilizatorului. (vezi fig. 3.17)

Fig. 3.15 – Confirmarea ISBN-ului identificat

Fig. 3.16 – Scalarea imaginii

Fig. 3.17 – Modificările imaginii pentru recunoa ș terea ISBN-ului

3.6 Baza de date

Firebase pune la dispozi ț ia dezvoltatorilor o bază de date în timp real în care
se pot introduce date din consola platformei (vezi fig. 3.18). Datele sunt stocate
on-line, nimic nu se află pe dispozitiv ceea ce duce la o cre ș tere semnificativă a
eficien ț ei din punct de vedere al stocării. Datele sunt salvate in format JSON ș i sunt
u ș or de manipulat .
To ț i utiliz atorii conecta ț i partajează o instan ț ă a bazei de date în timp real ș i
primesc automat actualizări cu cele mai noi date.

Aplica ț ia are un tabel pentru căr ț i cu următoarel e coloane (stocate în format
JSON):
➢ Titlu(titlul căr ț ii)
➢ Autor (autorul cărtii)
➢ ISBN
➢ Poza (link către coperta căr ț ii)

Fig. 3.18 – Baza de date cu tabelul Căr ț i

Al doilea tabel este destinat utilizatorilor. În Firebase, în meniul Authentication avem
acces la toti utilizatorii ce s-au logat în aplica ț ie, însă datele nu pot fi prelucrate. Din acest
motiv, am creat tabelul Users cu urmatoarele coloane (vezi fig. 3.19):
➢ Provider: metoda prin care s-a autentificat (Firebase adică email ș i parolă sau
Facebook)
➢ Username: în cazul în care s-a autentificat cu Firebase, username-ul stocat este
adresa de email, iar în cazul autentificării cu Facebook, este numele său.
Necesitatea unui astfel de tabel a venit din dezvoltarea posibilită ț ii de a lăsa
comentarii la căr ț ile citite . Astfel, în tabelul cu Căr ț i am introdus coloana de comentarii, care
este un Array de perechi: username- comentariu (vezi fig. 3.20). Astfel, pentru a putea ț ine

eviden ț a comentariilor, am introdus ș i în tabelul de useri o coloan a ce stochează toate căr ț ile
la care utilizatorul a lăsat comentariu.

Fig. 3.18- Tabelul de utilizatori

Fig. 3.20 – Introducerea coloanei de comentarii

3.7 Rezultatul final

După ce ISBN-ul a fost recunoscut corect, utilizatorul prime ș te rezultatul final cu
informa ț iile necesare (vez i fig. 3.21)

Fig. 3.21 – Informa ț iile afi ș ate utiliza torului

CAPITOLUL 4 – CONCLUZII

În domeniul informatic, va fi mereu ceva de schimbat. Nu s-a ajuns încă în punctul în
care se poate ț ine pasul cu evolu ț ia tehnologiei. În fiecare zi va fi nevoie de o îmbunătă ț ire,
va fi realizat un proges.
Aplica ț ia BookZo ne este o aplica ț ie destinată furnizării de informa ț ii din domeniul
lecturii către utilizatori de toate vârstele într-un pachet compact de interfa ț ă, rezultate
a ș teptate ș i rapiditate. Astfel folosind unele dintre cele mai stabil e tehnologii, aplica ț ia se
dore ș te a fi una u ș or de folosit, care să fie apreciată de către utiliz atori întrucât nu are încă un
competitor pe pia ț ă ș i î ș i întrune ș te scopurile stabilite ini ț ial.
Îmbunătă ț irile ce pot fi aduse ar putea fi atât de natură grafică, dar ș i de dezvoltare.
Ideile de extindere ar putea consta în alcătuirea unui top al celor mai apreciate ș i comentate
căr ț i, posibilitatea utilizat orului autentificat de a- ș i crea liste de căr ț i pe care î ș i dore ș te să le
citească în viitor ș i de ce nu, adăugarea func ț iei de administrator pentru ca aplica ț ia să poată
fi transformată în una pentru o anumită librărie ș i a furniza o interfa ț ă ce poate veni în
ajutorul angaja ț ilor pentru a ț ine mult mai u ș or eviden ț a stocului de căr ț i.
Scopul principal al aplica ț iei este sus ț inerea ideii că preze n ț a căr ț ilor în via ț a
oamenilor trebuie să persiste, iar introducerea unor astfel de aplica ț ii este bine-venită.
Aplica ț ia prezentă vine în sprijinul acestei ini ț iative întrucât furnizează informa ț ii folositoare
ș i încurajează achizi ț ionarea căr ț ilor în format fizic.
În concluzie, utilizând tehnologii accesibile precum Swift împreună cu numeroasele
sale blibioteci, Firebase, Javascript împreună cu HTTP, HTML, XML, JSON a fost posibilă
dezvoltarea unei aplica ț ii cu un grad mare de utilizabilitate în lumea reală ș i cu un aspect
plăcut, ce transmite utilizatorului de rând informa ț iile cerute fără a întâmpina probleme, ceea
ce înseamnă că aplica ț ia ș i-a îndeplinit scopul.

BIBLIOGRAFIE
[1] https://en.wikipedia.org/wiki/IOS
[2] https://en.wikipedia.org/wiki/IOS_version_history
[3] https://en.wikipedia.org/wiki/Objective-C
[4] https://en.wikipedia.org/wiki/Swift_(programming_language)
[5] https://en.wikipedia.org/wiki/Automatic_Reference_Counting#Swift
[6]https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift
_Programming_Language/AutomaticReferenceCounting.html
[7]https://developer.apple.com/library/content/documentation/General/Conceptual/De
vPedia-CocoaCore/Cocoa.html
[8]https://developer.apple.com/library/content/documentation/Miscellaneous/Concept
ual/iPhoneOSTechOverview/iPhoneOSTechnologies/iPhoneOSTechnologies.html
[9] http://www.techotopia.com/index.php/The_iPhone_OS_Layers
[10] https://en.wikipedia.org/wiki/CocoaPods
[11]http://www.natashatherobot.com/cocoapods-installing-same-pod-multiple-targets/
[12] https://en.wikipedia.org/wiki/Optical_character_recognition
[13] https://github.com/tesseract-ocr/docs/blob/master/MOCRadaptingtesseract2.pdf
[14]https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/
33418.pdf
[15] https://ro.wikipedia.org/wiki/Hypertext_Transfer_Protocol
[16] https://www.raywenderlich.com/147086/alamofire-tutorial-getting-started-2
[17] https://en.wikipedia.org/wiki/JavaScript
[18] https://en.wikipedia.org/wiki/XML
[19] https://en.wikipedia.org/wiki/JSON
[20] https://en.wikipedia.org/wiki/Firebase#Analytics
[21]https://developer.apple.com/library/content/documentation/General/Conceptual/D
evPedia-CocoaCore/MVC.html
[22]http://www.gamtech.ro/2017/01/04/o-scurta-istorie-a-ios/
[23] https://tilakgondi.wordpress.com/2015/01/14/ios-architecture/

Similar Posts