[sword-devel] OS X/iPhoneOS based development

Dmitrijs Ledkovs dmitrij.ledkov at ubuntu.com
Mon Jun 14 14:57:17 MST 2010


On 14 June 2010 22:23, Manfred Bergmann <manfred.bergmann at me.com> wrote:
>
> Am 14.06.2010 um 22:01 schrieb Dmitrijs Ledkovs:
>
>>> For me I think it's time to switch now from manually build sword library to Xcode project because now the library is build together with the ObjC wrapper classes.
>>>
>>
>> Fair enough. How are you keeping up with changes to sword? What is
>> your xcode project layout?
>
> I don't know about changes to sword. There are actually none. :)

Sorry, english is not native language here. I meant updates in sword -
i.e. $ svn up

If there are more files added do you manually readd them in xcode to
build sword from xcode?

> Xcode project includes the sword/src folder (minus some files that would not compile like all sources in frontend, dirent for win32 and such) and clucene as groups.
> In build settings you add header file folders sword/include, icu, ... and linker flags for libcurl, libicu, ...
> Finally you add CFLAGS actually the same as in makefile.
>

Meah =) i won't be able to do that for gtk, glib, pango, gtkhtml,
xulrunner..... (i'm trying to nail xiphos build on mac)


>> I didn't manage to make a project which can get have sword framework
>> and xiphos getting pulled in from svn. I would also need Gtk, Glib,
>> Pango and friends.... i have framework versions of those, but it's
>> "imported" frameworks.
>
> I'm not exactly sure what you mean?

to build xiphos i need sword, gtk, glib, gtkhtml, libxml at least. how
would you go about defining all of these in the project.

> At the moment there is only one Xcode target that builds everything, together with Sword ObjC wrappers.

In the xcode project tree what is the difference between "executables"
and "targets". I think i really don't understand what xcode means by
"target".

> It would make sense to split this to have a separate targets for the Sword dylib and wrapper.

what I'm trying to understand how to package all headers & dylib into
universal framework. I've seen quite a few mac specific projects which
ship framework and as far as I understand it uses some kind of weak
linking and relocation code. these frameworks can either be in
/Library/Frameworks, ~/Library/Frameworks or inside an app-bundle. To
top this off with one such package I was able to mix & match, i.e. it
didn't matter where the framework was "thin" app-bundles continued to
work, but bundles which had framework embedded inside them where as if
statically linked and didn't take notice of the same framework
installed in */Library/Frameworks.

Ideally i'd like to be able to painlessly create pre-compiled
sword.framework with dynlibs, headers & documentation compiled for all
arches including iphone / iOS, throw it onto ftp.crosswire.org. Then
anyone could grab it and start developing for mac or iDevices and e.g.
xiphos and macsword could share it on the user's system saving space.
(with an option to embed sword framework inside app-bundle as well)

Is this what xcode calls target?

Ideally sword.framework would contain icu & curl but not expose those
headers/symbols to prevent abuse =) (e.g. using sword.framework to
build a freaky app which actually just uses icu). In otherwords make
sword.framework self-contained, flexible and abi/api stable for
everyone who ports or write apps for apple platforms.

>
>>
>>>>> How is this done with CMake?
>>>>>
>>>>
>>>> As far as I can see CMake style source/targets are just converted into
>>>> XCode xml/plst project file, so you would still need to use xcode to
>>>> define debug/release/sdk/target-arches.
>>>
>>> "xcodebuild" can build Xcode projects via command line and accepts command line build options or you can pass in a settings file.
>>>
>>
>> Thanks, didn't know that.
>>
>>>> Using the sdk and gcc isysroot imho is far more UNIX-like =)
>>>
>>> I don't know why CMake would not be UNIX-like?
>>>
>>
>> Don't understand.... CMake is a great tool, so is autotools. it's just
>> I find it easier to control and inspect what is going on during
>> buildtime using lower level tools. E.g. Xcode is far to abstract for
>> my taste. Or maybe I just don't know how to use it properly. I never
>> found enough time to use/learn it because it's not as universal as
>> autotools.
>
> Yeah, that's right. Xcode is Mac specific and relatively abstract. However as is generally with Mac it just hides it. You can see all relevant information. Problems about your build or the exact gcc command line Xcode will call to compile things.
> When using "xcodebuild" you will see almost the same output as when compiling using makefile.
>

I generally like how mac abstracts low-level things, but here i need
to understand the nitty-gritty details =)

ps. love the fact that I can move files around filesystem without
closing apps that edit them and no I do not understand how HFS+
resource and data forks work behind the scenes to allow this ;-)

>
>
>>>
>>>>>
>>>>> Am 14.06.2010 um 18:51 schrieb Gregory Hellings:
>>>>>
>>>>>> Manfred,
>>>>>>
>>>>>> My CMake build system is supposed to support iPhone configurations. It would keep you from having to update your xcode poject every time files are changed, etc. I have built the library succesfully against the simulator files using my CMake configure, but have not had any takers on actually testing the library against an actual app.
>>>>>>
>>>>>> --Greg
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Jun 14, 2010, at 11:52 AM, Manfred Bergmann <manfred.bergmann at me.com> wrote:
>>>>>>
>>>>>>> Troy, I'd like to put this into this bindings folder.
>>>>>>> If you could create a "objc" folder there and give me commit rights? I'm almost finished creating a proper Xcode project.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Manfred
>>>>>>>
>>>>>>>
>>>>>>> Am 16.04.2010 um 07:58 schrieb Troy A. Griffitts:
>>>>>>>
>>>>>>>> These all sound like good suggestions.  Manfred, let me know what you
>>>>>>>> decide and I'll either give you access to sword/bindings/objc or create
>>>>>>>> a repository for you.
>>>>>>>>
>>>>>>>> Troy
>>>>>>>>
>>>>>>>>
>>>>>>>> Peter von Kaehne wrote:
>>>>>>>>> Would not the natural place be the bindings directory in the engine?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Nic Carter wrote:
>>>>>>>>>> I suggest you put it in a specific place in your MacSword SVN (or
>>>>>>>>>> Bazaar if that's what you use now?) and I can access it from there.  :)
>>>>>>>>>>
>>>>>>>>>> On 16/04/2010, at 2:32 AM, Manfred Bergmann wrote:
>>>>>>>>>>
>>>>>>>>>>> Alright then.
>>>>>>>>>>> Can anyone with the proper rights create a Subversion folder? Or do
>>>>>>>>>>> we use Bazaar? I switched over to Bazaar. :)
>>>>>>>>>>> I believe I'm admin in Jira so I can create a project there myself.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Manfred
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Am 15.04.2010 um 10:30 schrieb Nic Carter:
>>>>>>>>>>>
>>>>>>>>>>>> Hi Manfred,
>>>>>>>>>>>>
>>>>>>>>>>>> This all sounds good.  :)
>>>>>>>>>>>>
>>>>>>>>>>>> Just one quick thing, though:  PocketSword will be one app that
>>>>>>>>>>>> works on both iPad and iPhone/iPod touch.  I was looking at this
>>>>>>>>>>>> today and I think this will be the best way forward. Apple have
>>>>>>>>>>>> designed everything so that this is easily possible, with one
>>>>>>>>>>>> codebase...  :)
>>>>>>>>>>>>
>>>>>>>>>>>> Oh, and to answer your question about NSUserDefaults, yes, that's
>>>>>>>>>>>> there!  I have just added unlocking of modules to PocketSword, which
>>>>>>>>>>>> will be available in v1.2.2 (currently in beta), and that works
>>>>>>>>>>>> great using the code in SwordModule.mm  :)
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks for this work, Manfred!  :)
>>>>>>>>>>>> ybic
>>>>>>>>>>>> nic...  :)
>>>>>>>>>>>>
>>>>>>>>>>>> ----
>>>>>>>>>>>> Nic Carter
>>>>>>>>>>>> PocketSword Developer - an iPhone Bible Study app
>>>>>>>>>>>> www: http://crosswire.org/pocketsword
>>>>>>>>>>>> iTunes: http://itunes.apple.com/app/Pocketsword/id341046078
>>>>>>>>>>>> Twitter: http://twitter.com/pocketsword
>>>>>>>>>>>>
>>>>>>>>>>>> On 15/04/2010, at 7:15 PM, Manfred Bergmann wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi there.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Now with the iPad already released in USA and in other countries
>>>>>>>>>>>>> shortly I'd like to push for a consolidation of the Objective-C++
>>>>>>>>>>>>> SWORD wrapper classes.
>>>>>>>>>>>>> Which over time has grown quite large consisting of 20 classes in
>>>>>>>>>>>>> the version MacSword uses. Just for an explanation to others, they
>>>>>>>>>>>>> build the basis for SWORD based OS X applications and are intended
>>>>>>>>>>>>> to be able to code in Objective-C exclusively in upper levels of
>>>>>>>>>>>>> the application (UI).
>>>>>>>>>>>>> PocketSword uses a subset of those classes with some modifications.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Now shortly since I believe we will again branch for the iPad
>>>>>>>>>>>>> because it will be a different UI eventually I feel that we have to
>>>>>>>>>>>>> do something now. Otherwise we will end up having to maintain three
>>>>>>>>>>>>> code bases which could be one. And it will be a mess.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Since MacSword 2.2 was released recently I have some time now to
>>>>>>>>>>>>> work on this.
>>>>>>>>>>>>> I would suggest to make a framework of the Objective-C wrapper
>>>>>>>>>>>>> classes which can then be used in any OS X (Cocoa) based
>>>>>>>>>>>>> application just as easily as other frameworks can be used. It
>>>>>>>>>>>>> would still be necessary to have different builds for ARM and
>>>>>>>>>>>>> Intel/PPC and Xcode projects but those can use the same code base.
>>>>>>>>>>>>> If any user of the framework needs customised behaviour it is still
>>>>>>>>>>>>> possible to subclass if really needed.
>>>>>>>>>>>>>
>>>>>>>>>>>>> The things that need closer look are:
>>>>>>>>>>>>> - Make it work in gc and none-gc environments.
>>>>>>>>>>>>> In MacSword 2.2 refactorings I tried to put in -dealloc and
>>>>>>>>>>>>> -finalize methods in all classes I touched together with
>>>>>>>>>>>>> autoreleased initialisations.
>>>>>>>>>>>>> - Logging.
>>>>>>>>>>>>> This might need some time. While I would like to be able to write
>>>>>>>>>>>>> logs to file with specifying log levels this is not something the
>>>>>>>>>>>>> iPhone/iPad wants due to slower FS access. But I'm sure there is a
>>>>>>>>>>>>> solution to this. If some protocols are defined each front-end can
>>>>>>>>>>>>> still implement it's own logging implementation.
>>>>>>>>>>>>> - Code that uses NSUserDefaults.
>>>>>>>>>>>>> Right now keys for locked modules are stored in NSUserDefaults. Is
>>>>>>>>>>>>> this something that works on iPhoneOS?
>>>>>>>>>>>>> - Searching/indexing.
>>>>>>>>>>>>> While the iPhone uses the SWORD provided clucene based indexing and
>>>>>>>>>>>>> searching MacSword uses SearchKit.
>>>>>>>>>>>>> This not a problem at all but we have to define a protocol where
>>>>>>>>>>>>> each application can implement a provider.
>>>>>>>>>>>>> - Further we would need a place to source control it. Can we have a
>>>>>>>>>>>>> place for it at CrossWire including a new project in Jira?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Comments?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Nic, if you are busy with things for PocketSword right now, don't
>>>>>>>>>>>>> worry. I would start working on this, compare both code bases and
>>>>>>>>>>>>> would start a discussion with you about things I'm uncertain - if
>>>>>>>>>>>>> you give your "go" to do this all.
>>>>>>>>>>>>> I'd also like to finally put in some Unit tests for critical parts
>>>>>>>>>>>>> so that it can be tested more easily. Unfortunately Unit testing is
>>>>>>>>>>>>> not so comfortable in Obj-C as it is in Java.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Manfred
>>>>>>>>>>>>>
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> sword-devel mailing list: sword-devel at crosswire.org
>>>>>>>>>>>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>>>>>>>>>>>> Instructions to unsubscribe/change your settings at above page
>>>>>>>>>>>>
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> sword-devel mailing list: sword-devel at crosswire.org
>>>>>>>>>>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>>>>>>>>>>> Instructions to unsubscribe/change your settings at above page
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> sword-devel mailing list: sword-devel at crosswire.org
>>>>>>>>>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>>>>>>>>>> Instructions to unsubscribe/change your settings at above page
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> sword-devel mailing list: sword-devel at crosswire.org
>>>>>>>>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>>>>>>>>> Instructions to unsubscribe/change your settings at above page
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> sword-devel mailing list: sword-devel at crosswire.org
>>>>>>>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>>>>>>>> Instructions to unsubscribe/change your settings at above page
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> sword-devel mailing list: sword-devel at crosswire.org
>>>>>>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>>>>>>> Instructions to unsubscribe/change your settings at above page
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> sword-devel mailing list: sword-devel at crosswire.org
>>>>>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>>>>>> Instructions to unsubscribe/change your settings at above page
>>>>>>
>>>>>> _______________________________________________
>>>>>> sword-devel mailing list: sword-devel at crosswire.org
>>>>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>>>>> Instructions to unsubscribe/change your settings at above page
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> sword-devel mailing list: sword-devel at crosswire.org
>>>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>>>> Instructions to unsubscribe/change your settings at above page
>>>>>
>>>>
>>>> _______________________________________________
>>>> sword-devel mailing list: sword-devel at crosswire.org
>>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>>> Instructions to unsubscribe/change your settings at above page
>>>
>>>
>>> _______________________________________________
>>> sword-devel mailing list: sword-devel at crosswire.org
>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>> Instructions to unsubscribe/change your settings at above page
>>>
>>
>> _______________________________________________
>> sword-devel mailing list: sword-devel at crosswire.org
>> http://www.crosswire.org/mailman/listinfo/sword-devel
>> Instructions to unsubscribe/change your settings at above page
>
>
> _______________________________________________
> sword-devel mailing list: sword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
>



More information about the sword-devel mailing list