Esploriamo la struttura delle applicazioni in macOS e iOS! #1

Dopo aver analizzato Darwin, passiamo ad un nuovo argomento. Vi siete mai chiesti come funzionano le – ormai indispensabili – app? Quali sono le idee alla base? Come nasce e da quali elementi è caratterizzata un’app?

applicazioni

Primi concetti in macOS

Le applicazioni sono impacchettate in bundle. Cosa sono i bundle?

Il concetto di bundle è la base per applicazioni, framework, plugin e addirittura estensioni del kernel; sono contenitori di software autoinstallante in macOS. Vengono solitamente utilizzati per installare e gestire i componenti interni del sistema operativo (come i salvaschermo, le librerie, i plugin o altro), da non confondere con i  package che vengono utilizzati per l’installazione delle applicazioni; una peculiarità di macOS è che tiene traccia dei bundle e dei package installati attraverso un database interno.

Possiamo quindi assumere che il bundle di un’applicazione contiene la maggior parte dei file richiesti per il runtime dell’applicazione stessa: il  binario, le librerie private, le icone, gli elementi dell’interfaccia utente e la grafica. Un utente (non curioso) resta in gran parte ignaro di ciò, poiché un bundle viene mostrato nel Finder come una singola icona. E a questo punto risulta intuitivo riconoscerlo, perchè è una delle operazioni che vengono svolte con maggiore frequenza: per installare un’app è sufficiente trascinare l’icona dell’applicazione all’interno della cartella Applicazioni.
Non a caso in macOS  le applicazioni si trovano in genere nella cartella /Applications. Ogni applicazione è situata ovviamente nella  propria directory, denominata AppName.app e ogni applicazione aderisce quasi religiosamente ad un formato fisso, che discuteremo successivamente – in cui le risorse vengono raggruppate in classi.

Le app in iOS

In iOS, le app si discostano un po’ da questa struttura ordinata: sono ancora contenute nelle loro directory, ma non aderiscono alle rigide regole del formato bundle. Al contrario, la directory di un’app può essere piuttosto caotica, con tutti i file app lanciati nella radice (/) del sistema. Inoltre, iOS distingue tra le applicazioni predefinite fornite da Apple, che risiedono in /Applications e quelle acquistate dall’App Store, che si trovano in /var/mobile/Applications.

La directory nella quale risiedono queste ultime è particolare, poichè presenta un GUID a 128 bit (è un numero psedo-casuale usato nella programmazione software), suddiviso in una struttura 4-2-2-2-4 (esempio: A8CB4133-414E-4AF6-06DA-210490939163 – in cui ogni cifra esadecimale rappresenta 4 bit; questa struttura è abbastanza nota, se mai avete provato a visualizzare il file system di un dispositivo iOS jailbroken, avrete sicuramente notato che le app vivono in delle directory con numeri casuali).

Perchè usare delle directory con GUID a 128 bit?

Le app iOS sono chroot(2) (cioè sono limitate nelle operazioni: l’app considera la sua directory come radice del sistema) ed è proprio dalla directory dell’applicazione con GUID codificato che non possono sfuggire: un’app non vede il resto del file system. Ciò garantisce che le applicazioni non proprietarie Apple siano così limitate da non riuscire nemmeno a vedere quali altre applicazioni sono installate al loro fianco, contribuendo ad aumentare la privacy dell’utente.

Ecco una tabella della struttura standard di una directory per le app in iOS:

Una volta scaricate da App Store, le applicazioni sono impacchettate come file .ipa (che praticamente sono archivi zippati), in cui i contenuti della directory dell’applicazione sono compressi, sotto una directory chiamata Payload/. Potete tranquilla provare anche voi a decomprimere un file .ipa con il semplice comando unzip -t nomeApp.ipa per avere un’idea della struttura dell’applicazione.

Anche per questo articolo è tutto!

Continueremo a parlare della struttura delle app anche nel prossimo articolo approfondendo ulteriormente la struttura. Per eventuali domande, curiosità o feedback potete commentare qui in basso, a presto!

HotAcquista iPhone 15 su Amazon!
Approfondimenti