CocoaPods e forchette GitHub


108

Questa è la prima volta che forzo un progetto GitHub e non sono nemmeno molto competente con CocoaPods, quindi per favore abbi pazienza.

Fondamentalmente, ho biforcato un progetto su GitHub usando quanto segue nel mio Podfile:

pod 'REActivityViewController', '~> 1.6.7', :git => 'https://github.com/<username>/REActivityViewController.git'

Ho quindi apportato alcune modifiche al fork e, naturalmente, quando ho pod installinstallato un altro pod, ha reinstallato l'originale REActivityViewControllere cancellato le mie modifiche.

Mi sto rendendo conto che devo inviare le mie modifiche al mio fork prima di un altro pod install, ma come faccio a sapere che è il fork che viene installato, considerando che si tratta di un repo installato da CocoaPods? Ho cercato nella REActivityViewControllercartella installata sotto la Podscartella e non ci sono file git.

Devo lavorare sul mio fork al di fuori del mio progetto e quindi utilizzare CocoaPods per installare le modifiche? È un flusso di lavoro troppo complicato.

O devo fare qualcosa con i sottomoduli?

Risposte:


185

Risponderò a questa domanda usando un esempio. Ho un fork di TTTAttributedLabel con alcune funzionalità extra che ho aggiunto qui:

https://github.com/getaaron/TTTAttributedLabel

Per poterlo utilizzare in un progetto Cocoapods, io:

  1. Spingi le mie modifiche nella mia forcella
  2. Configura il mio Podfile per ottenere le modifiche e l'aggiornamento

Dopo aver trasferito le modifiche al fork, ottieni lo SHA del tuo ultimo commit. Puoi farlo usando git rev-parse origin/master | pbcopyo sulla pagina dei commit di GitHub per il tuo progetto: Screenshot della copia dell'SHA di un commit su GitHub

Quindi, puoi specificare il commit specifico sul tuo fork nel tuo Podfile in questo modo:

pod 'TTTAttributedLabel', :git => 'https://github.com/getaaron/TTTAttributedLabel.git', :commit => 'd358791c7f593d6ea7d6f8c2cac2cf8fae582bc1'

Dopodiché, pod updateaggiornerà questo particolare commit dal tuo fork. Se vuoi, puoi anche crearne uno podspecper il tuo fork, ma trovo questo approccio più semplice e non apporto modifiche abbastanza frequentemente da giustificare un nuovo flusso di lavoro.

Devo lavorare sul mio fork al di fuori del mio progetto e quindi utilizzare Cocoapods per installare le modifiche? Questo è il modo per complicare un flusso di lavoro.

Puoi farlo in questo modo, ma di solito:

  1. Modifica il codice all'interno del mio progetto e assicurati che funzioni
  2. Copia le modifiche sul mio fork, di
    • esportando una patch, o
    • copiando l'intero file del codice sorgente
  3. Impegnati e inviaci a GitHub
  4. Aggiorna il Podfile con il nuovo SHA
  5. Corri pod update.

O devo fare qualcosa con i sottomoduli?

No, non è necessario.


Domanda successiva: quindi l'aggiornamento del Podfile con il nuovo SHA è davvero necessario? pod installnon clonerà automaticamente la versione più aggiornata con l'ultimo commit?
Ramsel

Se rinomini il tuo progetto in qualcosa di diverso e crei il tuo file podspec, puoi indirizzarlo al tuo repository e usarlo pod 'MyForkName', :headinvece.
Aaron Brager

1
:head:punta al commit più recente, ma non puoi usare :gite :headsulla stessa riga.
Aaron Brager

4
Questa è una soluzione perfetta per l'utilizzo di un fork personalizzato di un progetto pubblico. Nel mio caso, ho biforcato e modificato un progetto e avevo un PR aperto per il manutentore per unire quelle modifiche, ma volevo aggiornare il Podfile del mio progetto per utilizzare quelle modifiche immediatamente. Funzionava benissimo!
cbown

2
@AaronBrager mostra "Impossibile trovare una specifica per" <nome pod> "" sai come risolverlo?
Susim Samanta

34

Un'altra opzione è fare in modo che il tuo progetto faccia riferimento al pod direttamente e non tramite GitHub. In questo modo non è necessario continuare a eseguire il commit del fork o a copiare / incollare il codice solo per testare le modifiche. Puoi lavorare con due diversi progetti Xcode contemporaneamente e impegnarti separatamente nei rispettivi progetti.

pod 'AFNetworking', :path => '~/Documents/AFNetworking'

Documentazione CocoaPods: http://guides.cocoapods.org/using/the-podfile.html#using-the-files-from-a-folder-local-to-the-machine

inserisci qui la descrizione dell'immagine


1
Come risolve il problema? Il pod estrarrà queste sorgenti e le inserirà come progetto Pod nel progetto sorgente. Eventuali modifiche a questi file (ora inclusi tramite Pods) non vengono tracciati da Git di "~ / Documents / AFNetworking", non è vero?
Raj Pawan Gumdal
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.