package Ġorg . jetbrains . kotlin Ċ Ċ import Ġcom . google . gson . annotations . Expose Ċ import Ġorg . jetbrains . kotlin . kon an . target . Kon an Target Ċ import Ġorg . jetbrains . kotlin . kon an . target . Xcode Ċ import Ġkotlin . math . min Ċ Ċ /** Ċ Ġ* ĠComp ares Ġtwo Ġstrings Ġassuming Ġthat Ġboth Ġare Ġrepresenting Ġnumeric Ġversion Ġstrings . Ċ Ġ* ĠExamples Ġof Ġnumeric Ġversion Ġstrings : Ġ" 1 2 . 4 . 1 . 2 ", Ġ" 9 ", Ġ" 0 . 5 ". Ċ Ġ*/ Ċ private Ġfun Ġcompare Strings As Versions ( version 1 : ĠString , Ġversion 2 : ĠString ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġsplit Version 1 Ġ= Ġversion 1 . split ('. '). map Ġ{ Ġit . toInt () Ġ} ĊĠĠĠ Ġval Ġsplit Version 2 Ġ= Ġversion 2 . split ('. '). map Ġ{ Ġit . toInt () Ġ} ĊĠĠĠ Ġval Ġminimal Length Ġ= Ġmin ( split Version 1 . size , Ġsplit Version 2 . size ) ĊĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġminimal Length ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( split Version 1 [ index ] Ġ< Ġsplit Version 2 [ index ]) Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( split Version 1 [ index ] Ġ> Ġsplit Version 2 [ index ]) Ġreturn Ġ 1 ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġsplit Version 1 . size . compareTo ( split Version 2 . size ) Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġparsed Ġoutput Ġof Ġ` xc run Ġsim ctl Ġlist Ġruntime s Ġ- j `. Ċ Ġ*/ Ċ private Ġfun ĠXcode . get Simulator Runtime Descriptors (): ĠList < Simulator Runtime Descriptor > Ġ= Ġgson . fromJson ( simulator Runtime s , ĠList Runtime s Report :: class . java ). runtime s Ċ Ċ /** Ċ Ġ* ĠReturns Ġfirst Ġavailable Ġsimulator Ġruntime Ġfor Ġ[ target ] Ġwith Ġat Ġleast Ġ[ os Min Version ] ĠOS Ġversion . Ċ Ġ* Ġ*/ Ċ fun ĠXcode . get Latest Simulator Runtime For ( target : ĠKon an Target , Ġos Min Version : ĠString ): ĠSimulator Runtime Descriptor ? Ġ{ ĊĠĠĠ Ġval Ġos Name Ġ= Ġwhen Ġ( target ) Ġ{ ĊĠĠĠĠĠĠĠ ĠKon an Target . IOS _ X 6 4 Ġ-> Ġ" iOS " ĊĠĠĠĠĠĠĠ ĠKon an Target . WATCH OS _ X 6 4 , ĠKon an Target . WATCH OS _ X 8 6 Ġ-> Ġ" watch OS " ĊĠĠĠĠĠĠĠ ĠKon an Target . TV OS _ X 6 4 Ġ-> Ġ" tv OS " ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġsimulator Ġtarget : Ġ$ target ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġget Simulator Runtime Descriptors (). first OrNull Ġ{ ĊĠĠĠĠĠĠĠ Ġit . check Availability () Ġ&& Ġit . name . startsWith ( os Name ) Ġ&& Ġcompare Strings As Versions ( it . version , Ġos Min Version ) Ġ>= Ġ 0 ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠResult Ġof Ġ` xc run Ġsim ctl Ġlist Ġruntime s Ġ- j `. Ċ data Ġclass ĠList Runtime s Report ( ĊĠĠĠĠĠĠĠ Ġ@ Expose Ġval Ġruntime s : ĠList < Simulator Runtime Descriptor > Ċ ) Ċ Ċ data Ġclass ĠSimulator Runtime Descriptor ( ĊĠĠĠĠĠĠĠ Ġ@ Expose Ġval Ġversion : ĠString , ĊĠĠĠĠĠĠĠ Ġ// Ġbundle Path Ġfield Ġmay Ġnot Ġexist Ġin Ġthe Ġold ĠXcode Ġ( prior Ġto Ġ 1 0 . 3 ). ĊĠĠĠĠĠĠĠ Ġ@ Expose Ġval Ġbundle Path : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ@ Expose Ġval Ġis Available : ĠBoolean ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ@ Expose Ġval Ġavailability : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ@ Expose Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ Expose Ġval Ġidentifier : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ Expose Ġval Ġbuild version : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDifferent ĠXcode / macOS Ġcombinations Ġgive Ġdifferent Ġfields Ġthat Ġchecks ĊĠĠĠĠ Ġ* Ġruntime Ġavailability . ĠThis Ġmethod Ġis Ġan Ġ umb rella Ġfor Ġthese Ġfields . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcheck Availability (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Available Ġ== Ġtrue ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( availability ?. contains (" un available ") Ġ== Ġtrue ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ