John O'Reilly
09/13/2026, 12:37 PMJohn O'Reilly
09/13/2026, 12:55 PMJohn O'Reilly
09/13/2026, 1:34 PMSam Rayner
09/13/2026, 1:46 PMJohn O'Reilly
09/25/2026, 7:04 PMFixed in 2.5.0-Beta1:
- ViewModel vtable crash: gone. Kotlin compiles and Swift Export generates the Swift code.
- Duplicate @_spi stubs from kotlinx-serialization (KT-87791): fixed. I disabled the build-file workaround and the only errors left came from the Koin duplicates below. I cut the workaround down to that one part.
Still broken:
- Koin Module.module() stubs: still emitted as duplicate unavailable declarations (3 Γ invalid redeclaration of 'module'), so the reduced workaround stays.
- Runtime crash on the ISS Position tab: passing the Swift factory into Kotlin throws ClassCastException: iOSNativeViewFactory cannot be cast to dev.johnoreilly.common.ui.NativeViewFactory. Changing the parameter to the class type fails the same way, so the Kotlin object behind a Swift subclass doesn't know its Kotlin supertypes. The 2.5.0-Beta1 changelog lists KT-88042, a ClassCastException when Kotlin calls an interface method on a Swift subclass, as fixed. This case isn't covered by that fix, and it's the new blocker;John O'Reilly
09/25/2026, 7:12 PMββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β swiftExport { } β export { swift { } } β
ββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Kotlin modules exported to Swift β 7 β 13 (adds Kermit, Stately, Koin annotations, Koin ViewModel, SavedState) β
ββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Generated Swift β about 6.7k lines β about 29k lines β
ββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Xcode build β succeeds β fails β
ββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The failures are in generated code that the old DSL never produced. In the generated stdlib, an unqualified Int(...) now resolves to the exported <http://kotlin.Int|kotlin.Int>, and the ViewModel module has subscript override errors. The new DSL only offers moduleName, rootPackage and xcodeIntegration(), so there's no way to narrow what it exports.Artem Olkov
10/06/2026, 11:16 AMBeta2. It should be already be merged as of yesterday, and I hope that earliest Beta2 builds would become available this week.
Thanks again for the report, we have missed those bugs and are very happy to fix them πArtem Olkov
10/06/2026, 11:16 AMArtem Olkov
10/06/2026, 11:42 AMThe new DSL only offers moduleName, rootPackage and xcodeIntegration(), so there's no way to narrow what it exports
That's actually was a half backed feature in Beta1, and in Beta2 one would be able to hide a dependency fully from the export like this
xcodeIntegration{
configure(projects.subproject) {
visibility = SwiftExportVisibility.HIDDEN
moduleName = "Subproject"
rootPackage = "com.github.jetbrains.library"
}
}Artem Olkov
10/06/2026, 11:43 AMJohn O'Reilly
10/10/2026, 12:41 PMJohn O'Reilly
10/10/2026, 12:56 PMios-export module....I asked Claude to see if we could go back to consuming common from iOS and ran in to a few issues (it added comments for what it tried to PR in case useful)John O'Reilly
10/10/2026, 1:14 PMJohn O'Reilly
10/10/2026, 3:15 PMArtem Olkov
10/11/2026, 6:04 AMalso wrote small article on changes made....again if anything doesn't look right I can update johnoreilly.dev/posts/peopleinspace-swift-exportOh that's great! I will ping you with some links with official docs and other stuff as soon as we are ready with them, so that you can update the article, if that alright with you π This will happen somewhere close to the actual release of 2.5.0
Artem Olkov
10/11/2026, 6:07 AMthis branch is also based on having a newYeah, I've tried to read all the comments in that PR, but it's a lot of words, I will have another go at it after my vacation π One thing that stand out - your Claude (at least in the first comments there) is unaware of the fact that it canmodule....I asked Claude to see if we could go back to consumingios-exportfrom iOS and ran in to a few issues (it added comments for what it tried to PR in case useful)common
@HiddenFromObjectiveC any user defined declaration to hide it. I saw a lot of complaint that it cannot mark something as internal, because it's needed for other targets.Artem Olkov
10/11/2026, 6:10 AMJohn O'Reilly
10/11/2026, 6:52 AM