How to correctly integrate D library to Swift/Obj-C mobile project?

Vlad vladpazych at gmail.com
Wed Jun 24 13:43:04 UTC 2020


On Wednesday, 24 June 2020 at 12:00:04 UTC, Jacob Carlborg wrote:
> On Monday, 22 June 2020 at 14:32:21 UTC, Anton wrote:
>> I have a static library (.a) compiled with LDC for iOS 
>> platform. But I can't figure out how to correctly connect it 
>> to the project and call its functions. I've already linked 
>> binary with library to the project but IDE still doesn't see 
>> its classes and methods. Do I need to do some additional 
>> configurations?
>
> When you say "IDE", I'm going to assume you're referring to 
> Xcode. Xcode has absolutely no support for D at all.
>
> Since the Objective-C support in LDC is so limited I would 
> recommend creating `extern(C)` functions in the D code, which 
> forwards to your D functions (or have the functions being 
> `extern(C)` to begin with). Then you need to have these 
> declarations available in a C header file, either created by 
> using the `-HC` flag or by manually writing the declarations.
>
> --
> /Jacob Carlborg

Thank you! We did it as you said and it works.

And thanks a lot for the iOS support, it's amazing!



Few notes on our finding, maybe it will help someone.

--- About header files:

We had to use DMD to create .h files. Couldn't find a way to get 
them via ldc, which seems to only generate .di files (probably 
just missing something).

In the end, we are using the compiled D library from Flutter 
Dart, writing pointers to symbols manually.


--- About compiling for iOS simulator:

When compiling druntime and phobos for iOS simulator, you need to 
add -mios-simulator-version-min=12.0 flag to --cFlags, here is an 
example:

ldc-build-runtime --ninja 
--cFlags="-mios-simulator-version-min=12.0;-target;x86_64-apple-darwin" --dFlags="-mtriple=x86_64-apple-darwin;-fvisibility=hidden" CMAKE_SYSTEM_NAME=Darwin BUILD_SHARED_LIBS=OFF

(More info: https://wiki.dlang.org/Building_LDC_runtime_libraries)

And you have to link phobos and druntime static libraries (.a) 
files to Xcode, not just your library.



More information about the Digitalmars-d-learn mailing list