2014-03-26 52 views
0

我的iOS应用程序需要凭据才能连接到多个API。由于该项目是开源的,我不想检查到源代码库(git)中的凭证。如何在iOS上的源代码管理中保留凭据

最后,我希望能够做这样的事情在我的应用程序代码:

googleMapsApiKey = [AppCredentials googleMapsApiKey]; 

AppCredentials与不在源代码控制配置文件进行初始化。

过去,我一直在使用Python或Ruby等动态语言,并且到达solutions like this one以保证凭据不受源代码管理。方法是这样的:

  1. 有一个公共的API,它在运行时分析一个包含所有凭证的文件。
  2. 包含所有密码的配置文件是带外传输的(例如,通过电子邮件加密)。
  3. 分发为例证书文件作为模板用于其他开发

不过,我不知道如何应用在iOS这种方法。我不能在源根目录中放置'passwords.json'文件,并在应用程序初始化时解析它。我不能把东西放在应用程序包中,因为该包也被检入到版本控制中。

注意不会从编译应用程序提取凭证阻止恶意的人。我目前不打算解决这个问题。有了这个问题,我只对保持凭证不在源代码中感兴趣。

+1

你为什么不能做那些事?告诉SVC工具忽略该文件,因此它不包含在提交中。 – Wain

+0

@Wain - 我不能忽略应用程序包,因为该包用于其他事情(例如必须检入版本控制的本地化文件)。也许我只需要一个单独的“Credentials.bundle”,这个“Credentials.bundle”可以被源代码控制忽略,但是当我们提交给应用程序商店时,它会被包含在应用程序中。 – mkirk

+0

我以为我们在讨论一个单独的配置文件,就像一个plist – Wain

回答

1

这实际上是一个SVC问题,从这个角度来看,您只需简单地将配置添加到单个文件并让该文件被SVC忽略。

通常,我会在“读我”文件中添加此配置文件,该配置文件需要在项目有效之前在指定的位置创建。

然后,将该文件添加到项目中,并为其提供目标成员资格(以便在构建时将其复制到包中)。现在,在代码中,您可以使用类似于:

[[NSBundle mainBundle] pathForResource:@"accountConfig" ofType:@"plist"]; 

获取要加载的文件的路径。

+0

对于iOS来说,了解捆绑软件是什么,除此之外,捆绑软件还包括一系列对要复制到构建应用程序中的文件的引用。我将我的凭证文件添加到捆绑包中,并忽略版本控制中的凭证文件。当协作者克隆存储库并在xcode中打开应用程序时,他们会看到错误,因为缺少凭据文件。我可以将他们的凭证文件发送给他们,每个人都很开心。 – mkirk

+1

小改正:束是项目被复制到的目的地。构建的应用程序包含一组资源。在Xcode中,您有一个将资源复制到捆绑包的构建阶段。 – Wain