/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . gradle . targets . native . tasks Ċ Ċ import Ġorg . gradle . api . Default Task Ċ import Ġorg . gradle . api . artifacts . repositories . Artifact Repository Ċ import Ġorg . gradle . api . file . File Collection Ċ import Ġorg . gradle . api . file . File Tree Ċ import Ġorg . gradle . api . file . RelativePath Ċ import Ġorg . gradle . api . logging . Logger Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . provider . Provider Ċ import Ġorg . gradle . api . tasks .* Ċ import Ġorg . gradle . api . tasks . Optional Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . cocoapods . Co co apods Extension .* Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . cocoapods . Co co apods Extension . Co co apods Dependency . Pod Location .* Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . cocoapods . cocoapods Build Dirs Ċ import Ġorg . jetbrains . kotlin . gradle . targets . native . cocoapods . Missing Co co apods Message Ċ import Ġorg . jetbrains . kotlin . gradle . targets . native . cocoapods . Missing Spec Repos Message Ċ import Ġorg . jetbrains . kotlin . gradle . tasks . Pod spec Task . Companion . retrieve Pods Ċ import Ġorg . jetbrains . kotlin . gradle . tasks . Pod spec Task . Companion . retrieve Spec Repos Ċ import Ġorg . jetbrains . kotlin . kon an . target . Family Ċ import Ġorg . jetbrains . kotlin . kon an . target . Host Manager Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . io . Reader Ċ import Ġjava . net . URI Ċ import Ġjava . util .* Ċ import Ġkotlin . concurrent . thread Ċ Ċ private Ġval ĠFamily . platform Literal : ĠString ĊĠĠĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFamily . OSX Ġ-> Ġ" macos " ĊĠĠĠĠĠĠĠ ĠFamily . IOS Ġ-> Ġ" ios " ĊĠĠĠĠĠĠĠ ĠFamily . TV OS Ġ-> Ġ" tv os " ĊĠĠĠĠĠĠĠ ĠFamily . WATCH OS Ġ-> Ġ" watch os " ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Bad Ġfamily Ġ${ this . name }") ĊĠĠĠ Ġ} Ċ Ċ val ĠCo co apods Dependency . scheme Name : ĠString ĊĠĠĠ Ġget () Ġ= Ġname . split ("/ ")[ 0 ] Ċ Ċ /** Ċ Ġ* ĠThe Ġtask Ġtakes Ġthe Ġpath Ġto Ġthe ĠPod file Ġand Ġcalls Ġ` pod Ġinstall ` Ċ Ġ* Ġto Ġobtain Ġsources Ġor Ġartifacts Ġfor Ġthe Ġdeclared Ġdependencies . Ċ Ġ* ĠThis Ġtask Ġis Ġa Ġpart Ġof ĠCocoa Pods Ġintegration Ġinfrastructure . Ċ Ġ*/ Ċ Ċ open Ġclass ĠCo co apods Task Ġ: ĠDefault Task () Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġonly If Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHost Manager . host Is Mac ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ open Ġclass ĠPod Install Task Ġ: ĠCo co apods Task () Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġonly If Ġ{ Ġpod file . isPresent Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Internal ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġframework Name : ĠProvider < String > ĊĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Path Sensitive ( Path Sensitivity . AB SOL UTE ) ĊĠĠĠ Ġ@ get : Input File ĊĠĠĠ Ġinternal Ġval Ġpod file Ġ= Ġproject . objects . property ( File :: class . java ) ĊĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Path Sensitive ( Path Sensitivity . AB SOL UTE ) ĊĠĠĠ Ġ@ get : Input File ĊĠĠĠ Ġinternal Ġval Ġpod spec Ġ= Ġproject . objects . property ( File :: class . java ) ĊĊĠĠĠ Ġ@ get : Optional ĊĠĠĠ Ġ@ get : Output Directory ĊĠĠĠ Ġinternal Ġval Ġpods Xcode Proj Dir Provider : ĠProvider < File >? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpod file . or Null ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . provider Ġ{ Ġit . parent File . resolve (" Pods "). resolve (" Pods . xcode proj ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġfun Ġdo Pod Install () Ġ{ ĊĠĠĠĠĠĠĠ Ġpod file . or Null ?. parent File ?. also Ġ{ Ġpod file Dir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpod Install Command Ġ= ĠlistOf (" pod ", Ġ" install ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Command ( pod Install Command , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorHandler Ġ= Ġ{ Ġreturn Code , Ġoutput , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCo co apods Error Handling Util . handle Pod Install Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpod Install Command . join ToString (" Ġ"), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframework Name . get ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Handler Ġ= Ġ{ Ġe : ĠIOException Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCo co apods Error Handling Util . handle ( e , Ġpod Install Command ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Configuration Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirectory ( pod file Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( pods Xcode Proj Dir Provider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( this Ġ!= Ġnull Ġ&& Ġget (). exists () Ġ&& Ġget (). isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġdirectory Ġ' Pods / Pods . xcode proj ' Ġwas Ġnot Ġcreated Ġas Ġa Ġresult Ġof Ġthe Ġ` pod Ġinstall ` Ġcall ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ abstract Ġclass ĠDownload Co co apods Task Ġ: ĠCo co apods Task () Ġ{ ĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġpod Name : ĠProvider < String > Ċ } Ċ Ċ open Ġclass ĠPod Download Url Task Ġ: ĠDownload Co co apods Task () Ġ{ ĊĊĠĠĠ Ġ@ get : Nested ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġpod Source : ĠProvider < Url > ĊĊĠĠĠ Ġ@ get : Internal ĊĠĠĠ Ġinternal Ġval Ġurl Dir Ġ= Ġproject . cocoapods Build Dirs . external Sources (" url ") ĊĊĊĠĠĠ Ġ@ get : Output Directory ĊĠĠĠ Ġinternal Ġval Ġpod Source Dir Ġ= Ġproject . provider Ġ{ ĊĠĠĠĠĠĠĠ Ġurl Dir . resolve ( pod Name . get ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Internal ĊĠĠĠ Ġinternal Ġval Ġpermitted File Extensions Ġ= ĠlistOf (" tar . gz ", Ġ" tar . bz 2 ", Ġ" tar . xz ", Ġ" tar ", Ġ" tgz ", Ġ" tb z ", Ġ" tx z ", Ġ" zip ", Ġ" gzip ", Ġ" jar ") ĊĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġfun Ġdownload () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpod Location Ġ= Ġpod Source . get () ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġpod Location . url . toString (). substring After Last ("/") ĊĠĠĠĠĠĠĠ Ġval Ġpermitted FileName Format Ġ= ĠRegex (" .* (\\ .) (${ per mitted File Extensions . join ToString ("| ") Ġ{ Ġit . replace (".", Ġ"\\ .") Ġ}}) ") ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġpermitted FileName Format . match Ent ire ( fileName )?. groups ?. last OrNull ()?. value ĊĠĠĠĠĠĠĠ Ġrequire ( extension Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ fileName Ġhas Ġan Ġunsupported Ġfile Ġextension ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOnly Ġthe Ġfollowing Ġextensions Ġare Ġsupported : Ġ${ per mitted File Extensions . join ToString (", Ġ" )} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠfileName Without Extension Ġ= ĠfileName . substring Before Last (" .$ extension ") ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= Ġsetup Repo ( pod Location ) ĊĠĠĠĠĠĠĠ Ġval Ġdependency Ġ= Ġcreate Dependency ( fileName Without Extension , Ġextension ) ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= Ġproject . configurations . det ached Configuration ( dependency ) ĊĠĠĠĠĠĠĠ Ġval Ġartifact Ġ= Ġconfiguration . single File ĊĠĠĠĠĠĠĠ Ġcopy Artifact To Url Dir ( artifact , Ġextension , Ġpod Location . flatten ) ĊĠĠĠĠĠĠĠ Ġproject . repositories . remove ( repo ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Repo ( pod Url : ĠCo co apods Dependency . Pod Location . Url ): ĠArtifact Repository Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproject . repositories . ivy Ġ{ Ġrepo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrepo Url Ġ= Ġpod Url . url . toString (). substring Before Last ("/") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepo . set Url ( repo Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepo . pattern Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . artifact ("[ artifact ].[ ext ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepo . metadata Sources Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . artifact () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepo . is Allow In secure Protocol Ġ= Ġpod Url . is Allow In secure Protocol ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Dependency ( fileName Without Extension : ĠString , Ġextension : ĠString ) Ġ= Ġproject . dependencies . create ( ĊĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto ĠfileName Without Extension , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" version " Ġto Ġ" 1 . 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ext " Ġto Ġextension ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġcopy Artifact To Url Dir ( artifact : ĠFile , Ġextension : ĠString , Ġflatten : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarchive Tree Ġ= Ġarchive Tree ( artifact . absolute Path , Ġextension ) ĊĠĠĠĠĠĠĠ Ġproject . copy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdestination Dir Ġ= Ġpod Source Dir . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . into ( destination Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . from ( archive Tree ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension Ġ== Ġ" jar ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . exclude (" META - INF /") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! flatten ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . each File Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . relative Path Ġ= ĠRelative Path ( true , Ġ* file . relative Path . segments . drop ( 1 ). to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . include Empty Dirs Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġarchive Tree ( path : ĠString , Ġextension : ĠString ): ĠFile Tree Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( extension Ġ== Ġ" zip " Ġ|| Ġextension Ġ== Ġ" jar ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . zip Tree ( path ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . tar Tree ( path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠPod Download Git Task Ġ: ĠDownload Co co apods Task () Ġ{ ĊĊĠĠĠ Ġ@ get : Nested ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġpod Source : ĠProvider < Git > ĊĊĠĠĠ Ġ@ get : Internal ĊĠĠĠ Ġinternal Ġval Ġgit Dir Ġ= Ġproject . cocoapods Build Dirs . external Sources (" git ") ĊĊĠĠĠ Ġ@ get : Output Directory ĊĠĠĠ Ġinternal Ġval Ġrepo Ġ= Ġproject . provider Ġ{ ĊĠĠĠĠĠĠĠ Ġgit Dir . resolve ( pod Name . get ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġfun Ġdownload () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepo . get (). delete Re cursively () ĊĠĠĠĠĠĠĠ Ġval Ġgit Ġ= Ġpod Source . get () ĊĠĠĠĠĠĠĠ Ġval Ġbranch Ġ= Ġgit . tag Ġ?: Ġgit . branch ĊĠĠĠĠĠĠĠ Ġval Ġcommit Ġ= Ġgit . commit ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġgit . url ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommit Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretrieve Commit ( url , Ġcommit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbranch Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone Sh allow ( url , Ġbranch ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone Head ( git ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalStateException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfallback ( git ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġretrieve Commit ( url : ĠURI , Ġcommit : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġproject . logger ĊĠĠĠĠĠĠĠ Ġval Ġinit Command Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" git ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" init " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= Ġrepo . get () ĊĠĠĠĠĠĠĠ Ġrepo . mkdir () ĊĠĠĠĠĠĠĠ Ġrun Command ( init Command , Ġlogger ) Ġ{ Ġdirectory ( repo ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfetch Command Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" git ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" fetch ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- depth ", Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ url ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommit ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġrun Command ( fetch Command , Ġlogger ) Ġ{ Ġdirectory ( repo ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcheckout Command Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" git ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" checkout ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" FETCH _ HEAD " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġrun Command ( checkout Command , Ġlogger ) Ġ{ Ġdirectory ( repo ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclone Sh allow ( url : ĠURI , Ġbranch : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshallow Clone Command Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" git ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" clone ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ url ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpod Name . get (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- branch ", Ġbranch , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- depth ", Ġ" 1 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġrun Command ( sh allow Clone Command , Ġproject . logger ) Ġ{ Ġdirectory ( git Dir ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclone Head ( pod spec Location : ĠGit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclone Head Command Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" git ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" clone ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ pod spec Location . url }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpod Name . get (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- depth ", Ġ" 1 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġrun Command ( clone Head Command , Ġproject . logger ) Ġ{ Ġdirectory ( git Dir ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfallback ( pod spec Location : ĠGit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġremoving Ġany Ġtraces Ġof Ġother Ġcommands ĊĠĠĠĠĠĠĠ Ġgit Dir . resolve ( pod Name . get ()). delete Re cursively () ĊĠĠĠĠĠĠĠ Ġval Ġclone All Command Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" git ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" clone ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ pod spec Location . url }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpod Name . get () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġrun Command ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclone All Command , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorHandler Ġ= Ġ{ Ġret Code , Ġerror , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCo co apods Error Handling Util . handle Pod Download Error ( pod Name . get (), Ġclone All Command . join ToString (" Ġ"), Ġret Code , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Configuration Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirectory ( git Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġrun Command ( ĊĠĠĠ Ġcommand : ĠList < String >, ĊĠĠĠ Ġlogger : ĠLogger , ĊĠĠĠ ĠerrorHandler : Ġ(( ret Code : ĠInt , Ġoutput : ĠString , Ġprocess : ĠProcess ) Ġ-> ĠString ? )? Ġ= Ġnull , ĊĠĠĠ Ġexception Handler : Ġ(( ex : ĠIOException ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġprocess Configuration : ĠProcess Builder . () Ġ-> ĠUnit Ġ= Ġ{ Ġ} Ċ ): ĠString Ġ{ ĊĠĠĠ Ġvar Ġprocess : ĠProcess ? Ġ= Ġnull ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess Ġ= ĠProcess Builder ( command ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . process Configuration () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( exception Handler Ġ!= Ġnull ) Ġexception Handler ( e ) Ġelse Ġthrow Ġe ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( process Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Failed Ġto Ġrun Ġcommand Ġ${ command . join ToString (" Ġ" )} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġinput Text Ġ= Ġ"" ĊĠĠĠ Ġvar Ġerror Text Ġ= Ġ"" ĊĊĠĠĠ Ġval Ġinput Thread Ġ= Ġthread Ġ{ ĊĠĠĠĠĠĠĠ Ġinput Text Ġ= Ġprocess . inputStream . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . reader (). read Text () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġerror Thread Ġ= Ġthread Ġ{ ĊĠĠĠĠĠĠĠ Ġerror Text Ġ= Ġprocess . error Stream . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . reader (). read Text () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinput Thread . join () ĊĠĠĠ Ġerror Thread . join () ĊĊĠĠĠ Ġval Ġret Code Ġ= Ġprocess . waitFor () ĊĠĠĠ Ġlogger . info ( ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Information Ġabout Ġ"${ command . join ToString (" Ġ") }" Ġcall : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ input Text } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcheck ( ret Code Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ ĠerrorHandler ?. invoke ( ret Code , Ġinput Text . if Blank Ġ{ Ġerror Text Ġ}, Ġprocess ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Executing Ġof Ġ'${ command . join ToString (" Ġ" )} ' Ġfailed Ġwith Ġcode Ġ$ ret Code Ġand Ġmessage : ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| $ input Text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| $ error Text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġinput Text Ċ } Ċ Ċ /** Ċ Ġ* ĠThe Ġtask Ġgenerates Ġa Ġsynthetic Ġproject Ġwith Ġall Ġcoco apods Ġdependencies Ċ Ġ*/ Ċ open Ġclass ĠPod Gen Task Ġ: ĠCo co apods Task () Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġonly If Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpods . get (). isNotEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Path Sensitive ( Path Sensitivity . AB SOL UTE ) ĊĠĠĠ Ġ@ get : Input File ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġpod spec : ĠProvider < File > ĊĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġpod Name : ĠProvider < String > ĊĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġuse Libraries : ĠProvider < Boolean > ĊĊĠĠĠ Ġ@ get : Internal ĊĠĠĠ Ġlateinit Ġvar Ġfamily : ĠFamily ĊĊĠĠĠ Ġ@ get : Nested ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġspec Repos : ĠProvider < Spec Repos > ĊĊĠĠĠ Ġ@ get : Nested ĊĠĠĠ Ġval Ġpods Ġ= Ġproject . objects . list Property ( Co co apods Dependency :: class . java ) ĊĊĠĠĠ Ġ@ get : Output Directory ĊĠĠĠ Ġinternal Ġval Ġpods Xcode Proj Dir : ĠProvider < File > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġproject . provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . cocoapods Build Dirs . synt hetic ( family ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. resolve (" Pods ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. resolve (" Pods . xcode proj ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġfun Ġgenerate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsynthetic Dir Ġ= Ġproject . cocoapods Build Dirs . synt hetic ( family ). apply Ġ{ Ġmkdir s () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġspec Repos Ġ= Ġspec Repos . get (). getAll () ĊĊĠĠĠĠĠĠĠ Ġval Ġproj Resource Ġ= Ġ"/ cocoapods / project . pb x proj " ĊĠĠĠĠĠĠĠ Ġval Ġproj Destination Ġ= Ġsynthetic Dir . resolve (" synt hetic . xcode proj "). resolve (" project . pb x proj ") ĊĊĠĠĠĠĠĠĠ Ġproj Destination . parent File . mkdir s () ĊĠĠĠĠĠĠĠ Ġproj Destination . output Stream (). use Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava Class . getResource AsStream ( proj Resource ). use Ġ{ Ġresource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource . copy To ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpod file Ġ= Ġsynthetic Dir . resolve (" Pod file ") ĊĠĠĠĠĠĠĠ Ġpod file . createNew File () ĊĊĠĠĠĠĠĠĠ Ġval Ġpod file Content Ġ= Ġget Pod file Content ( spec Repos , Ġfamily . platform Literal ) ĊĠĠĠĠĠĠĠ Ġpod file . write Text ( pod file Content ) ĊĠĠĠĠĠĠĠ Ġval Ġpod Install Command Ġ= ĠlistOf (" pod ", Ġ" install ") ĊĊĠĠĠĠĠĠĠ Ġrun Command ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpod Install Command , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception Handler Ġ= Ġ{ Ġe : ĠIOException Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCo co apods Error Handling Util . handle ( e , Ġpod Install Command ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorHandler Ġ= Ġ{ Ġret Code , Ġoutput , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCo co apods Error Handling Util . handle Pod Install Synt hetic Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpod Install Command . join ToString (" Ġ"), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfamily , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpod Name . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Configuration Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirectory ( synt hetic Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġpods Xc proj File Ġ= Ġpods Xcode Proj Dir . get () ĊĠĠĠĠĠĠĠ Ġcheck ( pods Xc proj File . exists () Ġ&& Ġpods Xc proj File . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Synt hetic Ġproject Ġ'${ pods Xc proj File . path }' Ġwas Ġnot Ġcreated ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Pod file Content ( spec Repos : ĠCollection < String >, Ġx code Target : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġbuild String Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġspec Repos . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Line (" source Ġ'$ it '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Line (" target Ġ'$ xcode Target ' Ġdo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( use Libraries . get (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Line ("\ t use _ frameworks !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpods . get (). map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" pod Ġ'${ it . name }' ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Type Ġ= Ġwhen Ġ( it . source ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPath Ġ-> Ġ" path " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUrl Ġ-> Ġ" path " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGit Ġ-> Ġ" git " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġit . source ?. getLocal Path ( project , Ġit . name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path Ġ!= Ġnull Ġ&& Ġpath Type Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (", Ġ: $ path Type Ġ=> Ġ'$ path '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ Ġappend Line ("\ t $ it ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Line (" end \ n ") ĊĠĠĠĠĠĠĠ Ġ} Ċ } ĊĊ Ċ open Ġclass ĠPod Setup Build Task Ġ: ĠCo co apods Task () Ġ{ ĊĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġlateinit Ġvar Ġframework Name : ĠProvider < String > ĊĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġsdk : ĠProvider < String > ĊĊĠĠĠ Ġ@ get : Nested ĊĠĠĠ Ġlateinit Ġvar Ġpod : ĠProvider < Co co apods Dependency > ĊĊĠĠĠ Ġ@ get : OutputFile ĊĠĠĠ Ġval Ġbuild Settings File : ĠProvider < File > Ġ= Ġproject . provider Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . cocoapods Build Dirs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build Settings ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. resolve ( get Build Setting FileName ( pod . get (), Ġsdk . get ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Internal ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġpods Xcode Proj Dir : ĠProvider < File > ĊĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġfun Ġsetup Build () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpods Xcode Proj Dir Ġ= Ġpods Xcode Proj Dir . get () ĊĊĠĠĠĠĠĠĠ Ġval Ġbuild Settings Re ceiving Command Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" xcode build ", Ġ"- show Build Settings ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"- project ", Ġpods Xcode Proj Dir . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"- scheme ", Ġpod . get (). scheme Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"- sdk ", Ġsdk . get () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Text Ġ= Ġrun Command ( build Settings Re ceiving Command , Ġproject . logger ) Ġ{ Ġdirectory ( pods Xcode Proj Dir . parent File ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbuild Settings Properties Ġ= ĠPod Build Settings Properties . read Settings From Reader ( output Text . reader ()) ĊĠĠĠĠĠĠĠ Ġbuild Settings File . get (). let Ġ{ Ġb sf Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Settings Properties . write Settings ( bs f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġget Build Setting FileName ( pod : ĠCo co apods Dependency , Ġsdk : ĠString ): ĠString Ġ= ĊĠĠĠ Ġ" build - settings -$ sdk -${ pod . scheme Name }. properties " Ċ Ċ /** Ċ Ġ* ĠThe Ġtask Ġcompiles Ġexternal Ġco coa Ġpods Ġsources . Ċ Ġ*/ Ċ open Ġclass ĠPod Build Task Ġ: ĠCo co apods Task () Ġ{ ĊĊĠĠĠ Ġ@ get : Path Sensitive ( Path Sensitivity . AB SOL UTE ) ĊĠĠĠ Ġ@ get : Input File ĊĠĠĠ Ġlateinit Ġvar Ġbuild Settings File : ĠProvider < File > ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĊĠĠĠ Ġ@ get : Nested ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġpod : ĠProvider < Co co apods Dependency > ĊĊĠĠĠ Ġ@ get : Path Sensitive ( Path Sensitivity . AB SOL UTE ) ĊĠĠĠ Ġ@ get : Ignore Empty Directories ĊĠĠĠ Ġ@ get : Input Files ĊĠĠĠ Ġinternal Ġval Ġsrc Dir : ĠFile Tree ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġproject . file Tree ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Settings File . map Ġ{ ĠPod Build Settings Properties . read Settings From Reader ( it . reader ()). pods Target Src Root Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ get : Internal ĊĠĠĠ Ġinternal Ġvar Ġbuild Dir : ĠProvider < File > Ġ= Ġproject . provider Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . file ( Pod Build Settings Properties . read Settings From Reader ( build Settings File . get (). reader ()). build Dir ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġsdk : ĠProvider < String > ĊĊĠĠĠ Ġ@ get : Output Files ĊĠĠĠ Ġinternal Ġval Ġbuild Result : ĠProvider < File Collection >? Ġ= Ġproject . provider Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . file Tree ( build Dir . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . include (" ** /${ pod . get (). scheme Name }. */ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . include (" ** /${ pod . get (). scheme Name }/ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Internal ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġpods Xcode Proj Dir : ĠProvider < File > ĊĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġfun Ġbuild Dependencies () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpod Build Settings Ġ= ĠPod Build Settings Properties . read Settings From Reader ( build Settings File . get (). reader ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġpods Xcode Proj Dir Ġ= Ġpods Xcode Proj Dir . get () ĊĊĠĠĠĠĠĠĠ Ġval Ġpod Xcode Build Command Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" xcode build ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"- project ", Ġpods Xcode Proj Dir . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"- scheme ", Ġpod . get (). scheme Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"- sdk ", Ġsdk . get (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"- configuration ", Ġpod Build Settings . configuration ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrun Command ( pod Xcode Build Command , Ġproject . logger ) Ġ{ Ġdirectory ( pods Xcode Proj Dir . parent File ) Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ data Ġclass ĠPod Build Settings Properties ( ĊĠĠĠ Ġinternal Ġval Ġbuild Dir : ĠString , ĊĠĠĠ Ġinternal Ġval Ġconfiguration : ĠString , ĊĠĠĠ Ġval Ġconfiguration Build Dir : ĠString , ĊĠĠĠ Ġinternal Ġval Ġpods Target Src Root : ĠString , ĊĠĠĠ Ġinternal Ġval Ġc flags : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġinternal Ġval Ġheader Paths : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġinternal Ġval Ġpublic Headers FolderPath : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġinternal Ġval Ġframework Paths : ĠString ? Ġ= Ġnull Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġwrite Settings ( ĊĠĠĠĠĠĠĠ Ġbuild Settings File : ĠFile ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Settings File . parent File . mkdir s () ĊĠĠĠĠĠĠĠ Ġbuild Settings File . delete () ĊĠĠĠĠĠĠĠ Ġbuild Settings File . createNew File () ĊĊĠĠĠĠĠĠĠ Ġcheck ( build Settings File . exists ()) Ġ{ Ġ" Unable Ġto Ġcreate Ġfile Ġ${ build Settings File . path } !" Ġ} ĊĊĠĠĠĠĠĠĠ Ġwith ( build Settings File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text ("$ BUILD _ DIR =$ build Dir \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text ("$ CONFIGURATION =$ configuration \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text ("$ CONFIGURATION _ BUILD _ DIR =$ configuration Build Dir \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Text ("$ PO DS _ TARGET _ SRC ROOT =$ pods Target Src Root \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc flags ?. let Ġ{ Ġappend Text ("$ OTHER _ CFLAGS =$ it \ n ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Paths ?. let Ġ{ Ġappend Text ("$ HEADER _ SEARCH _ PATHS =$ it \ n ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Headers FolderPath ?. let Ġ{ Ġappend Text ("$ PUBLIC _ HEADERS _ FOLDER _ PATH =$ it \ n ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframework Paths ?. let Ġ{ Ġappend Text ("$ FRAME WORK _ SEARCH _ PATHS =$ it ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠBUILD _ DIR Ġ= Ġ" BUILD _ DIR " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCONFIG URATION Ġ= Ġ" CONFIGURATION " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCONFIG URATION _ BUILD _ DIR Ġ= Ġ" CONFIGURATION _ BUILD _ DIR " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPO DS _ TARGET _ SRC ROOT Ġ= Ġ" PO DS _ TARGET _ SRC ROOT " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOTHER _ CFLAGS Ġ= Ġ" OTHER _ CFLAGS " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠHEADER _ SEARCH _ PATHS Ġ= Ġ" HEADER _ SEARCH _ PATHS " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPUBLIC _ HEADERS _ FOLDER _ PATH Ġ= Ġ" PUBLIC _ HEADERS _ FOLDER _ PATH " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFRAME WORK _ SEARCH _ PATHS Ġ= Ġ" FRAME WORK _ SEARCH _ PATHS " ĊĊĠĠĠĠĠĠĠ Ġfun Ġread Settings From Reader ( reader : ĠReader ): ĠPod Build Settings Properties Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Properties ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPod Build Settings Properties ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Property ( BUILD _ DIR ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Property ( CONFIGURATION ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Property ( CONFIGURATION _ BUILD _ DIR ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Property ( PO DS _ TARGET _ SRC ROOT ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Nullable Property ( OTHER _ CFLAGS ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Nullable Property ( HEADER _ SEARCH _ PATHS ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Nullable Property ( PUBLIC _ HEADERS _ FOLDER _ PATH ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Nullable Property ( FRAME WORK _ SEARCH _ PATHS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠProperties . read Property ( propertyName : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Nullable Property ( propertyName ) Ġ?: Ġerror ("$ propertyName Ġproperty Ġis Ġabsent ") ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠProperties . read Nullable Property ( propertyName : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty ( propertyName ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġobject ĠCo co apods Error Handling Util Ġ{ ĊĠĠĠ Ġfun Ġhandle ( e : ĠIOException , Ġcommand : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( e . message ?. contains (" No Ġsuch Ġfile Ġor Ġdirectory ") Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ""" ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ' ${ command . take ( 2 ). join ToString (" Ġ" )} ' Ġcommand Ġfailed Ġwith Ġan Ġexception : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ${ e . message } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠFull Ġcommand : Ġ${ command . join ToString (" Ġ" )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠPossible Ġreason : ĠCocoa Pods Ġis Ġnot Ġinstalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠPlease Ġcheck Ġthat ĠCocoa Pods Ġv 1 . 1 0 Ġor Ġabove Ġis Ġinstalled . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠTo Ġcheck ĠCocoa Pods Ġversion Ġtype Ġ' pod Ġ-- version ' Ġin Ġthe Ġterminal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠTo Ġinstall ĠCocoa Pods Ġexecute Ġ' sudo Ġgem Ġinstall Ġcoco apods ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( message ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Pod Install Error ( command : ĠString , Ġret Code : ĠInt , Ġerror : ĠString , Ġproject : ĠProject , Ġframework Name : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġspec Repos Messages Ġ= Ġretrieve Spec Repos ( project )?. let Ġ{ ĠMissing Spec Repos Message ( it ). missing Message Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcoco apods Messages Ġ= Ġretrieve Pods ( project )?. map Ġ{ ĠMissing Co co apods Message ( it , Ġproject ). missing Message Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"' pod Ġinstall ' Ġcommand Ġfailed Ġwith Ġcode Ġ$ ret Code .", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Full Ġcommand : Ġ$ command ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Error Ġmessage :", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror . lines (). filter Ġ{ Ġit . isNotBlank () Ġ}. join ToString ("\ n "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspec Repos Messages ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠPlease , Ġcheck Ġthat Ġpod file Ġcontains Ġfollowing Ġlines Ġin Ġheader : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ$ it ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoco apods Messages ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠ ĠPlease , Ġcheck Ġthat Ġeach Ġtarget Ġde pended Ġon Ġ$ framework Name Ġcontains Ġfollowing Ġdependencies : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠ Ġ${ it . join ToString ("\ n ")} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ). join ToString ("\ n ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Pod Install Synt hetic Error ( command : ĠString , Ġret Code : ĠInt , Ġerror : ĠString , Ġfamily : ĠFamily , Ġpod Name : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmessage Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ' pod Ġinstall ' Ġcommand Ġon Ġthe Ġsynthetic Ġproject Ġfailed Ġwith Ġreturn Ġcode : Ġ$ ret Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠFull Ġcommand : Ġ$ command ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠError : Ġ${ error . lines (). filter Ġ{ Ġit . contains ("[ ! ]") Ġ}. join ToString ("\ n ")} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror . contains (" deployment Ġtarget ") Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror . contains (" no Ġplatform Ġwas Ġspecified ") Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror . contains ( Regex (" The Ġplatform Ġof Ġthe Ġtarget Ġ. + Ġis Ġnot Ġcompatible Ġwith Ġ`$ pod Name ")) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ+= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠPossible Ġreason : Ġ${ family . name . toLowerCase ()} Ġdeployment Ġtarget Ġis Ġnot Ġconfigured ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠConfigure Ġdeployment _ target Ġfor ĠALL Ġtargets Ġas Ġfollows : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġcoco apods Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠ Ġ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠ Ġ${ family . name . toLowerCase ()}. deployment Target Ġ= Ġ" ..." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠ Ġ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmessage ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror . contains (" Unable Ġto Ġadd Ġa Ġsource Ġwith Ġurl ") Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror . contains (" Couldn 't Ġdetermine Ġrepo Ġname Ġfor ĠURL ") Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror . contains (" Unable Ġto Ġfind Ġa Ġspecification ") ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ+= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠPossible Ġreason : Ġspec Ġrepos Ġare Ġnot Ġconfigured Ġcorrectly . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠEnsure Ġthat Ġspec Ġrepos Ġare Ġcorrectly Ġconfigured Ġfor Ġall Ġprivate Ġpod Ġdependencies : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġcoco apods Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠ Ġspec Repos Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl ("< private Ġspec Ġrepo Ġurl >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmessage ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Pod Download Error ( pod Name : ĠString , Ġcommand : ĠString , Ġret Code : ĠInt , Ġerror : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ' git Ġclone ' Ġcommand Ġfailed Ġwith Ġreturn Ġcode : Ġ$ ret Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ ĠFull Ġcommand : Ġ$ command ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ ĠError : Ġ${ error . lines (). filter Ġ{ Ġit . contains (" fatal ", Ġtrue ) Ġ}. join ToString ("\ n ")} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ ĠPossible Ġreason : Ġsource Ġof Ġa Ġpod Ġ'$ pod Name ' Ġis Ġinvalid Ġor Ġin accessible ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠ Ġ} Ċ } Ċ