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 <r...@rols.org> 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 <k...@yvs.eu.com> 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
<jjco...@carouselapps.com>>

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 (Cocoa-dev@lists.apple.com)

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to