Archivo de configuration de la aplicación iOS

En una aplicación C # , siempre usé un file app.config para save algunos datos para que mi aplicación los cargue cuando sea necesario (por ejemplo, cadena de connection).

¿Cuál es la mejor manera de save información como esta en una aplicación de iOS?

    Puede crear un file de list de properties (hay una plantilla para eso en XCode, solo para Archivo -> Nuevo file y elija allí), por lo que tendrá algo así como "settings.plist", o algo por el estilo. Puede pensar en un plist como una key => file de configuration de valor, con la diferencia de que también puede contener matrices y dictionarys, además de text sin formatting como valor.

    Use NSBundle para cargar el file en su aplicación, como

     NSString *path = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"]; NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:path]; 

    A continuación, puede acceder a sus keys como un dictionary normal. Simplemente no se olvide de [liberar] después;).

    Para pequeños bits de datos como una cadena de connection, utilizaría NSUserDefaults .

    Cuando desee save su cadena de connection, haría esto:

     [[NSUserDefaults standardUserDefaults] setObject:myConnectionString forKey:@"connectionString"]; 

    Cuando quiera cargarlo, haría esto:

     myConnectionString = [[NSUserDefaults standardUserDefaults] stringForKey:@"connectionString"]; 

    Si solo está almacenando un set relativamente simple de elementos de configuration, simplemente puede utilizar los methods de serialization de NSDictionary (no sé cómo vincular al directory de methods en el doc de class):

     NSString *settingsPath = [@"~/pathtoconfig.plist" stringByExpandingTildeInPath]; NSMutableDictionary *settings = [NSMutableDictionary dictionary]; if([[NSFileManager defaultManager] fileExistsAtPath:settingsPath]){ settings = [NSMutableDictionary dictionaryWithContentsOfFile:settingsPath]; } // writing settings [settings writeToFile:settingsPath atomically:YES]; 

    Como no sé cuán familiarizado eres con el objective c, también notaré:

    • En iOS, el directory de inicio hace reference al directory de espacio aislado de la aplicación .
    • Recomiendo leer un poco más sobre el conteo de references. Aunque el objective-c, a partir de iOS5, ahora automáticamente hace reference a los recuentos , hay algunos casos extremos sobre los que debe tener conocimiento ( aquí hay una pregunta SO en ARC )

    En iOs, cada aplicación tiene un entorno limitado que estará disponible solo para esa aplicación. Entonces, si desea que el file se lea solo, acceda a Guardar package de aplicaciones. De lo contrario, guarde en la carpeta de la aplicación.

    no puede acceder a la carpeta de la aplicación directamente. Por lo tanto, si desea save su file en esa carpeta, debe hacerlo mediante progtwigción.

    Utilizo lists de properties para almacenar pequeños fragments de datos, mira aquí cómo usarlos:

    http://iphoneincubator.com/blog/tag/nspropertylistserialization

    Archivo de configuration de la aplicación iOS en Swift con iOS 8.3 :

      let path: String = NSBundle.mainBundle().pathForResource("Info", ofType: "plist")! let nsDictionaryInfoPlist: NSDictionary = NSDictionary(contentsOfFile: path)! // Usage example: Google Maps iOS SDK/API Configuration. GMSServices.provideAPIKey(nsDictionaryInfoPlist.objectForKey("GoogleMapsiOSAPIKey") as! String) 

    Me doy count de que llegué tarde a la fiesta, pero después de encontrar este desbordamiento de stack, me desanimé con la respuesta aceptada, ¡así que creé una cápsula para solucionarlo! Esto se basa en la idea de la respuesta de @ RafaelSteil, pero tiene una interfaz más simple, almacena en caching los datos de configuration cargados y soporta los pods que proporcionan sus propios valores pnetworkingeterminados que pueden ser anulados por la aplicación principal. Espero que esto ayude a alguien.

    Actualizado para Swift 3 Xcode 8

    Agregue una nueva list de properties a su proyecto denominado "Sample.plist". Luego vea el siguiente ejemplo.

      let path: String = Bundle.main.path(forResource: "Sample", ofType: "plist")! let sampleConf: NSDictionary = NSDictionary(contentsOfFile: path)! print(sampleConf.object(forKey: "test") as! String)