eimzo_flutter 1.2.1
eimzo_flutter: ^1.2.1 copied to clipboard
Flutter plugin wrapping the official E-IMZO Mobile SDK for Uzbekistan electronic signatures. Supports PFX/QR/NFC ID-card/USB token signing and eimzo:// deep links.
1.2.1 #
π USB token signing fixed β verified end-to-end on a physical FEITIAN JavaCard Token V1.0.
- Bundled the missing native-SDK dependency jars. 1.2.0 shipped
only the core SDK classes; the FEITIAN FTReader, ID-card applet and
pfx2qr jars were absent, so USB-token signing crashed with
NoClassDefFoundError: com.ftsafe...FTException. The plugin now bundles all four jars. - Updated bundled SDK to 1.2.8, which fixes the FEITIAN 2.0.1.7
USB flow: permission-request race, automatic
readerFind()retry after the grant, reader addressing byUsbDevicename, and direct slot-status detection for tokens without an interrupt endpoint. - Added R8 consumer rules for
com.ftsafe.**anduz.yt.idcard.applet.**so release builds keep the JNI-referenced reader classes.
1.2.0 #
- π Android: 16 KB page size muvofiqligi (Android 15+). Bundled
native Android SDK bumped
eimzo-sdk 1.2.6 β 1.2.7. Android 15+ va 16 KB xotira sahifali qurilmalar native.solarning ELF LOAD segmentlari 16 KB ga tekislanishini talab qiladi (Google Play SDK 35 uchun 2025-yil 1-noyabrdan majburiy). Avval qurilma quyidagi ogohlantirishni ko'rsatardi:
Tuzatishlar:Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ Π²ΡΡΠΎΠ²Π½Π΅Π½Ρ ΠΏΠΎ 16 ΠΠ: libgojni.so, libFTReaderPCSC_*.solibgojni.so(pfx2qr) Go manbasidan 16 KB alignment bilan qayta build qilindi.- FEITIAN kutubxonasi
1.0.9.6 β 2.0.1.7ga yangilandi β FEITIAN'ning rasmiy 16 KB tekislangan SDK'si. Ikkala lib ham endi 16 KB ELF. libgojni.sovapfx2qr.jarbundled tartibda saqlanib qoldi.
- β οΈ Integratorlar uchun: to'liq 16 KB muvofiqlik (yakuniy APK ZIP alignment) uchun ilovangizda AGP 8.5.1+ ishlating β eski AGP native lib'larni 4 KB ga zipalign qiladi.
- βΉοΈ USB token imzolash FEITIAN 2.0.1.7 API'ga o'tdi.
1.1.9 #
-
π Android: muddati tugagan sertifikat bilan imzolash bloklandi. Bundled native Android SDK bumped
eimzo-sdk 1.2.5 β 1.2.6.- Muddati o'tgan (
validTosanasi kelgan) kalit kartochkasida qizil "Muddati tugagan" badge chiqadi, Home'da IMZOLASH tugmasi o'chiriladi va kartochka xira ko'rinadi. "Mening kalitlarim" ro'yxatida ham har bir muddati o'tgan kartochka belgilanadi. - Defence-in-depth: tugma holati o'tib ketsa ham, bosilganda "Bu kalit muddati tugagan β imzolab bo'lmaydi" toast chiqadi.
- Muddati o'tgan (
-
β¨ iOS: muddati tugagan sertifikat bloki + kalitni bir bosishda tanlash. Bundled native iOS SDK bumped
EimzoSDK 1.1.5 β 1.1.6.- Muddati o'tgan (
validTosanasi kelgan) sertifikat bilan endi imzolab bo'lmaydi. Kartochka kulrang ko'rinishga o'tadi, qizil "Muddati tugagan" badge chiqadi, IMZOLASH tugmasi o'chiriladi. SDK-core'da ham guard bor (SignError.certExpired) β deeplink, QR va auto-sign yo'llari qamralgan. - Kalitlar ro'yxatida kartochka ustiga bir marta bosish endi uni darhol faol kalit qilib tanlaydi va Home'ga qaytaradi (avval uzoq bosib "Default qilish" tanlash kerak edi).
Dart API o'zgarmagan. Migration:
cd ios && rm -rf Pods Podfile.lock && pod install - Muddati o'tgan (
1.1.7 #
- π Android: PFX import R8 hot-fix. Bundled native Android SDK
bumped
eimzo-sdk 1.2.4 β 1.2.5. R8 minification yoqilgan integrator app'larda PFX kalit qo'shganda quyidagi crash bilan to'qnashar edi:
Sabab:F/go/Seq : failed to find method Seq.getRef F/libc : Fatal signal 6 (SIGABRT) in Java_go_Seq_initlibgojni.soJNI orqaligo.Seq.getRef,go.Seq.incRefmetodlarini nom orqali topadi. Consumer R8 ularni Kotlin koddan hech kim chaqirmaganini ko'rib rename/strip qilardi. Pluginconsumer-rules.progago.**vapfx2qr.**keep qoidalari qo'shildi β endi avtomatik shipga ket.
1.1.6 #
- π Fix: iOS App Store nested framework rejection. Bundled native
iOS SDK bumped
EimzoSDK 1.1.4 β 1.1.5. Avvalgi versiyalardaPfx2qr.frameworkEimzoSDK.framework/Frameworks/ichida embed qilingan edi va App Store Connect bunday tuzilmani rad etardi:
PlusITMS-90205 contains disallowed nested bundles ITMS-90206 contains disallowed file 'Frameworks' ITMS-90035 inner Pfx2qr Mach-O not properly signeddSYMyo'qligi haqida warning. Yangi versiyadaPfx2qr.xcframeworkalohida sibling sifatidaApp.app/Frameworks/ostiga joylashadi vadSYMfayllari xcframework ichida ship qilinadi β crash log'lar symbolicate bo'ladi.prepare_commandeski nestedEimzoSDK.xcframework'ni avtomatik aniqlab tozalaydi va ikkala xcframework'ni qaytadan yuklab oladi. Migration:cd ios && rm -rf Pods Podfile.lock && pod installDart API o'zgargan emas.
1.1.5 #
- π¨ Hot-fix: PFX fayldan import barcha avvalgi versiyalarda buzilgan
edi. Bundled native Android SDK bumped
eimzo-sdk 1.2.3 β 1.2.4. Fayl orqali kalit qo'shganda quyidagi crash bilan to'qnashar edi:
Sabab:java.lang.UnsatisfiedLinkError: dlopen failed: library "libgojni.so" not foundlibgojni.so(PFX parsing uchun native lib) Flutter plugin jniLibs ichida yo'q edi. Endi to'g'ridan-to'g'ri bundled (4 ABI Γ ~4.5 MB). - π¦ APK hajmiga ta'sir: bundled
.sofayllar tufayli ~18 MB qo'shildi.
1.1.4 #
- π¨ Feature: Android SDK 1.2.3 β UX yaxshilanishlar + NFC bug-fixlar.
Bundled native Android SDK bumped
eimzo-sdk 1.2.2 β 1.2.3.- 103-sek deeplink sessiya taymeri. Tashqi
eimzo://sign?qc=...deeplink kelganida sarlavhada toza taymer ko'rsatiladi (Sessiya: 1:43 qoldi). Foydalanuvchi kerak bo'lsa kalit qo'shishi va keyin imzolashi mumkin β deeplink ushlab turiladi. QR hash endi ekranga chiqarilmaydi (foydalanuvchiga ma'nosiz edi). - Orqaga qaytish tugmasi. Home (deeplink mode), AddKey, Keys ekranlarida AppBar back tugmasi.
- NFC imzolashda Lottie bottom sheet. Endi NFC kalit bilan imzolashda ham kalit qo'shishdagi kabi 3 ta animatsiya (yaqinlashtiring β o'qilmoqda β bajarildi) ko'rsatiladi.
- 103-sek deeplink sessiya taymeri. Tashqi
- π Tuzatishlar (SDK 1.2.3):
- NFC tag tashlanmas muammosi:
dispatchNfcTagActivity'ning pauseβresume tsiklida fragment topishni boshqa usulda qiladi. disableForegroundDispatchcrash try-catch ichida.- Sessiya tugaganida app majburan yopilmaydi β taymer faqat informatsion.
- NFC tag tashlanmas muammosi:
1.1.3 #
- β¨ Feature: SDK 1.1.4 β 103-soniyalik deeplink sessiyasi. Bundled
native iOS SDK bumped
EimzoSDK 1.1.3 β 1.1.4. Deeplink orqali ochilgan imzo so'rovi endi darhol imzolanmaydi β SDK 103 soniyalik sessiya ochadi va foydalanuvchi shu vaqt davomida kalit qo'shishi (ID karta / PFX / QR / USB token) yoki mavjudini tanlashi va IMZOLASH tugmasini bosib imzolashi mumkin.HomeViewyuqorisida live countdown banner ko'rinadi (mm:ss + progress bar, 15 soniya qolganda qizilga o'tadi). Vaqt tugasa "Sessiya muddati tugadi" overlay chiqadi. API o'zgarishi yo'q β Dart tomonida hech narsa o'zgarmadi, faqat native side UX o'zgardi.
1.1.2 #
- π Fix: SDK 1.1.3 - HomeView orqaga qaytish tugmasi. Bundled native
SDK bumped
EimzoSDK 1.1.2 β 1.1.3. EImzoView sheet sifatida ochilganda HomeView'da SDK'ni yopadigan tugma yo'q edi β hamburger icon funksiyasiz bor edi. Endichevron.backwardorqaga tugmasi sheet'ni@Environment(\.dismiss)orqali yopadi.
1.1.1 #
- π Fix: SDK 1.1.2 module dependency. Bundled native SDK bumped
EimzoSDK 1.1.1 β 1.1.2. Avvalgi versiyadaUnable to resolve module dependency: 'FeitianSDK'compile xatosi chiqayotgan edi. Endi@_implementationOnly import FeitianSDKorqali swiftinterface'dan yashirildi β consumer loyihalar muammosiz compile qiladi.
1.1.0 #
- π iOS: USB token orqali imzolash qo'shildi. Bundled native SDK
bumped
EimzoSDK 1.0.4 β 1.1.1. iOS 16+ ning ichkiCryptoTokenKitorqali Lightning/USB-C portga ulangan CCID tokenlar (Feitian eJava, ePass2003, Identiv SCR3xx va boshqalar) endi to'g'ridan-to'g'ri ishlaydi β token MFi sertifikatlangan bo'lishi shart emas.AddKeyView'da 4-source "USB Token" tugmasi.HomeViewauto-detect β CCID slot ulanganda "USB Token aniqlandi" banneri.KeyCard'daTokenchip.- Server tomonidan PKCS#7 qabul qilinishi tasdiqlangan (
m.e-imzo.uz).
- π Security: USB token APIsi license-gated. Barcha kirish nuqtalar
LicenseEnforcement.ensureAllowed()orqali o'tadi. - Cheklov: Lightning iPhone'da Apple Lightning-to-USB Camera Adapter (yoki MFi-certified ekvivalent) kerak. USB-C iPhone 15+ Pro / iPad'da to'g'ridan-to'g'ri USB-C β USB-A kabel ishlaydi.
- Flutter tomonida API o'zgartirish yo'q β mavjud
openEImzoView()/ deeplink flow USB tokenlar uchun ham avtomatik ishlaydi.
1.0.9 #
- π§Ή Android:
EimzoFlutterPlugin.kttozalandi. Foydalanuvchi uchun ko'rinmas, lekin loyiha sog'lig'i uchun foydali optimizatsiya:- Keraksiz
Handler/Looperboqimda olib tashlandi βEImzoSDKcallbacklari allaqachonDispatchers.Mainda chaqiriladi, qo'shimchamainHandler.post { }qatlami foydasiz edi. requireActivity(result)helper'i ajratildi β 4 ta handler'da takrorlanganactivity ?: result.error("NO_ACTIVITY", ...)patterni bitta funksiyaga yig'ildi.onDetachedFromEnginedaeventChannel.setStreamHandler(null)vaeventSink = nullqo'shildi β yengil memory leak xavfini yopadi.- Kanal nomlari va deep-link sxemasi
companion objectichida konstantalar sifatida ajratildi. - Kotlin compile warning'lar: 3 β 0.
- Keraksiz
1.0.8 #
- π Android: USB ulaganda ilova endi avtomatik ochilmaydi. Avvalgi
versiyada
USB_DEVICE_ATTACHEDintent-filter qo'shilgan edi β natijada FEITIAN token ulanishi bilan OS native UI'ni majburan ochib yuborardi. Bu noqulay edi, shuning uchun intent-filter vaeimzo_usb_device_filter.xmlolib tashlandi. USB token aniqlash hali ham ishlaydi β faqat foydalanuvchi native UI'ga o'tganida BroadcastReceiver yoqiladi va tugma faollashadi. - Bundled native SDK bumped to
eimzo-sdk-1.2.2.
1.0.7 #
- π Android: USB token avtomatik aniqlash. "USB Token orqali
imzolash" tugmasi endi faqat FEITIAN / CCID smart-card reader
telefonga ulanganda faollashadi. SDK
USB_DEVICE_ATTACHED/DETACHEDbroadcastlarini kuzatib, tugmani real vaqtda yoqadi / o'chiradi. Ulanmagan paytda tugma matni "USB tokenni ulang" ga o'zgaradi. - πͺͺ Android: device-filter + intent-filter. FEITIAN VID (0x096E)
uchun
res/xml/eimzo_usb_device_filter.xml+EImzoActivitymanifestidaUSB_DEVICE_ATTACHEDintent-filter. Token ulanganda OS ilovani avtomatik ochishni taklif qiladi va USB ruxsatini beradi. - π§Ή Android: SDK ommaviy API tozalandi. Barcha ichki klasslar
(
UsbTokenManager,NfcManager,EImzoApiClient, Room DAO/DB,LicenseGuard,QrCryptoManager, ViewModel'lar, va h.k.)internaldeb belgilandi. Endi consumer'da faqat zarur APIlar ko'rinadi. Past darajalisignUsbHashprimitiv olib tashlandi β USB sign uchun yagona APIsignWithUsbToken(pin, deepLink, callback). - Bundled native SDK bumped to
eimzo-sdk-1.2.1.
1.0.6 #
- π New
CONTRIBUTING.mdβ how to report bugs, suggest features, set up the dev environment, and submit PRs. Helps pub.dev's "package score" community signals and gives external contributors a clear on-ramp. - π Opened public GitHub issues calling for help with desktop and web platform support: macOS #1, Windows #2, Linux #3, Web #4.
1.0.5 #
- π Security hardening (both platforms).
- Android: saved passwords are now AES-256-GCM encrypted with an
AndroidKeyStore-bound key before being written to Room. Plain SQLite
reads on rooted devices yield ciphertext only; the key is bound to
the application UID and is invalidated on
Clear data. Bundled SDK bumped toeimzo-sdk-1.0.2. - Android: the SDK's Room DB and encrypted prefs are now excluded
from
adb backup/ Google Drive cloud backup viaandroid:fullBackupContent+android:dataExtractionRules. Your own app data is untouched β onlyeimzo_keys.dbis filtered. - iOS:
keys.jsonwritten withNSFileProtectionCompleteUntilFirstUserAuthentication. Pre-first- unlock the file is OS-encrypted; backup / jailbreak extraction yields opaque ciphertext.
- Android: saved passwords are now AES-256-GCM encrypted with an
AndroidKeyStore-bound key before being written to Room. Plain SQLite
reads on rooted devices yield ciphertext only; the key is bound to
the application UID and is invalidated on
1.0.4 #
- π Android setup section rewritten: clearer build.gradle requirements
(Java 17 + desugaring + minSdk 24), explanations of why each piece
is needed, note on
launchMode="singleTop"and Material theme pitfalls.
1.0.3 #
- π README usage and API sections rewritten β old
init/getInitialDeeplink/onNewDeeplinksnippet was missing theopenSignUicall that actually presents the SDK. New section shows the two real flows: open-from-button and open-from-external-deeplink. No code changes.
1.0.2 #
- π iOS support added. The plugin now bundles the closed-source
EimzoSDK.xcframework(downloaded from the public release onpod install) and exposes the sameopenSignUi(deepLink:)API on iOS. Requires iOS 16+. - The native iOS UI mirrors the Android SDK 1:1: Home, Cards (key list), PFX/QR/NFC import, deep-link auto-sign, in-app QR scan with "Domen va hesh kod" confirmation bottom sheet.
- Example app extended with iOS platform (
example/ios/) β same two buttons work on both platforms. - See README for iOS-specific setup: minimum deployment target, NFC
entitlement,
Info.plistpermissions,eimzo://URL scheme.
1.0.1 #
- Bundled native SDK bumped to
eimzo-sdk-1.0.1. - Fix: PFX/QR key import crashed with
JsonIOException: Abstract classes can't be instantiated! Class name: uz.eimzo.sdk.network.JsonRpcResponseafter the cert-info HTTP round-trip β R8 was stripping the no-arg constructors of the Gson-deserialized network DTOs. Added explicit-keeprules for alluz.eimzo.sdk.network.*DTOs (JsonRpcRequest/Response,CertInfoParams/Result,SiteInfoParams/Result,SendPkcs7Params,Pkcs7Result). - Fix:
ClassNotFoundException: androidx.viewbinding.ViewBindingat runtime β added explicitapi 'androidx.databinding:viewbinding:8.1.0'to the plugin's Gradle dependencies. - Fix:
NoClassDefFoundError: pfx2qr.Pfx2qrduring PFX import β bundledpfx2qr.jarand thelibgojni.sonative library (all 4 ABIs) directly into the plugin so consumers don't need any extra Maven repo. - New native bridge method
openSignUi({String? deepLink})β launches the full nativeEImzoActivity(Home + Keys + AddKey + sign flow). Optional deep-link argument jumps straight into the sign flow. - Example app simplified to two buttons: "Open E-IMZO native UI" and "Open with deep link (sign flow)".
- Verbose diagnostic logging added to
EImzoSDK.import*andEImzoApiClient.rpcCall(bakes exception class + stack into the log message string so R8 can't drop it).
1.0.0 #
BREAKING: Rewritten as a thin wrapper around the official E-IMZO Mobile SDK. The bundled eimzo-sdk-1.0.0 native SDK (classes + resources + jniLibs) owns all signing / key-management UI; this plugin just initializes it on the host activity and forwards deep links into Dart.
- New singleton entry point:
EimzoFlutter.instance(the old static API is gone). - Three-method API:
init({EimzoConfig})(runsEImzoSDK.checkLicenseAndInit),getInitialDeeplink(),onNewDeeplink(). EimzoConfigexposesisTestMode,productionApiUrl,testApiUrl.EimzoExceptionwraps platform errors.- Deep-link scheme host changed from
eimzo://opentoeimzo://sign(per new SDK). - Android: dropped
uz.yt.idcard.eimzo:flutter_debug/releasedependency and thenexus.yt.uzrepository requirement. AAR contents are merged into the plugin (classes, res, jniLibs, manifest) plus transitive deps (kotlinx-coroutines, AndroidX core/appcompat/lifecycle/room, Material, OkHttp, Gson, BouncyCastle, Lottie). Consumers don't need any extra Maven repo. - AGP
androidResources.additionalParameters '--extra-packages', 'uz.eimzo.sdk'so the bundled SDK can resolve its R class against the merged resources. - Removed the separate-Flutter-engine
EimzoFlutterActivityβ deep links are delivered to the host app's MainActivity. - Licensing: apps must register their package name at
info@yt.uz. Unregistered apps see the SDK's blocked-app screen automatically.
0.2.0 #
- Android: E-IMZO Flutter modul dependency versiyasi
1.1.3ga yangilandi (flutter_debugvaflutter_release).
0.1.8 #
- Android:
rootProject.allprojects { repositories }bloki olib tashlandi β zamonaviy Flutter proyektlardagidependencyResolutionManagementbilan to'qnashib, build xatosiga vaMissingPluginExceptionga olib kelardi. - README: Maven repository qo'shish majburiyligi aniq belgilandi.
0.1.7 #
- README: core library desugaring sozlash bo'limi qo'shildi.
0.1.6 #
- Android:
isCoreLibraryDesugaringEnabled trueβ Groovy sintaksisiga o'tkazildi.
0.1.5 #
- Android:
isCoreLibraryDesugaringEnabled = truecompileOptionsga qo'shildi β desugaring to'liq yoqildi.
0.1.4 #
- Android:
coreLibraryDesugaring(desugar_jdk_libs:2.1.4) to'g'ri e'lon qilindi.
0.1.3 #
- Android:
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")dependency qo'shildi β Java 8+ API desugaring qo'llab-quvvatlash uchun.
0.1.2 #
- Android: E-IMZO Flutter modul dependency versiyasi
1.0.0ga tuzatildi.
0.1.1 #
- Android: E-IMZO Flutter modul dependency versiyasi
1.0.0ga yangilandi (flutter_debugvaflutter_release).
0.1.0 #
- Initial release.
- Android: E-IMZO Flutter modulini
EimzoFlutterActivityorqali ishga tushirish. openEImzo({String? deeplink})β E-IMZO imzolash ekranini ochadi.getInitialLink()β ilovaeimzo://orqali ochilgan bo'lsa dastlabki URL ni qaytaradi.linkStreamβ ilova ochiq turganida kelganeimzo://deep linklar oqimi.