Compatibile con Xcode 8

Come creare un Framework con Xcode 8. L’arte del riutilizzo e condivisione del codice

ENTRA NEL NOSTRO GRUPPO FACEBOOK

UIKit, MapKit, VisibilitàKit, SoldiKit. Tutto il mondo delle applicazioni gira intorno ai frameworks (tranne l’ultimo citato).

Ma cos’è un framework?

Un framework è un’insieme di classi e strutture dati. Queste classi vengono conservate in uno speciale contenitore, per l’appunto il framework, che ne impedisce la lettura del contenuto (inteso come codice sorgente) e ne permette solo l’utilizzo (chiamate alle funzioni o agli init delle classi abilitate. Vedremo meglio tra poco).

Ok, ma a che servono i framework e perché dovrei crearne uno?

Immagina d’avere un problema con un’applicazione. La tua applicazione, per esempio, non sa cuocere due uova al tegamino. Dopo che ti sei sbattuto (il termine non è un caso) per diversi giorni per trovare una soluzione, alla fine te ne esci con una classe che ti permette di risolverlo:

Così ogni volta in cui ti ritroverai a sbattere due uova, grazie a quella classe, non dovrai far altro che invocare quel determinato metodo fregandotene di tutto quello che c’è all’interno (perché sai che funziona).

Dopo qualche settimana sviluppi una nuova applicazione e toh! eccolo là, il problema delle uova al tegamino ritorna puntualmente. Ma tu sei furbo e ti ricordi che avevi creato una classe nel precedente progetto. Allora torni là, copi la classe e la incolli nel nuovo progetto.

Creando un tuo framework personale metterai definitivamente fine al processo logorroico di copia ed incolla del codice tra i tuoi stessi progetti. Perché, inserendo la classe Cuoco dentro il framework, dovrai semplicemente importare ques’ultimo ogni qual volta avrai bisogno del suddetto framework in un progetto.

In più, qualora un tuo amico developer dovesse avere il tuo stesso problema o semplicemente sei un piccolo San Francesco da Cupertino, puoi condividere un framework assicurandoti sempre che venga utilizzato solo in quel preciso modo che hai definito (cioè senza bruciare le uova) e senza permettergli di vedere il sistema utilizzato (la tecnica per cuocere le uova).

Premessa fatta. Vediamo insieme come creare un framework con Xcode 8!

Il progetto

Creare un framework per iOS è qualcosa di relativamente semplice. Esiste già un Template preconfezionato che ti permette di partire da un progetto bello e pronto. Apri Xcode, crea un nuovo progetto di tipo Cocoa Touch Framework

creare-un-framework-per-ios-con-xcode

Il template porta con se alcuni file, che per il momento, puoi benissimo tralasciare.

progetto-framework-xcode-8

Classi private e public

Qui si vede con leva maggiore l’importanza dell’utilizzo dei modificatori di visibilità spiegati nel corso gratuito sul linguaggio Swift e poi ripresi nel corso iOS.

Dato che il framework potrebbe essere destinato al grande pubblico è importante definire a priori quali debbano essere le classi/metodi/variabili ecc utilizzabili dallo sviluppatore finale.

Una classe marcata come private è accessibile solo dall’interno del modulo di riferimento (cioè solo dall’interno della “cartella” in cui inserirai i file del framework). Una classe marcata come public sarà usufruibile dal progetto che implementerà il framework.

Ad ogni modo, di default, qualsiasi dichiarazione ha il modificatore internal cioè è accessibile solo dall’interno del modulo (quindi se definisci una class come public, i suoi metodi rimarranno comunque internal). Quindi se vorrai renderla public o private dovrai forzarlo con un modificatore d’accesso.

Aggiungi una nuova classe al progetto ed inserisci il seguente codice:

La classe è marcata come public quindi sarà accessibile dal progetto che implementerà il framework. Dall’altro lato, al suo interno, ci sono var/func public e private. Le private non saranno utilizzabili dall’esterno mentre le public si. Ovviamente il public interno poteva essere omesso dato che la classe è di default public. L’ho inserito solamente per capire velocemente questa differenza.

Compilare ed Esportare

Dove trovo il file .framework e come lo importo?

Per creare il file finale, cioè quello con estensione .framework, una volta aggiunte le varie classi ti basta cliccare su Product/Build per compilare il progetto. 

compilare-un-framework-xcode-8

Il file NomeFramework.framework puoi recuperarlo cliccato con il tasto destro sul file omonimo che trovi dentro il progetto e selezionando Show in Finder:

show-in-finder-nuovo-framework-xcode

A questo punto ti basterà prendere il file e trascinarlo nel progetto in questione.

Dal progetto dell’applicazione ti basterà eseguire un normalissimo import nomeFramework nei vari file in cui vorrai utilizzarlo.

Progetto App e Framework insieme

Moltissime volte è utile poter lavorare al progetto del framework e contemporaneamente vedere come funziona all’interno di un progetto reale (per esempio in un’applicazione). Il sistema che ti ho fatto vedere sopra, cioè della compilazione e del trascinamento del framework all’interno del progetto dell’app è noioso e fa perdere un sacco di tempo ogni qual volta devi aggiornare il framework.

A questo punto puoi utilizzare un sistema ingegnoso che ti permette di lavorare contemporaneamente al framework e all’applicazione.

In un progetto qualsiasi di un’applicazione, dal Project Navigator, seleziona la cartella e con il tasto destro seleziona Add file to “Nome progetto”. Spostati nella cartella in cui hai creato il framework ed aggiungi il file con estensione .xcodeproj:

framework-progetto-e-app-progetto-xcode

Alla fine della solfa dovresti avere il progetto del framework all’interno del progetto dell’applicazione:

framework-xcode-e-linguaggio-swift

condividi xcoding

Ho impiegato un po’ di tempo a scrivere questo tutorial. Se ti va, ricambia il mio lavoro, con un like alle mie pagine!

Grazie ;)

Link al framework

Da qui come si utilizza il framework?

Per poter utilizzare il framework dal progetto dell’applicazione, spostati nel Project Info sul pannello General. Scendi in fondo alla pagina e, dove trovi Embedded Binaries clicca sul tasto + ed aggiungi il file nomeFramework.framework. Automaticamente dovrebbe comparire il framework anche su Linked Frameworks and Libraries:
come-creare-un-framework-con-xcode-e-linguaggio-swift

Utilizzo

L’utilizzo è analogo all’esportazione del file .framework in maniera normale. Nel caso in cui non ti dovesse far importare il framework, prova a compilare il target Framework. Cioè dal campo vicino al tasto di avvio del progetto (quello a forma di triangolo) seleziona il target NomeFramework ed avvia la compilazione.

Alla fine dovresti poter importare correttamente il framework ed utilizzare tutto ciò che c’è di pubblico lì dentro:

utilizzo-framework-custom-xcode

Considerazioni

Per quanto riguarda la distribuzione del framework con Cocoa Pods o altri sistemi né parlerò in un tutorial tutto dedicato all’argomento.

Una cosa che ti raccomando di fare è quella di pensare al framework come qualcosa di riutilizzabile. Non crearlo se non è riutilizzabile in N progetti. Cioè, se quello che ogni volta farai sarà modificare il framework in base alle esigenze del progetto in cui lo implementerai, vorrà dire che starai sbagliando ad impostarlo.

A tal proposito, se il progetto è da distribuire, il framework dovrebbe fare un uso massiccio dei Generics, ne ho parlato in questo tutorial, onde evitare tutti i problemi legati al casting.

Buona Programmazione!

Changelog

  • 10/04/2016 – Aggiornate alcune parti tecniche.
  • 14/11/2016 – Aggiunto il changelog.

  • Antonio Piantadosi

    Come al solito Giuseppe hai fatto centro! Un tutorial davvero utile e ben scritto! Tra l’altro riguarda un argomento che non tratta nessuno e che sicuramente ci aiuterà a diventare dei dev migliori! Davvero complimenti!

    • Ti ringrazio moltissimo Antonio!
      Eh si in italia almeno per swift questi sono argomenti poco gettonati. Anche perché in genere si punta direttamente all’inglese. Però parlarne con la propria lingua non fa mai male :D

      Alla prossima e buona programmazione!
      Giuseppe Sapienza | xCoding.it

Start typing and press Enter to search

Come creare un account da sviluppatore Appleavaudio-player-swift