Re: Including Private Frameworks
Re: Including Private Frameworks
- Subject: Re: Including Private Frameworks
- From: Loukas Kalenderidis <email@hidden>
- Date: Fri, 27 Apr 2007 09:09:42 +1000
Bump. Anybody got any ideas?
On 17/04/2007, at 11:38 AM, Loukas Kalenderidis wrote:
Hi guys,
I'm having a problem including a private framework in my app
bundle. The private framework contains some code that we will be
using in a bunch of apps, and as such I want it to remain a
separate project and not another target of the app, as is suggested
by the Apple doco[1]. I don't particularly want to follow the
"Using Separate Xcode Projects For Each Target" section as I want
the project to use a copy of the built framework installed on the
development machine, rather than refer to the .xcodeproj, partly
because you need to change the build products directory of both
projects to point at the same place (?!)
Anyway, it's a pretty simple ask: Link against a custom framework
(installed on the machine or in the project folder) and copy it
into the application bundle. I can't find anywhere where this
method is clearly covered in the documentation.
What I've done is this:
1) Set the "Installation Directory" property of the Framework's
target to "@executable_path/../Frameworks" - this didn't really
seem relevant but I noticed it changes what the output of otool
says, so I tried it (tried it without as well)
2) Built framework
3) Installed framework to /Library/Frameworks
4) Added framework at the installed location to my project
5) Added a Copy Files build phase to copy the framework into the
app bundle's Frameworks folder
Building with the Debug build configuration seems to work ok - the
framework is copied to the right location. The application launches
and fails with this error:
dyld: Library not loaded: /Users/loukas/Library/Frameworks/
AeroPlugins.framework/Versions/A/AeroPlugins
Referenced from: /Users/loukas/Desktop/Plotter Control/build/
Debug/Plotter Control.app/Contents/MacOS/Plotter Control
Reason: image not found
Inspecting the executable with otool -L shows the following:
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
(compatibility version 1.0.0, current version 11.0.0)
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
(compatibility version 1.0.0, current version 275.0.0)
/Users/loukas/Library/Frameworks/AeroPlugins.framework/
Versions/A/AeroPlugins (compatibility version 1.0.0, current
version 1.0.0)
/System/Library/PrivateFrameworks/ZeroLink.framework/
Versions/A/ZeroLink (compatibility version 1.0.0, current version
1.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0,
current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0,
current version 88.3.3)
Now I have no idea where that /Users/loukas.. reference comes from
because that's not where the framework is installed. If I use
install_name_tool to change the reference to "@executable_path/../
Frameworks/AeroPlugins.framework/Versions/A/AeroPlugins" all is
well and the app launches successfully (well technically it doesn't
because it tries to load two plugin modules that also have the same
issue, but it gets past that stage of launching and doesn't
complain until it tries to load the plugins). This prompted me to
try changing the "Installation Directory" property of the main
app's target to "@executable_path/../Frameworks", which doesn't
really make a lot of sense, and that didn't have any effect.
Can anyone shed some light on the correct way to go about this in
xcode?
Thanks,
Loukas
[1] http://developer.apple.com/documentation/MacOSX/Conceptual/
BPFrameworks/Tasks/CreatingFrameworks.html
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden