2011-01-06 15 views

risposta

13

No, sulle applicazioni iOS non ha accesso alle informazioni di/su altre applicazioni a causa di ambiente sandbox.

+0

Ho trovato una soluzione funzionante, non sono sicuro che sarà accettata da Apple !!! pensieri ??? – Unicorn

+0

Penso che non lo farà) –

+0

ecco il link: http://www.iphonedevsdk.com/forum/iphone-sdk-development/22289-possible-retrieve-these-information.html – Unicorn

2

Non dal dispositivo. Tuttavia, dal desktop è possibile sbirciare nella libreria di iTunes.

+0

stai parlando di farlo programmaticamente? Se sì, puoi fornire maggiori dettagli? – AmineG

1

Ci sono modi per farlo senza un dispositivo jailbroken e non respingere la tua app.
1. ottenere un elenco dei processi attualmente in esecuzione vedere this SO risposta. Dovrai tradurre dal nome del processo al nome dell'app.
2. Controlla se qualche app ha registrato uno schema URL univoco con UIApplicationDelegate canOpenURL. Ci sono alcuni siti che catalogano schemi di URL conosciuti, this è il migliore.

Se un'app non è attualmente in esecuzione e non registra uno schema di URL personalizzato, non verrà rilevato da questi metodi. Sono interessato a sentire un metodo che sarà consentito nell'app store che funziona meglio di così.

4

sì, è possibile ottenere l'elenco di tutte le app installate

-(void) allInstalledApp 
{  
    NSDictionary *cacheDict; 

    NSDictionary *user; 

    static NSString *const cacheFileName = @"com.apple.mobile.installation.plist"; 

    NSString *relativeCachePath = [[@"Library" stringByAppendingPathComponent: @"Caches"] stringByAppendingPathComponent: cacheFileName]; 

    NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent: @"../.."] stringByAppendingPathComponent: relativeCachePath]; 

    cacheDict = [NSDictionary dictionaryWithContentsOfFile: path]; 

    user = [cacheDict objectForKey: @"User"]; 

    NSDictionary *systemApp=[cacheDict objectForKey:@"System"]; 
} 

systemAppDictionary contiene l'elenco di tutte le applicazioni legate sistema e userDictionary contiene altre informazioni app.

+0

ciò fornisce anche l'elenco di app per sviluppatori? – yunas

+3

Questo non funziona per me. restituisce nulla – AmineG

+0

anche questo non funziona per me.ricevendo risposta nil. Si prega di suggerire – jaydev

0

Puoi farlo controllando se un'applicazione è installato o non utilizzando canOpenURL metodo o controllando i processi in background e corrispondenza con il nome dell'app che ti interessa.

1

provare questo, lo farà funzionare anche con dispositivi non-jailbroken:

#include <objc/runtime.h> 
Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace"); 
SEL selector=NSSelectorFromString(@"defaultWorkspace"); 

NSObject* workspace = [LSApplicationWorkspace_class performSelector:selector]; 

SEL selectorALL = NSSelectorFromString(@"allApplications"); 

NSLog(@"apps: %@", [workspace performSelector:selectorALL]);//will give you all **Bundle IDS** of user's all installed apps 
+0

come analizzare il nome app e l'ID bundle da questo? per favore aiutami –

+0

@VikashRajput La mia risposta è testata al 100%. Otterrai tutte le app (cioè gli ID bundle) nell'ultima riga del codice precedente, ma non puoi sovrascrivere nulla a causa del sandboxing. Tuttavia, puoi google per questo. Se è stato utile a te allora dovrebbe esserci un upvote :). –

+0

Fornirà una matrice di oggetti di tipo LSApplicationProxy ma non sono in grado di ottenere l'ID bundle come NSString. Potete per favore analizzare l'ID del bundle come NSString? –

0

È possibile utilizzare runtime Objective C per ottenere l'elenco di tutte le applicazioni installate. Ti fornirà una serie di oggetti LSApplicationProxy.

Di seguito è riportato uno snippet di codice che stampa il nome di tutte le applicazioni installate nel dispositivo.

Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace"); 
NSObject* workspace = [LSApplicationWorkspace_class performSelector:NSSelectorFromString(@"defaultWorkspace")]; 
NSMutableArray *array = [workspace performSelector:NSSelectorFromString(@"allApplications")]; 

NSMutableArray *mutableArray = [[NSMutableArray alloc] init]; 
for (id lsApplicationProxy in array) { 
    if(nil != [lsApplicationProxy performSelector:NSSelectorFromString(@"itemName")]){ 
     [mutableArray addObject:[lsApplicationProxy performSelector:NSSelectorFromString(@"itemName")]]; 
    } 
} 
NSLog(@"********* Applications List ************* : \n %@",mutableArray); 

Non dimenticare di includere <objc/runtime.h>.

Problemi correlati