Nous avons un projet qui doit exécuter un moteur openssl sur un appareil iOS. Nous avons compilé le fichier .so pour le moteur de test et cela fonctionne très bien avec la ligne de commande. Mais quand nous le mettons dans le projet iOS et essayons de charger le moteur, l'étape de chargement donne toujours une erreur.Openssl Engine pour iOS n'est pas chargé
NSString *enginePath = [[NSBundle mainBundle] pathForResource:@"silly-engine" ofType:@"so"];
char* engine_id = "silly-engine";
char* engine_path = (char *)[enginePath UTF8String];
ENGINE_load_dynamic();
ENGINE *dyn = ENGINE_by_id("dynamic");
if (!ENGINE_ctrl_cmd_string(dyn, "SO_PATH", engine_path, 0))
{
NSLog(@"SO_PATH failed");
}
if (!ENGINE_ctrl_cmd_string(dyn, "DIR_ADD", engine_path, 0))
{
NSLog(@"DIR_ADD failed");
}
if (!ENGINE_ctrl_cmd_string(dyn, "ID", engine_id, 0))
{
NSLog(@"ID failed");
}
if (!ENGINE_ctrl_cmd(dyn, "LIST_ADD", 1, NULL, NULL, 0))
{
NSLog(@"LIST_ADD failed");
}
if (!ENGINE_ctrl_cmd_string(dyn, "LOAD", NULL, 0))
{
NSLog(@"LOAD failed");
}
ENGINE *myEngine = ENGINE_by_id(engine_id);
myEngine
seront aways être NULL
. Je soupçonne que iOS ne permet pas de telles bibliothèques dynamiques. Est-ce que quelqu'un a de l'expérience pour faire fonctionner le moteur OpenSSL sur iOS?
La plupart des versions d'iOS n'autorisent pas le chargement dynamique des bibliothèques. On me dit que cela a changé récemment. Cependant, vous pouvez contourner ce problème en "balançant". Voir [Méthode Objective C Swizzling en utilisant la bibliothèque dynamique] (http://stackoverflow.com/q/9638815). Voir également [Rethinking & Repackaging iOS Apps] (https://www.google.com/search?q=Rethinking+%26+Repackaging+iOS+Apps). – jww
@jww Merci pour l'information. Swizzling en utilisant la bibliothèque dynamique est une autre approche que je vais essayer. Cependant, après avoir creusé, on me dit que Apple ne permet pas la bibliothèque dynamique personnalisée dans iOS (sera rejetée par App Store). Donc une autre question est que pouvons-nous modifier 'openssl.cnf' pour ajouter notre bibliothèque en compilant OpenSSL puis le rendre disponible en tant que moteur par défaut? – Summer