Xamarin.forms: Xamarin.Forms์˜ ์œ ๋น„์ฟผํ„ฐ์Šค ๊ธฐ๋Šฅ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2018๋…„ 02์›” 03์ผ  ยท  66์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: xamarin/Xamarin.Forms

Flutter ๋•๋ถ„์— ๋งŽ์€ xamarin ํŒฌ์ด ์–ด๋””์—์„œ๋‚˜ ๋ณผ ์ˆ˜ ์žˆ๋Š” @Mike-EEE๋ฅผ ์ง„์ง€ํ•˜๊ฒŒ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ @kekekeks๋Š” ์ˆ˜๋…„๊ฐ„ ์•„๋ฐœ๋กœ๋‹ˆ์•„๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Skixam, @adamped ๋•๋ถ„์— flutter์™€ ๊ฐ™์€ ๋˜ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

  • Xamarin.Forms๋Š” ์‚ฌ๋ž‘๋ฐ›๊ณ  ์ฆ๊ธฐ๊ณ  ์žˆ์ง€๋งŒ wpf ๋ฐ avalonia์—์„œ ๊ฐ•๋ ฅํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•œ ๊ธฐ๋ณธ ๋ž˜ํผ ํ˜•ํƒœ์˜ "์ œํ•œ๋œ" ์ถ”์ƒํ™”์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ˜„์žฌ xf ์ปจํŠธ๋กค์— ๋Œ€ํ•œ ๋ Œ๋”๋ง ์˜ต์…˜(๋ž˜ํผ ๋Œ€ ์Šคํ‚ค์–ด ๋Œ€...)์„ ์ œ๊ณตํ•˜๋Š” Miguel de Icaza์˜ ์•„์ด๋””์–ด๋Š” Flutter ๋˜๋Š” Avalonia์˜ ์•„๋ฆ„๋‹ค์›€์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • Skixam์€ ํ›Œ๋ฅญํ•˜์ง€๋งŒ Xamarin.Forms์˜ "ํ•˜๋“œ ํฌํฌ"์ž…๋‹ˆ๋‹ค. Ubiquitous UX๋Š” ํ›Œ๋ฅญํ•˜์ง€๋งŒ ๊ธฐ๋ณธ UX๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: alert ๋ฐ listView ์ƒˆ๋กœ ๊ณ ์นจ ์• ๋‹ˆ๋ฉ”์ด์…˜). ๊ธฐ์กด ๋ž˜ํผ ์ปจํŠธ๋กค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ข‹์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‚˜๋Š” ๊ฒฝ์Ÿํ•˜๊ฑฐ๋‚˜ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ˜•ํƒœ์— ๋Œ€ํ•œ ์ƒํƒœ๊ณ„๋ฅผ ๊ฐ•ํ™”ํ•˜๋Š” ์œ ๋น„์ฟผํ„ฐ์Šค ๋ชจ์–‘์˜ ๋‹ค๋ฅธ ์ปจํŠธ๋กค ์„ธํŠธ(Ubis)๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ œ์•ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. UbiGrid, UbiStackPanel, UbiLabel....... ์œ ๋น„์Šค๋Š” ๊ธฐ์กด ํผ์˜ API์™€ ์•„๋ฌด๋Ÿฐ ๋ณ€ํ™” ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ํ”Œ๋žซํผ๋ณด๋‹ค ๋‚ซ๋‹ค.

  2. ์ค‘์ฒฉ์˜ ๊ฒฝ์šฐ "only-ubi"์˜ ๊ฒฝ์šฐ skixam' ์•„์ด๋””์–ด์ฒ˜๋Ÿผ ๋ Œ๋”๋Ÿฌ๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<UbiGrid>
    <UbiStackPanel>
        <UbiLabel/>
        <UbiButton/>
        <UbiLabel/>
    </UbiStackPanel>
</UbiGrid>
  1. ์ค‘์ฒฉ์˜ ๊ฒฝ์šฐ "non->ubi"์˜ ๊ฒฝ์šฐ ๋ Œ๋”๋Ÿฌ๋Š” root-ubis๋งŒํผ ๋งŽ์•„์•ผ ํ•˜๋ฉฐ ๊ทธ ์•„๋ž˜์—๋Š” 3๊ฐœ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
<Grid>
    <StackPanel>
        <UbiLabel/>
        <UbiButton/>
        <UbiLabel/>
    </StackPanel>
</Grid>
  1. "ubi-root" ์ค‘์ฒฉ์˜ ๊ฒฝ์šฐ 2๊ฐœ์˜ ๋ Œ๋”๋Ÿฌ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” skiaView ๋ Œ๋”๋Ÿฌ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” nonUbis ๋ ˆ์ด์•„์›ƒ์„ ์œ„ํ•œ ๋ Œ๋”์ž…๋‹ˆ๋‹ค.
<UbiGrid>
    <UbiStackPanel>
        <Grid>
           <UbiButton/>
        </Grid>
        <UbiButton/>
        <UbiLabel/>
    </UbiStackPanel>
</UbiGrid>
  1. Skia๋„ ์ข‹์ง€๋งŒ ubi์—์„œ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. Skia๋Š” 2D ์ „์šฉ์ด๋ฉฐ ๋‹ค๋ฅธ ์—”์ง„์—๋„ ํ›„ํฌ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์—ฌํŠผ ์ด๋Ÿฐ ์ผ๋“ค์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. BTW, skia into wasm์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํ”„๋กœํ† ํƒ€์ž…์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ์›น ์บ”๋ฒ„์Šค API๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค๋ฅธ ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค!
<UbiGrid Engine="Skia">
    <UbiStackPanel Engine="Urho">
        <Grid>
           <UbiButton/>
        </Grid>
        <UbiButton/>
        <UbiLabel/>
    </UbiStackPanel>
</UbiGrid>
inactive proposal-open enhancement โž•

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Flutter๊ฐ€ ๋ˆˆ์‚ฌํƒœ์ฒ˜๋Ÿผ ๋‹ค๊ฐ€์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ๋งŽ์€ ์ž‘์—…์ด ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šด ์ข‹๊ฒŒ๋„ ์˜คํ”ˆ ์†Œ์Šค์ž…๋‹ˆ๋‹ค!

ํ”Œ๋Ÿฌํ„ฐ ์—”์ง„์€ C++์ด๊ณ  Dart๋Š” ๊ฑฐ์˜ C#์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์ด๋ฉฐ C# ๋ฐ Xamarin์œผ๋กœ "๋ณ€ํ™˜ ๊ฐ€๋Šฅ"ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ‚ค ์—ด์ฐจ์— ํƒ‘์Šนํ•˜๋Š” ๊ฐ€์žฅ ์ƒ์‚ฐ์ ์ธ ๋ฐฉ๋ฒ•์€ Xamarin์ด Flutter๋ฅผ ์ˆ˜์šฉํ•˜๊ณ  Google์ด ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋„๋ก ๋•๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Xamarin์€ ๋” ๋‚˜์€ ํ”Œ๋žซํผ ํ†ตํ•ฉ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, Forms ์ž‘์—…์€ ์•„๋‹ˆ์ง€๋งŒ(์˜ˆ: Redux๊ฐ€ MVVM๋ณด๋‹ค ๋” ํ™•์‹คํ•œ ์„ ํƒ์ž„), ์ •๋ง ๋ฉ‹์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

๊ฐ€์ž MS. ์–ด์ œ์ฒ˜๋Ÿผ ํฌ์šฉํ•˜๊ณ  ํ™•์žฅํ•˜์‹ญ์‹œ์˜ค. Fuchia๊ฐ€ ๋ฌผ๊ฑด์ด ๋œ๋‹ค๋ฉด ์–ด์จŒ๋“  ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  66 ๋Œ“๊ธ€

FWIW @juepiezhongren ์—ฌ๊ธฐ์—์„œ Ooui๋ฅผ ์กฐ์‚ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/praeclarum/Ooui

Trigger.io ๋กœ ํŒจํ‚ค์ง•ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด iOS, Droid, Windows ๋ฐ ์›น์˜ ์ฃผ์š” 4๊ฐ€์ง€ ์‹ํ’ˆ ๊ทธ๋ฃน ๋ชจ๋‘์—์„œ .NET์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์ง ์•ฝ๊ฐ„์˜ ๋ฐ๋ชจ ์ƒํƒœ์ด์ง€๋งŒ ๋‚ด ๊ด€์‹ฌ์„ ๋Œ์—ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘

OP๋Š” ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ "ubi"๋Š” "SkiaSharp ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋ Œ๋”๋ง๋œ Xamarin.Forms ๋ณด๊ธฐ"๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ "ubi" ์ปจํ…Œ์ด๋„ˆ๋Š” ubi๊ฐ€ ์•„๋‹Œ ๊ฒƒ์„ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. OP๊ฐ€ ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด "ubi" ๋ณด๊ธฐ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์š”์ฒญ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๊นŒ? "ubi" ๋ณด๊ธฐ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค๋ฉด ์šฐ๋ฆฌ ๋Œ€๋ถ€๋ถ„์€ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ์˜ ์ผ๋ถ€๋Š” "๋„ค์ดํ‹ฐ๋ธŒ" ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณด๋Š” ๋ฐฉ์‹, ์ฆ‰ ๋ Œ๋”๋ง ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. HTML5๋Š” ์—ฌ๊ธฐ์—์„œ ์ •๋ง ์ตœ๊ณ ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ธฐ๊ธฐ์—์„œ HTML5 ํŽ˜์ด์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธฐ๊ธฐ์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•˜๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค. IMO ์ด๊ฒƒ์ด ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ Œ๋”๋ง๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. "ํ”Œ๋žซํผ๋ณ„" ๋ Œ๋”๋ง ๋˜๋Š” ์ƒํ˜ธ ์ž‘์šฉ์„ ์›ํ•˜๋ฉด ์Šคํƒ€์ผ๋ง ๋ฐ/๋˜๋Š” ํ…œํ”Œ๋ฆฟ์˜ ๋ฌธ์ œ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค(WPF ๐Ÿ˜‰๋กœ ์‰ฝ๊ฒŒ ๊ฐ€๋Šฅํ–ˆ๋˜ ๊ฒƒ). ์ฆ‰, ๊ฐœ๋ฐœ์ž๋Š” ํ…Œ๋งˆ๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ iOS ๊ธฐ๋ฐ˜์˜ UX๋ฅผ Droid ๊ธฐ๊ธฐ์—์„œ ๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ์—๋„ ์ œ์‹œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์˜๋„์™€ ๋ชฉ์ ์„ ์œ„ํ•ด HTML5 ๋Š” ์œ ๋น„์ฟผํ„ฐ์Šค ๋ Œ๋”๋ง ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด์ง€๋งŒ JavaScript์— ๋„ˆ๋ฌด ๋ฟŒ๋ฆฌ๋‚ด๋ ธ๊ธฐ ๋•Œ๋ฌธ์— .NET๊ณผ ๊ฒฐํ•ฉํ•  ๋•Œ ์—„์ฒญ๋‚œ TCO๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Ooui๊ฐ€ ์†Œ๊ฐœํ•˜๋Š” ๊ฒƒ์€ HTML5/CSS๋ฅผ ๋ Œ๋”๋ง ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๋™์‹œ์— ๋‚˜๋จธ์ง€ ๋ชจ๋“  ๊ฐœ๋ฐœ์— .NET์„ ๋…์ ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์‹์„ ์œ ์ง€ํ•˜๊ณ  ๊ธฐ์กด ํˆฌ์ž๋ฅผ ํ™œ์šฉํ•˜์—ฌ _์ „์ฒด ๊ฐœ๋ฐœ ๋น„์šฉ์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ํ”„๋ ˆ์  ํ…Œ์ด์…˜๊ณผ ์ง€์› ์ธํ”„๋ผ ๋ชจ๋‘์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋งŒ ๋‚จ๊ฒŒ ๋˜๋ฉฐ iOS, Droid, Windows ๋ฐ ์›น์—์„œ ์ž‘์—…ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งŽ์€ .NET ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ช‡ ๋…„ ๋™์•ˆ ์š”๊ตฌํ•ด ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹จ์ ์€ .NET ๊ฐœ๋ฐœ์ž๊ฐ€ CSS๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜์ง€๋งŒ ์ง„์ •ํ•œ ์œ ๋น„์ฟผํ„ฐ์Šค ์†”๋ฃจ์…˜์„ ์˜ค๋žซ๋™์•ˆ ๊ธฐ๋‹ค๋ ค์˜จ ์ด ์‹œ์ ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๊บผ์ด ์–‘๋ณดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ ์–ด๋„, ๋‚˜๋Š” ํ•  ๊ฒƒ์ด๋‹ค. ๐Ÿ˜›

uservoice ์Šค๋ ˆ๋“œ๋Š” Xamarin.Forms์™€ ๊ฐ™์€ ๊ฒƒ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์ด์—ˆ์Šต๋‹ˆ๋‹ค. Microsoft๊ฐ€ Xamarin์„ ์ธ์ˆ˜ํ•˜๊ธฐ ์ „์ธ 2015๋…„์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์š”๊ตฌ ์‚ฌํ•ญ ์ค‘ Xamarin.Forms๋Š” 1) Windows 10 4) Droid 5) iOS์—์„œ ๋ฆด๋ฆฌ์Šค๋˜์—ˆ์œผ๋ฉฐ 3) *nix(Unix/Linux) 6) Macintosh์—์„œ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋กœ ์ œ๊ณต๋˜๋ฉฐ 2) Legacy Windows๋กœ ์‹œ์ž‘๋˜์—ˆ์œผ๋ฉฐ ์ด์ œ ๋ง‰ 7) ๋„ˆ๋ฌด ๋‹ค๋ฅธ HTML5๋ฅผ ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์‹ค์ œ๋กœ Windows 10, Droid, iOS, Legacy Windows ๋ฐ Mac์€ ํด๋ผ์ด์–ธํŠธ ์žฅ์น˜์˜ 99.5%๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. Xamarin.Forms๊ฐ€ ์กด์žฌํ•˜๊ณ  ์ง€๊ธˆ ์ด ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ๋‹ค๋ฅธ ํ›Œ๋ฅญํ•œ ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ์œ ์ผํ•œ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Xamarin.WPF ์†๋„๋ฅผ ๋†’์—ฌ Xamarin.Forms๋ฅผ WPF์™€ ๊ฒฐํ•ฉ
  • Xamarin.Forms ๊ด‘๊ณ : ๋ถ„๋ช…ํžˆ ์•„์ง ์ด์— ๋Œ€ํ•ด ๋ชจ๋ฅด๋Š” ์ผ๋ถ€ .Net ๊ฐœ๋ฐœ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ Œ๋”๋ง์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ํ•„์š”๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. Xamarin.Forms์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถ„ํ• ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‹ค์–‘ํ•œ Xamarin.Forms ์ปจํŠธ๋กค ๊ฐ„์˜ ํ”Œ๋žซํผ ์ฐจ์ด์ ์„ ๋ฌธ์„œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ๋™์ผํ•œ ๋ Œ๋”๋ง์ด ํ•„์š”ํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๊ฒƒ์„ ํฅ๋ฏธ๋กญ๊ฒŒ ์ƒ๊ฐํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
  • ํ”Œ๋žซํผ ๊ฐ„์— ํŠน์ • ์ปจํŠธ๋กค์ด ๋„ˆ๋ฌด ๋‹ค๋ฅด๊ฒŒ ๋ณด์ธ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ ๋™์ผํ•˜๊ฒŒ ๋ Œ๋”๋ง๋˜๋Š” ์ปจํŠธ๋กค์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@charlesroddie, ์‹œ๊ฐ„์„ ๋‚ด์–ด ์˜๊ฒฌ์„ ์ œ์‹œํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค์„ ๋งค์šฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

7) ๋„ˆ๋ฌด ๋‹ค๋ฅธ HTML5๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์„œ ์‹ธ์šฐ๊ณ  ์žˆ๋Š” ์‚ฌ๊ณ ๋ฐฉ์‹/ํƒœ๋„์ž…๋‹ˆ๋‹ค. ์›น์€ ๊ธฐ๋ณธ ํ”Œ๋žซํผ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ํ™˜๊ฒฝ์„ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ •ํ™•ํžˆ ๋™์ผํ•œ ํ˜ธ์ŠคํŒ… ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค. ์›น์„ "๋‹ค๋ฅธ" ๊ฒƒ์œผ๋กœ ๋ณด๋ฉด ๋‘ ๊ฐœ์˜ ๋ณ„๋„ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š”

๋˜ ๋‹ค๋ฅธ ํฐ ํ•ด๊ฒฐ์ฑ…์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์žˆ๋Š” ์•„์ด๋””์–ด๋Š” ๋˜ ๋‹ค๋ฅธ ํ›Œ๋ฅญํ•œ ์†”๋ฃจ์…˜์ด ์•„๋‹ˆ๋ผ ๋” ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ๊ทธ UserVoice์˜ ์˜๊ฒฌ์„ ์ฝ๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋“ค์ด๋ฉด(๋งค์šฐ ์ƒ์ƒํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜„), ๊ฑฐ๊ธฐ์—๋Š” Xamarin.Forms์˜ ํŒฌ์ด ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜ ์ž์‹ ๋„ ํ”„๋กœ์ ํŠธ(๋ฐ Xamarin์˜ ๋ชจ๋“  ๊ฒƒ!)๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ ๊ฒฐ๊ตญ์—๋Š” ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ํŠน์„ฑ๊ณผ ๊ณ ๋ ค ์‚ฌํ•ญ์ด ์žˆ๋Š” n๊ฐœ์˜ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์Šคํƒ์„ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์•Œ๊ณ  ์žˆ๋“ฏ์ด ์ด ๋•Œ๋ฌธ์— ํ’ˆ์งˆ์ด ๋งค์šฐ ๋‚ฎ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ง‰ ์Šค์Šค๋กœ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค). ๋˜ํ•œ ํ”Œ๋žซํผ๋ณ„๋กœ ํŠน์ • ๋ Œ๋”๋ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ๋ฒˆ๊ฑฐ๋กœ์šด ์ „์ฒด ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋‹จ์ˆœํžˆ ํ•˜๋‚˜์˜ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ธฐ์ˆ (HTML5)์„ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„๊ณผ ํ”Œ๋žซํผ์ด ์ˆ˜๋…„ ๋™์•ˆ ์ง€์›ํ•˜๊ณ  ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” HTML5๋ฅผ ๋‹จ์ˆœํžˆ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ๊ณผ ๋Œ€์กฐ๋ฉ๋‹ˆ๋‹ค. ํŠน์ • ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ํ”Œ๋žซํผ๋ณ„ ๋ Œ๋”๋ง์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์™„๋ฒฝํ•˜๋‹ค๊ณ  ๋งํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์žฅ๊ธฐ์ ์œผ๋กœ ํ›จ์”ฌ ๋” ๊ฐ€๋ณ๊ณ  ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋‹ค๋Š” ๋Š๋‚Œ์ด ๋“ญ๋‹ˆ๋‹ค. ๋” ์‹ธ๊ณ , LOL!

์ฆ‰, HTML5 ๋””์ž์ธ ๊ณต๊ฐ„์€ ํŠนํžˆ CSS์™€ ๊ด€๋ จ๋œ ๋…ธ๋ จํ•œ ์žฌ๋Šฅ์œผ๋กœ ๊ฐ€๋“ ์ฐจ ์žˆ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ๋น„์ฆˆ๋‹ˆ์Šค ๊ด€์ ์—์„œ ์ด๊ฒƒ์€ ํ•˜๋‚˜์˜ ํ”„๋ฆฌ์  ํ…Œ์ด์…˜ ๊ธฐ์ˆ  ์˜คํผ๋ง(n+๊ฐ€ ์•„๋‹Œ)์— ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ด ๊ณต๊ฐ„์—์„œ ์–‘์งˆ์˜ ์ž‘์—…์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— TCO๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํšŒ์ „์œจ์ด ์žˆ๋Š” ๊ฒฝ์šฐ n+(์ผ๋ฐ˜ํ™” - ๋‚ฎ์€ ํ’ˆ์งˆ)๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•˜์—ฌ ํ•˜๋‚˜์˜ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ธฐ์ˆ (์ „๋ฌธ - ๋†’์€ ํ’ˆ์งˆ)์„ ์•Œ๊ณ  ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์›น์„ "๋‹ค๋ฅด๋‹ค"๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ๋ฟŒ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, "๋‹ค๋ฅด๋‹ค"๋Š” ๊ฒƒ์ด .NET ๊ณต๊ฐ„์—์„œ์˜ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์— ๋Œ€ํ•ด ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋’ค์ง‘์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์ ์  ๋” ๋งŽ์ด ๋ณด์ž…๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์ด ์ ์–ด๋„ ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š” ์ผ์— ๋Œ€ํ•œ ๋‚˜์˜ ์ธ์ƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋•Œ๋•Œ๋กœ ์ž˜๋ชป๋œ ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์กŒ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜‰

๋‚˜๋Š” ์›น ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ „๋ฌธ ์ง€์‹์ด ์—†์œผ๋ฉฐ ๋„ˆ๋ฌด ๋‹ค๋ฅด๋‹ค๊ณ  ๋งํ–ˆ์„ ๋•Œ ํ˜„์žฌ ๊ธฐ์ˆ ์ด ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ ์›น ์•ฑ ๊ตฌ์กฐ ์‚ฌ์ด์˜ ๊ฐ„๊ทน์„ ๋ฉ”์šฐ๋Š”๋ฐ๋Š” ๋ฉ€๊ฒŒ ๋ณด์ธ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. Xamarin.Web์€ ์ข‹์€ ์•„์ด๋””์–ด์ง€๋งŒ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋น„๋ก ์ด๋ฏธ Ooui๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฐœ๋… ์ฆ๋ช… ์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ง์ž…๋‹ˆ๋‹ค. Xamarin.Forms ์ปจํ…์ŠคํŠธ์—์„œ ์ด๊ฒƒ์€ ๋ฌผ๋ก  ๋” ์ ์€ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋” ์ ์€ html์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๊ฐ€ ๋ฐ”๋กœ ์•„์•„์ž…๋‹ˆ๋‹ค. ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€๋Š” ์•Š์€ ๊ฒƒ ๊ฐ™์•„์š”. Ooui๋Š” (์•„์ง) ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ๋˜๋Š” ๋ชจ๋“  ์ข…๋ฅ˜์˜ Xaml ๊ตฌ์„ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ ๊ตฌํ˜„ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํžˆ ์‰ฌ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ €๋Š” HTML์˜ ํŒฌ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ ์˜คํ•ดํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์‚ฌ์‹ค Xaml์€ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ UserVoice์— div ๋ฐ yuck ํƒœ๊ทธ๋ฅผ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๐Ÿ˜‰ ๋ฌด์—‡๋ณด๋‹ค๋„ ์—ฌ๊ธฐ์—์„œ ๋‚ด ๊ด€์‹ฌ์„ ๋Œ์—ˆ์Šต๋‹ˆ๋‹ค.

@Mike-EEE Avalonia๋Š” ์ •๋ง ์ข‹์€ ์‹คํ—˜์ž…๋‹ˆ๋‹ค.

Xamarin Forms ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ€์žฅ ์ƒ์‚ฐ์ ์ธ ๊ฒƒ์€ SkiaSharp๋กœ ์ด์‹ํ•˜์—ฌ https://github.com/chrfalch/NControl ์„ ๋˜์‚ด๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํŠน์ • ์œ ํ˜•์˜ ์ƒํ˜ธ ์ž‘์šฉ๋งŒ ํ•„์š”ํ•œ ์ปจํŠธ๋กค์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ์ปจํŠธ๋กค์€ ํ”Œ๋žซํผ ๊ฐ„์— ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜๊ณ  SkiaSharp๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์„ ์ฆ‰์‹œ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Flutter๊ฐ€ ๋ˆˆ์‚ฌํƒœ์ฒ˜๋Ÿผ ๋‹ค๊ฐ€์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ๋งŽ์€ ์ž‘์—…์ด ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šด ์ข‹๊ฒŒ๋„ ์˜คํ”ˆ ์†Œ์Šค์ž…๋‹ˆ๋‹ค!

ํ”Œ๋Ÿฌํ„ฐ ์—”์ง„์€ C++์ด๊ณ  Dart๋Š” ๊ฑฐ์˜ C#์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์ด๋ฉฐ C# ๋ฐ Xamarin์œผ๋กœ "๋ณ€ํ™˜ ๊ฐ€๋Šฅ"ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ‚ค ์—ด์ฐจ์— ํƒ‘์Šนํ•˜๋Š” ๊ฐ€์žฅ ์ƒ์‚ฐ์ ์ธ ๋ฐฉ๋ฒ•์€ Xamarin์ด Flutter๋ฅผ ์ˆ˜์šฉํ•˜๊ณ  Google์ด ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋„๋ก ๋•๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Xamarin์€ ๋” ๋‚˜์€ ํ”Œ๋žซํผ ํ†ตํ•ฉ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, Forms ์ž‘์—…์€ ์•„๋‹ˆ์ง€๋งŒ(์˜ˆ: Redux๊ฐ€ MVVM๋ณด๋‹ค ๋” ํ™•์‹คํ•œ ์„ ํƒ์ž„), ์ •๋ง ๋ฉ‹์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

๊ฐ€์ž MS. ์–ด์ œ์ฒ˜๋Ÿผ ํฌ์šฉํ•˜๊ณ  ํ™•์žฅํ•˜์‹ญ์‹œ์˜ค. Fuchia๊ฐ€ ๋ฌผ๊ฑด์ด ๋œ๋‹ค๋ฉด ์–ด์จŒ๋“  ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ค ์†Œ๋…„. ๋”ฐ๋ผ์„œ flex, CSS ๋ฐ ์‹ค์ œ๋กœ ์™„์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ธฐํƒ€ ๋ฏธ์นœ ๊ฒƒ๋“ค ์ดํ›„์— ์ด์ œ Flutter? Xamarin Forms, ๋ชจ๋“  ๊ฑฐ๋ž˜์˜ ์žญ, ๋ˆ„๊ตฌ์˜ ์ฃผ์ธ๋„ ์•„๋‹™๋‹ˆ๋‹ค.
๋จผ์ € Xamarin Forms๋ฅผ ์ง„์ •์œผ๋กœ ์„ฑ์ˆ™ํ•˜๊ณ  ์•ˆ์ •์ ์ธ ์ผ๊ธ‰ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ํ•˜์ง€๋งŒ ์ž ๊น๋งŒ์š”, ๊ทธ๊ฑด ๋„ˆ๋ฌด ๊ธฐํ•œ์ด ์ง€๋‚œ ๊ฒƒ ๊ฐ™์•„์š”...

@timahrentlov ๋Š” ๋‚ด๊ฐ€ ์•Œ๊ณ  ์‹ถ์–ดํ•˜๋Š” redux์™€ mvvm์˜ ๋น„๊ต๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@juepiezhongren ๋‚˜๋Š” ํ”Œ๋Ÿฌํ„ฐ์— ๋Œ€ํ•œ ๊ทธ๋Ÿฐ ๋น„๊ต๋ฅผ ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค.

@timahrentlov xamarin.forms์™€ mvvm ๋Œ€ redux๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ˜์‘์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

@Mike-EEE ๋ธ”๋ ˆ์ด์ €์™€ ํ”„๋žญํฌ์˜ ooui-wasm์—์„œ ํญํ’์šฐ๋ฅผ ๋ˆˆ์น˜์ฑ„์…จ๋‚˜์š”?

@juepiezhongren ์ •๋ง... ์ƒํ™ฉ์ด ๋œจ๊ฑฐ์›Œ์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค! ๐ŸŽ‰

@Mike-EEE๋Š” wasm์— ๋Œ€ํ•œ ubis๋ฅผ ๊ณ ๋ คํ•˜๊ณ , skiasharp๋Š” ์ข‹์€ ์„ ํƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

@samhouts t-enhencement๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

์†”์งํžˆ @juepiezhongren , ๋‚˜๋Š” ์œ ์ผํ•œ ์žฅ๊ธฐ์  ์˜ต์…˜์ด HTML5/CSS๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ WebSocket Bridge(Ooui) ์ ‘๊ทผ ๋ฐฉ์‹์— ๊ด€์‹ฌ์„ ๊ฐ–๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. WASM๋ณด๋‹ค ๊ฐ€๋ณ๊ณ  ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค. CSS๋Š” ํ˜•ํŽธ์—†์ง€๋งŒ ์•ฝ๊ฐ„์˜ ๊ธฐ๋ฆ„๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉด ๊ฐœ๋ฐœ์ž๋กœ์„œ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์ž‘๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜‰ ์–ด์จŒ๋“ , ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ •๋ง๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฌด์–ธ๊ฐ€๋กœ๋ถ€ํ„ฐ ์•ฝ 12-18๊ฐœ์›”์ด ๋‚จ์•˜๋‹ค๋Š” ๋Š๋‚Œ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ •๋ง ๋Œ€๋‹จํ•ฉ๋‹ˆ๋‹ค. Ooui์™€ Blazor๋Š” ์‹œ์ž‘์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ €๋Š” MSFT์™€ @stevesanderson ์ด Blazor ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ๋ฅผ ํ†ตํ•ด ์‹คํ—˜์ ์ด๊ณ  ํ˜์‹ ์ 

@Mike-EEE ์˜ˆ, baidu๊ฐ€ ํ›„์›ํ•˜๋Š” echarts.js์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ html5์˜ CANVAS๋กœ ๋ Œ๋”๋ง์ด ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ Œ๋” ์—”์ง„์€ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ˆœ์ˆ˜ HTML5๊ฐ€ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค, @juepiezhongren. ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋ Œ๋”๋ง์ด ์ด๋ฏธ NATIVE ์บ”๋ฒ„์Šค์—์„œ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— HTML5 DOM ์ปจํŠธ๋กค์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜‰ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด HTML5 Canvas์—์„œ ๋ Œ๋”๋งํ•˜๊ณ  ๋น„๊ต ๋ฐ โ€‹โ€‹๋ฆฌ์†Œ์Šค ์ง‘์•ฝ์ ์ธ JavaScript๋ฅผ ํ†ตํ•ด ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  HTML5 Canvas๋Š” ๋ณต์žกํ•œ ๋น„ ๊ธฐ๋ณธ ์ปจํŠธ๋กค(์˜ˆ: ์ฐจํŠธ ์ž‘์„ฑ ๋“ฑ)์— ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ Œ๋”๋ง ํ‘œ๋ฉด์ธ IMO๋กœ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์ˆœ์ˆ˜ํ•œ HTML5๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? @Mike-EEE js๊ฐ€ ์•„๋‹Œ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋งž์•„, @juepiezhongren ... HTML5 canvas ์ปจํŠธ๋กค์„ ํ†ตํ•ด ๋ Œ๋”๋งํ•  ์ƒˆ ์ปจํŠธ๋กค์„ ๋งŒ๋“œ๋Š” ๋Œ€์‹  HTML5์˜ ๊ธฐ๋ณธ "๋„ค์ดํ‹ฐ๋ธŒ"(LOL์ด๋ผ๋Š” ๋‹จ์–ด์— ์ฃผ์˜ํ•ด์•ผ ํ•จ) ์ปจํŠธ๋กค์„ ๋ชจ๋‘ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. Unity ๋˜๋Š” JSIL ์—์„œ ๋ณผ ์ˆ˜

๋ฌผ๋ก  ์ด๋Š” ๊ตฌ์ถ• ์ค‘์ธ ์ปจํ…์ŠคํŠธ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋‚ด ๋ชจ๋“  ๋Œ€ํ™”์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค/LOB๋ฅผ ๊ฐ€์ •/๊ณ ๋ คํ•˜๋ฏ€๋กœ "์ˆœ์ˆ˜ํ•œ" HTML5๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„/๊ทธ๋ž˜ํ”ฝ ์ง‘์•ฝ์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ WASM์ด ์ฒซ ๋ฒˆ์งธ ์„ ํƒ์ด๊ณ  ๊ทธ ๋‹ค์Œ์ด canvas ์ปจํŠธ๋กค์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” HTML5๊ฐ€ SkiaSharp๋ณด๋‹ค XF์— ์ฐฌ์„ฑํ•˜์—ฌ ๋’ค์— ๋‚จ๊ฒจ์ง€๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ooui๋Š” ์ข‹์ง€๋งŒ ํ•ญ์ƒ XF ์ปจํŠธ๋กค์„ HTML๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๋Š” ์–ด๋ ค์›€์„ ๊ฒช์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ์บ”๋ฒ„์Šค๋กœ ๋ฐ”๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์ ‘๊ทผ์„ฑ/SEO๊ฐ€ ์ด์ œ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋งŒ GDI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” winforms์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ทน๋ณตํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋ฅผ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๋งž์•„ @yowl ... ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ LOB ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ Ooui์˜ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๋งค์šฐ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ Ooui๊ฐ€ ์•„๋‹ˆ๋ผ ์ ‘๊ทผ ๋ฐฉ์‹(WebSocket ๋ธŒ๋ฆฌ์ง€)์„ ๋งํ•ฉ๋‹ˆ๋‹ค. Ooui๋Š” ํ•ฉ๋ฒ•์  ์ธ ์ดˆ๊ฐ•๋Œ€๊ตญ์ด๋˜๋Š” ๊ฒƒ๊ณผ๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€์Šต๋‹ˆ๋‹ค.

SkiaSharp๋Š” ์›น์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์›น์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  WASM์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋” ํฐ ๋‹ค์šด๋กœ๋“œ์ž…๋‹ˆ๋‹ค. ์š”์ฆ˜ ๋ชจ๋“  ๊ฒƒ์ด HTML5/์›น/๊ฒฝ๋Ÿ‰ํ™”๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ๋น ๋ฅด๊ฒŒ ๋กœ๋“œ๋˜๊ณ  ๋” ๋น ๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์‚ฌ์šฉ์ž๋ฅผ ํ™•๋ณดํ•˜์—ฌ ์‹œ์žฅ ๊ฒฌ์ธ๋ ฅ์„ ์–ป๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” PWA์™€ ์›น ๊ธฐ์ˆ  ์ „์ฒด์—์„œ ์ด๊ฒƒ์„ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ/์Šคํ† ์–ด๋Š” ์›น์ด ์ ์  ๋” ๊ทธ๋“ค๊ณผ ์œ ์‚ฌํ•ด์ง€๊ณ  ๊ทธ๋“ค์˜ ํž˜์„ ์ฐจ์ง€ํ•จ์— ๋”ฐ๋ผ ์ง€๋‚˜์ณ ๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ค‘์•™ ์ง‘์ค‘์‹/๊ถŒํ•œ ๋ถ€์—ฌ/์งˆ์‹/๊ฒ€์—ด/์ €์žฅ/๋“ฑ๋ก/์ง€์นจ BS ์—†์ด ๋ถ€ํŒ…ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜‰ ๊ธฐ์ˆ ์€ ์›๋ž˜ ์„ค๊ณ„, ์˜๋„ ๋ฐ ์˜๋„๋œ ๋ฐฉ์‹์ธ ํƒˆ์ค‘์•™ํ™”/์ž์œ ๋กœ์šด ๋น„์ฆˆ๋‹ˆ์Šค ๋ฐฉ์‹์œผ๋กœ ๋‹ค์‹œ ์ด๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—ฌ๊ธฐ์—๋Š” ๊ถ๊ทน์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ(์ ‘๊ทผ์„ฑ/SEO ๐Ÿ˜„์ด ํ•„์š”ํ•จ)์„ ์œ„ํ•œ HTML5์™€ ์ „๋ฌธํ™”/๊ทธ๋ž˜ํ”ฝ ์ง‘์•ฝ์ /๊ฒŒ์ž„ ๋“ฑ์„ ์œ„ํ•œ WASM์ž…๋‹ˆ๋‹ค. ์ด์ƒ์ ์ธ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ธฐ์ˆ ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ์ฐจ์ด์ (์˜ˆ: ๊ณจ์น˜์•„ํ”ˆ)์„ ์•Œ๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ๋‘ ์ง„์˜ ๋ชจ๋‘์— ์›ํ™œํ•˜๊ฒŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

SkiaSharp๋Š” ์›น์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ ์•„๋ฌด๋„ wasm์„ ์œ„ํ•ด ๊ตฌ์ถ•ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ Skia๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•œ๋‹ค๊ณ  ๋‚˜๋Š” ์ƒ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” Skia ๋ฐฑ์—”๋“œ๋กœ XF๋ฅผ ๋นŒ๋“œํ•ด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๋ชจ๋…ธ ์‚ฌ๋žŒ๋“ค์€ ์ž์‹ ์˜ ์†Œ๋งค์— ๋ญ”๊ฐ€๊ฐ€ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. Build in May์—์„œ ๋ญ”๊ฐ€๋ฅผ ์ฐพ์œผ์‹ญ์‹œ์˜ค.

์˜ˆ, //build๊ฐ€ ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์ง€๊ธˆ _๋…„_์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค, @yowl. ์‹ฌ์ง€์–ด Connect(); ์ด๋ฒคํŠธ๋Š” .NET์„ ์›น ํŽ˜์ด์ง€(๋งค์šฐ ๋†’์€ ๊ฐ€์น˜)๊ฐ€ ์•„๋‹Œ ๋ƒ‰์žฅ๊ณ  ๋ฐ ๊ธฐํƒ€ ๊ธฐ๊ธฐ(๋งค์šฐ ๋‚ฎ์€ ๊ฐ€์น˜)์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ž๋ž‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถ•์†Œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์š”์ฆ˜์€ '๋ณด๋ฉด ๋ฏฟ๊ฒ ๋‹ค'๋Š” ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๊ณ  ์žˆ๋‹ค. ๐Ÿ˜‰ ์˜ฌํ•ด์˜ ์„œ์ปค์Šค์—์„œ ์ €๋Š” Progressive Web Applications, ๊ทธ๋ฆฌ๊ณ  MSFT๊ฐ€ ์–ด๋–ป๊ฒŒ .NET ๊ฐœ๋ฐœ์ž์™€ ํ•จ๊ป˜ ์ž‘์—…ํ•˜๋Š” ๋ฐ ๋น„์šฉ์„ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ๋“ค์ด๋ฉด์„œ๋„ ์ด๋ฅผ ์šฐ๋ฆฌ ์ƒํƒœ๊ณ„์— "ํ†ตํ•ฉ"ํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”์ง€ ์™ธ์— ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์†Œ์‹์„ ๋“ฃ๊ฒŒ ๋  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๐ŸŽ‰ ๋‹น์‹ ์„ ์œ„ํ•œ ์•ฝ๊ฐ„์˜ ๋‚™๊ด€๋ก ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๐ŸŽ‰

Skia + Canvas๋Š” http://webassembly.org์—์„œ ์ž‘๋™ http://webassembly.org/demo/Tanks/ ๋Š” Skia ๋น„์ฆˆ๋‹ˆ์Šค ์•ฑ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@timahrentlov ์Šคํ‚ค์•„+์บ”๋ฒ„์Šค? 10M ๋‹ค์šด๋กœ๋“œ, ์ •๋ง ํฝ๋‹ˆ๋‹ค.

xamarin.flutter๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@juepiezhongren ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค ,

ํฅ๋ฏธ๋กœ์šด ํ† ๋ก . ํ•œํŽธ ListView์™€ ๊ฐ™์€ ๊ธฐ๋ณธ ์ปจํŠธ๋กค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹iOS ๋ฐ Android์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. XAML ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋„ ์™„์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๊ธฐ๋ณธ ์ปจํŠธ๋กค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋’ค์ณ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์•ผ๊ธฐํ•˜๊ณ  ๊ฟˆ๊พธ๋Š” ๊ฒƒ์€ ์ข‹์€๋ฐ XF์˜ ์ƒํƒœ๋Š” ๊ฑฐ์˜ 3๋…„์ด ๋˜์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์‹ค์ œ๋กœ ์žˆ์–ด์•ผ ํ•  ์œ„์น˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

XF์˜ ๋ฌธ์ œ๋Š” ๊ธ€๋ ˆ์ณ ์œ„์— ์ง‘์„ ์ง“๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ฑฐ๋Œ€ํ•œ UI ํ”Œ๋žซํผ ๋ฐœ์ž๊ตญ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์•„๋ž˜์— ๊ท ์—ด๊ณผ ํ‹ˆ์ƒˆ๊ฐ€ ํ˜•์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ๋“ค์„ ์ˆ˜์ •ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋” ๋งŽ์€ ํ”Œ๋žซํผ์ด ์ถ”๊ฐ€๋ ์ˆ˜๋ก ์•…ํ™”๋˜๋Š” ๋Š์ž„์—†๋Š” ์˜ค๋ฅด๋ง‰ ์‹ธ์›€์ž…๋‹ˆ๋‹ค. Mac OS x, OOUI/Web, Tizen ๋“ฑ. ๊ทธ๊ฒƒ์€ ๋ฉˆ์ถœ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๊ทธ๋žฌ์Šต๋‹ˆ๋‹ค. DOA ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  flutter์™€ ๊ฐ™์€ ๋„๊ตฌ๋Š” XF ์ฃผ๋ณ€์—์„œ ์›์„ ๊ทธ๋ฆฌ๋ฉฐ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

XF๋Š” ์ž์ฒด UI๋ฅผ ๊ฐ€์ ธ์™€ ์ ˆ๋Œ€์ ์œผ๋กœ ํ•„์š”ํ•œ ํŠน์ • ํ”Œ๋žซํผ UI๋งŒ ํ†ตํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ง€๋„, ์นด๋ฉ”๋ผ ๋ณด๊ธฐ ๋“ฑ. ๋จธ์ง€ ์•Š์•„ Xamarin์€ Fuchia ๋˜๋Š” ํ˜ธ์ถœ๋˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์ง€์›ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์–ด์จŒ๋“  ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜คํ”ˆ ์†Œ์Šค ํ”Œ๋Ÿฌํ„ฐ ์—”์ง„!).

๋‚˜๋Š” Flutter๋‚˜ Tizen ๋˜๋Š” ๋‹ค๋ฅธ ๊ฒƒ๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ๋ณ„๋กœ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ ์ธก๋ฉด์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ iOS์™€ Android๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์•„๋งˆ๋„ UWP. ์‚ฌ๋žŒ๋“ค์˜ ๋ง์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋‚˜๋Š” Mac OS X์™€ โ€‹โ€‹WPF์— ๋Œ€ํ•ด ๊ทธ๋‹ค์ง€ ์‹ ๊ฒฝ์„ ์“ฐ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ(iOS์™€ ์•ˆ๋“œ๋กœ์ด๋“œ)๋„ ์ œ๋Œ€๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์—์„œ ๋ชจ๋ฐ”์ผ๊ณผ ๋ฐ์Šคํฌํ†ฑ์„ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•˜๋ ค๋Š” ๊ฒƒ์€ ์Šฌํ”ˆ ์ผ์ด๋‹ค.
Xamarin Forms๋Š” ์ •๋ง ๋ชจ๋“  ๊ฑฐ๋ž˜์˜ ๋Œ€๊ฐ€์ธ Jack์˜ ๊ฐ€์žฅ ์ข‹์€ ์˜ˆ์ž…๋‹ˆ๋‹ค. ์ฃผ๋ง ํ”„๋กœ์ ํŠธ๋กœ ์‹œ์ž‘ํ•œ OSS ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์ค‘์š”ํ•œ ์ž‘์—…์€ XAML ์ปดํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
๊ทธ ์™ธ์— Xamarin์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์—…์„ ๊ณ„์†ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ง„์ง€ํ•œ ์•ฝ์†์€ ์•„์ง ์—†์Šต๋‹ˆ๋‹ค.
๋นŒ๋“œ ํšŒ์˜๊ฐ€ ๋‹ค๊ฐ€์˜ค๊ณ  ์žˆ์œผ๋ฉฐ Xamarin Forms 3.0์ด ์–ผ๋งˆ๋‚˜ ํ›Œ๋ฅญํ•œ์ง€ ์•Œ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” ์—ฌ์ „ํžˆ ๋™์ผํ•œ ๋ฒ„๊ทธ์™€ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ์™€ ubi๊ฐ€ ๋ชจ๋‘ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. xf๋Š” C#๊ณผ ํ•จ๊ป˜ ๋ชจ๋“  ๊ธฐ๋ณธ API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋ถ„ํžˆ ์ข‹์Šต๋‹ˆ๋‹ค. ์œ ๋น„์Šค๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ Xamarin Forms์™€ ๊ฐ™์€ ๋งŽ์€ ๋ฐฉํ–ฅ์ด ์žˆ๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ/ํ”„๋ ˆ์ž„์›Œํฌ/๋„๊ตฌ์˜ ์˜ˆ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? "๊ธธ์ฐพ๊ธฐ"๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ Android, iOS, UWP, Mac OS X, CSS, Flexbox, Tizen, WPF์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋†“์นœ ๊ฒŒ ์žˆ๋‹ˆ? ์›น/HTML? ๋ฏธ์นœ...
๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ณ„์†ํ•ด์„œ "์˜ค๋Š˜ ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ฒŒ์ž„์ด ์žˆ์–ด์š”"๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๊นŒ? ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋Š์ž„์—†์ด ์‹คํ—˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹คํ—˜ํ•˜๋Š” ๊ฒƒ์ด ์ž˜๋ชป๋œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ ๋ชจ๋“  ๊ฒƒ์ด ์‹คํ—˜์ธ๋ฐ, ๋งˆ์น˜ ๋‹จ๋‹จํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘์—… ์ค‘์ธ ์ž‘์—…์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

XF๊ฐ€ iOS์™€ ์•ˆ๋“œ๋กœ์ด๋“œ์—๋งŒ ์ง‘์ค‘ํ–ˆ๋‹ค๋ฉด..
MS๊ฐ€ ์ž์ฒด ์•ฑ์— XF๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค๋ฉด..
MS๊ฐ€ ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค์™€ ํœด๋จผ ํ…Œ์Šคํ„ฐ๋ฅผ ์ ์šฉํ–ˆ๋‹ค๋ฉด..
Xamarin์ด ๊ธฐ์ˆ  ์ด๋ฒคํŠธ๋ฅผ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค์˜ ์ดˆ์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฐ ์—ด์ค‘ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด..
์„ ํ…๋ฐ..

์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ ์ง‘์— ์–ด๋ฅธ์ด ์•„๋ฌด๋„ ์—†์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ฐ€ ์šด์ „๋Œ€๋ฅผ ์žก๊ณ  ์ฝ”์Šค๋ฅผ ๊ณ„ํšํ–ˆ์Šต๋‹ˆ๊นŒ? ๋ฌด์Šจ ์ฝ”์Šค?

๋ฆด๋ฆฌ์Šค๋Š” ๊ธฐ์ˆ  ๋ฐ๋ชจ ํ’ˆ์งˆ์„ ๊ฐ€์กŒ๊ณ  ์•ˆ์ •์ ์ธ ๊ฒƒ์€ ํ™•์‹คํžˆ ์•ˆ์ •์ ์ด์ง€ ์•Š์•˜์œผ๋ฉฐ ๋ฌผ๊ฑด์€ ์ผ๋ฐ˜ ์ „๋žต์— ์ ํ•ฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฆด๋ฆฌ์Šค๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ธฐ์ˆ  ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„์ด๋””์–ด๋ฅผ ์–ป์—ˆ๊ณ  ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฆด๋ฆฌ์Šค๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กฐ์—ฐ์„ค์— ๋Œ€ํ•œ ์ฝ˜ํ…์ธ ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ XF๋Š” ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ๋ฐ”๋ผ๋˜ ์„ฑ๊ณต์„ ๊ฑฐ๋‘์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์ฏค์ด๋ฉด ๊ทธ๋žฌ์–ด์•ผ ํ–ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ XF๊ฐ€ ์ฃฝ์Œ์˜ ๋ฌธํ„ฑ์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ์–ด๋ฅธ์ด ์šด์ „์„ ํ•ด์ฃผ๊ธฐ๋ฅผ ๋ฐ”๋ผ๊ณ  ์žˆ๋‹ค. ๊ฒŒ์ž„ ํ›„๋ฐ˜์—๋Š” ์—„์ฒญ๋‚œ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ MS๊ฐ€ XF์˜ ํ˜„์žฌ UI ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๊ณตํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด.

MS๋Š” ์Šค์Šค๋กœ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ๊ธ€์Ž„์š”, ํ”Œ๋Ÿฌํ„ฐ์ฒ˜๋Ÿผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. _XF๋Š” ์ž์ฒด UI๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค!_

์ง€๊ธˆ ๋‹น์žฅ์€ ๋‹คํŠธ ์ชฝ์ด ํ™•์‹คํžˆ ๋งค๋ ฅ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค!

Microsoft๋Š” Xamarin Forms์— ๋Œ€ํ•ด ๋œ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. Microsoft๋Š” Xamarin์˜ ๋ชจ๋ฐ”์ผ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ .NET ๊ณผ๋Œ€ ๊ด‘๊ณ ์˜ ์ˆ˜์ค€์„ ์œ ์ง€ํ•˜๊ณ  ์ „ํŒŒํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Microsoft๋Š” ์—ฌ์ „ํžˆ "๊ฐœ๋ฐœ์ž, ๊ฐœ๋ฐœ์ž, ๊ฐœ๋ฐœ์ž"๋ผ๋Š” ๊ณผ๊ฑฐ์— ์‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. " ๊ณผ๋Œ€ ๊ด‘๊ณ  ์‹œ๋Œ€. ์–ด๋Š ์ชฝ์ด ๋‚˜์˜์ง€ ์•Š์€์ง€, ๋‚˜์œ ์ ์€ ์ง€๊ธˆ ํ’ˆ์งˆ๋ณด๋‹ค ๊ณผ๋Œ€ ๊ด‘๊ณ ๊ฐ€ ๋” ๋งŽ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ˜„์‹ค์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ MacBook์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์˜ค๋žซ๋™์•ˆ Windows์™€ .NET์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Microsoft๋Š” ๋ชจ๋ฐ”์ผ ๋ฐ ํ•˜๋“œ์›จ์–ด ๋ถ„์•ผ์—์„œ ๊ฑฐ์˜ ๋ชจ๋“  ๊ณณ์—์„œ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ณผ๋Œ€ ๊ด‘๊ณ ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๊ตฐ๋ถ„ํˆฌํ•˜์ง€๋งŒ ๊ฝค ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ ์ˆ˜์ค€์—์„œ Microsoft๋Š” ํฌ๊ฒŒ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜คํ•ดํ•˜์ง€ ๋งˆ์„ธ์š”. Microsoft์—๋Š” ์ •๋ง ํ›Œ๋ฅญํ•œ ๊ธฐ์ˆ  ์ธ๋ ฅ์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๊ธฐ์ˆ  ์ธ๋ ฅ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

MS๊ฐ€ ์ž์ฒด ์•ฑ์— XF๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค๋ฉด..

์–ด๋–ป๊ฒŒ ๊ทธ๋Ÿด ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ? ์„ฑ๋Šฅ์€ ์žˆ์–ด์•ผ ํ•  ๊ณณ์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Reality is most of developers are on MacBooks ๋ฐฑ์—…ํ•  ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ๋’ท๋ฐ›์นจ ํ•  ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๊ธฐ์ˆ ์„ ๋ณด๋ฉด ํ•ด๋‹น ๊ฐœ๋ฐœ์ž์˜ ๋Œ€๋ถ€๋ถ„์ด MacBook์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@opcodewriter "์ธ๊ธฐ ๊ธฐ์ˆ "์ด "MacBook"๊ณผ ์–ด๋–ค ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ? macOS์—์„œ ์ž‘๋™ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์€ ๋‹ค๋ฅธ Unix ๊ธฐ๋ฐ˜ ์šด์˜ ์ฒด์ œ์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@encrypt0r ์˜ˆ, ์ €๋ฅผ ๋ฌด์‹œํ•˜์‹ญ์‹œ์˜ค. ๋ชจ๋“  ๊ฒƒ์ด ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ‘

๋Œ€ ์ธ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋”๊ฐ€ Mac์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?

ํŒŒํ‹ฐ์— ์กฐ๊ธˆ ๋Šฆ์—ˆ์ง€๋งŒ Xamarin๋„ ์ด์ œ ์›น ๊ธฐ์ˆ ์— ์ฐธ์—ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
http://www.davidortinau.com/blog/styling_xamarin_forms_with_css

CSS๋ฅผ Xaml ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ์— ๊ฒฐํ•ฉํ•˜๋Š” Frankenstein์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ด๋ด. ๐Ÿ˜‰ ๋˜ํ•œ ์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋œ CSS๋Š” CSS์ฒ˜๋Ÿผ ์ฝ๋Š” Xamarin ์ปจํŠธ๋กค ์Šคํƒ€์ผ์„ ์œ„ํ•œ DSL์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ์š”์ ์€ WHEN USED CORRECTLY ๐Ÿ˜† ์–ด๋””์—์„œ๋‚˜ ์žฅ์น˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„ฑ์ˆ™ํ•œ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ํ† ๋ก :
https://twitter.com/migueldeicaza/status/972525236301238272

@Mike-EEE, draw ๋ฐ materialShell ๋ฌธ์ œ๋ฅผ ๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@juepiezhongren ์ด ์—†์Šต๋‹ˆ๋‹ค ... ์ด๊ฒƒ์€ HTML ๋˜๋Š” Forms์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๊ฑด ํ™˜์ƒ์ ์ด์•ผ

์˜ˆ, @juepiezhongren์€ ๋‚˜์˜์ง€ ์•Š์ง€๋งŒ ์ฒ˜์Œ๋ถ€ํ„ฐ ์œ ๋น„์ฟผํ„ฐ์Šคํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์‹œ๊ฐ„/๋ˆ/๋…ธ๋ ฅ/์ž์›์˜ ๊ฐ€์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. :)

Material Shell์€ ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์Šคํƒ€์ผ์ด ์ง€์ •๋œ ๊ธฐ๋ณธ ์ปจํŠธ๋กค์ด๋ฉฐ ์ง„์ •ํ•œ ์œ ๋น„์ฟผํ„ฐ์Šค ์ปจํŠธ๋กค์€ ์•„๋‹™๋‹ˆ๋‹ค.

@juepiezhongren
๋‚˜๋Š” ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๋ฐฐ์น˜ํ•œ ๋ฐฉ์‹์€ ์•„๋‹ˆ์ง€๋งŒ ๊ฐœ๋…์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๊ฟˆ์—์„œ Avalonia์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” ์™„๋ฒฝํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ ๋ฃฉ์•คํ•„์€ ์ €์—๊ฒŒ ๊ทธ๋‹ค์ง€ ํฐ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ปจํŠธ๋กค์ด ํ•„์š”ํ•œ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๊ฐ ํ”Œ๋žซํผ์— ๊ธฐ๋ณธ ๋ชจ์–‘๊ณผ ๋Š๋‚Œ ํ…Œ๋งˆ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ๋ชจ๋“  ๊ณณ์—์„œ ๋™์ผํ•˜๊ฒŒ ๋ Œ๋”๋ง๋˜๋Š” ์ปจํŠธ๋กค์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์ด wasm ์ง€์›์„ ๋ฐ›๋Š” ์ฆ‰์‹œ Silverlight๊ฐ€ ๋Œ์•„์˜ค๊ณ  RIA Services๋ฅผ ๊ทธ๋ฆฌ์›Œํ•˜๋Š” ์ผ๋งŒ ๋‚จ์Šต๋‹ˆ๋‹ค ๐Ÿ˜

@MisterJimson ์‹ค์ œ๋กœ ์•„์ด๋””์–ด๋Š” ์žฌ๋ฃŒ ์‰˜์ด ๋ณธ์งˆ์ ์œผ๋กœ ์œ ๋น„์ฟผํ„ฐ์Šค ์ปจํŠธ๋กค์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jassmith ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ? ์›์‹œ ์ปจํŠธ๋กค์„ ๋ Œ๋”๋งํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋ณธ ์ปจํŠธ๋กค์„ ์Šคํƒ€์ผ๋งํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ธฐ๋ณธ ์ปจํŠธ๋กค ์Šคํƒ€์ผ ์ง€์ •์—๋Š” ์ตœ์†Œํ•œ์˜ ๊ฒฝ์šฐ์—๋„ ํ•ญ์ƒ ์•ฝ๊ฐ„์˜ ๋ถˆ์ผ์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@MisterJimson ์‰˜์€ skia ๋˜๋Š” ios CoreDraw API๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
@jassmith ๊ทธ๋ž˜์„œ fluentShell ๋˜๋Š” cupertinoShell์ด โ€‹โ€‹์žˆ์Šต๋‹ˆ๊นŒ?

@misterJimson as @juepiezhongren ๋„ค, ์•„์ด๋””์–ด๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์™„์ „ํžˆ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋Œ€์ƒ ํ”Œ๋žซํผ์— ๊ทธ๋ฆด ์ˆ˜์žˆ์„ ์‹ค ๊ฑฐ์˜ˆ์š”ํ•˜์ง€๋งŒ ๋‹น์‹ ์€ ํ™•์‹คํžˆ ๊ทธ๊ฒƒ์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” Material(์ตœ์†Œํ•œ MaterialShell ํฌํ•จ)์„ ๋ชจ๋“  ๊ณณ์— ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@juepiezhongren ์ด์ƒ์ ์œผ๋กœ๋Š” ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฌธ์ œ๋Š” FluentShell๊ณผ CupertinoShell์ด โ€‹โ€‹๋ชจ๋‘ ๋ผ์ด๋ธŒ ๋ธ”๋Ÿฌ์— ํฌ๊ฒŒ ์˜์กดํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Android๋Š” ํ›Œ๋ฅญํ•˜์ง€๋งŒ ์–ด๋–ป๊ฒŒ๋“  ํšจ์œจ์ ์ธ ๋ผ์ด๋ธŒ ๋ธ”๋Ÿฌ ๋ณด๊ธฐ๋ฅผ ํ”ผํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ๋™์•ˆ Material์€ ์ž์—ฐ์Šค๋Ÿฌ์šด ์ฒซ ๋ฒˆ์งธ ๋Œ€์ƒ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ํ•˜์ž๋ฉด, Shell์€ ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  MaterialShell์€ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฑฐ ๋ดค์–ด- https://github.com/SteveSandersonMS/BlazorElectronExperiment.Sample ?
๋ชจ๋ฐ”์ผ ํ”Œ๋žซํผ์ด ์•„๋‹Œ ๋ฐ์Šคํฌํƒ‘ ์ „์šฉ์ž…๋‹ˆ๋‹ค.

@gulshan ์„œ๋ฒ„ ์ธก์ด ์ข‹์Šต๋‹ˆ๋‹ค

@juepiezhongren์— ๋Œ€ํ•œ ์ƒ๊ฐ
https://github.com/xamarin/Xamarin.Forms/issues/4435

ํƒœ๊ทธ๊ฐ€ ๋˜๋Š” ๋Œ€์‹  ์–ด๋””์—๋‚˜ ์กด์žฌํ•˜๋Š” ์†์„ฑ์ด๋ผ๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ  ์—ฌ๊ธฐ์—์„œ ์ œ์•ˆํ•œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๋ฉฐ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด Visual="Skia"๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@PureWeen ๋‚˜๋Š” visual="skia"๋ฅผ ์ข‹์€ ์ œ์•ˆ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ํ˜„์žฌ xf์˜ ์ปจํŠธ๋กค์—๋Š” ๊ฐœ์ธ ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ์†์„ฑ์ด ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ธŒ๋Ÿฌ์‹œ, controlTemplate ๋“ฑ

๋˜๋Š” ํ˜„์žฌ ์ปจํŠธ๋กค์„ ์ „์ฒด API๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ๋ž˜ํผ ๋ชจ๋“œ ๋™์•ˆ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋งŽ์€ ์†์„ฑ์„ ๋งŒ๋“ค๊ณ  skia ๋ชจ๋“œ ๋™์•ˆ ์œ ํšจํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ง€๋‚œ ๋ช‡ ๋‹ฌ ๋™์•ˆ Visual์—์„œ ๋งŽ์€ ๋ฐœ์ „์„ ์ด๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Visual Challenge๋ฅผ ์‹œ๋„ํ•ด ๋ณด๊ณ  ์ด ์ œ์•ˆ์„ ํ•˜๊ฒŒ ๋œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ๊ฐ์‚ฌ ํ•ด์š”! https://github.com/davidortinau/VisualChallenge

@samhouts ๋น„์ฃผ์–ผ์€ ์ข‹์ง€๋งŒ ๊ทธ๋ฆฌ๊ธฐ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์™„๋ฒฝํ•œ ํ”ฝ์…€ ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๊ฐœ์„  ์š”์ฒญ์€ ์‹œ๊ฐ์  ๋ฐ ๋„๋ฉด ์‚ฌ์–‘ https://github.com/xamarin/Xamarin.Forms/issues/2452 ์— ๋Œ€ํ•ด ๋ณด๋ฅ˜๋  ๋•Œ ์–ด๋””์— ํ•ด๋‹นํ•ฉ๋‹ˆ๊นŒ?

๋‹จ์ˆœํžˆ ํ˜„์žฌ xf์˜ ์ปจํŠธ๋กค์— ๊ฐœ์ธ ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ์†์„ฑ์ด ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ธŒ๋Ÿฌ์‹œ, controlTemplate ๋“ฑ

์ด๊ฒƒ์€ ์—ฌ๊ธฐ์—์„œ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ์—ฐ๊ฒฐ๋œ ์†์„ฑ์„ ํ†ตํ•ด ๋งค์šฐ ์‰ฝ๊ฒŒ ๊ทน๋ณต๋ฉ๋‹ˆ๋‹ค.

https://github.com/xamarin/Xamarin.Forms/issues/5005

@samhouts

์šฐ๋ฆฌ๋Š” ์ง€๋‚œ ๋ช‡ ๋‹ฌ ๋™์•ˆ Visual์—์„œ ๋งŽ์€ ๋ฐœ์ „์„ ์ด๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค.

์ €ํฌ๋Š” Windows์™€ ๋ฐ์Šคํฌํƒ‘์„ ์ตœ์šฐ์„ ์œผ๋กœ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Visual์€ UWP๋ฅผ ์ง€์›ํ•˜์ง€๋„ ์•Š์œผ๋ฉฐ ์‹œ๋„์กฐ์ฐจ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

#2452์—์„œ ์ง„ํ–‰ ์ค‘์ด๋ฏ€๋กœ ์ด์ œ ์ด ์ž‘์—…์„ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰