Posso invertire a livello di codice i valori di Info.plist mentre la mia applicazione è in esecuzione?

StackOverflow https://stackoverflow.com/questions/1429886

  •  07-07-2019
  •  | 
  •  

Domanda

Sono interessato a utilizzare le chiavi SBUsesNetwork e UIRequiresPersistentWiFi nella mia applicazione; tuttavia, vorrei abilitarli solo quando si utilizza un determinato set di controller di visualizzazione. C'è un modo per capovolgere a livello di codice quei valori chiave mentre l'applicazione è in esecuzione?

È stato utile?

Soluzione

Non puoi modificare i contenuti del bundle mentre sei in esecuzione, non hai accesso in scrittura a quella directory. Non sono sicuro che ci sia un modo per fare esattamente quello che vuoi.

Altri suggerimenti

So che puoi ottenere il tuo info.plist come NSDictionary tramite NSBundle con il seguente:

NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];

da lì puoi creare un mutableCopy del NSDictionary e impostare i valori al suo interno. Quando si eseguono query sulle chiavi, è necessario assicurarsi di eseguire una query sul NSDictionary e non sul file info.plist, ma non dovrebbe essere difficile incapsulare tutto ciò in una classe che gestisce entrambi problemi per te.

Per quanto riguarda la modifica diretta del file info.plist della tua app, potrebbero esserci problemi (ad esempio, se modifichi il file, la firma del codice fallirà e la tua app verrà considerata corrotta), anche se non ne sono certo.

Non è possibile modificare Info.plist. Non sembra esserci un modo sanzionato da Apple per fare ciò che cerchi.

Non penso che funzionerà. [NSBundle mainBundle] ha un puntatore a un infoDictionary specifico. Anche se ne prendi una copia mutevole, NSBundle non saprebbe nulla del nostro nuovo plist. Qualcuno ha ancora provato?

Info.plist non è altro che un dizionario. Quindi può essere modificato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top