From 241b56bcc755471561e542299b92e396f417d65b Mon Sep 17 00:00:00 2001 From: John O'Reilly Date: Sat, 21 Jan 2023 14:28:45 +0000 Subject: [PATCH] Kotlin 1.8 --- README.md | 2 + .../wordmaster/androidApp/MainActivity.kt | 2 + build.gradle.kts | 3 +- buildSrc/src/main/java/Dependencies.kt | 10 +- compose-desktop/words.txt | 2315 +++++++++++++++++ gradle.properties | 2 + gradle/wrapper/gradle-wrapper.properties | 6 +- iosApp/iosApp.xcodeproj/project.pbxproj | 26 +- .../xcshareddata/swiftpm/Package.resolved | 42 +- iosApp/iosApp/ViewModel.swift | 4 +- shared/build.gradle.kts | 8 +- .../wordmaster/shared/WordMasterService.kt | 11 + 12 files changed, 2383 insertions(+), 48 deletions(-) create mode 100644 compose-desktop/words.txt diff --git a/README.md b/README.md index 96113dd..447196c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # WordMasterKMP +![kotlin-version](https://img.shields.io/badge/kotlin-1.8.0-orange) + Kotlin Multiplatform sample heavily inspired by [Wordle](https://www.powerlanguage.co.uk/wordle/) game and also [Word Master](https://github.com/octokatherine/word-master) and [wordle-solver](https://github.com/dlew/wordle-solver) samples. The main game logic/state is included in shared KMP code with basic UI then in following clients - iOS (SwiftUI) - Android (Jetpack Compose) diff --git a/androidApp/src/main/java/dev/johnoreilly/wordmaster/androidApp/MainActivity.kt b/androidApp/src/main/java/dev/johnoreilly/wordmaster/androidApp/MainActivity.kt index ebe5002..3d405a3 100644 --- a/androidApp/src/main/java/dev/johnoreilly/wordmaster/androidApp/MainActivity.kt +++ b/androidApp/src/main/java/dev/johnoreilly/wordmaster/androidApp/MainActivity.kt @@ -1,5 +1,6 @@ package dev.johnoreilly.wordmaster.androidApp +import android.annotation.SuppressLint import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent @@ -44,6 +45,7 @@ class MainActivity : ComponentActivity() { } } +@SuppressLint("UnusedMaterialScaffoldPaddingParameter") @Composable fun MainLayout() { Scaffold( diff --git a/build.gradle.kts b/build.gradle.kts index 04ec598..1f37d89 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,8 @@ buildscript { dependencies { classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlinVersion}") - classpath("com.android.tools.build:gradle:7.1.3") + classpath("com.android.tools.build:gradle:7.4.0") + classpath("com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:1.8.0-1.0.8") classpath("com.rickclephas.kmp:kmp-nativecoroutines-gradle-plugin:${Versions.kmpNativeCoroutines}") } } diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index c68e7d0..51a588d 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -1,16 +1,16 @@ object Versions { - const val kotlinVersion = "1.7.20" + const val kotlinVersion = "1.8.0" const val kotlinCoroutines = "1.6.4" - const val compose = "1.3.0-rc01" - const val composeCompiler = "1.3.2" - const val composeDesktopWeb = "1.2.0" + const val compose = "1.4.0-alpha03" + const val composeCompiler = "1.4.0" + const val composeDesktopWeb = "1.3.0-rc05" const val navCompose = "2.5.2" const val accompanist = "0.26.2-beta" const val okio = "3.0.0" - const val kmpNativeCoroutines = "0.13.1" + const val kmpNativeCoroutines = "1.0.0-ALPHA-4" const val junit = "4.13" } diff --git a/compose-desktop/words.txt b/compose-desktop/words.txt new file mode 100644 index 0000000..5083808 --- /dev/null +++ b/compose-desktop/words.txt @@ -0,0 +1,2315 @@ +aback +abase +abate +abbey +abbot +abhor +abide +abled +abode +abort +about +above +abuse +abyss +acorn +acrid +actor +acute +adage +adapt +adept +admin +admit +adobe +adopt +adore +adorn +adult +affix +afire +afoot +afoul +after +again +agape +agate +agent +agile +aging +aglow +agony +agora +agree +ahead +aider +aisle +alarm +album +alert +algae +alibi +alien +align +alike +alive +allay +alley +allot +allow +alloy +aloft +alone +along +aloof +aloud +alpha +altar +alter +amass +amaze +amber +amble +amend +amiss +amity +among +ample +amply +amuse +angel +anger +angle +angry +angst +anime +ankle +annex +annoy +annul +anode +antic +anvil +aorta +apart +aphid +aping +apnea +apple +apply +apron +aptly +arbor +ardor +arena +argue +arise +armor +aroma +arose +array +arrow +arson +artsy +ascot +ashen +aside +askew +assay +asset +atoll +atone +attic +audio +audit +augur +aunty +avail +avert +avian +avoid +await +awake +award +aware +awash +awful +awoke +axial +axiom +axion +azure +bacon +badge +badly +bagel +baggy +baker +baler +balmy +banal +banjo +barge +baron +basal +basic +basil +basin +basis +baste +batch +bathe +baton +batty +bawdy +bayou +beach +beady +beard +beast +beech +beefy +befit +began +begat +beget +begin +begun +being +belch +belie +belle +belly +below +bench +beret +berry +berth +beset +betel +bevel +bezel +bible +bicep +biddy +bigot +bilge +billy +binge +bingo +biome +birch +birth +bison +bitty +black +blade +blame +bland +blank +blare +blast +blaze +bleak +bleat +bleed +bleep +blend +bless +blimp +blind +blink +bliss +blitz +bloat +block +bloke +blond +blood +bloom +blown +bluer +bluff +blunt +blurb +blurt +blush +board +boast +bobby +boney +bongo +bonus +booby +boost +booth +booty +booze +boozy +borax +borne +bosom +bossy +botch +bough +boule +bound +bowel +boxer +brace +braid +brain +brake +brand +brash +brass +brave +bravo +brawl +brawn +bread +break +breed +briar +bribe +brick +bride +brief +brine +bring +brink +briny +brisk +broad +broil +broke +brood +brook +broom +broth +brown +brunt +brush +brute +buddy +budge +buggy +bugle +build +built +bulge +bulky +bully +bunch +bunny +burly +burnt +burst +bused +bushy +butch +butte +buxom +buyer +bylaw +cabal +cabby +cabin +cable +cacao +cache +cacti +caddy +cadet +cagey +cairn +camel +cameo +canal +candy +canny +canoe +canon +caper +caput +carat +cargo +carol +carry +carve +caste +catch +cater +catty +caulk +cause +cavil +cease +cedar +cello +chafe +chaff +chain +chair +chalk +champ +chant +chaos +chard +charm +chart +chase +chasm +cheap +cheat +check +cheek +cheer +chess +chest +chick +chide +chief +child +chili +chill +chime +china +chirp +chock +choir +choke +chord +chore +chose +chuck +chump +chunk +churn +chute +cider +cigar +cinch +circa +civic +civil +clack +claim +clamp +clang +clank +clash +clasp +class +clean +clear +cleat +cleft +clerk +click +cliff +climb +cling +clink +cloak +clock +clone +close +cloth +cloud +clout +clove +clown +cluck +clued +clump +clung +coach +coast +cobra +cocoa +colon +color +comet +comfy +comic +comma +conch +condo +conic +copse +coral +corer +corny +couch +cough +could +count +coupe +court +coven +cover +covet +covey +cower +coyly +crack +craft +cramp +crane +crank +crash +crass +crate +crave +crawl +craze +crazy +creak +cream +credo +creed +creek +creep +creme +crepe +crept +cress +crest +crick +cried +crier +crime +crimp +crisp +croak +crock +crone +crony +crook +cross +croup +crowd +crown +crude +cruel +crumb +crump +crush +crust +crypt +cubic +cumin +curio +curly +curry +curse +curve +curvy +cutie +cyber +cycle +cynic +daddy +daily +dairy +daisy +dally +dance +dandy +datum +daunt +dealt +death +debar +debit +debug +debut +decal +decay +decor +decoy +decry +defer +deign +deity +delay +delta +delve +demon +demur +denim +dense +depot +depth +derby +deter +detox +deuce +devil +diary +dicey +digit +dilly +dimly +diner +dingo +dingy +diode +dirge +dirty +disco +ditch +ditto +ditty +diver +dizzy +dodge +dodgy +dogma +doing +dolly +donor +donut +dopey +doubt +dough +dowdy +dowel +downy +dowry +dozen +draft +drain +drake +drama +drank +drape +drawl +drawn +dread +dream +dress +dried +drier +drift +drill +drink +drive +droit +droll +drone +drool +droop +dross +drove +drown +druid +drunk +dryer +dryly +duchy +dully +dummy +dumpy +dunce +dusky +dusty +dutch +duvet +dwarf +dwell +dwelt +dying +eager +eagle +early +earth +easel +eaten +eater +ebony +eclat +edict +edify +eerie +egret +eight +eject +eking +elate +elbow +elder +elect +elegy +elfin +elide +elite +elope +elude +email +embed +ember +emcee +empty +enact +endow +enema +enemy +enjoy +ennui +ensue +enter +entry +envoy +epoch +epoxy +equal +equip +erase +erect +erode +error +erupt +essay +ester +ether +ethic +ethos +etude +evade +event +every +evict +evoke +exact +exalt +excel +exert +exile +exist +expel +extol +extra +exult +eying +fable +facet +faint +fairy +faith +false +fancy +fanny +farce +fatal +fatty +fault +fauna +favor +feast +fecal +feign +fella +felon +femme +femur +fence +feral +ferry +fetal +fetch +fetid +fetus +fever +fewer +fiber +fibre +ficus +field +fiend +fiery +fifth +fifty +fight +filer +filet +filly +filmy +filth +final +finch +finer +first +fishy +fixer +fizzy +fjord +flack +flail +flair +flake +flaky +flame +flank +flare +flash +flask +fleck +fleet +flesh +flick +flier +fling +flint +flirt +float +flock +flood +floor +flora +floss +flour +flout +flown +fluff +fluid +fluke +flume +flung +flunk +flush +flute +flyer +foamy +focal +focus +foggy +foist +folio +folly +foray +force +forge +forgo +forte +forth +forty +forum +found +foyer +frail +frame +frank +fraud +freak +freed +freer +fresh +friar +fried +frill +frisk +fritz +frock +frond +front +frost +froth +frown +froze +fruit +fudge +fugue +fully +fungi +funky +funny +furor +furry +fussy +fuzzy +gaffe +gaily +gamer +gamma +gamut +gassy +gaudy +gauge +gaunt +gauze +gavel +gawky +gayer +gayly +gazer +gecko +geeky +geese +genie +genre +ghost +ghoul +giant +giddy +gipsy +girly +girth +given +giver +glade +gland +glare +glass +glaze +gleam +glean +glide +glint +gloat +globe +gloom +glory +gloss +glove +glyph +gnash +gnome +godly +going +golem +golly +gonad +goner +goody +gooey +goofy +goose +gorge +gouge +gourd +grace +grade +graft +grail +grain +grand +grant +grape +graph +grasp +grass +grate +grave +gravy +graze +great +greed +green +greet +grief +grill +grime +grimy +grind +gripe +groan +groin +groom +grope +gross +group +grout +grove +growl +grown +gruel +gruff +grunt +guard +guava +guess +guest +guide +guild +guile +guilt +guise +gulch +gully +gumbo +gummy +guppy +gusto +gusty +gypsy +habit +hairy +halve +handy +happy +hardy +harem +harpy +harry +harsh +haste +hasty +hatch +hater +haunt +haute +haven +havoc +hazel +heady +heard +heart +heath +heave +heavy +hedge +hefty +heist +helix +hello +hence +heron +hilly +hinge +hippo +hippy +hitch +hoard +hobby +hoist +holly +homer +honey +honor +horde +horny +horse +hotel +hotly +hound +house +hovel +hover +howdy +human +humid +humor +humph +humus +hunch +hunky +hurry +husky +hussy +hutch +hydro +hyena +hymen +hyper +icily +icing +ideal +idiom +idiot +idler +idyll +igloo +iliac +image +imbue +impel +imply +inane +inbox +incur +index +inept +inert +infer +ingot +inlay +inlet +inner +input +inter +intro +ionic +irate +irony +islet +issue +itchy +ivory +jaunt +jazzy +jelly +jerky +jetty +jewel +jiffy +joint +joist +joker +jolly +joust +judge +juice +juicy +jumbo +jumpy +junta +junto +juror +kappa +karma +kayak +kebab +khaki +kinky +kiosk +kitty +knack +knave +knead +kneed +kneel +knelt +knife +knock +knoll +known +koala +krill +label +labor +laden +ladle +lager +lance +lanky +lapel +lapse +large +larva +lasso +latch +later +lathe +latte +laugh +layer +leach +leafy +leaky +leant +leapt +learn +lease +leash +least +leave +ledge +leech +leery +lefty +legal +leggy +lemon +lemur +leper +level +lever +libel +liege +light +liken +lilac +limbo +limit +linen +liner +lingo +lipid +lithe +liver +livid +llama +loamy +loath +lobby +local +locus +lodge +lofty +logic +login +loopy +loose +lorry +loser +louse +lousy +lover +lower +lowly +loyal +lucid +lucky +lumen +lumpy +lunar +lunch +lunge +lupus +lurch +lurid +lusty +lying +lymph +lynch +lyric +macaw +macho +macro +madam +madly +mafia +magic +magma +maize +major +maker +mambo +mamma +mammy +manga +mange +mango +mangy +mania +manic +manly +manor +maple +march +marry +marsh +mason +masse +match +matey +mauve +maxim +maybe +mayor +mealy +meant +meaty +mecca +medal +media +medic +melee +melon +mercy +merge +merit +merry +metal +meter +metro +micro +midge +midst +might +milky +mimic +mince +miner +minim +minor +minty +minus +mirth +miser +missy +mocha +modal +model +modem +mogul +moist +molar +moldy +money +month +moody +moose +moral +moron +morph +mossy +motel +motif +motor +motto +moult +mound +mount +mourn +mouse +mouth +mover +movie +mower +mucky +mucus +muddy +mulch +mummy +munch +mural +murky +mushy +music +musky +musty +myrrh +nadir +naive +nanny +nasal +nasty +natal +naval +navel +needy +neigh +nerdy +nerve +never +newer +newly +nicer +niche +niece +night +ninja +ninny +ninth +noble +nobly +noise +noisy +nomad +noose +north +nosey +notch +novel +nudge +nurse +nutty +nylon +nymph +oaken +obese +occur +ocean +octal +octet +odder +oddly +offal +offer +often +olden +older +olive +ombre +omega +onion +onset +opera +opine +opium +optic +orbit +order +organ +other +otter +ought +ounce +outdo +outer +outgo +ovary +ovate +overt +ovine +ovoid +owing +owner +oxide +ozone +paddy +pagan +paint +paler +palsy +panel +panic +pansy +papal +paper +parer +parka +parry +parse +party +pasta +paste +pasty +patch +patio +patsy +patty +pause +payee +payer +peace +peach +pearl +pecan +pedal +penal +pence +penne +penny +perch +peril +perky +pesky +pesto +petal +petty +phase +phone +phony +photo +piano +picky +piece +piety +piggy +pilot +pinch +piney +pinky +pinto +piper +pique +pitch +pithy +pivot +pixel +pixie +pizza +place +plaid +plain +plait +plane +plank +plant +plate +plaza +plead +pleat +plied +plier +pluck +plumb +plume +plump +plunk +plush +poesy +point +poise +poker +polar +polka +polyp +pooch +poppy +porch +poser +posit +posse +pouch +pound +pouty +power +prank +prawn +preen +press +price +prick +pride +pried +prime +primo +print +prior +prism +privy +prize +probe +prone +prong +proof +prose +proud +prove +prowl +proxy +prude +prune +psalm +pubic +pudgy +puffy +pulpy +pulse +punch +pupal +pupil +puppy +puree +purer +purge +purse +pushy +putty +pygmy +quack +quail +quake +qualm +quark +quart +quash +quasi +queen +queer +quell +query +quest +queue +quick +quiet +quill +quilt +quirk +quite +quota +quote +quoth +rabbi +rabid +racer +radar +radii +radio +rainy +raise +rajah +rally +ralph +ramen +ranch +randy +range +rapid +rarer +raspy +ratio +ratty +raven +rayon +razor +reach +react +ready +realm +rearm +rebar +rebel +rebus +rebut +recap +recur +recut +reedy +refer +refit +regal +rehab +reign +relax +relay +relic +remit +renal +renew +repay +repel +reply +rerun +reset +resin +retch +retro +retry +reuse +revel +revue +rhino +rhyme +rider +ridge +rifle +right +rigid +rigor +rinse +ripen +riper +risen +riser +risky +rival +river +rivet +roach +roast +robin +robot +rocky +rodeo +roger +rogue +roomy +roost +rotor +rouge +rough +round +rouse +route +rover +rowdy +rower +royal +ruddy +ruder +rugby +ruler +rumba +rumor +rupee +rural +rusty +sadly +safer +saint +salad +sally +salon +salsa +salty +salve +salvo +sandy +saner +sappy +sassy +satin +satyr +sauce +saucy +sauna +saute +savor +savoy +savvy +scald +scale +scalp +scaly +scamp +scant +scare +scarf +scary +scene +scent +scion +scoff +scold +scone +scoop +scope +score +scorn +scour +scout +scowl +scram +scrap +scree +screw +scrub +scrum +scuba +sedan +seedy +segue +seize +semen +sense +sepia +serif +serum +serve +setup +seven +sever +sewer +shack +shade +shady +shaft +shake +shaky +shale +shall +shalt +shame +shank +shape +shard +share +shark +sharp +shave +shawl +shear +sheen +sheep +sheer +sheet +sheik +shelf +shell +shied +shift +shine +shiny +shire +shirk +shirt +shoal +shock +shone +shook +shoot +shore +shorn +short +shout +shove +shown +showy +shrew +shrub +shrug +shuck +shunt +shush +shyly +siege +sieve +sight +sigma +silky +silly +since +sinew +singe +siren +sissy +sixth +sixty +skate +skier +skiff +skill +skimp +skirt +skulk +skull +skunk +slack +slain +slang +slant +slash +slate +slave +sleek +sleep +sleet +slept +slice +slick +slide +slime +slimy +sling +slink +sloop +slope +slosh +sloth +slump +slung +slunk +slurp +slush +slyly +smack +small +smart +smash +smear +smell +smelt +smile +smirk +smite +smith +smock +smoke +smoky +smote +snack +snail +snake +snaky +snare +snarl +sneak +sneer +snide +sniff +snipe +snoop +snore +snort +snout +snowy +snuck +snuff +soapy +sober +soggy +solar +solid +solve +sonar +sonic +sooth +sooty +sorry +sound +south +sower +space +spade +spank +spare +spark +spasm +spawn +speak +spear +speck +speed +spell +spelt +spend +spent +sperm +spice +spicy +spied +spiel +spike +spiky +spill +spilt +spine +spiny +spire +spite +splat +split +spoil +spoke +spoof +spook +spool +spoon +spore +sport +spout +spray +spree +sprig +spunk +spurn +spurt +squad +squat +squib +stack +staff +stage +staid +stain +stair +stake +stale +stalk +stall +stamp +stand +stank +stare +stark +start +stash +state +stave +stead +steak +steal +steam +steed +steel +steep +steer +stein +stern +stick +stiff +still +stilt +sting +stink +stint +stock +stoic +stoke +stole +stomp +stone +stony +stood +stool +stoop +store +stork +storm +story +stout +stove +strap +straw +stray +strip +strut +stuck +study +stuff +stump +stung +stunk +stunt +style +suave +sugar +suing +suite +sulky +sully +sumac +sunny +super +surer +surge +surly +sushi +swami +swamp +swarm +swash +swath +swear +sweat +sweep +sweet +swell +swept +swift +swill +swine +swing +swirl +swish +swoon +swoop +sword +swore +sworn +swung +synod +syrup +tabby +table +taboo +tacit +tacky +taffy +taint +taken +taker +tally +talon +tamer +tango +tangy +taper +tapir +tardy +tarot +taste +tasty +tatty +taunt +tawny +teach +teary +tease +teddy +teeth +tempo +tenet +tenor +tense +tenth +tepee +tepid +terra +terse +testy +thank +theft +their +theme +there +these +theta +thick +thief +thigh +thing +think +third +thong +thorn +those +three +threw +throb +throw +thrum +thumb +thump +thyme +tiara +tibia +tidal +tiger +tight +tilde +timer +timid +tipsy +titan +tithe +title +toast +today +toddy +token +tonal +tonga +tonic +tooth +topaz +topic +torch +torso +torus +total +totem +touch +tough +towel +tower +toxic +toxin +trace +track +tract +trade +trail +train +trait +tramp +trash +trawl +tread +treat +trend +triad +trial +tribe +trice +trick +tried +tripe +trite +troll +troop +trope +trout +trove +truce +truck +truer +truly +trump +trunk +truss +trust +truth +tryst +tubal +tuber +tulip +tulle +tumor +tunic +turbo +tutor +twang +tweak +tweed +tweet +twice +twine +twirl +twist +twixt +tying +udder +ulcer +ultra +umbra +uncle +uncut +under +undid +undue +unfed +unfit +unify +union +unite +unity +unlit +unmet +unset +untie +until +unwed +unzip +upper +upset +urban +urine +usage +usher +using +usual +usurp +utile +utter +vague +valet +valid +valor +value +valve +vapid +vapor +vault +vaunt +vegan +venom +venue +verge +verse +verso +verve +vicar +video +vigil +vigor +villa +vinyl +viola +viper +viral +virus +visit +visor +vista +vital +vivid +vixen +vocal +vodka +vogue +voice +voila +vomit +voter +vouch +vowel +vying +wacky +wafer +wager +wagon +waist +waive +waltz +warty +waste +watch +water +waver +waxen +weary +weave +wedge +weedy +weigh +weird +welch +welsh +wench +whack +whale +wharf +wheat +wheel +whelp +where +which +whiff +while +whine +whiny +whirl +whisk +white +whole +whoop +whose +widen +wider +widow +width +wield +wight +willy +wimpy +wince +winch +windy +wiser +wispy +witch +witty +woken +woman +women +woody +wooer +wooly +woozy +wordy +world +worry +worse +worst +worth +would +wound +woven +wrack +wrath +wreak +wreck +wrest +wring +wrist +write +wrong +wrote +wrung +wryly +yacht +yearn +yeast +yield +young +youth +zebra +zesty +zonal \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index e0a3091..f282a27 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,3 +3,5 @@ android.useAndroidX=true kotlin.native.binary.memoryModel=experimental kotlin.native.binary.freezing=disabled +kotlin.mpp.stability.nowarn=true +kotlin.mpp.androidSourceSetLayoutVersion=2 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 106b0a5..c8de95f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Apr 11 17:57:14 IST 2021 +#Sat Jan 21 13:46:25 GMT 2023 distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +zipStoreBase=GRADLE_USER_HOME diff --git a/iosApp/iosApp.xcodeproj/project.pbxproj b/iosApp/iosApp.xcodeproj/project.pbxproj index b7872a8..7bfccec 100644 --- a/iosApp/iosApp.xcodeproj/project.pbxproj +++ b/iosApp/iosApp.xcodeproj/project.pbxproj @@ -9,8 +9,8 @@ /* Begin PBXBuildFile section */ 058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557BA273AAA24004C7B11 /* Assets.xcassets */; }; 058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */; }; - 1A3CF34A2773B9C10012D3A1 /* KMPNativeCoroutinesAsync in Frameworks */ = {isa = PBXBuildFile; productRef = 1A3CF3492773B9C10012D3A1 /* KMPNativeCoroutinesAsync */; }; - 1A3CF34C2773B9C10012D3A1 /* KMPNativeCoroutinesCore in Frameworks */ = {isa = PBXBuildFile; productRef = 1A3CF34B2773B9C10012D3A1 /* KMPNativeCoroutinesCore */; }; + 1A006078297C2B5000CC04DB /* KMPNativeCoroutinesAsync in Frameworks */ = {isa = PBXBuildFile; productRef = 1A006077297C2B5000CC04DB /* KMPNativeCoroutinesAsync */; }; + 1A00607A297C2B5000CC04DB /* KMPNativeCoroutinesCore in Frameworks */ = {isa = PBXBuildFile; productRef = 1A006079297C2B5000CC04DB /* KMPNativeCoroutinesCore */; }; 1AC5B19E2764A3C100A5A7C1 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AC5B19C2764A3C100A5A7C1 /* ContentView.swift */; }; 1AD1C5A12789BC3600B69EA2 /* words.txt in Resources */ = {isa = PBXBuildFile; fileRef = 1AD1C5A02789BC3600B69EA2 /* words.txt */; }; 1AD1C5A32789E12400B69EA2 /* ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AD1C5A22789E12400B69EA2 /* ViewModel.swift */; }; @@ -46,8 +46,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1A3CF34C2773B9C10012D3A1 /* KMPNativeCoroutinesCore in Frameworks */, - 1A3CF34A2773B9C10012D3A1 /* KMPNativeCoroutinesAsync in Frameworks */, + 1A00607A297C2B5000CC04DB /* KMPNativeCoroutinesCore in Frameworks */, + 1A006078297C2B5000CC04DB /* KMPNativeCoroutinesAsync in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -119,8 +119,8 @@ ); name = iosApp; packageProductDependencies = ( - 1A3CF3492773B9C10012D3A1 /* KMPNativeCoroutinesAsync */, - 1A3CF34B2773B9C10012D3A1 /* KMPNativeCoroutinesCore */, + 1A006077297C2B5000CC04DB /* KMPNativeCoroutinesAsync */, + 1A006079297C2B5000CC04DB /* KMPNativeCoroutinesCore */, ); productName = iosApp; productReference = 7555FF7B242A565900829871 /* iosApp.app */; @@ -151,7 +151,7 @@ ); mainGroup = 7555FF72242A565900829871; packageReferences = ( - 1A3CF3482773B9C10012D3A1 /* XCRemoteSwiftPackageReference "KMP-NativeCoroutines" */, + 1A006076297C2B5000CC04DB /* XCRemoteSwiftPackageReference "KMP-NativeCoroutines" */, ); productRefGroup = 7555FF7C242A565900829871 /* Products */; projectDirPath = ""; @@ -401,25 +401,25 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - 1A3CF3482773B9C10012D3A1 /* XCRemoteSwiftPackageReference "KMP-NativeCoroutines" */ = { + 1A006076297C2B5000CC04DB /* XCRemoteSwiftPackageReference "KMP-NativeCoroutines" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/rickclephas/KMP-NativeCoroutines.git"; requirement = { kind = exactVersion; - version = 0.11.1; + version = "1.0.0-ALPHA-4"; }; }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 1A3CF3492773B9C10012D3A1 /* KMPNativeCoroutinesAsync */ = { + 1A006077297C2B5000CC04DB /* KMPNativeCoroutinesAsync */ = { isa = XCSwiftPackageProductDependency; - package = 1A3CF3482773B9C10012D3A1 /* XCRemoteSwiftPackageReference "KMP-NativeCoroutines" */; + package = 1A006076297C2B5000CC04DB /* XCRemoteSwiftPackageReference "KMP-NativeCoroutines" */; productName = KMPNativeCoroutinesAsync; }; - 1A3CF34B2773B9C10012D3A1 /* KMPNativeCoroutinesCore */ = { + 1A006079297C2B5000CC04DB /* KMPNativeCoroutinesCore */ = { isa = XCSwiftPackageProductDependency; - package = 1A3CF3482773B9C10012D3A1 /* XCRemoteSwiftPackageReference "KMP-NativeCoroutines" */; + package = 1A006076297C2B5000CC04DB /* XCRemoteSwiftPackageReference "KMP-NativeCoroutines" */; productName = KMPNativeCoroutinesCore; }; /* End XCSwiftPackageProductDependency section */ diff --git a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/iosApp/iosApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 1bce513..e48f547 100644 --- a/iosApp/iosApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/iosApp/iosApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,25 +1,23 @@ { - "object": { - "pins": [ - { - "package": "KMPNativeCoroutines", - "repositoryURL": "https://github.com/rickclephas/KMP-NativeCoroutines.git", - "state": { - "branch": null, - "revision": "cbc975ed40d412c6d3c9d1d4cd35096165824b88", - "version": "0.11.1" - } - }, - { - "package": "RxSwift", - "repositoryURL": "https://github.com/ReactiveX/RxSwift.git", - "state": { - "branch": null, - "revision": "7c17a6ccca06b5c107cfa4284e634562ddaf5951", - "version": "6.2.0" - } + "pins" : [ + { + "identity" : "kmp-nativecoroutines", + "kind" : "remoteSourceControl", + "location" : "https://github.com/rickclephas/KMP-NativeCoroutines.git", + "state" : { + "revision" : "bb6e5ea0504db706ef52577a66861c015daf2265", + "version" : "1.0.0-ALPHA-4" } - ] - }, - "version": 1 + }, + { + "identity" : "rxswift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ReactiveX/RxSwift.git", + "state" : { + "revision" : "7c17a6ccca06b5c107cfa4284e634562ddaf5951", + "version" : "6.2.0" + } + } + ], + "version" : 2 } diff --git a/iosApp/iosApp/ViewModel.swift b/iosApp/iosApp/ViewModel.swift index 219f4fa..e45e934 100644 --- a/iosApp/iosApp/ViewModel.swift +++ b/iosApp/iosApp/ViewModel.swift @@ -16,7 +16,7 @@ class ViewModel: ObservableObject { Task { do { - let stream = asyncStream(for: wordMasterService.boardStatusNative) + let stream = asyncSequence(for: wordMasterService.boardStatus) for try await data in stream { self.boardStatus = data as! [[LetterStatus]] print(boardStatus) @@ -27,7 +27,7 @@ class ViewModel: ObservableObject { } Task { do { - let stream = asyncStream(for: wordMasterService.boardGuessesNative) + let stream = asyncSequence(for: wordMasterService.boardGuesses) for try await data in stream { self.boardGuesses = data as! [[String]] print(boardGuesses) diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index c765731..d1eb52e 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -1,6 +1,7 @@ plugins { kotlin("multiplatform") id("com.android.library") + id("com.google.devtools.ksp") id("com.rickclephas.kmp.nativecoroutines") } @@ -34,13 +35,12 @@ kotlin { dependencies { } } - val androidTest by getting { + val androidUnitTest by getting { dependencies { implementation(kotlin("test-junit")) implementation("junit:junit:4.13.2") } } - val appleMain by creating { dependsOn(commonMain) } @@ -74,6 +74,10 @@ android { minSdk = AndroidSdk.min targetSdk = AndroidSdk.target } +} +kotlin.sourceSets.all { + languageSettings.optIn("kotlin.experimental.ExperimentalObjCName") } + diff --git a/shared/src/commonMain/kotlin/dev/johnoreilly/wordmaster/shared/WordMasterService.kt b/shared/src/commonMain/kotlin/dev/johnoreilly/wordmaster/shared/WordMasterService.kt index 0442a4b..504fae4 100644 --- a/shared/src/commonMain/kotlin/dev/johnoreilly/wordmaster/shared/WordMasterService.kt +++ b/shared/src/commonMain/kotlin/dev/johnoreilly/wordmaster/shared/WordMasterService.kt @@ -1,10 +1,14 @@ package dev.johnoreilly.wordmaster.shared +import com.rickclephas.kmp.nativecoroutines.NativeCoroutineScope +import com.rickclephas.kmp.nativecoroutines.NativeCoroutines import kotlinx.coroutines.flow.MutableStateFlow import okio.FileSystem import okio.Path import okio.Path.Companion.toPath import dev.johnoreilly.wordmaster.shared.LetterStatus.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope enum class LetterStatus { @@ -13,11 +17,18 @@ enum class LetterStatus { class WordMasterService(wordsFilePath: String) { + @NativeCoroutineScope + val coroutineScope: CoroutineScope = MainScope() + private val validWords = mutableListOf() var answer = "" var currentGuessAttempt = 0 + + @NativeCoroutines val boardGuesses = MutableStateFlow>>(arrayListOf()) + + @NativeCoroutines val boardStatus = MutableStateFlow>>(arrayListOf())