IOS и XCode: Каков наилучший способ хранения настроек подключения (например, URL-адресов) для приложения iOS?

Мы начали С#defines, указывающих наше приложение на dev, qa и live API-серверы. Ну, это довольно лениво, не говоря уже о болезненном управлении.

Я думаю о сохранении настроек URL/подключения по умолчанию в.plist и создании конфигураций dev | stage | live build, которые будут использовать соответствующий.plist для соединений.

Есть ли более чистый способ сделать это? Насколько безопасным является.plist?

2 ответа

Вот как я справляюсь с этим.

У меня есть один файл, где я храню информацию вроде этого. Позволяет вызвать этот файл. Конфигурация {h, m}

В моем файле.h(header) я объявляю такие константы:

#pragma mark - API
extern NSString * const kAPIHost;
extern NSString * const kAPIVersion;

В моем файле.m(implementation) я завершаю это с помощью этого

#pragma mark - API

#if TARGET_IPHONE_SIMULATOR
NSString * const kAPIHost = @"http://localhost/";
#else
NSString * const kAPIHost = @"http://liveserver.com";
#endif

NSString * const kAPIVersion = @"v2/";

Что здесь происходит, он проверяет, работает ли я на симе, если я есть, то он использует localhost, если он работает на устройстве, он использует живой сервер.

Наконец, я импортирую Configuration.h в файл с предварительно скомпилированным заголовком (PCH).

#import Configuration.h

Теперь этот файл доступен во всем приложении без необходимости его импорта в каждом отдельном файле. Я использую его так.

NSURL * url = [NSURL URLWithString:[kAPIHost stringByAppendingString:[kAPIVersion stringByAppendingString:@"apiEndPoint/"]]];

Однако комментарий, опубликованный troop231, звучит очень интересно. Возможно, что-то я смогу реализовать в будущем. Всегда ищем более безопасные способы делать вещи :)


Вы можете сохранить это в цепочке ключей - это безопасно, но я не знаю, почему вы хотели бы это сделать.

Вместо констант можно использовать внешние константы: extern NSString * const в классе.

Вы можете использовать директивы препроцессора, чтобы помочь вам управлять адресами: http://www.techotopia.com/index.php/Using_Objective-C_Preprocessor_Directives

Вы можете создать одноэлементный класс, который, например, прочитал бы эти URL-адреса из.plist в начале, а затем передал их любому интересующему классу.

О безопасности:

  • использование singleton с.plist и приложением для доставки не будет раскрывать ваши тестовые /dev-адреса.
  • используя директивы #define, externs и preprocessor, т.е. #ifdef DEBUG также не будет раскрывать ваши dev/test-адреса в производственном коде.

licensed under cc by-sa 3.0 with attribution.