[Mono-osx] How to add mono/dumbarton as a bundled framework
daschewie at gmail.com
Wed Oct 25 08:58:56 EDT 2006
This link might be helpful: http://doc.trolltech.com/4.1/deployment-mac.html
It shows how to alter the Qt Framework bundle using otool. The altered
bundle can then be added as a private Framework to your Application
without the need for weeklinks. This my work with Mono and Dumbarton.
On 10/25/06, Allan Hsu <allan at counterpop.net> wrote:
> Sorry I didn't get back to you when you sent me this question
> yesterday, but, ironically, I was at the Mono developer's meeting in
> Boston and there was no internet access:)
> Here is how we do it at imeem:
> We build our own universal version of Mono because there are a couple
> problems right now with the current release builds of Mono for OS X.
> Hopefully, after talking to Wade and Miguel this week (and some
> followup work), we'll fix the current problems with linking against
> the official builds as well as seeing what can be done about getting
> official universal install packages. For now, if you're just testing,
> you could probably just use one of the older platform-specific
> release builds that links properly.
> We include the Dumbarton framework project file in our main Xcode
> project file, done by "add->existing files..." in the context menu
> for the main project in "Groups & Files". It's important that you
> either set your default build products folder in Xcode or manually
> set the the build products folder in your project, the Dumbarton
> project, and the Judy project inside Dumbarton all to the same folder.
> In our release builds, we copy the Dumbarton framework and portions
> of Mono into the application bundle. In order to fix the sorts of
> linking problems you're experiencing, we use install_name_tool to
> change the install names referenced by the application executable and
> all of the dynamic librariesto @executable_path relative install
> names. So instead of what you're trying to do, we link to the Mono
> libraries in /Library/Frameworks/Mono/ and the included Dumbarton
> framework project at build time, copy them into the application
> bundle, and then rewrite the install names of the copied libraries.
> The install_name_tool manpage explains how to use the tool in detail.
> At runtime, you'll have to tell Dumbarton where to look for your
> embedded version of Mono, otherwise the runtime will not look in your
> application bundle for the GAC. This is the code that we use:
> NSString *libraryPath = [[[NSBundle mainBundle] bundlePath]
> NSString *monoRootPath = [libraryPath
> [DBMonoEnvironment setAssemblyRoot:[monoRootPath
> [DBMonoEnvironment setConfigDir:[monoRootPath
> We don't do anything with weak linking.
> I hope this helps. I just returned from Boston a few hours ago and
> I'm very tired, so I may have missed something. I've been meaning to
> write some tools to make this process easier and include samples with
> the Dumbarton example code, but I haven't gotten around to it yet.
> On Oct 25, 2006, at 2:04 AM, Eoin Norris wrote:
> > This query is more for people who have used ObjectiveC# or Dumbarton.
> > I have created an application that runs on my Intel box, talking via
> > dumbarton to the mono layer , and back. Mono does the business code
> > and all UI is in Cocoa.
> > I need to get to beta test sometime next week - with external testers
> > - and I need to either bite the bullet and bundle the frameworks
> > within the bundle ( preferably a universal version) or just do it via
> > an installer, installing the frameworks in /Library/Frameworks -
> > which is ugly for the Mac.
> > I thought I had a fair idea how to do this, however I ran into
> > dumbarton problems.
> > The developer documentation from apple suggests that you should build
> > the frameworks within the project. This not what I want to do with
> > the mono framework, specially as I am unsure how to build it.
> > So for now I link against the mono 184.108.40.206 version ( which is intel
> > only on my machine) without building it.
> > So the final build phase is:
> > 1) copy dumbarton.framework and mono.framework to the application
> > bundle/contents/frameworks/ directory via a script
> > 2) add -weak-link dumbarton and -weak-link mono to the linker flags
> > 3) Change the mono specific linker flags ( which i dont really
> > understand) to point to the bundled frameworks
> > i.e. -L"$TARGET_BUILD_DIR/$FULL_PRODUCT_NAME/Contents/Frameworks/
> > Mono.framework/Versions/Current/lib/pkgconfig/../../lib" and
> > -L""$TARGET_BUILD_DIR/$FULL_PRODUCT_NAME/Contents/Frameworks/
> > Mono.framework/Versions/Current/lib" -lmono -lm -lgmodule-2.0 -
> > lgthread-2.0 -lglib-2.0 -lintl -liconv
> > So that is the main target sorted I think, but I am not exactly sure.
> > However I add Dumbarton as a bundled framework too, but do not build
> > it either.
> > On launching the result is :
> > dyld: Library not loaded: /Library/Frameworks/Mono.framework/Versions/
> > 220.127.116.11/lib/libmono.0.0.0.dylib
> > Referenced from: /Library/Frameworks/Dumbarton.framework/Versions/
> > A/Dumbarton
> > Reason: image not found
> > clearly a reference to the mono.framework from dumbarton. This gives
> > rise to a circular problem, how do I build the dumbarton framework to
> > point to a mono.framework ( weak-linked?) within a bundle which would
> > not have been built yet, until after it the dumbarton framework is
> > linked ( I think it is clear tha I have probably have to build
> > dumbarton as part of my project.)
> > Thanks in advance
> > _______________________________________________
> > Mono-osx mailing list
> > Mono-osx at lists.ximian.com
> > http://lists.ximian.com/mailman/listinfo/mono-osx
> Allan Hsu <allan at counterpop dot net>
> 1E64 E20F 34D9 CBA7 1300 1457 AC37 CBBB 0E92 C779
> Mono-osx mailing list
> Mono-osx at lists.ximian.com
More information about the Mono-osx