Comment insert une command LC_LOAD_DYLIB dans un binary Mach-O ou joindre une bibliothèque statique à un binary existant (IOS)

C'est la première fois que je request sur stackoverflow et je suis désespérée.

Ma tâche consiste à charger un dylib ou à joindre une lib statique à un exécutable déjà existant pour un périphérique IOS.

Je vais utiliser le static void __atsortingbute__((constructor)) initialize(void) pour lancer le swizzling. Cet exécutable est pour l'appstore d'entreprise interne donc je n'ai pas besoin d'aller à l'Apple Appstore (puisqu'ils le rejetteront).

La raison en est de prendre un IPA existant d'un client et de ses keys de signature et d'append une nouvelle fonctionnalité à son application sans nécessiter d'intervention du développeur.

Il y a une entreprise qui fait ça, appelée nukona. Vous pouvez regarder le film ici: https://www.youtube.com/watch?feature=player_embedded&v=z9rrOB6lOxY

Je peux vous dire que j'ai essayé de placer LSEnvironment dans le file plist avec un DYLD_INSERT_LIBRARIES mais il s'avère que LSEnvironment ne semble pas avoir d'effet dans le sandbox d'une application IOS.

J'ai aussi essayé install_name_tool pour changer l'une des dependencies et la replace par mon dylib (qui a aussi cette dépendance). Il se bloque sans information pourquoi.

Évidemment, si j'ajoute le dylib à une application de test en XCode et que je le recomstack, cela fonctionne parfaitement. Cependant, c'est quelque chose que je ne peux pas requestr, par exemple, un administrateur d'une entreprise. La reconstruction peut dissuader les clients d'utiliser cette librairie.

Voici un lien connexe que j'ai trouvé sur stack overflow mais pour osx et j'en ai besoin pour IOS. Comment insert une command LC_LOAD_DYLIB dans un binary Mach-O (OSX)

La seule chose que je peux penser est d'éditer les commands de chargement binary d'une certaine façon, mais je ne suis pas sûr comment et comment le faire en tenant count des tables de relocalization etc …

Toute alternative est la bienvenue.

Merci pour votre time.

J'utilise un optool open-source qui fait exactement cela (je ne l'ai pas testé sur iOS mais ça devrait fonctionner.) Ouvrez un problème si vous avez des problèmes)