IPB

Bienvenue invité ( Connexion | Inscription )

> Plantage d'appli NSTask, Sierra - Obj-C NSTask
Options
Nono95400
posté 20 Aug 2017, 11:03
Message #1


Macbidouilleur d'argent !
***

Groupe : Membres
Messages : 673
Inscrit : 16 Oct 2004
Membre no 25 318



Bonjour,

Voilà maintenant quelques années que je n'ai pas touché à Xcode ou bien pour de minimes retouches sur des projets perso.

Et venant d'installer Sierra sur mon ordi, j'ai pu constaté que l'appel à un exécutable unix depuis une application via NSTask, faisait planter immédiatement l'app.
J'ai donc réécrit une classe dans mon application pour me passer de cet exécutable.

Mais j'en ai un autre pour lequel je n'ai pas la moindre idée de la façon dont il procède et je ne peux donc pas m'en passer.

Comment faire pour intégrer un exécutable unix dans un projet Xcode sous Mac OS 10.12 pour pouvoir l'appeler depuis l'application avec NSTask ?

Y-aurait-il un système de signature ou bien de niveau d'autorisation nécessaire pour l'application pour exécuter d'autres programmes ?

Merci

PS : l'exécutable appelé depuis le Terminal avec exactement les mêmes arguments... fonctionne très bien.

Ce message a été modifié par Nono95400 - 20 Aug 2017, 11:04.


--------------------
Mac Pro early '09 Quad-Core Intel Xeon 2,93 GHz - 8Go de RAM - ATI HD5870 1Go - SSD Vortex 2 128Go - HD 1To, 2To, 3To.
MacBook Air 13" i7 1,8Ghz - 4Go de RAM - SSD 256Go
Go to the top of the page
 
+Quote Post
 
Start new topic
Réponse(s)
Nono95400
posté 9 Sep 2017, 09:23
Message #2


Macbidouilleur d'argent !
***

Groupe : Membres
Messages : 673
Inscrit : 16 Oct 2004
Membre no 25 318



Bonjour,

Sans rien avoir changé à mon projet ou au code, voilà que l'appli ne plante plus lors de l'appel à l'exécutable huh.gif

Pour info, le bout de code réalisant l'appel :

Code
+ (NSString *)executeGetMonitor:(NSArray*)arguments {
    NSString * strResult=nil;
    NSPipe * thePipe=[[NSPipe alloc] init];
    NSTask * theTask=[[NSTask alloc] init];
    
    NSString * path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"highmonitor"];
    
    [theTask setLaunchPath: path];
    
    [theTask setArguments: arguments];
    [theTask setStandardOutput: thePipe];
    [theTask launch];
    [theTask waitUntilExit];
    if ([theTask terminationStatus] == 0) {
        strResult = [[NSString alloc] initWithData:[[thePipe fileHandleForReading] readDataToEndOfFile] encoding:NSUTF8StringEncoding];
    } else {
        strResult = [[NSString alloc] initWithFormat:@"Erreur (%d)", [theTask terminationStatus]];
    }
    [theTask release];
    [thePipe release];
    return strResult;
}


Lors de l'exécution, je me rend compte que contrairement à avant (mon passage à Sierra), cela prend plusieurs longues secondes.

Je vais peut-être faire un "delegate" pour récupérer le résultat, une fois qu'il est disponible et éviter de bloquer l'appli.


--------------------
Mac Pro early '09 Quad-Core Intel Xeon 2,93 GHz - 8Go de RAM - ATI HD5870 1Go - SSD Vortex 2 128Go - HD 1To, 2To, 3To.
MacBook Air 13" i7 1,8Ghz - 4Go de RAM - SSD 256Go
Go to the top of the page
 
+Quote Post

Les messages de ce sujet


Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 23rd November 2017 - 10:21