【问题标题】:iOS and XCode: What is the best way to store connection settings (i.e. URLs) for an iOS app?iOS 和 XCode:为 iOS 应用程序存储连接设置(即 URL)的最佳方式是什么?
【发布时间】:2014-05-05 09:38:13
【问题描述】:

我们从 #defines 开始,将我们的应用程序指向开发、质量保证和实时 API 服务器。嗯,这很懒惰,更不用说管理起来很痛苦了。

我正在考虑将默认 URL/连接设置存储在 .plist 中,并创建将使用相应 .plist 进行连接的 dev|stage|live 构建配置。

有没有更清洁的方法来做到这一点? .plist 的安全性如何?

【问题讨论】:

  • 根本不安全。如果您想要一种更安全的方式,您可以在运行时构建您的 URL 字符串,从数组中抓取每个字符。这样,二进制文件不包含字符串。 (但大多数人不会费心查看二进制文件,只有手头有太多时间的人)

标签: ios url connection settings plist


【解决方案1】:

这是我的处理方式。

我有一个文件来存储这样的信息。让我们将此文件称为 Configuration{h,m}

在我的 .h(头文件)文件中,我这样声明常量:

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

在我的 .m(实现)文件中,我用这个来完成它

#pragma mark - API

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

NSString * const kAPIVersion = @"v2/";

这里发生的是,它检查我是否在 sim 上运行,如果是,则使用 localhost,如果它在设备上运行,则使用实时服务器。

最后,我在我的预编译头 (PCH) 文件中导入 Configuration.h。

#import Configuration.h

现在,此文件可在整个应用程序中使用,无需在每个文件中导入。我就是这样用的。

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

但是,troop231 发表的评论听起来很有趣。也许我可以在将来的某个时间实施。一直在寻找更安全的做事方式:)

【讨论】:

  • 感谢您的回答。您如何处理针对暂存服务器与生产服务器的构建?更多#ifdefs?为什么不使用 .plist?
【解决方案2】:

您可以将其存储在钥匙串中 - 它是安全的 - 但我不知道您为什么要这样做。

您可以使用外部常量而不是定义: extern NSString *const in a class.

您可以使用预处理器指令来帮助您管理地址: http://www.techotopia.com/index.php/Using_Objective-C_Preprocessor_Directives

您可以创建一个单例类,例如在开始时从 .plist 读取这些 url,然后将其交给任何感兴趣的类。

关于安全性:

  • 将单例与 .plist 和运输应用程序一起使用不会泄露您的测试/开发地址。
  • 使用#define、externs 和预处理器指令(即#ifdef DEBUG)也不会在生产代码中显示您的开发/测试地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 2016-09-29
    相关资源
    最近更新 更多