2014-03-26 50 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