2012-05-30 3 views
1

Je dois donc implémenter le sandbox afin de conserver mon application Mac dans l'App Store Mac. Lorsque j'active le sandbox, mon application fonctionne pour la plupart. J'utilise la commande "top" pour obtenir les informations de mon CPU et de la RAM pour le système de l'utilisateur entier. Avec le bac à sable, je n'ai plus accès à ces fonctionnalités. Ceci est l'erreur d'exécution a reçu:Problèmes liés au bac à sable

/bin/sh: /usr/bin/top: Operation not permitted 
/bin/sh: /usr/bin/top: Operation not permitted 
2012-05-29 20:40:57.911 QuickToggles[53714:403] *** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0] 
2012-05-29 20:40:57.928 QuickToggles[53714:403] (
    0 CoreFoundation      0x00007fff986bcf56 __exceptionPreprocess + 198 
    1 libobjc.A.dylib      0x00007fff97f98d5e objc_exception_throw + 43 
    2 CoreFoundation      0x00007fff98666370 -[__NSArrayI objectAtIndex:] + 208 
    3 QuickToggles      0x0000000100001961 -[StatusBarAppAppDelegate updateInfo:] + 177 
    4 Foundation       0x00007fff94666f40 __NSFireTimer + 102 
    5 CoreFoundation      0x00007fff98671934 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20 
    6 CoreFoundation      0x00007fff98671486 __CFRunLoopDoTimer + 534 
    7 CoreFoundation      0x00007fff98651e11 __CFRunLoopRun + 1617 
    8 CoreFoundation      0x00007fff98651486 CFRunLoopRunSpecific + 230 
    9 HIToolbox       0x00007fff9806b4d3 RunCurrentEventLoopInMode + 277 
    10 HIToolbox       0x00007fff980726d3 ReceiveNextEventCommon + 181 
    11 HIToolbox       0x00007fff9807260e BlockUntilNextEventMatchingListInMode + 62 
    12 AppKit        0x00007fff90441e31 _DPSNextEvent + 659 
    13 AppKit        0x00007fff90441735 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 135 
    14 AppKit        0x00007fff9043e071 -[NSApplication run] + 470 
    15 AppKit        0x00007fff906ba244 NSApplicationMain + 867 
    16 QuickToggles      0x0000000100001882 main + 34 
    17 QuickToggles      0x0000000100001854 start + 52 
    18 ???         0x0000000000000003 0x0 + 3 
) 
+0

Votre plateforme fournit-elle la fonction 'getrusage()'? Fournit-il les détails dont vous avez besoin? (Analyser 'top' se sent comme un moyen grossier de découvrir cette information en premier lieu, mais c'est juste moi ..) – sarnold

+0

Bien sûr, cela ne fonctionne pas; top essaie d'obtenir des informations sur tous les processus du système, ce qui n'est évidemment pas autorisé dans votre sandbox. @sarnold: Oui, il y a getrusage, y compris RUSAGE_CHILDREN (important si son application génère un tas de processus fils, ce qui semble probable). – abarnert

+0

Mon application n'obtient pas l'utilisation des ressources de l'application elle-même, mais l'obtient pour l'ensemble de l'ordinateur. L'analyse syntaxique a été le moyen le plus simple que je vois pour obtenir les statistiques d'une manière propre et facile. –

Répondre

0

On dirait que vous voulez afficher des informations sur chaque processus en cours d'exécution, comme la fenêtre principale Activity Monitor. Vous ne pouvez pas le faire dans le bac à sable. Période. *

Alors, déposez un radar demandant à Apple de vous donner un moyen de le faire, et expliquez pourquoi vous pensez que cela est justifié. Et en attendant, restez sans boîte. Et si Apple vous dit que vous n'êtes pas censé être capable de faire cela (ce que je pense est un résultat probable), alors vous devez soit supprimer cette fonctionnalité, ou arrêter de vendre dans l'App Store (et trouver un moyen de transition vos utilisateurs existants vers un autre canal). En réalité, il semble que la moitié de ce que fait votre application ne fonctionne pas dans le bac à sable - et cela est déjà contraire aux consignes du MAS, ce qui signifie que chaque fois que vous soumettez une mise à jour, vous risquez d'être rejeté. . * En fait, vous pouvez le faire en envoyant des scripts à Activity Monitor et en raclant sa sortie via un script UI ou autre, si l'utilisateur a activé l'accessibilité, mais même si cela fonctionne, les réviseurs de MAS ne l'aimeront pas ... alors non.