Xcode: che cos'è un obiettivo e uno schema in un linguaggio semplice?


Risposte:


309

Ho aggiunto anche in Workspace e Project!

  • Area di lavoro : contiene uno o più progetti . Questi progetti di solito riguardano l'un l'altro
  • Progetto - Contiene codice e risorse, ecc. (Sarai abituato a questi!)
  • Target : ogni progetto ha uno o più target.
    • Ogni destinazione definisce un elenco di impostazioni di costruzione per quel progetto
    • Ogni target definisce anche un elenco di classi, risorse, script personalizzati, ecc. Da includere / utilizzare durante la creazione.
    • I target vengono generalmente utilizzati per diverse distribuzioni dello stesso progetto.
      • Ad esempio, il mio progetto ha due obiettivi, una build "normale" e una build "office" che ha funzionalità di test extra e può contenere diverse tracce di musica di sottofondo e un pulsante per cambiare la traccia (come attualmente).
      • Sarai abituato ad aggiungere classi e risorse alla tua destinazione predefinita mentre le aggiungi.
      • Puoi scegliere quali classi / risorse vengono aggiunte a quale target.
        • Nel mio esempio, ho una classe "DebugHandler" che viene aggiunta alla build del mio ufficio
      • Se aggiungi test, questo aggiunge anche un nuovo target.
  • Schema : uno schema definisce cosa succede quando si preme "Build", "Test", "Profile", ecc.
    • Di solito, ogni bersaglio ha almeno uno schema
    • Puoi creare automaticamente schemi per i tuoi target andando su Schema> Gestisci schemi e premendo "Crea schemi automaticamente"

Proviamo se ho capito bene ... Sto programmando un'app e realizzo due obiettivi. Uno che caricherò sull'app store e uno in cui sviluppo già la prossima versione della stessa app. E negli schemi faccio ad esempio uno schema in entrambi gli obiettivi da eseguire e uno schema per il debug? Ma perché ho bisogno di schemi diversi per questo? Non ho capito il vantaggio di quello di BJ Homer ..
MichiZH,

FWIW, non uso schemi diversi per il rilascio e il debug a meno che non aggiunga funzionalità di debug extra come descrivo nella mia risposta.
James Webster,

2
Spiegazione superba fratello! ! !
Sagar Kalathil,

6
cosa vuoi dire che il tuo ufficio ha un pulsante musicale nella parte inferiore. La tua app attuale ha un codice aggiuntivo che viene attivato solo nella build dell'ufficio o la musica viene eseguita sul tuo mac. Scusa, sono confuso
3366784,

Questo tipo di definisce le cose che compongono ciascun concetto, ma non lo scopo di ciascun elemento. Per me questo è ciò che l'OP stava chiedendo.
O'Rooney,

67

Un target è un prodotto finale creato eseguendo "build" in Xcode. Potrebbe essere un'app, un framework, una libreria statica o un bundle di unit test. Qualunque cosa sia, generalmente corrisponde a un singolo elemento nella cartella "prodotti creati".

Uno schema rappresenta una raccolta di obiettivi con cui si lavora insieme. Definisce quali target vengono utilizzati quando si scelgono varie azioni in Xcode (Esegui, Test, Profilo, ecc.) Spesso, si avrà solo uno schema, che utilizza il target dell'app principale per le azioni Esegui, Archivia e Profilo e un target unit test per l'azione Test. Se stavi costruendo due app correlate, potresti avere due schemi che utilizzavano lo stesso bundle di unit test ma target di app diversi.

Il vantaggio principale degli schemi (introdotti in Xcode 4) è che ti consentono di alternare tra l'esecuzione dell'app e i test delle unità senza dover attivare la destinazione selezionata.


61

Sono una persona visiva, quindi per spiegare il concetto che userò un diagramma.

Quando si hanno più target , è possibile abbinarli uno a uno con le azioni Run, Test, Profile di Xcode, questo concetto definisce uno schema

inserisci qui la descrizione dell'immagine

Un target è una versione del tuo progetto , ovvero i target differiscono leggermente in classi e risorse da utilizzare durante il tempo di costruzione. Un progetto può avere più impostazioni di tempo per requisiti di distribuzione separati.


7
Questo diagramma sembra sbagliato. Uno schema dovrebbe essere legato a un determinato obiettivo, non vedo dove all'interno di uno schema puoi avere più obiettivi.
Boon,

6
@Boon No, incuranteChoosy è corretto. Nell'editor dello schema, fai clic sull'elemento "build" a sinistra. Nell'area di destra, fai clic su "+" e puoi aggiungere altri target a questo schema. Spuntare le caselle come desiderato. Gli eseguibili di questi target sono quindi disponibili nelle altre azioni (Esegui, Profilo, ecc.) Nel menu a discesa degli eseguibili.
occulus

Questo è buono ma manca la parte di configurazione della configurazione degli schemi. Penso allo schema come a una raccolta di come le azioni (Esegui, Test, Profilo) si abbinano a una combinazione di obiettivi e costruiscono configurazioni (debug, release, qa, prod, ecc.).
Steve Moser,

3

Workspace( .xcworkspace) - è un contenitore di multipli projects. È stato creato come passaggio successivo di cross-project references[Informazioni]

  • Workspacecontiene tutto schemesda inclusoprojects
  • Workspacegestisce tutto implicit dependencies[Informazioni]

osservazioni:

  • È sicuro lavorare con diversi progetti all'interno dello stesso workspacee non catturareCouldn't load Project.xcodeproj because it is already opened from another project or workspace
  • Cocoapods[Informazioni] lavorando conworkspacedove crea Podsprogetto

Project( .xcodeproj) - È un contenitore per targetse scheme. Definisce file di codice, risorse ...

Target- PBXNativeTargetsezione. Definisce un set specifico di impostazioni di generazione che generano:

  • Application target
  • Library and framework targets
  • Test
  • Aggregate[Informazioni] . Ad esempio, viene utilizzato per creare unUniversal frameworkoUmbrella framework

Scheme- una Project'sconfigurazione per l'azione in Xcode: eseguire , testare , profilare , analizzare e archiviare . Schemapuò essere condiviso che ti aiuta in CI, Carthage... e trova:

<project_path>/<project_name>.xcodeproj/xcshareddata/xcschemes

Dependency- Targetspuò avere dependencies. La dipendenza è un collegamento sorgente rispetto. Queste dipendenze possono essere collegate staticamente o dinamicamente [Informazioni] Esistono due tipi di esse:

  • Explicit Dependency[Informazioni] - Codice sorgente della dipendenza che si trova nello stesso progetto o progetto nidificato
  • Implicit Dependency[Informazioni] - Codice sorgente / chiuso della dipendenza che si trova nel progetto che fa parte dello stesso spazio di lavoro.

[Vocabolario]

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.