2012-07-20 57 views
2

我試圖讓所有的背景列表應用的軟件包ID應用目前在iPhone上運行。 我能夠做到這一點,但我實際上得到的是所有的後臺應用程序的PID的列表。得到PID在IOS

所以我有兩個問題,

首先 我能與它捆綁ID,但無法與它的PID啓動應用。 是否正在啓動一個可能使用PID的應用程序?

二 是否有訪問的應用程序包ID,如果我只有其PID的方法嗎?

我明白這一點可以在Mac上進行與

[[NSRunningApplication runningApplicationWithProcessIdentifier:pid] bundleIdentifier] 

但它可以對iPhone做了什麼?

+0

我收到了嗎 - 您想以編程方式在另一個應用程序中啓動後臺運行應用程序嗎?如果是這樣,我懷疑這是可能的,肯定它是被禁止的。 – 2012-07-20 06:40:36

+0

正確的,以及我忘了提我試圖創建一個越獄調整,所以也許它的可能嗎? – 2012-07-20 06:50:31

+0

所以,你做了越獄設備上的應用?將會破壞設備安全性和聲譽的應用程序?以防萬一你聽到有經驗的開發人員建議 - 離開這個黃昏的工作。 – 2012-07-20 07:02:35

回答

4

我找不到在iOS的NSRunningApplication(公共或私營)5.0頭(我敢肯定,我到處檢查,但我可能是錯的...)

很可能有多種方式來做到這一點,但這些應該工作一個...

首先,獲取有關正在運行的進程信息。如果你不能得到包ID,但是可以獲取到的應用程序的路徑,那麼這是夠好。你可以這樣做,在幾個方式之一:

1)See this answer on stack overflow也許this one。我不確定這些技術的可執行路徑是否可用...我沒有深入探索它們。

2)可以打通ps shell命令的過程信息。例如,在命令行ps -Aef命令:

iPhone4:~/Applications/8AA99EA8-9CFC-4C17-9BD1-7C2812EDAAD4/Starbucks.app mobile$ ps -Aef 
    UID PID PPID C  STIME TTY   TIME CMD 

    501 281  1 0 0:00.00 ??   1:02.39 /Applications/MobilePhone.app/MobilePhone 
    501 282  1 0 0:00.00 ??   2:26.40 /Applications/MobileMail.app/MobileMail 
    501 479  1 0 0:00.00 ??   5:45.01 /Applications/MobileSafari.app/MobileSafari 
    501 490  1 0 0:00.00 ??   0:45.62 /Applications/Music~iphone.app/Music~iphone 
    501 912  1 0 0:00.00 ??   0:17.65 /var/mobile/Applications/8AA99EA8-9CFC-4237-9BD1-7C2812AAAAD4/Starbucks.app/Starbucks 
    501 1933  1 0 0:00.00 ??   0:51.72 /var/mobile/Applications/9962D9AE-087C-4D2E-A6AB-151230DBCDB09/Skype.app/Skype 
    501 2106  1 0 0:00.00 ??   1:11.68 /var/mobile/Applications/20DCED79-B1EE-48F4-B3E1-75E9C25A0908C/Netflix.app/Netflix 
    501 2259  1 0 0:00.00 ??   0:03.83 /Applications/Stocks.app/Stocks 
    501 2292  1 0 0:00.00 ??   0:07.05 /var/mobile/Applications/33713030-9D3D-4BAC-8182-282973B2E5E0/ZillowMap.app/ZillowMap 
    501 2568  1 0 0:00.00 ??   0:12.91 /var/mobile/Applications/55216130-10D8-498C-B477-AD18A4982E18/eBay.app/eBay 
    501 2587  1 0 0:00.00 ??   0:05.10 /var/mobile/Applications/2A8DEAAD-8244-45C0-BEA9-20DA290B0117/Moviefone.app/Moviefone 

我刪除了一些輸出,但是你可以看到一些應用程序運行(*。應用程序)。

所以,在你的應用程序,你可以運行"ps -Aef >> /var/mobile/Library/MyAppName/ps.txt"systemexec呼叫,發送輸出到一個臨時文件。然後,解析該文件以獲取結果。

3)我還在網上找到了Darwin開源的一個副本,並且將它收集了一小點,將這種數據收集到C字符串緩衝區中,可以通過編程方式進行解析。這裏獲得頭和.c文件:

darwin.c

darwin.h

在您的Xcode項目,#include "darwin.h"包括兩個文件。然後,使用它像這樣:

OS_initialize(); 
size_t buffSize = 20000; // you may need to increase this! 
char buffer[buffSize]; 

int bytes = OS_get_table(buffer, buffSize); 
if (bytes > 0) { 
    self.textView.text = [NSString stringWithCString: buffer encoding: NSASCIIStringEncoding]; 
} 

現在,你有應用的安裝位置,打通信息。在這些目錄下的plist

NSString* filename = @"/var/mobile/Applications/8AA99EA8-9CFC-4237-9BD1-7C2812EDAAD4/Starbucks.app/Info.plist"; 
NSDictionary* dict = 
    [[NSDictionary alloc] initWithContentsOfFile: filename]; 
NSString* bundleID = [dict valueForKey: @"CFBundleIdentifier"]; 

並讀取它們的包ID。

爲了使這項工作,您可能需要獲得你的應用程序root權限。

See here on how to do that