quickjs_engine 0.1.6: Swift Package Manager და Android Gradle Plugin 9

quickjs_engine Flutter-ს Android-ზე, iOS-ზე, macOS-ზე, Linux-სა და Windows-ზე ერთ თანამედროვე JavaScript-ძრავს აძლევს — QuickJS-NG-ს. ის ასევე უშვებს SVGator-ის ექსპორტებსა და ჩაშენებულ სკრიპტებს full_svg_flutter-ში. ამ მეორე ამოცანის გამო ნატიური აწყობის პრობლემები ძალიან თვალსაჩინო ხდება: როცა ხიდი არ იტვირთება, ანიმირებული SVG-ები მოძრაობას წყვეტს.

ვერსიები 0.1.4-დან 0.1.6-მდე მთლიანად ნატიურ ფენას ეძღვნება. აი, რას ასწორებს თითოეული მათგანი.

Swift Package Manager iOS-სა და macOS-ზე (0.1.6)

Flutter iOS-ისა და macOS-ის plugin-ების CocoaPods-იდან Swift Package Manager-ზე გადატანის პროცესშია. ამ რელიზამდე quickjs_engine შეტყობინებაში „The following plugins do not support Swift Package Manager“ იყო ჩამოთვლილი და მის გამო Flutter CocoaPods-ს უბრუნდებოდა.

0.1.6 შეიცავს Swift Package Manager-ის მანიფესტებს iOS-ისა და macOS-ისთვის. ხიდი პატარა დინამიკური ფრეიმვორკის სახითაა ჩაშენებული, ამიტომ flutter build ipa ბრძანებისა და macOS-ის არქივირების შემდეგაც მისი ექსპორტირებული სიმბოლოები ადგილზე რჩება. ერთი და იგივე მანიფესტი მუშაობს როგორც Flutter 3.38-თან, რომელსაც გენერირებული FlutterFramework პაკეტი არ აქვს, ისე 3.41-თან და უფრო ახალ ვერსიებთან.

Flutter-ის ბოლო სტაბილურ რელიზებში Swift Package Manager ნაგულისხმევად ჩართულია. უფრო ძველ რელიზებში, Flutter 3.35-დან მოყოლებული, ის თითოეული პროექტისთვის ცალკე ჩართეთ:

flutter:
  config:
    enable-swift-package-manager: true

Flutter 3.32-დან 3.34-მდე ვერსიებზე კი ის Flutter-ის მთელი ინსტალაციისთვის ჩართეთ:

flutter config --enable-swift-package-manager

მადლობა @DomingoMG (იხსნება ახალ ჩანართში)-ს, რომელმაც ამის შესახებ #55 (იხსნება ახალ ჩანართში)-ში შემატყობინა.

CocoaPods-ის ხიდი, რომელიც ხიდს აექსპორტებს (0.1.6)

თუ თქვენი iOS-აპლიკაცია CocoaPods-ს იყენებს, ეს ყველაზე მნიშვნელოვანი შესწორებაა. CocoaPods ჩუმად უგულებელყოფდა podspec-ში მითითებულ ../native/cxx საწყის კოდს, ამიტომ pod-ის ფრეიმვორკი FFI-ხიდის არცერთ სიმბოლოს არ აექსპორტებდა. 0.1.5 და უფრო ადრეულ ვერსიებში iOS-ზე ყოველი evaluate() გამოძახება ამ შეცდომით მთავრდებოდა:

Failed to lookup symbol 'jsNewRuntime'

ახლა pod-ი ამ საწყის კოდს აკომპილირებს. თუ თქვენი Podfile pod-ებს სტატიკურად ლინკავს, README-ში ნახავთ Podfile-ისთვის მოკლე გამოსავალს: Dart ხიდს DynamicLibrary.process() გამოძახებით პოულობს, ამიტომ pod-ი დინამიკურ ფრეიმვორკად უნდა დარჩეს.

Android Gradle Plugin 9 (0.1.6)

ახლა plugin-ი Kotlin Gradle Plugin-ს აღარ იყენებს, რადგან მისი plugin-კლასი Java-ზეა დაწერილი. Android Gradle Plugin 9-ზე აპლიკაციები იწყობა, ჩაშენებული Kotlin ჩართულია თუ გამორთული: აღარ ჩნდება არც შეცდომა „The 'org.jetbrains.kotlin.android' plugin is no longer required“ და არც გაფრთხილება, რომ plugin-ი KGP-ს იყენებს. compileSdk აპლიკაციის flutter.compileSdkVersion მნიშვნელობას მიჰყვება, plugin-ი კი Java 17-ით კომპილირდება.

მადლობა @sufiyansayyed (იხსნება ახალ ჩანართში)-ს, რომელმაც ამის შესახებ #52 (იხსნება ახალ ჩანართში)-ში შემატყობინა და საწყისი მიგრაცია #53 (იხსნება ახალ ჩანართში)-ში შეასრულა.

მცირე შესწორებები 0.1.6-ში

  • QuickJsRuntime2(memoryLimit: ...) დადებითი ლიმიტით აღარ აგდებს შეცდომას „Failed to lookup symbol 'jsSetMemoryLimit'“. ხიდი ახლა ამ ფუნქციას ყველა პლატფორმაზე აექსპორტებს.
  • iOS-ისა და macOS-ის ოპტიმიზებული build-ები NDEBUG მაკროს განსაზღვრავს, ისევე როგორც CMake-ის release build-ები სხვა პლატფორმებზე, ამიტომ QuickJS-ის assert-ები და debug-კოდი build-ში აღარ ხვდება.

Windows და უნივერსალური macOS (0.1.4, 0.1.5)

CI, რომელიც ამ ყველაფერს იცავს

ამ პრობლემების უმეტესობა მხოლოდ კონკრეტულ toolchain-ზე, სუფთა release build-ში იჩენს თავს, ამიტომ CI ახლა სწორედ ასეთ build-ებს აწყობს:

  • Android Gradle Plugin 9-ის job, რომელიც Flutter-ის უახლეს სტაბილურ ვერსიაზე ახალ აპლიკაციას აწყობს ჩაშენებული Kotlin-ით და მის გარეშე;
  • Swift Package Manager-ის სამუშაო პროცესი Flutter 3.38.1-ზე, 3.41.6-სა და 3.47.4-ზე, რომელიც აწყობს iOS-სიმულატორის აპლიკაციას, iOS-არქივსა და macOS-ის release-აპლიკაციას, ამოწმებს ხიდის ყველა ფუნქციისა და Dart-ის მხარის მიერ მოძიებული ყველა სიმბოლოს ექსპორტს და macOS-აპლიკაციას უშვებს;
  • CocoaPods-ის iOS pod-ის ექსპორტირებული სიმბოლოების დამცავი შემოწმება, ასევე Windows-ისა და macOS-ის სუფთა release build-ის სამუშაო პროცესები.

განახლება

dependencies:
  quickjs_engine: ^0.1.6

თუ full_svg_flutter-ს იყენებთ, განაახლეთ ის 1.5.2 ვერსიამდე, რომელიც quickjs_engine ^0.1.6-ს მოითხოვს. იქ შეტანილი ყველა სხვა ცვლილება აღწერილია full_svg_flutter 1.5-ის რელიზის შენიშვნებში.

ცვლილებების სრული ჟურნალი: pub.dev/packages/quickjs_engine/changelog (იხსნება ახალ ჩანართში)

გჭირდებათ ციფრული პროდუქტის შექმნა, მოდერნიზაცია ან ჩიხიდან გამოყვანა?

მოგვიყევით რეალურ პრობლემაზე — ვები, მობილური, გუნდის მიწოდება თუ AI სამუშაო პროცესი, რომელიც პროდაქშენისთვის ვარგისი უნდა გახდეს.

პროექტის განხილვა