Platform desteği
Bugün neyin var olduğu, neyin geliştirilmekte olduğu ve neyin planlanmadığı.
Cesaret verici olmaktan ziyade dürüst olmak adına yazılmıştır. Platformunuz burada yer almıyorsa Rendel henüz bu platformda çalışmıyordur ve daha fazlasını okumanız bunu değiştirmeyecektir.
SDK'lar
| Platform | Durum | Notlar |
|---|---|---|
| Flutter (iOS, Android) | Yayında (0.50.0) | Referans uygulama. Katalogdaki her bileşen yerel (native) olarak çizilir; hiçbiri web view değildir. |
| Swift / SwiftUI | Başlanmadı | Protokol dilden bağımsızdır ve katalog blok blok belgelenmiştir; dolayısıyla yerel bir istemci, bir port'tan ziyade gerçek bir projedir. İhtiyacınız varsa bizimle iletişime geçin. |
| Kotlin / Jetpack Compose | Başlanmadı | Yukarıdaki gibi. |
| React Native | Başlanmadı | — |
| Web | Yayında (0.27.0) | Herhangi bir site için tek bir script etiketi. Katalogdaki her bileşen, kendi izole stilleriyle sayfa içinde çizilir. |
Flutter
| Gereksinim | Sürüm |
|---|---|
| Flutter | 3.29 veya daha yenisi |
| Dart | 3.7 veya daha yenisi |
| iOS deployment target | 13.0 |
Android minSdkVersion | 24 |
| Android derleme JDK'sı | 21 (JDK 17, invalid source release: 21 hatasıyla başarısız olur) |
| Android NDK | Flutter sizinkinin farklı olduğu konusunda uyarırsa 28.2.13676358 |
Alt sınır 0.43 sürümünde, harita bloğunun maplibre_gl paketiyle yükseltildi. Daha eski bir Flutter sürümünde, derlenen son sürüm v0.42.0'dır. Eski araç zincirleri derleme yerine sürüm çözümlemesinde (version solving) başarısız olur; bu nedenle hata, kaynak kodumuzdaki bir satır yerine kısıtlamayı belirtir.
Paket henüz pub.dev üzerinde yer almıyor. Paketi ve başka hiçbir şeyi içermeyen halka açık neon-apps/rendel-flutter deposunda bir git bağımlılığıdır; dolayısıyla talep edilecek bir erişim izni yoktur. Set up with AI, paketi bir sürüm etiketine sabitlenmiş olarak ekler. Paketi bir dal yerine bir etikette tutun: hareketli bir dala olan bağımlılık, lockfile her yeniden oluşturulduğunda tekrar çözümlenir.
Paket bir Flutter eklentisidir (plugin) ve beraberinde eklentiler getirir: yazma alanının “+” ve mikrofonu için image_picker ve speech_to_text, bir kartın bağlantısı için url_launcher, cihaz kimliğini ve yayınlanan görünümü başlatmalar arasında korumak için shared_preferences ve map bloğu için maplibre_gl. Bunların yanı sıra http ve crypto. Kendi yerel kodu küçüktür: mikrofon ve ağ izinlerini bildiren Android manifest dosyası, iOS'in uygulamayı kapatmasına izin vermek yerine Info.plist dosyasında kullanım açıklamaları eksik olduğunda mikrofonu ve kamerayı gizleyen bir iOS kontrolü, sistem belge seçicisi, add_to_calendar için cihazın kendi etkinlik düzenleyicisini açan köprü ve iOS'te bir pass için Apple'ın Apple Wallet'a Ekle butonu.
İzinler
Fotoğraflar ve Dosyalar hiçbir yerde izin gerektirmez: açtıkları seçiciler uygulamanızın dışında çalışır ve yalnızca seçilenleri teslim eder. Android de sizden hiçbir izin gerektirmez: SDK, INTERNET ve RECORD_AUDIO izinlerini kendisi bildirir ve derleme bunları birleştirir.
iOS istemleri, SDK'nın yazamadığı tek şeydir; çünkü Apple bunları uygulamanızın adına gösterir. Yapay zekâ kodlama aracı bu anahtarları ios/Runner/Info.plist dosyasına ekler; ifadeleri değiştirmek size kalmıştır:
| Anahtar | Amacı | O olmadan |
|---|---|---|
NSMicrophoneUsageDescription, NSSpeechRecognitionUsageDescription | Yazma alanının mikrofonu | Mikrofon dahil edilmez ve günlük kaydında usage_description_missing yazar |
NSCameraUsageDescription | “+” altındaki kamera | Kamera dahil edilmez ve aynı günlük satırı verilir |
NSCalendarsUsageDescription | iOS 16 ve öncesinde takvime ekleme | Etkinlik düzenleyici açılmaz ve günlük kaydında calendar_failed yazar. iOS 17'den itibaren izin gerektirmez |
RendelConfig.onPickAttachment ve RendelConfig.onDictate, yerleşik seçiciyi ve tanıyıcıyı sizinkilerle değiştirir. RendelAttachIcon.off ve RendelVoiceIcon.off bir denetimi tamamen kaldırır; bu durumda yazma alanı bir metin kutusu ve gönder butonundan ibaret olur.
neon_copilot sürümünden geçiş
0.32.0 sürümünden önce paketin adı neon_copilot idi. Bağımlılığı yeniden adlandırın, yukarıdaki depoya yönlendirin ve package:rendel/rendel.dart paketini içe aktarın. Eski adlar (NeonCopilot, NCConfig, CopilotTheme.neonDefault() ve diğerleri), kullanımdan kaldırılmış (deprecated) olarak işaretlenmiş şekilde çalışmaya devam eder; böylece çözümleyici (analyzer) yeniden adlandırılması gereken her satırı listeler. Bunlar 1.0 sürümünde kaldırılacaktır.
Verileri nerede tutar
Siz aksini belirtmedikçe cihazda, uygulamanın tercihlerinde (preferences) iki şey tutulur; her birini taşımak için tek bir küçük sınıf gerekir:
- Başlatmalar arasında uzaktan yapılandırma (remote config) —
RendelConfig.configStore - Başlatmalar arasında cihaz kimliği —
RendelConfig.deviceIdStore
Sunucu
Yüklenecek bir şey yoktur. API barındırılan bir hizmettir; uygulamanız onunla doğrudan HTTPS üzerinden iletişim kurar. Kendi sunucunuzda barındırılan (self-hosted) bir ürün yoktur. Bir değerlendirmenin ardından, ayrı bir kurumsal sözleşmeyle bir Türkiye bölgesi veya kendi sunucularınız sağlanabilir. (Verilerinizin bulunduğu yer.)
Veriler eu-central-1 (Frankfurt) bölgesinde işlenir. Neyin ne kadar süreyle saklandığını öğrenmek için güvenlik özeti sayfasına bakın.
Yerel ayarlar
Protokol client.locale değerini taşır ve SDK, siz bir tane ayarlamadığınız sürece cihazın kendi ayarını gönderir — uygulamanızda bir dil seçici olur olmaz bunu ayarlamalısınız. Türkçe bir uygulama çalıştıran İngilizceye ayarlı bir telefon, Rendel'i ekrandaki tek İngilizce öge haline getirmemelidir.
RendelConfig(locale: 'tr-TR')Yanıt. Sunucu modelden o dilde yanıt ister ve bu istek bir kuraldan ziyade bir varsayılandır: başka bir dilde yazılan bir mesaj o dilde yanıtlanır. Türkçe bir uygulamaya İngilizce yazan biri, ne okumak istediği konusunda bir ayarın söyleyebileceğinden fazlasını belirtmiştir.
Onay cümlesi. Kartı kasıtlı olarak sunucu oluşturur: modelin oluşturduğu bir kart, modelin kullanıcının kabul etmediği bir şeye dönüştürebileceği bir karttır. Bu nedenle cümle sizin şablonunuzdan gelir ve RendelAction.confirmTemplates, bu şablona yerel ayar başına bir çeviri sağlar.
RendelAction(
name: 'cancel_order',
description: 'Cancel an order that has not shipped',
params: RendelSchema.object({'order_id': RendelSchema.string()}),
risk: RendelRisk.destructive,
confirmTemplate: 'Cancel order {order_id}? This cannot be undone.',
confirmTemplates: {
'tr': '{order_id} numaralı siparişi iptal edelim mi? Bu geri alınamaz.',
'de': 'Bestellung {order_id} stornieren? Das kann nicht rückgängig gemacht werden.',
},
handler: cancelOrder,
)SDK'nın gönderdiği yerel ayarla eşleştirilir: önce tam etiket (pt-BR), ardından dil (pt), sunulmuşsa o dilin bölgesel bir varyantı ve son olarak confirmTemplate. Hiçbir şablonu olmayan bir aksiyon, İngilizce olan kendi adından oluşturulan bir cümleye geri döner; bu nedenle başka bir dilde hizmet veren bir uygulama bir şablon ayarlamalıdır.
Karttaki etiketler. Karttaki her değer, parametresinin title değeriyle, bu yoksa okunabilir hale getirilmiş adıyla etiketlenir. Bir parametreye yerel ayar başına bir etiket içeren titles verin; kart, cümleyle aynı şekilde birini seçer, böylece Türkçe bir kart İngilizce etiketlerin üzerinde Türkçe kelimeler göstermez. titles yalnızca kart içindir: model bunu asla görmez.
params: RendelSchema.raw({
'type': 'object',
'properties': {
'email': {
'type': 'string',
'title': 'Work email',
'titles': {'tr': 'İş e-postası', 'de': 'Geschäftliche E-Mail'},
},
},
'required': ['email'],
}),Her SDK sürümünde çalışır, çünkü params sunucuya tam olarak yazdığınız şekilde ulaşır. Çalışma zamanında dil değiştiren bir uygulama bir kez kaydolur ve etiketleri yine de okuyucunun dilinde almaya devam eder.
SDK'nın kendi ifadeleri — bir onay kartındaki iki buton, çalışma satırı, hata çubuğu — ikinci bir ayar olmaksızın aynı yerel ayarı takip eder. SDK bunları Türkçe, Deutsch, Français, Español ve العربية dillerinde sunar; diğer tüm diller İngilizce olanları korur. Böylece locale: 'tr-TR' ayarlayan bir uygulama artık Türkçe yanıt verip altında “Confirm” seçeneği sunmaz.
RendelConfig.strings ayarını yaparak bunları geçersiz kılabilirsiniz; bu durumda yerel ayarı aksi yönde olan bir uygulamada İngilizce kalmak da dahil olmak üzere tamamen bu ayar geçerli olur. Diğerlerinden vazgeçmeden tek bir kelimeyi değiştirmek için hazır sunulan kümeden başlayın:
RendelConfig(
locale: 'tr-TR',
strings: RendelStrings.forLocale('tr').copyWith(confirm: 'Transferi onayla'),
)Kasıtlı olarak bir Localizations temsilcisi (delegate) değildir: dilinizi zaten locale içinde bize bildiriyorsunuz ve bunun üzerine sizden bir temsilci kaydetmenizi istemek, alanı okumaktan daha kötü bir tercih olurdu.
Hazır sunulan çevirileri bir çevirmen değil, özelliği geliştiren mühendis yazdı. confirm, goBack ve irreversible, yıkıcı bir aksiyonun yetkilendirmesinde yer alır; burada neredeyse doğru anlama gelen bir kelime, bir yazım hatasından ziyade bir onay sorunudur — o dilde canlıya almadan önce bu üçünü anadili o dil olan birine okutun ve bunu yapana kadar üzerlerine copyWith ile yazın.
Halen İngilizce olan ve henüz yapılandırılamayanlar: katalogda hiçbir şey yoktur, çünkü işlenen bir bloktaki her kelime modelden veya kendi verilerinizden gelir. Yönetim panelinin kendi sayfaları baştan sona İngilizcedir — son kullanıcılarınızın değil, geliştiricilerinizin kullandığı arayüzdür.
Geliştirme yapmadan önce tüm bunları deneyebilirsiniz: yönetim panelindeki Test sayfasında bir cihaz dili seçici bulunur, bir cihazın göndereceği yerel ayarı gönderir ve Rendel'in kendi ifadelerini bu dilde önizler.