-
Découvrir l’interopérabilité entre Swift et Java
Découvrez comment combiner Swift et Java dans une seule base de code. Nous allons présenter le projet d'interopérabilité swift-java, qui vous permet d'utiliser Swift dans les programmes Java ou vice versa. Nous allons vous montrer comment utiliser les outils et les bibliothèques offerts par swift-java pour écrire du code sûr et performant qui interagit entre ces deux environnements d'exécution.
Chapitres
- 0:00 - Introduction et ordre du jour
- 2:41 - Différences d’exécution
- 3:31 - Méthodes Java natives
- 6:29 - SwiftJava
- 10:13 - Appel de Java depuis Swift
- 14:01 - Appel de Swift depuis Java
- 20:47 - Conclusion
Ressources
Vidéos connexes
WWDC25
- Améliorer l’utilisation de la mémoire et les performances avec Swift
- Mixez en toute sécurité C, C++ et Swift
- Nouveautés dans Swift
WWDC23
-
Rechercher dans cette vidéo…
-
-
9:05 - Implement JNI native methods in Swift
import JavaKit import JavaRuntime import Crypto @JavaImplementation("com.example.JNIExample") extension JNIExample: JNIExampleNativeMethods { @JavaMethod func compute(_ a: JavaInteger?, _ b: JavaInteger?) -> [UInt8] { guard let a else { fatalError("Expected non-null parameter 'a'") } guard let a else { fatalError("Expected non-null parameter 'b'") } let digest = SHA256Digest([a.intValue(), b.intValue()]) // convenience init defined elsewhere return digest.toArray() } } -
12:30 - Resolve Java dependencies with swift-java
swift-java resolve --module-name JavaApacheCommonsCSV -
13:05 - Use a Java library from Swift
import JavaKit import JavaKitIO import JavaApacheCommonsCSV let jvm = try JavaVirtualMachine.shared() let reader = FileReader("sample.csv") // java.io.StringReader for record in try JavaClass<CSVFormat>().RFC4180.parse(reader)!.getRecords()! { for field in record.toList()! { // Field: hello print("Field: \(field)") // Field: example } // Field: csv } print("Done.") -
16:22 - Wrap Swift types for Java
swift-java --input-swift Sources/SwiftyBusiness \ --java-package com.example.business \ --output-swift .build/.../outputs/SwiftyBusiness \ --output-java .build/.../outputs/Java ... -
18:55 - Create Swift objects from Java
try (var arena = SwiftArena.ofConfined()) { var business = new SwiftyBusiness(..., arena); }
-
-
- 0:00 - Introduction et ordre du jour
Découvrez une bibliothèque expérimentale du langage Swift, appelée « swift-java », qui rend Swift compatible avec Java et vient s’ajouter aux fonctionnalités d’interopérabilité existantes dans Objective-C, C et C++. Cette interopérabilité vous permet d’intégrer progressivement Swift dans du code Java existant, de réutiliser des bibliothèques entre différents langages et d’intégrer des bibliothèques Swift à des projets Java. L’interopérabilité offerte par « swift-java » permet d’appeler du code Java à partir de Swift et inversement. Notre équipe travaille actuellement sur des outils et des techniques visant à gérer les différences entre les environnements d’exécution Java et Swift, ainsi qu’à améliorer la sécurité mémoire du code Java converti en types Swift.
- 2:41 - Différences d’exécution
Swift et Java partagent des fonctionnalités telles que les classes, l’héritage, la gestion automatique de la mémoire, les génériques et la gestion des erreurs, bien qu’il existe des différences au niveau de l’exécution. Bien que ces deux langages présentent des différences, leurs points communs permettent généralement de transposer les API de l’un vers celles de l’autre.
- 3:31 - Méthodes Java natives
L’API Java Native Interface (JNI) a été lancée au début de l’année 1997 et permet au code Java qui s’exécute dans une machine virtuelle Java (JVM) d’interagir avec du code natif, tel que Swift. Elle est souvent utilisée pour améliorer les performances ou pour utiliser des bibliothèques natives sans équivalent Java. Pour utiliser JNI, une fonction « native » est définie en Java, et un fichier d’en-tête C correspondant est généré. Ce fichier d’en-tête contient une déclaration de fonction C qui doit être implémentée dans le langage natif, tel que Swift. Le processus nécessite de gérer le cycle de vie des objets, d’assurer la compatibilité des signatures de méthodes et de traiter un code souvent trop verbeux. Ces tâches complexes peuvent non seulement être chronophages, mais aussi générer des erreurs critiques pouvant mener à des plantages système.
- 6:29 - SwiftJava
SwiftJava améliore la compatibilité entre les langages Swift et Java. Il fournit une suite d’outils, notamment des bibliothèques Swift et Java, un outil en ligne de commande et des intégrations de systèmes de compilation, afin de simplifier et de sécuriser l’interaction entre ces deux langages. L’outil en ligne de commande « swift-java » automatise la génération de code de pontage. Il élimine ainsi toute interaction manuelle avec les en-têtes C. Vous bénéficiez ainsi d’un code plus propre et plus facile à maintenir, avec une gestion améliorée de la durée de vie des objets et une sécurité des types renforcée. Vous pouvez désormais vous concentrer sur la logique métier en tirant pleinement parti des écosystèmes Swift et Java et en évitant les pièges et les erreurs courants associés à l’implémentation manuelle de JNI.
- 10:13 - Appel de Java depuis Swift
SwiftJava permet l’intégration de bibliothèques Java dans des projets Swift. Pour importer une bibliothèque Java, telle qu’Apache Commons CSV, préparez les coordonnées suivantes : « groupId », « artifactId » et « version ». SwiftJava utilise ensuite Gradle, un système de compilation open source, pour résoudre les dépendances Java. Il existe deux méthodes pour télécharger et encapsuler les dépendances Java : L’utilisation du plug-in de l’outil de compilation SwiftJava, qui nécessite la désactivation du sandbox de sécurité SwiftPM, ou la commande « resolve » de l’outil en ligne de commande « swift-java », qui effectue la résolution en dehors du processus de compilation. Une fois les dépendances Java résolues, vous pouvez importer la bibliothèque Java dans Swift, démarrer la JVM dans le processus Swift et utiliser de manière transparente le code Java et les collections avec les fonctionnalités Swift, JavaKit gérant la gestion de la durée de vie des objets.
- 14:01 - Appel de Swift depuis Java
SwiftJava permet l’intégration des bibliothèques Swift dans des projets Java. Pour ce faire, cette séance WWDC25 présente une nouvelle approche qui évite d’avoir recours à des fonctions d’encapsulation complexes côté Java. À la place, l’intégralité de la bibliothèque Swift est encapsulée dans des classes Java à l’aide de la nouvelle API Foreign Function and Memory (FFI) lancée dans Java 22. FFI offre un meilleur contrôle de la mémoire native et permet une intégration approfondie entre les environnements d’exécution Java et Swift et les systèmes de gestion de la mémoire. Grâce à FFI, l’appel de code Swift à partir de Java est plus efficace et plus sûr. L’outil en ligne de commande « swift-java » est utilisé pour générer les classes Java et le code d’aide Swift nécessaires. Cet outil automatise la génération de code standard, ce qui simplifie le processus. Les classes Java générées servent d’accesseurs pour les types et les fonctions Swift. Elles exposent ainsi efficacement les fonctionnalités de la bibliothèque Swift à Java. Une gestion adéquate de la mémoire est essentielle si vous utilisez des objets Swift natifs dans Java. Cette discussion met en avant deux approches : l’utilisation d’une « AutoArena » qui s’appuie sur le Garbage Collector (GC) Java, et une méthode préférée utilisant « try-with-resources » et une « ConfinedArena ». Cette dernière approche garantit une désinitialisation bien définie et ordonnée des objets. Elle permet ainsi d’éviter les problèmes de performances et la surcharge du GC. Cette technique vous permet de créer et de publier des bibliothèques Java encapsulées dans Swift, ce qui les rend facilement utilisables dans des projets Java. Elle simplifie l’adoption de Swift dans les équipes qui utilisent déjà beaucoup Java pour créer un environnement de développement plus flexible et plus efficace. Le développement continu de SwiftJava vise à perfectionner et à affiner ces techniques afin de fournir une solution robuste pour la compatibilité entre les deux langages.
- 20:47 - Conclusion
Le langage de programmation Swift est open source et hébergé sur GitHub. Il est également disponible dans des bibliothèques telles que SwiftJava. La communauté est active sur les forums Swift, où vous pouvez apprendre, partager des idées et donner votre avis.