Hi,
I am building a commercial iOS app that converts Office files (Word, Excel,
PowerPoint) to PDF entirely on-device, using LibreOfficeKit. I have built a
proof-of-concept and want to confirm whether my approach satisfies the
LGPLv3 + MPL-2.0 obligations before shipping to the App Store.
What I have built:
I compiled LibreOffice core (libreoffice-24.8.7.2) for iOS (arm64), with
all static libraries linked into a single dynamic framework called
LibreOfficeConversionKit.xcframework. The framework is embedded in the app
bundle using Xcode's Embed & Sign - it is dynamic, not statically fused
into the app binary. A thin Obj-C++ / Swift bridge calls the LibreOfficeKit
C API (lok_init_2, documentLoad, saveAs("pdf"), destroy). The app itself is
closed-source and commercial.
What I plan to publish for compliance (not yet published):
I plan to publish a public repository containing the pinned LibreOffice
version, all iOS build scripts, and a REBUILD.md that will let anyone clone
the repo, run one script, and reproduce the exact XCFramework from source.
I also plan to include a NOTICE file with the full LGPLv3 + MPL-2.0 text
and attribution for all bundled fonts, and set up CI to prove the build
reproduces cleanly.
My question:
I understand LGPLv3 section 4 requires either option d0 - providing the
Corresponding Application Code to allow relinking - or option d1 - a
runtime-replaceable shared library. On iOS, d1 is not possible due to
Apple's code signing. For d0, I plan to publish the engine source and build
scripts, but my app's own code will remain closed-source.
If I publish the engine build scripts so that anyone can build a modified
LibreOfficeKit and relink it into their own signed app, would that be
sufficient to satisfy section 4(d0) for a commercial closed-source iOS app?
Or does section 4(d0) require me to also provide my app's object files or
source code?
Any guidance from the project or TDF on the correct interpretation for iOS
App Store distribution would be very helpful.
Thank you.