Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use two versions of the same library

I'm working in a iOS project that includes a static library created by another company. The library include an old version of AFNeworking and I don't have any source files.

Now i need to use a more recent (and less bugged) version of afneworking, but i cannot include the same class twice in the project (of course) because all the "duplicate symbols".

I understand that it's impossible replacing the version included in the library, but how can i include another version along the old one?

There is a (easy) way to refactor the entire framework before include in my project?

thanks

like image 338
TheObjCGuy Avatar asked Dec 18 '13 16:12

TheObjCGuy


2 Answers

You'll have to repackage the static library to remove the embedded AFNetworking files.

Unpack the library with:

$ ar x libwhatever.a

And re-package it, including all files except the AFNetworking object files:

$ ar cr libwhatever.a file1.o ... fileN.o

You will then have to link your executable with the new AFNetworking static library and hope that there haven't been API changes which will break the code in libwhatever.a. If there are then I doubt there is much you can do.

like image 177
trojanfoe Avatar answered Oct 06 '22 18:10

trojanfoe


I'm afraid this isn't easy to do. Very few environments allow you to link against two separate versions of the same framework at the same time, and Xcode / iOS is not one of them.

As I see it, you have three options:

1) Link against their library and use the same version of AFNetworking they use.

2) Link against their library, and manually load the newer version of AFNetworking and pull symbols from it. Be warned: this will get ugly fast and future maintainers will wonder what you were smoking.

3) Get them to update their library.

On a side note, I don't know the circumstances here, but in general they should be providing you with sources. It's a very backwards practice to provide only a static (static!) library and no way to know what it's doing inside. You'll have to sign a software license agreement and whatnot to protect their interests.

like image 20
2 revs Avatar answered Oct 06 '22 18:10

2 revs