¿Optimizar el flujo de trabajo para actualizar las dependencies de cocoapods de propiedad interna?

Digamos que tengo un Project A principal Project A con varias dependencies de cocoapods (que son propiedad interna del repository de cocoapods de nuestra organización).

Digamos que estoy trabajando en el Project A , y mientras trabajo en él, encuentro una solución en una DependencyB , por lo que modifico el código en esa dependencia mientras aún estoy en el proyecto Xcode de ProjectA.

¿Cuál sería el mejor flujo de trabajo para impulsar los cambios en esa dependencia a su propio repository y luego actualizar esa dependencia en el Project A ?

Realmente me gustaría algunas forms para evitar , automatice por completo o simplifique el siguiente flujo de trabajo (que es un PITA)

Worflow para evitar

  1. git clone git@github.com:Organization/DependencyB.git
  2. Realice sus cambios en el proyecto de dependencia (los mismos cambios que se realizaron al solucionar el problema que encontré mientras trabajaba en el Project A )

  3. Actualice el file DependencyB.podspec

     s.version = "0.1.7" s.source = { :git => "https://github.com/Organization/DependencyB.git", :tag => "0.1.7" } 
  4. Comprometerse y labelr la versión de esta dependencia

     git add -A git commit -m 'Made some changes' git tag -a 0.1.7 -m 'This is an awesome tag :D' git push origin master git push --tags origin 
  5. Actualice el repo cocoapod privado de la organización (que almacené en ~/ )

     cd ~/.cocoapods/OrganizationPrivateRepo/CoverFlux mkdir 0.1.7 cd 0.1.7 
  6. copie la DependencyB.podspec actualizada en el repository privado de la organización (clonado en ~/.cocoapods )

     ~/.cocoapods/OrganizationPrivateRepo/DependencyB/0.1.7/CoverFlux.podspec 
  7. Confirmar los cambios en el repository privado y enviarlos al control remoto.

     cd ~/.cocoapods/OrganizationPrivateRepo/ git commit -am 'Added version 0.1.7 to DependencyB spec' git push origin master 
  8. Finalmente, continúe con la carpeta 'Proyecto A' y actualice la inicial

     pod update 

Nota:

El podfile de A del proyecto se ve así:

  platform :ios, '6.0' pod 'DependencyB' 

Aquí hay algunos consejos para simplificar su flujo de trabajo. Más allá de estos, es posible que tenga que considerar la posibilidad de hacer algunos scripts adicionales.

Primero, recomiendo que mantenga su file podspec ubicado en la raíz de su proyecto. Entonces, DependencyB.git tendría el file DependencyB.podspec.

Simplifique el paso 3

Cambie su label de origen para hacer reference a la versión. De esta forma, solo necesita cambiar la línea de versión en su podsec.

 s.source = { :git => "https://github.com/Organization/DependencyB.git", :tag => "#{s.version}" } 

Simplifique los pasos 5, 6 y 7

Ejecute lo siguiente desde su directory DependencyB.git. (Suponiendo que tengas tu podsec allí como sugerí anteriormente)

 pod push OrganizationPrivateRepo DependencyB.podspec 

Si DependencyB.podspec es el único file podspec, ni siquiera es necesario que lo incluya en la línea, produciendo:

 pod push OrganizationPrivateRepo 

Etapa 4

Finalmente, creo que simplificar el Paso 4 es posible, pero es una de esas cosas que varía entre organizaciones y desarrolladores individuales, ya que es parte de su flujo de trabajo. Por ejemplo, normalmente me comprometo desde mi IDE.

Tales scripts podrían integrarse en el podsec para que actualicen el valor de la s.version . O como alternativa, obtenga la label correcta del valor de s.version .

ACTUALIZACIÓN: Simplifique el paso 2

Parece que estás haciendo un cambio dos veces a DependencyB. Puede hacer que la configuration de CocoaPods sea un enlace simbólico. En el file Pod de ProjectA, configure lo siguiente:

 pod 'DependencyB', :path => "../path/to/DependencyB' 

Ahora puede editar los files en DependencyB desde ProjectA. Deberá ejecutar la pod update después de realizar este cambio. Después de eso, los cambios a la fuente estarán disponibles de inmediato ya que es un enlace simbólico. He tenido problemas para hacer que Git se comprometa con Xcode al hacer esto, pero aparte de eso, funciona bien.