Eto: Mac - Mono 6.4λŠ” λͺ¨λ“  앱을 μ‹€ν–‰ν•˜μ§€λ§Œ 더 높은 Mono 버전은 μ‹€ν–‰ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2020λ…„ 03μ›” 28일  Β·  21μ½”λ©˜νŠΈ  Β·  좜처: picoe/Eto

μ§€κΈˆκΉŒμ§€ κ°œλ°œν•œ λͺ¨λ“  Mac 앱은 Monoλ₯Ό 6.6으둜 μ—…κ·Έλ ˆμ΄λ“œν•œ ν›„ μž‘λ™μ„ λ©ˆμ·„μŠ΅λ‹ˆλ‹€(6.8κ³Ό λ™μΌν•œ 문제).

Mono 6.4의 이전 μ„€μΉ˜λ‘œ 되돌리면 λ¬Έμ œκ°€ ν•΄κ²°λ©λ‹ˆλ‹€.

λ‚΄ 앱은 μ€‘μš”ν•œ 경우 TargetFramework net461 (Mac μ§„μž…μ ) 및 netstandard2.0 (곡유 dll)에 λŒ€ν•΄ μ»΄νŒŒμΌλ©λ‹ˆλ‹€.

항상 그렇듯이 였λ₯˜λŠ” λ‚΄ κ²ƒμž…λ‹ˆλ‹€.

κΈ°λ‹€λ € μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

λͺ¨λ“  21 λŒ“κΈ€

@LaraSQPλ‹˜ ,

λ˜ν•œ ν•œ 가지 μ£Όμ˜ν•  점은 _release_용으둜 μ»΄νŒŒμΌν•  λ•Œ λͺ¨λ…Έκ°€ 개발자 μƒμžμ— μ„€μΉ˜λœ μƒνƒœμ—μ„œ μ•± λ‚΄μ—μ„œ λͺ¨λ…Έλ₯Ό λ²ˆλ“€λ‘œ μ œκ³΅ν•˜λ―€λ‘œ 앱을 _μ‹€ν–‰_ν•˜κΈ° μœ„ν•΄ λͺ¨λ…Έλ₯Ό μ„€μΉ˜ν•  ν•„μš”κ°€ μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄λ ‡κ²Œν•˜λ©΄ μ•Œλ €μ§„ λŸ°νƒ€μž„μ΄ μžˆμŠ΅λ‹ˆλ‹€. λ˜λŠ” λŒ€μ‹  .NET Coreλ₯Ό μ‚¬μš©ν•˜κ³  앱에 λ²ˆλ“€λ‘œ λ¬ΆμŠ΅λ‹ˆλ‹€(μ΄λ ‡κ²Œ ν•˜κΈ° μœ„ν•΄ λͺ¨λ…Έλ₯Ό μ„€μΉ˜ν•  ν•„μš”κ°€ μ—†μŒ).

λΉ λ₯Έ λ‹΅λ³€ κ°μ‚¬ν•©λ‹ˆλ‹€.

Console.app에 λŒ€ν•΄ λͺ¨λ₯΄κ³  μ˜ˆμ™Έλ₯Ό λ³΄κ³ ν•©λ‹ˆλ‹€.

Windows에 Monoλ₯Ό μ„€μΉ˜ν•˜λŠ” 방법도 λͺ°λžμŠ΅λ‹ˆλ‹€. λΉŒμ–΄λ¨Ήμ„. μ–΄λ–€ μ„€μΉ˜ ν”„λ‘œκ·Έλž¨μ΄ μ μš©λ©λ‹ˆκΉŒ? 64λΉ„νŠΈ(GTK# μ—†μŒ) λ˜λŠ” GTK#도 ν•„μš”ν•©λ‹ˆκΉŒ?

GTK#은 ν•„μš”ν•˜μ§€ μ•ŠμœΌλ©° csprojμ—μ„œ <MacBundleTarget> 속성을 μ‚¬μš©ν•˜λŠ” λͺ¨λ…Έ λ²ˆλ“€λ§μ—λ§Œ mkbundle을 μ‚¬μš©ν•©λ‹ˆλ‹€. μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ 기본값은 mono-6.4.0-osx-10.9-x64 이며 mkbundle -list-targets λ‚˜μ—΄λœ λͺ¨λ“  값이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

Console.appκ³Ό κ΄€λ ¨ν•˜μ—¬ (적어도 λ‚˜μ—κ²ŒλŠ”) 정보가 μ—†λŠ” 두 가지 였λ₯˜λ§Œ μžˆμŠ΅λ‹ˆλ‹€.

3μ›” 29일 06:19:01 my-MacBook-Air com.apple.xpc.launchd[1](com.apple.xpc.launchd.oneshot.0x1000015e.MyApp1[10705]): μ„œλΉ„μŠ€κ°€ 비정상 μ½”λ“œλ‘œ μ’…λ£Œλ¨: 78

3μ›” 29일 06:40:29 my-MacBook-Air com.apple.xpc.launchd[1](com.example.MyApp1.4212[11362]): μ„œλΉ„μŠ€κ°€ 비정상 μ½”λ“œλ‘œ μ’…λ£Œλ¨: 1

Monoκ°€ μ„€μΉ˜λœ μƒνƒœμ—μ„œ μž¬μ»΄νŒŒμΌμ„ μ‹œλ„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

@LaraSQP "좩돌 λ³΄κ³ μ„œ" μ„Ήμ…˜μ„ μ‚΄νŽ΄λ³΄μ„Έμš”. 앱이 μΆ©λŒν•œ κ²½μš°μ— λŒ€ν•œ ν•­λͺ©μ΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. κ·Έ 사본은 문제λ₯Ό μ§„λ‹¨ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.

"였λ₯˜ λ³΄κ³ μ„œ"κ°€ λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

BTW, λͺ¨λ…Έ 6.8이 μ„€μΉ˜λ˜μ–΄ 있고 λ™μΌν•œ λ¬Έμ œκ°€ ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Screen Shot 2020-03-28 at 3 30 34 PM

κ³ λ €ν•΄μ•Ό ν•  ν•œ κ°€μ§€λŠ” (λ‹€λ₯Έ 문제 쀑 ν•˜λ‚˜μ—μ„œ) μ–΄λ–€ λ°©μ‹μœΌλ‘œ Info.plistλ₯Ό μˆ˜μ •ν•œ 경우 LF μ „μš©, UTF-8 _BOM이 μ—†λŠ”_, CRLFκ°€ μ•„λ‹Œ 것이어야 ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ μ†μƒλ˜μ—ˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

Info.plist 이 npp에 μ˜ν•΄ λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ‚΄ 개발 컴퓨터에 Monoλ₯Ό μ„€μΉ˜ν–ˆμ§€λ§Œ λ‹€μ‹œ μ»΄νŒŒμΌν•΄λ„ Monoκ°€ λ²ˆλ“€μ— μΆ”κ°€λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ 무엇을 λ†“μΉ˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

릴리슀 λͺ¨λ“œμ—μ„œλŠ” 기본적으둜 μˆ˜ν–‰λ©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ csprojμ—μ„œ <MacBundleMono> λ₯Ό true둜 μ„€μ •ν•©λ‹ˆλ‹€.

μ„€μ •ν•  수 μžˆλŠ” λ‹€μ–‘ν•œ 속성에 λŒ€ν•΄μ„œλŠ” BundleMono.targets 및 Mac.targets λ₯Ό μ‚΄νŽ΄λ³΄μ‹­μ‹œμ˜€.

μ΄λŸ¬ν•œ μ˜΅μ…˜μ„ VS ν”„λ‘œμ νŠΈ 속성에 μΆ”κ°€ν•˜μ—¬ λ‚˜μ€‘μ— 더 μ‰½κ²Œ 찾을 수 μžˆλ„λ‘ ν•˜κ³  μ‹Άμ§€λ§Œ κ·Έλ ‡κ²Œ ν•  수 μžˆλŠ” (자유) μ‹œκ°„μ΄ λ„ˆλ¬΄ μ μŠ΅λ‹ˆλ‹€.

csproj에 <MacBundleMono>True</MacBundleMono> λ₯Ό 좔가해도 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

그것이 λ‚˜μ—κ²Œ λͺ…λ°±ν•˜μ§€ μ•Šμ€ λ°©μ‹μœΌλ‘œ ν•˜μ§€ μ•ŠλŠ” ν•œ, 그것은 κ·Έλ ‡μŠ΅λ‹ˆλ‹€.

μ’‹μ•„μš”.

MacBundleMono κ°€ False μ„€μ •λœ κ²½μš°μ—λ§Œ MonoBundle 폴더가 앱에 ν¬ν•¨λ˜λŠ” κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚¬μŠ΅λ‹ˆλ‹€.

λ˜ν•œ Info.plist λŠ” UTF-8 BOM 및 CRLF λͺ¨λ‘ ν¬ν•¨ν•˜λ„λ‘ λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€μ— μ˜ν•΄ λ³€κ²½λ˜λ―€λ‘œ λ‚˜μ€‘μ— μˆ˜λ™μœΌλ‘œ μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ˜ν•œ Info.plistλŠ” λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€μ—μ„œ UTF-8 BOMκ³Ό CRLFλ₯Ό λͺ¨λ‘ ν¬ν•¨ν•˜λ„λ‘ λ³€κ²½λ˜λ―€λ‘œ λ‚˜μ€‘μ— μˆ˜λ™μœΌλ‘œ μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

이것은 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€. μ‚¬μš© 쀑인 Info.plist 파일(컴파일된 파일이 μ•„λ‹˜)을 첨뢀할 수 μžˆμŠ΅λ‹ˆκΉŒ?

MacBundleMonoκ°€ False둜 μ„€μ •λœ κ²½μš°μ—λ§Œ MonoBundle 폴더가 앱에 ν¬ν•¨λ˜λŠ” κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚¬μŠ΅λ‹ˆλ‹€.

예, MonoBundle 폴더가 λͺ¨λ…Έκ°€ λ²ˆλ“€λœλ‹€λŠ” 것을 μ˜λ―Έν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. μ΄μƒν•˜κ²Œλ„.. 이 폴더가 μ—†λ‹€λŠ” 것은 λͺ¨λ…Έκ°€ 'λ²ˆλ“€'되고 λͺ¨λ“  것이 κΈ°λ³Έ μ‹€ν–‰ νŒŒμΌμ— ν¬ν•¨λœλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

MacBundleMono λŠ” ν‰μƒμž…λ‹ˆλ‹€. λͺ¨λ…ΈλŠ” μ–΄λ–€ κ²½μš°μ—λ„ ν¬ν•¨λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

그리고 6.4.0.137 μ΄μƒμ˜ Mono 버전은 κ³„μ†ν•΄μ„œ λ‚΄ 앱을 μΆ©λŒμ‹œν‚΅λ‹ˆλ‹€.

λ‚˜μ€‘μ— λΉŒλ“œ λŒ€μƒμ„ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

κΈ°λ‹€λ € μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

λΉŒλ“œν•  λ•Œ 이 κ²½κ³ κ°€ 계속 ν‘œμ‹œλ˜λ‚˜μš”?

Couldn't find mkbundle, so app bundle will require mono to be installed! Install mono from https://mono-project.com to bundle it with your app or set MonoPath to where it is installed.

κ·Έλ ‡λ‹€λ©΄ λ‹€μ‹œ μ‹œμž‘ν•˜κ±°λ‚˜ <MonoPath> μ‚¬μš©ν•˜μ—¬ λͺ¨λ…Έκ°€ μ„€μΉ˜λœ μœ„μΉ˜λ₯Ό ꡬ체적으둜 κ°€λ¦¬μΌœμ•Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ μ•±μ˜ dmgλ₯Ό 보내주싀 수 μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” 그것을 더 μ§„λ‹¨ν•˜λ €κ³  ν•  수 μžˆμ—ˆλ‹€.

mkbundle 에 λŒ€ν•œ κ²½κ³ κ°€ ν‘œμ‹œλ˜μ§€ μ•ŠμœΌλ―€λ‘œ λ‹€μŒμ— MonoPath μ‹œλ„ν•˜κ² μŠ΅λ‹ˆλ‹€.

μ²¨λΆ€λœ 것은 이것 저것 ν…ŒμŠ€νŠΈν•˜λŠ” 데 μ‚¬μš©ν•œ κ°„λ‹¨ν•œ ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€. Macμ—μ„œ Mono 6.4 μ΄μƒμ—μ„œ μ‹œμž‘ν•˜μ§€λ„ μ•ŠμœΌλ©° Console.app에 좩돌 λ³΄κ³ μ„œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

MacFileTest.zip

environment variables 에 Monoλ₯Ό μΆ”κ°€ν–ˆμœΌλ―€λ‘œ mkbundle 에 아무 문제 없이 μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. MonoPath λŠ” μ—¬κΈ°μ„œ λ¬Έμ œκ°€ μ•„λ‹™λ‹ˆλ‹€.

사싀, λ‚˜λŠ” μˆ˜λ™μœΌλ‘œ mkbundle λ₯Ό μ‹€ν–‰ν•  수 μžˆμ—ˆλ‹€...

mkbundle --simple --cross mono-6.4.0-osx-10.9-x64 MacFileTest.exe -o MacFileTest

... Macμ—μ„œ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 점을 μ œμ™Έν•˜κ³ λŠ” μ„±κ³΅ν•œ 것 κ°™μ•˜μŠ΅λ‹ˆλ‹€.

λ‚΄ ν”„λ‘œμ νŠΈ(μœ„)에 mkbundle 에 λŒ€ν•œ μ°Έμ‘°κ°€ μ—†κΈ° λ•Œλ¬Έμ— λ‚΄κ°€ 많이 λ†“μΉ˜κ³  μžˆλŠ” 것이 λΆ„λͺ…ν•©λ‹ˆλ‹€.

λ‚΄ λ§ˆμ§€λ§‰ κ²Œμ‹œλ¬Όμ΄ μž‘μ„±λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ 찾을 수 μ—†κ±°λ‚˜ μ–΄λ–»κ²Œ λ“  μ‚­μ œ 된 것 κ°™μŠ΅λ‹ˆλ‹€.

λ¨Όμ € netcoreapp3.1 μ‹€μ œλ‘œ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 정말 κ³ λ§™μŠ΅λ‹ˆλ‹€.

Mono μ œκ±°ν–ˆκ³  이제 λͺ¨λ“  앱이 net core μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€. λ‚˜λŠ” 쑰금 λͺ…λ Ή 이후에 λ†€λž€λ‹€ dotnet μ—μ„œ Terminal νŠΈλ¦Όμ„ :

zsh: λͺ…령을 찾을 수 μ—†μŒ: dotnet

ν•œ 가지가 λ‹€λ₯Έ 것과 관련이 μ—†λ‹€κ³  μƒκ°ν•˜μ‹­μ‹œμ˜€(?).

μ•Œκ³  싢은 두 가지 μž‘μ€ λ¬Έμ œκ°€ 남아 μžˆμŠ΅λ‹ˆλ‹€.

  1. λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€μ—λŠ” 항상 λ²ˆλ“€μ˜ MacOS 폴더 μ•ˆμ— .pdb 파일이 ν¬ν•¨λ©λ‹ˆλ‹€.

  2. λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€λŠ” 항상 CFBundleExecutable ν‚€λ₯Ό ν¬ν•¨ν•˜λ„λ‘ Info.plist λ₯Ό μˆ˜μ •ν•˜μ—¬ κΈ°μ‘΄ ν‚€λ₯Ό λ³΅μ œν•©λ‹ˆλ‹€(μžˆλŠ” 경우). κ·Έ κ²°κ³Ό BOM 및 CRLF κ°€ ν”„λ‘œμ νŠΈμ˜ μ›λž˜ Info.plist 에 μ—†μŒμ—λ„ λΆˆκ΅¬ν•˜κ³  ν¬ν•¨λ©λ‹ˆλ‹€.

이 두 문제의 ν•΄κ²° 방법은 1을 μ‚­μ œν•˜κ³  2λ₯Ό λŒ€μ²΄ν•˜λŠ” κ°„λ‹¨ν•œ 배치 νŒŒμΌμž…λ‹ˆλ‹€. λΆˆν–‰νžˆλ„ post-build μž„μ—λ„ λΆˆκ΅¬ν•˜κ³  λ„ˆλ¬΄ 일찍 μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— post-build events 에 μΆ”κ°€ν•  수 μ—†μœΌλ―€λ‘œ μˆ˜λ™μœΌλ‘œ μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. , λ‚΄κ°€ 말할 μˆ˜μžˆλŠ” ν•œ.

λ¬΄ν•œν•œ 인내심에 λ‹€μ‹œ ν•œλ²ˆ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰