2015-12-01 15 views
7

Il mio progetto ha più obiettivi di compilazione in modo da poter facilitare build "branded" che condividono lo stesso codice, ma hanno identificatori e risorse di bundle univoci per target. Ho creato un'app di controllo per uno dei miei target per app, che funziona perfettamente. Ora sto cercando di utilizzare la stessa app e estensione per gli altri miei obiettivi. Ho pensato che avrei potuto facilmente duplicare i bersagli dell'orologio (orologio e estensione) e cambiare semplicemente tutti i riferimenti di identificazione del bundle in modo che corrispondessero agli altri target, ma sembra che ci sia un riferimento nascosto in alcuni punti.Guarda l'app condivisa su più destinazioni

Voglio solo utilizzare un'app di controllo per tutti i miei diversi obiettivi di marca.

Nota a margine: anche le app di controllo devono essere contrassegnate correttamente (cartelle delle risorse).

Qualche idea? Grazie.

aggiornamento Soluzione

Così, ho risolto. Quando ho duplicato i miei obiettivi di orologio (orologio e estensione) e modificato gli ID dei pacchetti, le dipendenze degli obiettivi, tutto per renderlo identico al vecchio target (ma ovviamente indicando i nuovi obiettivi), per qualche motivo il nuovo target di controllo non ha funzionato t indicare il corretto obiettivo di estensione dell'orologio. E non c'era modo di cambiarlo, ovunque. Ho provato a duplicare nuovamente gli obiettivi e ho ancora avuto lo stesso problema.

Quindi quello che ho fatto è stato aprire il file project.pbxproj, cercare qualsiasi riferimento all'estensione dell'orologio (e al bundle id) e aggiornare manualmente le connessioni. Il mio obiettivo orologio aveva una dipendenza dall'estensione dell'orologio sbagliata e la nuova estensione dell'orologio aveva in qualche modo un puntatore alla vecchia estensione dell'orologio. In seguito ho anche scoperto che dovevo puntare la build alla corretta productreference (riferimento appex) poiché anche questo era sbagliato.

Quindi, il nuovo obiettivo di controllo, indicava l'estensione dell'orologio errata e l'estensione di orologio corretta puntava all'appex errato (file di output). Tutto ciò che ho dovuto modificare manualmente nel file di progetto. Suona estremo e difficile, ma in realtà non è stato così difficile una volta che hai preso nota dei diversi UUID.

Spero che questo aiuti qualcun altro che potrebbe incappare nello stesso strano problema.

+0

Non ho capito circa il riferimento nascosto Potete per favore ampliare questo momento. –

+0

Certo, anche dopo aver duplicato i bersagli dell'orologio (orologio ed estensione), cambiato l'ID del bundle e quale app doveva targetizzare e tutte le dipendenze del target ecc., Non sarebbe ancora stato creato. Ma l'ho risolto ora, aggiorno malamente la domanda – tskulbru

+0

Ho incontrato lo stesso problema. Potresti pubblicare le tue note su tutto ciò che deve essere modificato manualmente dopo aver duplicato il target? Sarebbe immensamente utile. Inoltre, se dovessi spostare la tua soluzione in una risposta. :) – Joey

risposta

5

Non è assolutamente possibile utilizzare un'app di Watch per più destinazioni. Poiché l'unico fattore utilizzato da Xcode per cercare di includere o meno un'app di accompagnamento di Watch nel bundle è un ID bundle dell'app Watch. Quindi c'è una relazione uno-a-uno.

Ne consegue che è necessario duplicare ciascuna app WatchOS e la destinazione dell'estensione (modificando solo l'ID bundle) per ciascun target dell'app iOS. Tuttavia, puoi ancora condividere il tuo codice (compresi gli storyboard e le risorse) tra i target utilizzando Target Membership e risolvi un problema delle app di orologi di marca. Finalmente si ottiene il minimo sovraccarico di duplicazione del codice.

Aggiornamento: Vedo che stai tentando di duplicare un obiettivo di controllo utilizzando un clic con il pulsante destro del mouse su un obiettivo e scegliendo un'opzione Duplicate. Non funziona davvero per qualche motivo.

Ho solo provato a clonare un bersaglio Guarda effettuando le seguenti operazioni:

  1. File -> Nuovo -> Target -> App WatchKit.
  2. Specificato il Embed in Companion Application l'obiettivo necessario.
  3. Aggiunti tutti i file alla destinazione appena creata utilizzando l'opzione Target Membership.

Dopo che un progetto è stato creato ed è stato eseguito senza problemi con un nuovo obiettivo di controllo.

In questo modo non è necessario modificare manualmente l'ID bundle: tutto viene creato automaticamente e senza problemi da Xcode.

+0

Come ho già scritto, avevo provato a duplicare i target e modificare l'ID del bundle. Questo non ha funzionato. – tskulbru

+0

@tskulbru - ha aggiornato la risposta. –

+0

Sembra una buona soluzione, quando dici "aggiungi tutti i file" cosa intendi esattamente? Perché se non ci si sbaglia, con questo approccio si ottengono nuove cartelle di watch e watchextension (ad esempio estensione watchB e watchB). Quindi aggiungi i file dalla cartella watchA a watch'B? O semplicemente aggiungi watchB al target dei file nella cartella watchA? – tskulbru

0

problema simile "Errore = MultipleWatchKitTwoApps ... (~/Library/Logs/CoreSimulator/CoreSimulator.log)", quando ho terminato la duplicazione del target principale & aggiunto manualmente il kit del sistema operativo.

Soluzione: è stato osservato che le dipendenze principali della fase di costruzione target -> target si riferiscono ad altre app di watchkit. Elimina & assicurati di aver aggiunto correttamente la nuova app kit watchOS come dipendenza.

Analogamente nella sezione Contenuto della watch incorporare rimuovere l'altro riferimento watchOSapp target.

Questo risolverà il problema "errore = MultipleWatchKitTwoApps ..."

0

mi sono imbattuto in questo post più volte e provato di tutto senza successo, e alla fine, ho trovato come risolvere il problema. Presumo che tu abbia un'app per iOS funzionante e un'app di Apple Watch funzionante e devi aggiungere altre app di Apple Watch senza ripetere il codice.

Fase 1: File/Nuovo/Target Selezionare la scheda "watchos" e quindi selezionare "WatchKit App" Selezionare l'applicazione che di collegamento vuoi con questa nuova Apple Osservare applicazione fare clic su Avanti

Fase 2: Guardate il nuovo cartelle create per la tua nuova app Apple Watch e cancella tutte le * .swift e * .storyboard

Passo 3: Seleziona i file .storyboard e .swift della tua app pugno Apple Watch che funzionava in origine e dovresti assegnarli nuovo e il vecchio target di appartenenza. In futuro, tutti i tuoi file di app di controllo dovrebbero avere quei target selezionati.

enter image description here

+1

Incerto se è ancora un problema ma prima i layout ecc nello storyboard avrebbero ottenuto il prefisso target sbagliato. Quindi se tu avessi 'MyView' e due target,' target1, target2' verrebbe chiamato (all'interno del file storyboard) 'target1_MyView', indipendentemente dal fatto che tu stessi costruendo per' target2'. E non otterrebbe un errore di compilazione, fallirebbe drasticamente durante l'esecuzione. – tskulbru

Problemi correlati