Creare la prima applicazione per iOS 10 con il linguaggio Swift (Gratuita)

Tutto il lavoro, lo studio o la passione di una vita, deve finire per concretizzarsi in qualcosa di reale o materiale.

Come lo studente impegna il suo tempo studiando con lo scopo di ottenere un bel voto, lo sviluppatore impegna il suo tempo per realizzare un’applicazione.

Ora, dato che il percorso è tutto in salita, non di difficoltà ma di emozioni e sfide personali, è arrivato il fatidico momento di iniziare a sporcarsi le mani.

Oggi imparerai a creare la prima applicazione per iOS 10 con il linguaggio Swift.

Fino ad ora il corso ti ha dato delle nozioni prettamente teoriche e ti ha indirizzato verso l’utilizzo degli strumenti di base di Xcode e della sua interfaccia. Adesso vedrai che tutte quelle nozioni hanno un’applicazione pratica nella vita di tutti giorni di qualsiasi sviluppatore iOS.

test-prima-applicazione

Cosa imparerai da questa lezione

Tutti e dico tutti gli sviluppatori e programmatori di qualsiasi linguaggio sono passati e continueranno a passare per la realizzazione dell’applicazione più semplice e simpatica dell’universo.

Sto parlando del celeberrimo Hello, World!.

Si tratta del primo esempio di programma introdotto dal libro “Il linguaggio C” dei padri fondatori del linguaggio C, Brian Kernighan e Dennis Ritchie.

Il programma consiste nella scrittura su Console della frase “Hello, World!. Nel corso sul linguaggio Swift ti ho già fatto vedere come realizzarlo. Bastava scrivere un print ed il gioco era fatto.

Andrai oltre ed invece di stampare su console, scriverai il messaggio sul display del tuo dispositivo iOS. Inoltre, personalizzerai ancora di più l’applicazione modellando l’Hello World in un più utile “Hello, \(Persona)!”.

Quindi l’applicazione sarà formata da una singola interfaccia (Single View) con al centro un campo di testo che ti permetterà di inserire il nome della persona da salutare ed un testo o label dove inserire il messaggio.

In più, questa applicazione, ti permette di vedere da vicino l’applicazione del pattern Model View Controller e di riprendere tutti i concetti spiegati nelle lezioni precedenti.

Pronto a ballare?

Creare un’applicazione Single View ed il Setting del progetto

La prima cosa da fare è quella della creazione del progetto.

Apri Xcode e se non dovessi visualizzare la schermata di benvenuto, nella barra del menu in alto, seleziona File\New\ProjectCome ribadito nella lezione sulla creazione di un progetto, scegli il template iOS\Single View Application. Premi Next.

Andiamo veloci dato che ti ho già spiegato tutto quando hai creato il tuo primo progetto. Dai un nome che sia comprensibile per la tua applicazione, ad esempio metti “Hello World in Swift“. Ricordati di selezionare il linguaggio Swift e di rendere compatibile l’applicazione sia per iPhone che per iPad, impostando il Devices su Universal. Togli la spunta dalla prima casella e, se vuoi, lasciale nelle altre due (sono cose che non utilizzerai ma che non impattano sul progetto). Premi Next.

Ti ricordi che ti ho detto che io metto tutti i progetti in delle cartelle? Ecco, è arrivato il momento che cominci ad organizzare bene la tua area di lavoro. Crea una cartella sul tuo computer, magari in Documenti, chiamata Progetti Corso iOS – xCoding. Adesso torna su Xcode e salva il progetto dentro questa nuova cartella. In questo modo avrai tutti i file e progetti del corso tutti in un’unica cartella e non sparsi per il globo.

Più avanti, quando lavorerai a tuoi progetti, avere ben organizzata l’area di lavoro ti renderà la vita più semplice.

Ecco il video riassuntivo:

Un primo sguardo al File Project

La prima schermata che esce fuori dopo la creazione del progetto è quella relativa al File Project ed in particolare il pannello General che riassume alcune caratteristiche dell’applicazione e ne permette la modifica.

xcode-8-project-info

Identity

Il primo pannello, Identity, mostra alcune informazioni che già dovrebbero esserti familiari:

  • Bundle Identifier: É il codice identificativo della tua applicazione, lo hai impostato nelle fasi iniziali del progetto (trovi maggiori info in questa lezione). Più o meno puoi considerarlo come il codice a barre presente in un alimento del supermercato, è univoco per applicazione e serve ad Apple ad identificare i tuoi prodotti.
  • Version: Prima o poi rilascerai la tua applicazione nell’Apple Store e ti servirà un sistema per ricordarti quali aggiornamenti hai fatto e quando li hai fatti. La Version serve proprio ad indicare il numero d’aggiornamento dell’applicazione. Si parte da 1 che significa “i” e si va avanti in modo progressivo. Se l’aggiornamento riguarda una piccola cosa e non sono state aggiunte nuove features (ad esempio hai risolto un problema), invece di aumentare la Version di +1 si è soliti aumentarla di un punto decimale, quindi di 0.1. Quindi se al secondo aggiornamento dell’applicazione avrai sistemato o migliorato delle piccole cose, su Version scriverai 1.1.
  • Build: Riguarda sempre la Version dell’applicazione. Qui però vai ancora più nel dettaglio indicando il numero di compilazioni fatte per arrivare alla Version indicata. Mi spiego meglio, se per arrivare alla versione 2 hai dovuto, per adesso diciamo così, avviare 200 volte il progetto da Xcode vorrà dire la tua Build è 200. Ma non è indicata solo da un numero, può essere anche un codice. Se ad esempio clicchi sul simbolo della mela in alto nella barra del menu e fai “Informazioni su questo Mac”, sotto il nome del SO, vedrai la versione. Quella che sto utilizzando è la 10.11 (15A263e), quindi vuol dire la Version è 10, la sub version è la 11 e la Build è la 15A263e.
  • Team: Se lo selezioni ti da la possibilità di collegare il tuo progetto al tuo account di Apple Developer per poter poi rilasciare l’applicazione su Apple Store. Prima della versione di Xcode 7, collegare l’account, serviva per testare l’applicazione sul device reale. Adesso non serve più e viene utilizzato solo per le fasi conclusive del progetto, ovvero la release su Apple Store.

Deployment Info

Il Secondo pannello è quello del Deployment Info. Qui niente ti sarà familiare a parte una proprietà, però è semplice dedurne il significato.

  • Deployment Target: Indica la versione di iOS compatibile con il tuo progetto e con la tua applicazione. Le versioni minori del Deployment Target non verranno supportate.
  • DevicesÉ la stessa impostata nelle fasi iniziali del progetto. Indica per quale dispositivo (iPhone o iPad) l’applicazione è realizzata. Universal indica che sarà disponibile e scaricabile sia per iPhone che per iPad. Ovviamente entrambi dovranno aver installato una versione di iOS compatibile con la Deployment Target.
  • Main Interface: Quale Storyboard vuoi visualizzare come interfaccia principale? un progetto può avere più di uno storyboard. Ad esempio il template Single View prevede due Storyboard, uno per l’interfaccia dell’applicazione (Main.storyboard) ed uno per la Splash Screen o interfaccia di benvenuto (LaunchScreen.storyboard). Di default è sempre impostata la Main.storyboard.
  • Devices Orientation: Se giri il tuo iPhone o iPad, alcune applicazioni rispondono a questo evento girando la propria interfaccia. Selezionare le spunte farà si che potrai realizzare interfacce che si adattino ai seguenti cambiamenti di orientazione. In più togliere la spunta ad uno dei possibili orientamenti blocca la possibilità di ruotare l’interfaccia dell’applicazione anche quando l’iPhone ruoterà in una delle direzioni non supportate.
    Portrait: Indica che l’applicazione funzionerà quando l’iPhone o iPad è in posizione verticale.
    Upside Down: É l’iPhone o Ipad in modalità capovolto verticalmente. Se selezionato l’interfaccia dell’applicazione verrà ruotata di 180° gradi.
    Landscape Left/Right: iPhone/iPad in modalità orizzontale verso sinistra o verso destra.
    Vedrai meglio l’utilizzo delle impostazioni di Devices Orientation nelle prossime lezioni.

iphone_orientations

App Icons and Launch Images

Come inserire l’icona dell’applicazione lo vedremo più avanti anche perché ha bisogno di un capitolo tutto dedicato a quest’argomento.

  • App Icon Source: In linea di massima in questo pannello puoi inserire un’icona da dare alla tua applicazione.
  • Launch Screen File: L’altra impostazione è quella relativa al Launch Screen, ovvero l’interfaccia che viene visualizzata prima della Main.Storyboard. Di default il template che hai utilizzato per creare l’applicazione prevede l’interfaccia di presentazione. Infatti è già selezionata ed è contenuta nel file LaunchScreen.storyboard.

L’interfaccia dell’applicazione

Spostati nel Main.storyboardCambia il colore di background in uno a tua scelta.

Dall’Object Library, seleziona l’oggetto Label e trascinalo un po’ più in alto rispetto al centro della View. Poi prendi un TextField ed inseriscilo subito sotto, lasciando un po’ di spazio tra i due:


Cosa sono il TextField e la Label?

Ottima domanda!

Entrambi sono oggetti grafici. Essendo oggetti vuol dire che c’è una classe che li rappresenta, ed infatti le classi di riferimento sono UITextField ed UILabel. Entrambe sono contenute all’interno del framework UIKit.

La Label.  Contenitore del testo

Rappresenta un testo statico di dimensioni e lunghezza variabile. Statico vuol dire che non può essere modificato tramite interazione Utente-iPhone e per questo viene utilizzato solo per la visualizzazione del testo.

Se lo selezioni dalla View e ti sposti nell’Attributes Inspector potrai vedere quali sono le sue proprietà principali.

proprieta-label-xcode

  • Text: Può essere Plain o Attributed. Non mi soffermerò su questo aspettato dato che difficilmente verrà utilizzato il tipo Attributed.
  • Color: Modifica il colore del testo.
  • Font: Il tipo di carattere utilizzato. Può variare in dimensione, essere in grassetto, italic ecc.
  • Alignment: É il tipo di allineamento che dai al testo. Di default è selezionato l’allineamento sinistra. Il secondo bottone è per l’allineamento centrale, il terzo per l’allineamento destro, il quarto per l’allineamento Giustificato (ricopre l’intera area rettangolare) ed il quarto per un non allineato.
  • Lines: Il numero di linee. Di default è 1.
  • Enabled: Indica se il componente è attivo e quindi utilizzabile.
  • Highlight: Indica se il testo deve essere illuminato quando viene generato l’evento corrispettivo.
  • Shadow: Aggiunge l’ombra al testo.
  • Shadow Offset: Ti permette di estendere e spostare l’ombra da sotto il testo.
  • Le altre proprietà le vedremo più avanti.

Prova un po’ a giocare con gli attributi della Label.

La TextField. Il campo di testo per eccellenza

La TextField rappresenta un’area di testo. Dentro le aree di testo è possibile scrivere utilizzando la tastiera del dispositivo.

Ad esempio viene utilizzata per inserire i dati di login per un account, per fare ricerche e per tutto quello che concerne l’inserimento di informazioni e dati dall’utente verso l’applicazione.

textfield-xcode-8

Le prime proprietà sono identiche a quelle viste per la Label.

  • Placeholder: Il testo di sfondo del campo di testo. Hai presente quel testo che ti dice “inserisci la tua email” e poi scompare quando clicchi su? esatto questo è la Placeholder. É un testo che serve all’utilizzatore per capire cosa deve inserire all’interno della Label.
  • Background: Puoi inserire un’immagine di sfondo per personalizzare il look del campo quando viene selezionata la Field.
  • Disabled: Un’immagine che viene attivata quando l’utente deseleziona il campo di testo.
  • Border Style: Cambia il tipo di bordo del campo di testo.
  • Clear Button: Indica se visualizzare un bottoncino nell’angolo destro della Field che se cliccato cancella il testo inserito.
  • Min Font Size: É la dimensione minima del Font utilizzato. In questa maniera quando scriverai tanto testo, il testo verrà rimpicciolito fino alla Min Font Size per cercare d’entrare all’interno dell’area della TextField.
  • Adjust to Fit: Specifica proprio quello che ho scritto nel Min Font Size ovvero che cercherà di far entrare il testo dentro il rettangolo definito dalla TextField.

In fondo alla lista sono presenti gli attributi Alpha, Background e Tint di cui già conosci l’utilità.

Il simulatore e la TextField

Avvia l’applicazione premendo sul bottone triangolare in alto a sinistra di Xcode.

Poi clicca sulla TextField, vai nel menu in alto, del Simulator, Hardware\Keyboard\Toggle Software Keyboard che attiverà la tastiera di sistema quindi come se stessi usando effettivamente l’iPhone (in alternativa puoi premere CMD+K).

IBOutlet e IBaction, la connessione tra Controller e View

Finalmente il momento più atteso di tutta la prima parte del modulo è arrivato. Adesso ti farò vedere come dare vita alla tua applicazione!

Per ora hai degli elementi grafici che non interagiscono in nessuna maniera con gli input generati dall’utente. Cioè, anche se la TextField mostra il testo da te inserito, non viene eseguita nessuna operazione da parte dell’applicazione.

Per riprendere l’esempio del distributore di lattine, spiegato nella lezione del pattern Model View Controller, in questo momento hai un display che è scollegato dal macchinario che prende le lattine. Quindi anche se l’utente sceglie una lattina (nel tuo caso, scrive nella TextField) la macchina non risponde all’input.

In poche parole, la View è scollegata dal suo Controller. Per poter creare delle interazioni tra View e Controller è necessario instaurare delle relazioni.

Le IBOutlet. Connessione tra View e Controller

Cos’è una IBOutlet?

Una IBOutlet o Interface Builder Outlet è una tipo di relazione che si viene a creare tra un elemento grafico presente nella View ed il rispettivo Controller. 

Nel distributore di lattine, una IBOutlet, è rappresentata dal filo che collega il Bottone del display al comando meccanico che attiva il sistema di distribuzione.

Nelle applicazioni viene associata ad una variabile, contenuta all’interno del Controller, l’istanza dell’elemento grafico presente nella View. In questo modo, se prima gli elementi della View erano scollegati dal Controller e di conseguenza inaccessibili, riuscirai a controllarli ed a gestirli.

Come creare una IBOutlet

Per prima cosa chiudi l’Utilities Panel (il pannello di destra) e apri l’Assistant Editor (il bottone nel mezzo del primo blocco in alto a destra):

Questo sarà il tuo migliore amico da qui fino al resto dei tuoi giorni. L’Assistant Editor ti fornisce una seconda finestra di lavoro. Di default mostra il codice del Controller associato all’interfaccia selezionata ma può fare veramente tante cose.

Nel tuo caso dovresti vedere il file ViewController.swift, ovvero la classe ViewController che è la classe di riferimento (o Custom Class) dell’unica interfaccia in uso.

Adesso il pezzo forte.

Per creare una Outlet, seleziona la Label e tenendo premuto il tasto CTRL+Click Sinistro (o destro) sposta la freccia verso l’interno della classe ViewController. Rilascia il click e, se tutto è andato per il verso giusto, dovresti visualizzare un pannello simile a questo:

Inserire una IBOutlet

  • Connection: Indica il tipo di connessione, di default è Outlet ovvero quella di cui ti sto parlando (connessione tra elemento grafico dell’interfaccia e Controller).
  • Object: É il destinatario della connessione, cioè la classe dove andrà a crearsi questa variabile.
  • Name: É il nome da dare alla connessione. Fai finta, anzi è così, che stai creando una variabile. Quindi il Name è il nome da dare alla variabile che gestirà la Label.
  • Type: Il tipo di dato della variabile. Di default riesce a capire che tipo d’oggetto stai collegando. Ed infatti, in questo caso, ti ha messo UILabel dato che è il tipo di dato della Label selezionata.
  • Storage: Mmmh! è la forza della relazione. Non ti spiegherò cos’è perché richiede delle conoscenze avanzate che per il momento non credo possiedi. Ma non preoccuparti, non lo cambierai mai.

Dai alla IBOutlet il Name di: “myLabel” e premi Connect.

Ecco il video illustrativo di tutto il processo di creazione della Outlet:

In fondo alla lezione trovi altri metodi per creare o, in alternativa, eliminare questo tipo di connessione.

Se scorpori ogni pezzo della IBOutlet puoi notare che è formata da 4 pezzi @IBOutlet var myLabel: UILabel!

  • @IBOutlet: Viene chiamato Attributo (come l’@UIApplicationMain) ed indica al sistema che questa è una variabile che gestirà l’istanza di un elemento presente nella View associata al Controller.
  • var myLabel: É la definizione della variabile.
  • UILabel!: Ormai hai capito che fa parte delle classi presenti nel framework UIKit. Da notare solo una cosa, il marcatore di non opzionalità. Questo vuol dire che l’oggetto UILabel, associato alla variabile, non sarà mai opzionale (ma lo potrà diventare).

Ci siamo!

Secondo i principi del pattern Model View Controller, adesso hai un sistema per poter comunicare direttamente con la Label presente nella View. A questo punto, quindi, la Label fa effettivamente parte della classe ViewController e per tanto puoi modificarne il suo aspetto.

Adesso prova a cambiare il testo della Label.

Nel metodo viewDidLoad richiama la proprietà myLabel, poi accedi alla proprietà text (ricordati che le proprietà si chiamano, su per giù, come quelle visualizzate nell’Attributes Inspector). Dato che text è una String puoi assegnargli un nuovo testo. Dagli come testo la stringa “Ciao, Mondo!“:

  • Perché ho messo il punto esclamativo dopo text?
    Perché la proprietà text è opzionale, quindi vuol dire che può avere un valore reale oppure uno che rappresenta l’assenza di valore (nil). Anche se in questo caso ho messo il punto esclamativo non è obbligatorio metterlo. Se non ti ricordi da dove escono fuori queste cose, rinfrescati la memoria leggendo questa lezione del corso gratuito.
    Ricordati che esiste il Quick Help:
    Quick Help UILabel proprietà text

Adesso avvia l’applicazione.

Se il potere della forza è dalla tua parte, dovresti visualizzare questo:

schermata-2016-10-22-alle-01-10-12

Non ci sei riuscito? In fondo alla lezione c’è un question time che potrebbe fare al caso tuo.

Le IBAction. Intercettare gli eventi per gestirli dal Controller

Ti ricordi che ti dicevo che quando l’utente clicca su un bottone, o su un altro elemento con cui può interagire, il sistema operativo genera un evento che può essere intercettato o meno?

Questi eventi possono essere gestiti dalle IBAction o Interface Builder Action. Le IBAction sono dei metodi, dato che parliamo di classi, che si attivano alla generazione di un evento associato all’elemento a cui sono collegate.

L’utente clicca sul bottone e tu vuoi che al click venga eseguito il login su facebook? Detto fatto! Crei una IBAction che intercetta l’evento di click per eseguire il login.

Per crearle si utilizza lo stesso sistema delle IBOutlet.

Apri l’Assistant Editor, clicca sulla TextField e premendo CTRL+Click Sinistro sposta la freccia sotto la dichiarazione della IBOutlet. Invece che selezionare la Connection Outlet, seleziona Action:

generazione IBAction

  1. Name: il nome da dare alla Action. Sul nome ci arriviamo tra un momento.
  2. Type: Di Default viene visualizzato il tipo AnyObject perché una Action può gestire anche più oggetti diversi. In questo caso, dato che stiamo intercettando la textField, il suo Type è ovviamente la UITextField. 
  3. Event: A che evento della TextField vuoi che venga associato questa funzione?
    Eventi TextField

    • Editing Did End: Vuol dire che l’evento si attiverà solo quando l’utente avrà finito di scrivere.
    • Editing Changed: Viene attivato ogni qual volta l’utente inserisce un nuovo carattere all’interno della Text Field. Seleziona questo invece dell’evento di default.
    • Editing Did Begin: Si attiva la prima volta che l’utente ha iniziato a scrivere.
    • Touch Up Inside: Solo quando l’utente ha cliccato all’interno dell’area della Text Field.
    • Did End On Exit: Solo quando l’utente ha cliccato Invio dalla tastiera.
    • Gli altri sono simile a quelli spiegati, per non appesantirti troppo ti ho elencato solo i più utilizzati.
  4. Arguments: Dato che si tratta di un metodo ti indica l’argomento o il parametro che avrà la funzione che stai creando. Tra poco ti spiegherò cos’è il Sender.

Il nome della Action, in genere, è la composizione dell’oggetto che genera l’evento e l’evento trattato. Nel nostro caso, dato che l’evento selezionato è il Editing Changed e l’oggetto in questione è la TexField, potremmo chiamare l’Action textField_EditingChanged.

É buona norma, mettere tutte le IBAction sotto i metodi della classe, in questo modo non si crea confusione tra i metodi della classe, le proprietà e le IBOutlet.

Fermati ad analizzare il Codice:

Cos’è il Sender

@IBAction è sempre quel famosissimo attributo che dice al sistema, o in questo caso al Controller, “Ehi Amico! Vedi che non sono una normale funzione, vengo attivata solo quando viene generato l’evento Editing Changed“.

Ed il Controller gli risponde: “Ma chi è che ti manda?”

E la IBAction replica: “Mi manda il sender”

Il sender è chi ha richiesto l’attivazione di questa funzione. 

Quindi se all’interno del metodo scrivi un print, dovresti vederlo spuntare ogni qual volta l’utente aggiunge un nuovo carattere alla TextField:

 

Accedere alle informazioni del Sender

L’ultima cosa da fare è modificare, con il testo inserito nella TextField, il testo contenuto nella Label. Ricordandoti che il sender è chi è che ha generato l’evento, quindi il TextField puoi accedere alla proprietà text per aggiungere il suo contenuto a quello della Label.

Quindi il codice finale dovrebbe essere il seguente:

test-prima-applicazione

Eliminare il riferimento ad una IBAction o IBOutlet

Se cambi il nome al metodo o alla variabile, eliminerai la referenza reale presente nel codice e genererai un problema di collegamento tra View e Controller. Detto alla spiccia, nell’Interfaccia rimane memorizzato il vecchio nome della Action o Outlet e non viene aggiornato automaticamente qualora dovessi cambiarlo modificando il codice.

Questo vuol dire che, per eliminare una IBAction o Outlet, non basta eliminare il codice dal Controller.

Fatta questa premessa, per risolvere questo problema o per eliminare una IBaction o Outlet, bisogna seguire i seguenti passaggi:

  1. Andare nello Storyboard
  2. Selezionare l’oggetto incriminato
  3. Cliccarlo con il tasto destro
  4. Cercare l’eventuale Action/Outlet.
  5. Cliccare sul simbolo della X per eliminare definitivamente la referenza

Quindi, immagina di voler eliminare il riferimento alla IBAction della TextField, seguendo i passaggi elencati, faresti così:

Considerazioni

Non è soddisfacente aver completato un’applicazione e vederla funzionare?

Crea la prima applicazione per iOS con il linguaggio Swift, come hai ben visto, non è semplice. O meglio lo è se ci aggiungi tutte le nozioni apprese nel primo modulo del corso di sviluppo applicazioni per iOS con Swift.

Un’applicazione è un’insieme di tasselli, come un puzzle. Se hai tutti i pezzi la figura la vedrai correttamente, altrimenti farai fatica a capire di che si tratta.

Su DropBox trovi il download del progetto della lezione commentato.

 

Buona Programmazione!

Torna a: Corso creare applicazioni per iOS con il linguaggio Swift > Le Basi dello Sviluppo Applicazioni
  • iFederico

    Ciao a tutti, ciao Peppe!
    Comincio col complimentarmi anch’io per questa prima parte del corso, che ho trovato molto fluida e ben assimilabile.

    Vorrei porti un quesito: nella sezione “Deployment info”, pannello General del File Project, abbiamo la possibilità di impostare per quale versione iOS stiamo sviluppando l’app. Immagino che per allargare il bacino d’utenza, si debba scendere un po’, perché altrimenti restano tagliati fuori tutti quegli iphonisti che hanno la versione 8 o la 7 addirittura, qualora scegliessi la 9. Su quale base decido da quale versione si può usare l’applicazione?

    Grazie, Federico

    • Ciao Federico,

      Nella prossima lezione, che uscirà domani o lunedì, darò un po’ di numeri a riguardo. Infatti scendere la versione di iOS supportata non sempre significa allargare il campo d’utenza.

      Ad esempio i tassi di diffusione di iOS 8 si aggirano attorno all’80% e considerando che iOS 9 sarà supportato da tutti i dispositivi che potevano installare iOS 8, ti fa già riflettere sulla non necessità di dover supportare tutte le versioni di iOS.

      Spesso, non considerare le versioni meno aggiornate, ti da modo di poter sfruttare le caratteristiche dei nuovi sistemi operativi e framework.

      Fortunatamente Apple ha dei tassi di aggiornamento altissimi e che altri SO, vedi Android, difficilmente riescono ad ottenere.
      Quindi la regola, come anche da Apple suggerita, è quella di aggiornare sempre le proprie applicazioni agli ultimi SO in commercio lasciando perdere, ad esempio, le versioni vecchie di almeno due anni.

      Nel nostro caso, il consiglio è quello di puntare direttamente ad iOS 9 ed iOS 8, abbandonando definitivamente iOS 7 ed i modelli precedenti all’iPhone 4S (da Gennaio abbandoneremo anche quest’ultimo).

  • Marco

    Ciao peppe, ho un problema che non riesco a risolvere.
    In pratica se creo o modifico l’IbAction con editing changed funziona, quando lo modifico con editing did end la label non modifica il test….. ho provato sia a selezionare che deselezionare il toggle della keyboard.. creare una nuova ibaction ma nulla.

    • Ciao Marco,
      Strano che non funzioni, nel progetto ho utilizzato proprio l’Editing Did End perché è l’evento che si attiva quando l’utente schiaccia il tasto INVIO dalla tastiera. Casomai se apri un topic sul forum e carichi il progetto, vediamo insieme dove sta il problema.

  • Francesco

    Ciao a tutti,

    ho un piccolo problema con il simulatore, ho creano la prima app come descritto da Peppe tutto funziona se utlizzo il metodo editing changed ma quando cambio il metodo in Did End on Exit non riesco ad uscire dal campo, il cursore rimane sempre li così non posso vedere il risultato del cambiamento. Ho provato con il tasto invio del tastiera virtuale, dalla tastiera fisica, cliccando sopra un altra parte della view ma nulla.
    E’ un problema mio ho sbaglio qualcosa? TKS

    • Ciao Francesco,

      No non è un tuo problema, per chiudere la tastiera del dispositivo è necessario utilizzare un metodo. Più avanti spiegherò come chiuderla al tap su un qualsiasi punto dello schermo o dal tasto. Quindi per adesso usa la funzione del simulatore per aprire e chiudere la tastiera
      Inviato da iPhone

  • Matteo

    Ciao Giuseppe,

    volevo sapere se esiste una versione pdf scaricabile dei corsi.

    • Ciao Matteo,
      Per il momento non c’è una versione scaricabile del corso. Solo online o al massimo puoi scaricare in pdf la pagina
      Inviato da iPhone

  • gaetanobizzarro

    Ciao Peppe,
    Volevo ringraziarti per come lavori alle lezioni, sei un grande, e in aggiunta ti allego questa bella foto!

    • Grande Gaetaano!!

      Aspetto lo stesso entusiasmo anche per le prossime :P

  • Gabriele Brescancin

    ciao Peppe,
    quando accedo alla proprietà text della variabile myLabel, mi da errore.
    “Value of type UIView has no member text”

    • Ciao Gabriele,

      Guarda bene la tua IBOUtlet, il tipo che gli hai assegnato è UIView quando dovrebbe essere UILabel. Forse non hai selezionato la label in fase di collegamento.

      Fammi sapere

      • Gabriele Brescancin

        risolto!
        grazie :-)

  • nickbonny

    ciao, non riesco bene a capire il sender nella funzione:

    @IBAction func textField_EditingChanged(sender: AnyObject)

    Sarebbe come una funzione normale e rappresenta il valore che passo alla funzione?
    E perché me lo imposta di default quando creo la @IBAction?

    • Ciao Nick,

      Esattamente è come una funzione normalissima. L’unica eccezione è che è creata a partire da un collegamento con un elemento dell’interfaccia (IBAction).
      Il sender è colui che invoca questa funzione, in questo caso la textField. Quindi più che il valore devi vederlo come l’oggetto che ha invocato l’evento e quindi la funzione che lo gestisce.

      Viene messo un sender di default perché tutte le IBAction vengono create per rispondere ad un evento generato da un elemento dell’interfaccia. In questo caso, al testo che cambia nella textField.

      Quando cambia il testo della textField, il sistema operativo, genera un evento “Ehi Applicazione, vedi che qualcuno sta cambiando il testo della textField, vuoi gestire questa cosa?”.
      Se c’è una IBAction collegata a questo elemento e creata per la gestione di questo evento, il sistema operativo passa alla funzione l’oggetto che sta invocando questo evento, cioè la textField, nel sender della IBAction.

      Spero di essere stato chiaro.
      In caso, fammi sapere ;)

      • nickbonny

        Ok si si chiarissimo grazie

  • Andrea

    Ciao Giuseppe,
    Una domanda di carattere più generale, ma quando aggiungo un elemento grafico alla view, a livello di codice sto creando una extension alla sua classe di provenienza( dato che essendo un oggetto non posso aggiungergli attributi) o gli elementi grafici sono già tutti attributi della classe UIView semplicemente ancora in forma opzionale in una view iniziale?
    Grazie e complimenti x il corso

    • Ciao Andrea,

      A livello di codice io ho omesso, volutamente, alcuni passaggi. I View Controller che ci sono nello storyboard vengono creati a partire da un file XML. Ogni elemento che viene aggiunto, a livello grafico con drag e drop, viene inserito all’interno di questo file XML. In fase di run, l’applicazione, legge questo file e lo converte in un oggetto UIViewController.

      Tutti gli elementi aggiunti successivamente, a livello di codice, è come se non esistessero. Esistono solo graficamente. Infatti è per questo motivo che si creano le subclass della classe UIViewController e si aggiungono le Outlet per creare dei riferimenti reali tra quegli elementi aggiunti ed il relativo codice per la gestione.

  • Fabio Nøah Politi

    Ciao Giuseppe,
    ho riscontrato 2 piccoli problemi, pur seguendo passo passo il corso:
    • il primo è relativo al ridimensionamento automatico del testo nel textField mentre scrivo, ovvero mi va semplicemente oltre senza rimpicciolire.
    • il secondo è relativo alla stampa per ogni singolo carattere inserito nel textField, ovvero non mi visualizza le print nella Debug Area. Penso di aver collegato il TextField con la @IBAction
    Ti allego l’immagine del mio codice.
    Qualche suggerimento?

    Ovviamente complimenti per il corso…è molto interessante e fluido!

    • Fabio Nøah Politi

      Ho risolto… non mi ha tenuto la selezione dal menu a tendina della scelta Evento.

      • Perfetto Fabio!
        Se dovessi avere bisogno d’aiuto, non esitare a scrivere

        Buona Programmazione,
        Giuseppe Sapienza

  • Aurel Calin Muth

    https://uploads.disquscdn.com/images/f49ff50b3112b9c3085e762e9005992865cc178f4bec1767a2fcac8082b9bff9.png https://uploads.disquscdn.com/images/f6f46f8c4a0c4ff74cd14fd3a7b9717a79472050903fd099e974a44b667d7a40.png https://uploads.disquscdn.com/images/e988d59cfa3fcb42a11063767e11319ff5e0e53b788b8fe7121a61c9c8db7165.png Ciao Giuseppe!
    Io non riesco a fare questa app. sono riuscito a inserire i 2 oggetti: label e textfield. Li ho connesso con le iboutlet e ibaction.
    nella ibaction, prima di sender ho messo _ e mi dava l’errore dell’argument keyword; ho provato con scrivere in vece di _, texInput la var di iboutlet ma niente. faccio sul simulatore click sul campo da scrivere ma la label rimane invariata. provo ad inviarti delle screenshots. ha provato anche Dario su Slak ad aiutarmi ma non ci sono riuscito uguale. dove sbaglio?
    e poi ti volevo chiedere anche come si fa a mettere la app sul iPhone per testarla?
    Grazie!

    • Ciao Aurel,
      Credo che il problema derivi dal fatto che non hai collegato correttamente gli elementi.
      Quando crei una outlet e poi la modifichi da codice, questo cambiamento non viene preso anche dallo storyboard. Quindi devi andare a ricollegarla ricordandoti di scollegare la precedente.

      Se mi mandi il progetto anche su slack ti dico dove sta il problema.

      Per il telefono ti basta collegarlo al computer con il cavo. Quando lo colleghi dentro Xcode dove vai a scegliere il simulatore per provare l’app, se apri quel campo troverai anche il tuo dispositivo.

      Alla prossima,
      Giuseppe

Start typing and press Enter to search

esercizio-fine-primo-modulo-corso-ios