web-dev-qa-db-fra.com

La dépendance des Cocoapods dans les spécifications de pod ne fonctionne pas

Je reçois une erreur de syntaxe avec ce fichier de spécifications:

Pod::Spec.new do |s|

s.name         = "BSImageLoader"

s.version      = "0.1.3"

s.summary      = "The image loading framework for PicPoc"

s.homepage     = "https://bitbucket.org/boolalsofware/bsimageloader"

s.license      = 'MIT'

s.author       = { "Spencer Comerford" => "[email protected]" }

s.source       = { :git => "[email protected]:boolalsofware/bsimageloader.git", :tag => "0.1.3" }

s.source_files = 'Classes/*.{h,m}', 'Classes/PublicHeaders/*'

s.public_header_files = 'Classes/PublicHeaders/*.h'

s.dependency = 'BSTiledImageView', :git => '[email protected]:boolalsofware/bstiledimageview.git'

s.frameworks = 'QuartzCore', 'AssetsLibrary', 'UIKit'

s.requires_arc = true

end

Le problème est avec la dépendance qui pointe vers un dépôt Bitbucket. J'ai obtenu que cela fonctionne avec les dépendances locales, mais pour une raison quelconque avec un dépôt git, cela ne fonctionne pas. Merci pour toute aide!

40
LunaCodeGirl

La directive dependency de la DSL podspec ne prend en charge que le nom de la dépendance et toute exigence de version facultative. L'option :git N'est pas prise en charge. Vous pouvez l'utiliser dans votre Podfile ou vous pouvez utiliser un référentiel privé personnalisé en plus du référentiel maître.

28
Fabio

J'ai rencontré le même problème et j'ai trouvé qu'il y avait ne autre façon de résoudre ce problème à l'ancienne (merci à @eliperkins).

Disons que vous avez un projet principal Downloader, qui utilise un projet plus petit Player, qui dépend du micro-projet FFMpegPlayer. Donc, ce que vous voulez, c'est avoir une dépendance dans votre Player.podspec, cela ressemblerait à ceci:

s.dependency = 'FFMpegPlayer', :git => '...FFMpegPlayer.git' or 
s.dependency = 'FFMpegPlayer', :local => '../FFMpegPlayer'
s.dependency = 'FFMpegPlayer', :path => '../FFMpegPlayer'
s.dependency = 'FFMpegPlayer', :podspec => '../FFMpegPlayer/FFMpegPlayer.podspec'

Mais tout cela ne fonctionnera pas avec la dernière version de Pods et il s'avère que :local fonctionnait comme un effet secondaire jusqu'à v0.17.1.

À partir de maintenant, vous pouvez spécifier une dépendance propre dans Player.podspec:

s.dependency = 'FFMpegPlayer' (its ok if that spec does not exist in public)

Dans le Podfile de Downloader (projet principal) il suffit de spécifier FFMpegPlayer avant Player pod:

pod 'FFMpegPlayer', :path => '../FFMpegPlayer' (micro project)
pod 'Player', :path => '../Player' (small project which depends on FFMpegPlayer)

Donc, fondamentalement, tous vos sous-pods sont maintenant répertoriés dans le Podfile principal, ce qui ne garantit aucun conflit entre les versions des pods.

74
Roman B.