[GNC-dev] iOS app

Geert Janssens geert.gnucash at kobaltwit.be
Wed Apr 22 04:37:06 EDT 2020


Hi Camille,

There is plenty of work on the gnucash project. However I'll focus on your eventual goal of 
basing your iOS app on the gnucash core.

I think your first step would be to familiarize yourself with the gnucash build system. We have 
wiki pages describing how to build gnucash on linux, MacOS and Windows [1]. I assume you are 
developing on MacOS, so I suggest you follow the instructions to setup a gnucash build 
environment on that platform and make sure you can build gnucash.

When you get to that point, you can start tweaking the build scripts to make them build only 
only what you need for the iOS app. I would think in the gnucash repo itself that would be the 
contents of libgnucash.

The biggest caveat here is that libgnucash/app-utils still depends quite a bit on guile, which is 
not what you'd want for iOS. So here's another opportunity to help out: rework app-utils to no 
longer depend on guile. I'll be honest; that's pretty involved so maybe not a good starting 
project.

The alternative approach would be to alter the build scripts such we can specify to build without 
the gui (already possible by setting WITH_GNUCASH=OFF to gnucash' cmake invocation) and 
without guile (which requires a new cmake parameter, for example WITH_GUILE). If both are set 
the build should only include libengine, but then without app-utils. That would probably give you 
most of what you need for a first version of the iOS app on top of the gnucash logic. As the guile 
separation goal progresses within the gnucash project, more of app-utils can be included in the 
minimal build for iOS, giving you even more features to work with.

Besides the gnucash repo there is the gnucash-on-osx repo which contains the build system for 
all of gnucash' dependencies on that platform. As it currently stands it will build more 
dependencies than you need for an iOS app. You're most likely not interested in gtk stuff, 
though you will still need glib (as libgnucash is still using it a lot).

gnucash-on-osx uses the jhbuild build system. To help you build only the parts you need for an 
iOS app, you can add a new module in gnucash.modules that would only trigger the build of 
dependencies for libgnucash instead of all of gnucash.

My experience with building on MacOS is limited and I have no experience at all with building 
for iOS so there are certainly things I am missing or glossing over. For example I have no idea 
how different the MacOS environment is from the iOS environment (runtime wise), so I can't tell 
if there will be a porting effort involved. I mean the source code of gnucash and its 
dependencies have been tweaked to build an run on MacOS. I have no idea whatsoever if extra 
tweaking will be required to build for and run on iOS. If so that would be another task, though I 
would first try to get the build system to output only the minimal set of dependencies and 
gnucash libraries.

I can probably help on the build system side within the gnucash project itself, like adding the 
extra switch to disable building with guile. I have a reasonable notion of how jhbuild works, but I 
don't have access to a MacOS system any more. So I can give advice or suggestions on the 
jhbuild tweaks, but can test any of those.

Skills you'll probably need or need to develop include: working with git [2], understanding 
cmake, working with jhbuild and obviously C and C++.

All changes you make in gnucash-on-osx or gnucash repositories can be submitted for inclusion 
via either pull requests on github (preferred) or patches in bugzilla. It goes without saying these 
changes should be such that they won't break the normal gnucash build.

If you have questions, consult our wiki, ask on irc or the gnucash-devel mailing list.

Other than that, enjoy the ride ! Happy hacking :)

Regards,

Geert

[1] https://wiki.gnucash.org/wiki/Building
[2] https://wiki.gnucash.org/wiki/Git


Op zondag 19 april 2020 21:43:46 CEST schreef Camille Rizko:
>  Hello Geert, To help I need guidance and direction. I have never developed
> as part of a project such as gnuCash before. If you can think of a good
> first exercise, I am willing to try. On Sunday, April 19, 2020, 11:00:12 AM
> PDT, Geert Janssens <geert.gnucash at kobaltwit.be> wrote:
> 
>  #yiv8039829096 p, #yiv8039829096 li {white-space:pre-wrap;}
> Hi Camille,
> 
>  
> 
> Most of the code relevant for your viewer is indeed C/C++. Parts are gnucash
> are also written in guile, but if I understand correctly that language is
> not available on iOS.
> 
>  
> 
> I'm working on separating the guile parts from the non-gui core of gnucash
> specifically to make it easier to port that core to platforms such as iOS
> or Android.
> 
>  
> 
> Unfortunately that work isn't completely done yet so I will concede that at
> this stage it may take some effort to get it going. Perhaps you are
> interested in helping out with this ?
> 
>  
> 
> Regards,
> 
>  
> 
> Geert
> 
>  
> 
> Op zondag 19 april 2020 19:46:11 CEST schreef Camille Rizko:
> > Hello Geert,  I can investigate how to read the database using the code
> > 
> > base. My app is a viewer, so "read only". I have been using gnucash since
> > 
> > 2015, but have not at all looked at the code base. I can probably succeed
> > 
> > with some effort if the code is in C or C++ language. On Sunday, April 19,
> > 
> > 2020, 06:00:54 AM PDT, Geert Janssens <geert.gnucash at kobaltwit.be> wrote:
> > 
> > 
> > 
> > #yiv2676310034 p, #yiv2676310034 li {white-space:pre-wrap;}
> > 
> > Ok. That's fair.


More information about the gnucash-devel mailing list