Masaüstü Uygulaması Paketleme
Çalıştırılabilir bir ikili dosya sunun.
Masaüstü Uygulaması Paketleme, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.
Hata Ayıklamadan Yayına
Geliştirme sırasında, optimize edilmemiş bir hata ayıklama ikilisi oluşturan cargo run kullanılır. Dağıtım için bir yayın derlemesine ihtiyacınız vardır: cargo build --release.
Yayın derlemeleri optimizasyonları etkinleştirir ve hata ayıklama yükünü kaldırarak target/release/ altında çok daha küçük ve hızlı bir ikili üretir.
cargo build --release
# binary at target/release/my_appİkiliyi Küçültme
egui uygulamaları bir GPU arka ucunu statik olarak bağladıkları için büyük olabilir. Cargo.toml içinde bir yayın profili kullanarak boyutu azaltın.
Bağlama zamanı optimizasyonunu, tek bir kod üretim birimini, panik durumunda işlemi sonlandırmayı ve sembolleri kaldırmayı etkinleştirmek, son çalıştırılabilir dosyanın boyutunu megabaytlarca azaltabilir.
[profile.release]
opt-level = "z"
lto = true
codegen-units = 1
panic = "abort"
strip = trueWindows'ta Konsolu Gizleme
Windows'ta bir GUI uygulaması konsol penceresi oluşturmamalıdır. Kasa köküne windows_subsystem özniteliğini ekleyin ve bunu yayın derlemesiyle sınırlandırın; böylece geliştirme sırasında günlükleri görmeye devam edersiniz.
Bu yapılmazsa, çalıştırılabilir dosyaya çift tıklamak pencerenizin yanında siyah bir terminalin kısa süreliğine görünmesine neden olur.
#![cfg_attr(
not(debug_assertions),
windows_subsystem = "windows"
)]
fn main() -> eframe::Result<()> { /* ... */ }Pencere Simgesi Ayarlama
Özenle hazırlanmış bir uygulama kendi pencere simgesini ayarlar. Başlangıçta PNG baytlarını yükleyin, bunları RGBA'ya çözümleyin ve bir IconData değerini NativeOptions üzerinden aktarın.
Görüntüyü include_bytes! ile gömerek simgenin ayrı bir dosya olarak değil, ikilinin içinde dağıtılmasını sağlayın.
let icon = eframe::icon_data::from_png_bytes(
include_bytes!("../assets/icon.png")
).unwrap();
let opts = eframe::NativeOptions {
viewport: egui::ViewportBuilder::default().with_icon(icon),
..Default::default()
};Görüntü Alanını Yapılandırma
ViewportBuilder yerel pencereyi denetler: başlangıç boyutunu, en küçük boyutu, başlığı, yeniden boyutlandırılabilirliği ve süslemeleri belirler.
Uygulamanızın ilk açılışta çok küçük veya gereğinden büyük bir pencere yerine kullanılabilir bir boyutta açılması için makul varsayılanlar belirleyin.
let viewport = egui::ViewportBuilder::default()
.with_inner_size([900.0, 600.0])
.with_min_inner_size([400.0, 300.0])
.with_title("My App");
let opts = eframe::NativeOptions { viewport, ..Default::default() };Varlıkları Gömme
Tek dosyalık bir dağıtım için yazı tiplerini, görüntüleri ve yapılandırmayı include_bytes! ve include_str! ile doğrudan ikiliye gömün.
Bu, kaynaklardan oluşan bir klasörü ayrıca dağıtma gereğini ortadan kaldırır ve uygulamanın farklı bir çalışma dizininden çalıştırıldığında bozulmasını önler.
let font = egui::FontData::from_static(
include_bytes!("../assets/Inter.ttf")
);
// register font in ctx.set_fonts(...)macOS Uygulama Paketleri
macOS'ta çıplak bir ikili tıklanabilir bir uygulama değildir. Info.plist içeren bir .app paketi ve bir .icns simgesi gerekir.
cargo-bundle aracı bunu otomatikleştirir ve Cargo.toml içindeki [package.metadata.bundle] bölümünden üst verileri okur.
[package.metadata.bundle]
name = "My App"
identifier = "com.example.myapp"
icon = ["assets/icon.icns"]
# then: cargo bundle --releaseKod İmzalama ve Noter Onayı
macOS'ta diğer makinelere dağıtım yapmak, bir Developer ID sertifikasıyla imzalamayı ve Apple tarafından noter onayından geçirmeyi gerektirir; aksi hâlde Gatekeeper uygulamayı engeller.
Paketi imzalamak için codesign kullanın, ardından notarytool ile gönderip bileti pakete ekleyin. Windows'ta da SmartScreen uyarılarını önlemek için Authenticode imzası kullanmak yararlıdır.
codesign --deep --force --options runtime \
--sign "Developer ID Application: Name (TEAMID)" \
MyApp.appPlatformlar Arası Derlemeler
eframe platforma özgü GPU ve pencere kitaplıklarını bağladığı için her işletim sistemi yerel bir derleme gerektirir. Güvenilir yaklaşım, çoğunlukla sürekli tümleştirme çalıştırıcıları aracılığıyla her hedef işletim sisteminde derleme yapmaktır.
cross gibi araçlar Linux hedeflerinde yardımcı olur; ancak Linux'tan macOS veya Windows için GUI ikililerini gerçekten çapraz derlemek güvenilir değildir. Bunun yerine matris tabanlı sürekli tümleştirme derlemelerini tercih edin.
# GitHub Actions matrix
# runs-on: [ubuntu-latest, macos-latest, windows-latest]
cargo build --releaseWeb Hedefi
egui ayrıca WebAssembly olarak derlenebilir. wasm32-unknown-unknown hedefiyle derleyin ve statik olarak barındırabileceğiniz bir HTML/JS/WASM kümesi oluşturan trunk ile paketleyin.
Aynı App kodu tarayıcıda eframe::WebRunner aracılığıyla, bir canvas öğesine bağlanarak çalışır.
rustup target add wasm32-unknown-unknown
trunk build --release
# outputs dist/ ready to hostDağıtım Kontrol Listesi
Dağıtımdan önce: yayın profilini boyut için ayarlayın, Windows konsolunu gizleyin, bir simge ve varlıkları gömün, macOS için paket oluşturun ve hem macOS hem de Windows için imzalayın.
Son çıktıyı geliştirme makinenizde değil, temiz bir makinede test edin; böylece gerçek kullanıcıların karşılaşabileceği eksik sistem kitaplıklarını veya imzasız ikili uyarılarını yakalayabilirsiniz.
Kısa Kontrol
windows_subsystem özniteliği neden eklenir?
Özet
cargo build --release ile dağıtın, ardından yayın profilini boyut için optimize edip Windows konsolunu gizleyin. Bir pencere simgesi ve görüntü alanı ayarlayın; kendi kendine yeterli bir ikili elde etmek için varlıkları include_bytes! ile gömün.
macOS'ta cargo-bundle ile paket oluşturup imzalayın ve noter onayından geçirin; platformlar arası kapsam için işletim sistemi başına sürekli tümleştirme kullanarak derleyin ve WebAssembly'yi trunk ile hedefleyin. Son çıktıyı her zaman temiz bir makinede test edin. Böylece egui kursu tamamlanır.
Sıkça Sorulan Sorular
“Masaüstü Uygulaması Paketleme” dersi ücretsiz mi?
Evet — “Masaüstü Uygulaması Paketleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.
“Masaüstü Uygulaması Paketleme” dersinde ne öğreneceğim?
Çalıştırılabilir bir ikili dosya sunun. Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Masaüstü Uygulaması Paketleme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Anında Mod Kullanıcı Arayüzü Temelleri
- Bileşenler ve Yerleşim
- Uygulama Durumunu Yönetme
- Masaüstü Uygulaması Paketleme