Tauri ile winapp CLI kullanma

Bu kılavuzda, paket kimliğiyle hata ayıklamak ve uygulamanızı MSIX olarak paketlemek için CLI'nin tauri uygulamasıyla nasıl kullanılacağı winapp gösterilmektedir.

Paket kimliği, Windows app modelinde temel bir kavramdır. Uygulamanızın belirli Windows API'lerine (Bildirimler, Güvenlik, AI API'leri vb.) erişmesine, temiz bir yükleme/kaldırma deneyimine ve daha fazlasına erişmesine olanak tanır.

Tam bir çalışma örneği için bu depodaki Tauri örneğine göz atın.

Önkoşullar

  1. Windows 11
  2. Node.js - winget install OpenJS.NodeJS --source winget
  3. Rust Araç Zinciri - Rust'u rustup ile veya winget install Rustlang.Rustup --source winget
  4. winapp CLI - winget install microsoft.winappcli --source winget

İpucu

Bunları zaten yüklediyseniz, güncelleştirmeleri winget install denetlemek için komutları yine de çalıştırın.

1. Yeni Bir Tauri Uygulaması Oluşturma

Resmi iskele aracını kullanarak yeni bir Tauri uygulaması oluşturarak başlayın:

npm create tauri-app@latest

istemleri izleyin:

  • Project name: tauri-app (veya tercih ettiğiniz ad)
  • Ön uç dili: JavaScript
  • Paket yöneticisi: npm
  • Kullanıcı arabirimi şablonu: Vanilla
  • Kullanıcı arabirimi varyantı: JavaScript

project dizininize gidin ve bağımlılıkları yükleyin:

cd tauri-app
npm install

Her şeyin çalıştığından emin olmak için uygulamayı çalıştırın:

npm run tauri dev

2. Kimliği Denetlemek için Kodu Güncelleştirme

Uygulamanın paket kimliğiyle çalışıp çalışmadığını denetlemek için uygulamayı güncelleştireceğiz. Rust arka ucundaki windows kutusunu kullanarak Windows API'lere erişip ön uca erişim sağlamak için kullanacağız.

Altyapı Değişiklikleri (Rust)

  1. Bağımlılık Ekle: Dosyasını açın src-tauri/Cargo.toml ve dosyanın sonuna aşağıdaki satırları ekleyin. Bu, paket kimliğini denetleyebilmemiz için Windows API bağlamalarını ekler:

    [target.'cfg(windows)'.dependencies]
    windows = { version = "0.58", features = ["ApplicationModel"] }
    
  2. Komut Ekle: src-tauri/src/lib.rs açın ve get_package_family_name fonksiyonunu ekleyin. pub fn run() işlevinin önüne yerleştirin:

    #[tauri::command]
    fn get_package_family_name() -> String {
        #[cfg(target_os = "windows")]
        {
            use windows::ApplicationModel::Package;
            match Package::Current() {
                Ok(package) => {
                    match package.Id() {
                        Ok(id) => match id.FamilyName() {
                            Ok(name) => name.to_string(),
                            Err(_) => "Error retrieving Family Name".to_string(),
                        },
                        Err(_) => "Error retrieving Package ID".to_string(),
                    }
                }
                Err(_) => "No package identity".to_string(),
            }
        }
        #[cfg(not(target_os = "windows"))]
        {
            "Not running on Windows".to_string()
        }
    }
    
  3. Komutu Kaydet: Aynı dosyada ()src-tauri/src/lib.rs işlevini güncelleştirerek run yeni komutu kaydedin:

    pub fn run() {
        tauri::Builder::default()
            .plugin(tauri_plugin_opener::init())
            .invoke_handler(tauri::generate_handler![greet, get_package_family_name]) // Add get_package_family_name here
            .run(tauri::generate_context!())
            .expect("error while running tauri application");
    }
    

Ön Uç Değişiklikleri (JavaScript)

  1. HTML Güncelleştirme: Sonucu görüntülemek için bir paragraf açın src/index.html ve ekleyin:

    <!-- ... inside <main> ... -->
    <p id="pfn-msg"></p>
    
  2. Güncelleştirme Mantığı: komutunu çağırmak ve sonucu görüntülemek için açın src/main.js :

    const { invoke } = window.__TAURI__.core;
    
    // ... existing code ...
    
    async function checkPackageIdentity() {
      const pfn = await invoke("get_package_family_name");
      const pfnMsgEl = document.querySelector("#pfn-msg");
    
      if (pfn !== "No package identity" && !pfn.startsWith("Error")) {
        pfnMsgEl.textContent = `Package family name: ${pfn}`;
      } else {
        pfnMsgEl.textContent = `Not running with package identity`;
      }
    }
    
    window.addEventListener("DOMContentLoaded", () => {
      // ... existing code ...
      checkPackageIdentity();
    });
    
  3. Şimdi uygulamayı her zamanki gibi çalıştırın:

    npm run tauri dev
    

    Uygulama penceresinde "Paket kimliğiyle çalışmıyor" ifadesini görmeniz gerekir. Bu, standart geliştirme derlemesinin paket kimliği olmadan çalıştığını onaylar.

3. winapp CLI ile Project başlatın

winapp init komutu, bir kerede ihtiyacınız olan her şeyi ayarlar: uygulama manifesti ve kaynaklar. Manifesto, Windows'un API erişimi vermek için kullandığı uygulamanızın kimliğini (ad, yayımcı, sürüm) tanımlar.

Aşağıdaki komutu çalıştırın ve istemleri izleyin:

winapp init

Sorulduğunda:

  • Paket adı: Varsayılanı kabul etmek için Enter tuşuna basın (tauri-app)
  • Publisher name: Varsayılanı kabul etmek için Enter tuşuna basın veya adınızı girin
  • Sürüm: 1.0.0.0'ı kabul etmek için Enter'a basın
  • Giriş noktası: Varsayılanı kabul etmek için Enter tuşuna basın (tauri-app.exe)
  • SDK'ları Ayarlama: "SDK'ları ayarlama" seçeneğini seçmeyin (Tauri, C++ SDK üst bilgilerini değil, Rust'ın windows crate'ini kullanır)

Bu komut:

  • Oluşturma Package.appxmanifest — uygulamanızın kimliğini tanımlayan bildirim
  • Klasör oluşturma Assets — MSIX paketleme ve Mağaza gönderimi için gereken simgeler

Note

Hiçbir SDK paketi yönetilmediğinden, hiçbir winapp.yaml oluşturulmaz — Tauri, Rust'ın windows crate'ini Cargo aracılığıyla kullandığından, izlenebilecek winapp restore/update bir şey yoktur.

Görüntü adı, yayımcı ve özellikler gibi unsurları daha fazla özelleştirmek için Package.appxmanifest açabilirsiniz.

4. Kimlikle Hata Ayıklama

Kimlikle hata ayıklamak için Rust arka ucunu oluşturup, winapp run ile çalıştırmamız gerekir. npm run tauri dev İşlem yaşam döngüsünü yönettiğinden, kimliği oraya eklemek daha zordur. Bunun yerine özel bir script oluşturacağız. Hata ayıklama için sertifika veya imzalama gerekmez.

  1. Betik Ekle: package.json açın ve yeni bir betik tauri:dev:withidentity ekleyin.

    "scripts": {
      "tauri": "tauri",
      "tauri:dev:withidentity": "cargo build --manifest-path src-tauri/Cargo.toml && (if not exist dist mkdir dist) && copy /Y src-tauri\\target\\debug\\tauri-app.exe dist\\ >nul && winapp run .\\dist"
    }
    

    Bu betiğin yaptığı iş:

    • cargo build ...: Rust arka planı yeniden derlenir.
    • copy ... dist\\: Yalnızca exe dosyasını bir dist klasöre aşamalar ( target\debug klasör çok büyük ve uygulamanızın parçası olmayan ara derleme yapıtları içerir).
    • winapp run .\\dist: Gevşek bir düzen paketini kaydeder (gerçek bir MSIX yüklemesi gibi) ve uygulamayı başlatır.
  2. Betiği çalıştırın:

    npm run tauri:dev:withidentity
    

İpucu

Uygulama penceresinin arkasında bir terminal/konsol penceresi görebilirsiniz. Bu, Tauri hata ayıklama derlemeleri için normaldir (Rust işleminin konsoludur).

Şimdi uygulamanın açık olduğunu ve kimlikle çalıştığını onaylayan "Paket ailesi adı"nı gösterdiğini görüyor olmalısınız! Artık Bildirimler veya Phi Silica gibi yeni yapay zeka API'leri gibi paket kimliği gerektiren API'leri kullanmaya ve hata ayıklamaya başlayabilirsiniz.

İpucu

winapp run ayrıca paketi sisteminize kaydeder. Bu nedenle, 5. adımda yüklemeyi denediğinizde MSIX "zaten yüklü" olarak görünebilir. İşiniz bittiğinde geliştirme paketlerini temizlemek için kullanın winapp unregister .

İpucu

Gelişmiş hata ayıklama iş akışları (hata ayıklayıcıları ekleme, IDE kurulumu, başlatma hata ayıklama) için Hata Ayıklama Kılavuzu'na bakın.

5. MSIX ile paketle

Uygulamanızı dağıtmaya hazır olduğunuzda, uygulamanızın paket kimliğini sağlayacak bir MSIX olarak paketleyebilirsiniz.

İlk olarak, package.json öğesine bir pack:msix betik ekleyin.

"scripts": {
  "tauri": "tauri",
  "tauri:dev:withidentity": "...",
  "pack:msix": "npm run tauri -- build && (if not exist dist mkdir dist) && copy /Y src-tauri\\target\\release\\tauri-app.exe dist\\ >nul && winapp pack .\\dist --cert .\\devcert.pfx"
}

Bu betiğin yaptığı iş:

  • npm run tauri -- build: Rust arka planı yayın modunda derler.
  • copy ... dist\\: Yalnızca exe dosyasını bir dist klasöre aşamalar ( target\release klasör çok büyük ve uygulamanızın parçası olmayan ara derleme yapıtları içerir).
  • winapp pack .\\dist --cert .\\devcert.pfx: Uygulamayı MSIX olarak paketler ve imzalar.

Geliştirme Sertifikası Oluşturma

MSIX paketleri imzalanmalıdır. Yerel test için otomatik olarak imzalanan bir geliştirme sertifikası oluşturun:

winapp cert generate --if-exists skip

İpucu

Sertifikanın yayımcısı Publisher içindeki Package.appxmanifest ile eşleşmelidir. Komut bunu cert generate bildiriminizden otomatik olarak okur.

Derleme, Hazırlama ve Paketleme

npm run pack:msix

İpucu

Komut, pack geçerli dizininizdeki Package.appxmanifest dosyasını otomatik olarak kullanır ve paketlemeden önce hedef klasöre kopyalar. Oluşturulan .msix dosyası geçerli dizinde olacaktır.

Sertifikayı Yükleme

MSIX paketini yükleyebilmeniz için önce makinenizdeki geliştirme sertifikasına güvenmeniz gerekir. Bu komutu yönetici olarak çalıştırın (bunu sertifika başına yalnızca bir kez yapmanız gerekir):

winapp cert install .\devcert.pfx

Yükleme ve Çalıştırma

İpucu

4. adımda kullandıysanız winapp run paket sisteminizde zaten kayıtlı olabilir. Önce geliştirme kaydını kaldırmak için kullanın winapp unregister , ardından yayın paketini yükleyin.

Oluşturulan .msix dosyaya çift tıklayarak veya PowerShell kullanarak paketi yükleyin:

Add-AppxPackage .\tauri-app.msix

İpucu

MSIX dosya adı sürümü ve mimariyi içerir (örn. tauri-app_1.0.0.0_x64.msix). Tam dosya adı için dizininizi denetleyin. Kod değişikliklerinden sonra yeniden paketleme yapmanız gerekiyorsa, Windows yüklü bir paketi güncellemek için daha yüksek bir sürüm numarasına ihtiyaç duyduğundan, Version içindeki Package.appxmanifest artırmanız gerekir.

Yüklendikten sonra, başlat menüsünden uygulamanızı başlatabilirsiniz. Uygulamanın kimlikle çalıştığını görmeniz gerekir.

Tips

  1. Dağıtıma hazır olduğunuzda, kullanıcılarınızın otomatik olarak imzalanan bir sertifika yüklemesini gerektirmeyecek şekilde MSIX'inizi Sertifika Yetkilisi'nden bir kod imzalama sertifikasıyla imzalayabilirsiniz.
  2. Microsoft Store MSIX'i sizin için imzalar, göndermeden önce imzalamanız gerekmez.
  3. Desteklediğiniz her mimari için (x64, Arm64) bir tane olmak üzere birden çok MSIX paketi oluşturmanız gerekebilir.

Sonraki Adımlar