Re: Problem having a framework working in one of my targets (a screensaver)
Re: Problem having a framework working in one of my targets (a screensaver)
- Subject: Re: Problem having a framework working in one of my targets (a screensaver)
- From: Juanjo Conti <email@hidden>
- Date: Fri, 03 Jul 2015 13:32:44 -0300
Roland, thanks for taking the time for explaining this. I think I'm closer
to the solution but I didn't make it work yet.
The screensaver ends installed in ~/Library/Screen Savers/Ninja.saver/
I was able to cd there and
cd Contents/Frameworks/Paddle.framework/Versions/A, run install_name_tool
command and change the name for the Paddle binary. But I don't know how to
re link it.
So I went to XCode and for the Saver target I added a Run Script phase in
Build Phases, between Copy File (the framework) and Link Binary With
Libraries. The script is:
install_name_tool -id @rpath/
$BUILT_PRODUCTS_DIR/Ninja.saver/Contents/Frameworks/Paddle.framework/Versions/A/Paddle
After building and installing the screensaver in its destination folder, I
can check with otool that the change was done:
~/Library/Screen
Savers/Ninja.saver/Contents/Frameworks/Paddle.framework/Versions/A$ otool
-D Paddle
Paddle:
@rpath/
But, when I run the screensaver, I still get the error:
Jul 3 13:30:46 ironbird.local ScreenSaverEngine[74782]: Error loading
/Users/juanjo/Library/Screen Savers/Ninja.saver/Contents/MacOS/Ninja:
dlopen(/Users/juanjo/Library/Screen
Savers/Ninja.saver/Contents/MacOS/Ninja, 265): Library not loaded:
@executable_path/../Frameworks/Paddle.framework/Versions/A/Paddle
Referenced from: /Users/juanjo/Library/Screen
Savers/Ninja.saver/Contents/MacOS/Ninja
Reason: image not found
What can be happening? I think this is related to Kevin doubt.
Thanks in advance for your patient and time.
On Fri, Jul 3, 2015 at 10:57 AM, Roland King <email@hidden> wrote:
> Downloading the zip file referenced earlier and using a simple main.c
>
> $ clang -x c -o main.o -c main.c
> $ clang main.o -o main
> $ otool -L main
> main:
> /usr/lib/libSystem.B.dylib (compatibility version 1.0.0,
> current version 1213.0.0)
>
> adding the framework right from the unzipped zip and then otool’ing it
>
> $ clang main.o -F ~/Downloads/Mac-Framework-master -framework
> Paddle -o main
> $ otool -L main
> main:
>
> @executable_path/../Frameworks/Paddle.framework/Versions/A/Paddle
> (compatibility version 1.0.0, current version 1.0.0)
> /usr/lib/libSystem.B.dylib (compatibility version 1.0.0,
> current version 1213.0.0)
>
> That’s that @executable_path from the library, using otool -D on it ...
>
> $ otool -D ~/Downloads/Mac-Framework-master/Paddle.framework/Paddle
> /Users/rols/Downloads/Mac-Framework-master/Paddle.framework/Paddle:
> @executable_path/../Frameworks/Paddle.framework/Versions/A/Paddle
>
> now update it and check it again
>
> $ install_name_tool -id @rpath/bananas/are/tasty
> ~/Downloads/Mac-Framework-master/Paddle.framework/Paddle
>
> $ otool -D ~/Downloads/Mac-Framework-master/Paddle.framework/Paddle
> /Users/rols/Downloads/Mac-Framework-master/Paddle.framework/Paddle:
> @rpath/bananas/are/tasty
>
> and re-link main and then otool it again
>
> $ clang main.o -F ~/Downloads/Mac-Framework-master -framework
> Paddle -o main
> $ otool -L main
> main:
> @rpath/bananas/are/tasty (compatibility version 1.0.0,
> current version 1.0.0)
> /usr/lib/libSystem.B.dylib (compatibility version 1.0.0,
> current version 1213.0.0)
>
> That’s where it comes from - that’s how you can change it. Don’t know what
> you’re seeing.
>
> > On 3 Jul 2015, at 21:19, Kevin Meaney <email@hidden> wrote:
> >
> >>
> >> I don’t know what the executable_path is for a screensaver, you’d think
> it was very much the same thing. So first simplest option is to work out
> what that is and then just put the library at the place it expects to be,
> @executable_path/../Frameworks/<lots of garbage>. As long as that’s within
> your bundle somewhere, trivial to do. You can even put it somewhere else
> and put a symlink in the bundle.
> >
> > The @executable_path for the Screen saver will be the path to the
> executable process that loads the OP’s screen saver plugin. in this case
> ScreenSaverEngine.
> >
> >>
> >> If you want to change it to something like @rpath/whatever then
> >>
> >> install_name_tool -id @rpath/whatever <object>
> >
> > This is where I get confused. In my project not the original posters my
> framework has Installation Directory set to @rpath and everything works as
> I need it to thanks to that Mike Ash article. But if I do otool -D on the
> framework then I see @executable_path … etc. Making me conclude the rpath
> information was stored separately in the binary to the install name so my
> thinking was that modifying the install name wouldn’t help.
> >
> > Kevin
> >
>
>
--
Juanjo Conti <jjconti <http://goog_2023646312>@carouselapps.com
<email@hidden>>
Software Engineer - Carousel Apps <https://carouselapps.com>
--
Carousel Apps Limited, registered in England & Wales with registered number
7689440 and registered office Unit 2 Artbrand Studios, 7 Leathermarket
Street, London SE1 3HN. Any communication sent by or on behalf of Carousel
App Ltd or any of its subsidiary, holding or affiliated companies or
entities (together "Watu") is confidential and may be privileged or
otherwise protected. If you receive it in error please inform us and then
delete it from your system. You should not copy it or disclose its contents
to anyone. Messages sent to and from Watu may be monitored to ensure
compliance with our internal policies and to protect our business. Emails
are not secure and cannot be guaranteed to be error free. Anyone who
communicates with us by email is taken to accept these risks.
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please 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