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 : 710
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.


--------------------
MacBook Pro 13" M1 2020 - 16Go de RAM - SSD 256Go
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)
Jaypee
posté 25 Aug 2017, 06:22
Message #2


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 486
Inscrit : 29 Aug 2002
Membre no 3 340



Est-ce l'occasion de jeter un œil à Swift

un "gist" donne un exemple: https://gist.github.com/Seasons7/836d3676884a40c8c98a

Code
    import Foundation
    
    
    let filePath = "/usr/local"

    // Création de la tâche en Swift 3.x
    let task = Process()
    
    // Configuration de la tâche
    task.launchPath = "/bin/ls"
    task.arguments = ["-laF@" , filePath]
    
    // Tuyau de sortie
        let pipe = Pipe()
    task.standardOutput = pipe
    
    // Exécution de la tâche
    task.launch()
    
    // Récupération du résultat
    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output = String(data: data, encoding: String.Encoding.utf8)
    
    print(output!)


Et on peut l' essayer sans compiler dans un playground.

J-P

Ce message a été modifié par Jaypee - 25 Aug 2017, 06:28.
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 : 26th April 2024 - 10:36