Git: file is missing

Quando si usare git su Xocde può capitare che qualcosa vada storto e dei file, magari semplicemente spostati da una cartella ad un altra, risultino mancanti.

È questo il caso di quando appare nella schermata del Commit un punto interrogativo a fianco ad un file e nell’editor di fianco il messaggio:

1
file is missing
file is missing

Ovviamente questo può accadere anche ad una cartella.

Per ovviare a questo fastidioso problema, che provoca anche dei relativi Warning in fase di compilazione, è sufficiente aprire il Terminale, posizionarsi nella cartella del progetto, e forzare un commit con questo comando:

1
git commit -a -m "Commit Message"
git commit -a -m "Commit Message"

A volte, se avete più Xocde installati, potrebbe essere necessario specificare dove si trova la versione che state usando:

1
sudo xcode-select --switch /Applications/Xcode\ 8/Xcode.app
sudo xcode-select --switch /Applications/Xcode\ 8/Xcode.app

Aggiungere una cartella (es. di file HTML) senza perdere la struttura di sottocartelle

Chi ha voluto inserire una cartella di file HTML all’interno di un progetto Xcode si sarà presto accorto che i file vengono trattati come se fossero tutti dentro la cartella principale, e non distribuiti nelle eventuali sottocartelle. Questo crea problemi, ad esempio, nel linkare i file immagine nel file HTML (che andrebbe modificato ad hoc). Ma non solo.

Per ovviare a questo inconveniente è sufficiente ricordarsi di importare la cartella scegliendo l’opzione “Create folder references for any added folders ” (pur con l’opzione Copy items into destination group’s folder (if needed)” attivata).

Produrre una versione Lite senza duplicare un progetto

Spesso le App a pagamento vengono pubblicate anche in versione gratuita (ed in qualche modo limitata) per fare in modo che gli utenti possano rendersi conto dell’utilità dell’App stessa senza il timore di spendere del denaro. Una volta sincerati della qualità della versione gratuita, gli utenti di solito acquistano volentieri l’App completa.

Nonostante per Apple le App e le “App Lite” (o “Free”) siano tecnicamente due app distinte, è possibile produrre la versione Lite senza duplicare il progetto dell’App completa. Questo garantisce una facilità di allineamento fra le funzioni e i bug fix delle due versioni, ma necessita di alcune accortezze.

Se si definisce una variabile globale di tipo BOOL, ad esempio nell’AppDelegate.h con il comando:

1
#define isLite YES
#define isLite YES

allora in qualunque file di implementazione si può lanciare un comando quando l’App è Lite e un’altro quando è completa, con un semplice if.

Altra accortezza è quella di modificare almeno la grafica dell’icona dell’App, di modo che si distingua dall’App completa.

A livello di profili di provisioning è necessario creare un distinto App ID e una coppia di profili di development e distribution.

Nel progetto, invece, va cambiato l’identifier dell’iOS Application Target (lo trovate sul Summary del Target) di modo che sia identico a quello definito nell’App ID. Poi, nei Build Settings del Project selezionate i nuovi profili nella sezione Code Signing (ovviamente dopo aver scaricato e installato i nuovi profili di provisioning).

A questo punto la solita archiviazione genererà una nuova sezione dedicata alla versione Lite e, durante la validazione e la sottomissione verrà in automatico proposto il corretto profilo di provisioning di distribuzione.

Facile, no?

Application failed code sign verification. The signature was invalid, or it was not signed with an iPhone Distribution Certificate.

Durante la validazione di un App archiviata, quindi poco prima dell’invio ad Apple per l’approvazione, può capitare di ricevere questo errore:

Application failed code sign verification. The signature was invalid, or it was not signed with an iPhone Distribution Certificate.

Questo significa, il più delle volte, che non è stato impostato correttamente il profilo di provisioning in Xcode.

Per risolvere questo problema è sufficiente cliccare sul nome del progetto nella barra di sinistra, poi nella zona centrale di Xcode scegliere il progetto dalla sezione Project e poi selezionare la pagina Build Settings. A questo punto trovate la sezione Code Signing e scegliete in Release il profilo corretto di tipo iPhone Distribution.

Da notare, come curiosità, che Apple abbia mantenuto la dicitura iniziale iPhone Distribution (ma non solo questo) anche quando si sviluppa per iPad o iPod touch. Chissà se in futuro tutto questo verrà rinominato in iOS Distribution.

Sviluppare con due utenti su Mac: conflitto con il Simulatore iOS

Se per qualche necessità dovete sviluppare con due utenti del vostro Mac sappiate che programmi come il Simulatore iOS possono essere usati solo da un utente alla volta. Ricordatevi quindi di chiuderlo se usate il cambio utente rapido (Preferenze di Sistema > Utenti e gruppi > Opzioni login).

Sfortunatamente, se lanciate il comando Build & Run su Xcode, questo tenterà all’infinito di allegare l’App appena compilata al Simulatore iOS se questo è ancora aperto in un altro utente. Se invece tentate aprire manualmente il Simulatore iOS, un messaggio vi avvertirà della necessità di chiuderlo prima nell’altro utente attivo.