2012-07-18 137 views
42

這是一個問題,我們從來沒有處理,直到故事板被引入 - 每當UI有衝突的機會,我們只是確保沒有2個開發人員曾同時在同一個XIB文件上工作。我們避免解決XIB衝突的原因是可能存在問題的副作用(XIB以XML格式表示,因此沒有合併2個版本的「好」方法)。故事板和SVN衝突

現在我們正面臨這個問題,因爲我們所有的UI元素都在同一個.storyboard文件中 - 防止項目中的任何2個UI元素同時工作使得並行工作非常困難。

有關如何解決此問題的任何建議?感謝您的努力。

+3

哎。這是一個很好的問題! – 2012-07-18 09:43:29

+1

希望它也可以幫助未來幾代人:) – Stavash 2012-07-18 09:44:11

+0

您是否嘗試過向您的svnignore添加這個'YourProjectName.xcodeproj/project.xcworkspace/xcuserdata/yourusername.xcuserdatad/UserInterfaceState.xuserstate'。我和另一個開發人員一起工作在同一個項目上,我們沒有遇到這些問題,我們使用git,但它是一樣的,這是我的.gitignore – ant 2012-07-18 13:34:58

回答

38

將你的故事板分成多個故事板。

沒有理由讓您的應用只包含一個故事板。將你的故事板分成模塊故事板。您可以使用+storyboardWithName:bundle:加載故事板模塊。

請參閱:UIStoryboard Best Practices其他好故事板的想法。


更新

要注意,這不是解決問題的完整的解決方案是很重要的。以同樣的方式,你不能完全避免在源代碼中將巨型類分解成更小的模塊的可能性,你無法避免故事板合併衝突的可能性。這個想法是爲了減少可能性,直到它成爲一個可管理的問題。

在大型代碼庫中總會有棘手的合併情況。妥善分解的解決方案將減少衝突的次數並最大限度地減少所需的鎖定次數。

+0

但是,如果我想在我的所有應用程序的UI元素之間存在重要的關係和關係,會發生什麼? – Stavash 2012-07-20 12:10:22

+0

這取決於你和你的項目的需求如何最好地分解一個單一的故事板。如果你發現你正在過渡到這個地方,並且無法分解你的故事板,那麼你的問題可能不像意大利麪條UI一樣是故事板。 – 2012-07-20 12:35:55

+1

我們實際上非常有能力通過故事板管理我們的所有用戶界面。至於分解能力的問題是無關緊要的,因爲這就是故事板的全部內容 - 如果我們把所有事情都分解了,我們也可以回到單獨的XIB上。 – Stavash 2012-07-20 12:46:57

-3

你也可以看看現代的源代碼管理工具。例如,Git具有智能合併功能。請參閱this link爲什麼您應該考慮升級您的工作流程。

+0

雖然這是一個很好的觀點,但使用除了以外的任何其他工具SVN是一個大問題 - 我們所有的項目都是由SVN管理的,我們會將大量的代碼修改轉移到GIT。雖然會檢查選項。謝謝。 – Stavash 2012-07-20 12:19:59

+0

如果考慮遷移,請查看git-svn。它是一種同步git和svn存儲庫的工具。它可以作爲一個有用的開始。 – user1534610 2012-07-20 12:45:11

+0

謝謝,會檢查出來 – Stavash 2012-07-20 12:45:33

0

下面是我想到的東西,當我只是搞亂,試圖找到一個解決方案。

如果您在Xcode中右鍵單擊故事板文件並導航至「打開爲」,您會看到有多個選項 - 默認值爲「Interface Builder - iOS Storyboard」。但是,您也可以選擇「源代碼」。

如果以源代碼模式打開故事板,可以進行更改(雖然有點痛苦)。但你可以從其他故事板添加代碼並進行更改 - 我沒有使用SVN,但使用了git存儲庫,我可以查看故事板的其他版本並複製代碼。

我不會說這個是一個很好的解決方案 - 當我嘗試在IB中重新打開故事板時,Xcode隨機崩潰時遇到了一些問題。有時候將代碼粘貼到作品中,有時候不會。有幾次我不得不更改<scene>標記的值。根據我的經驗,這很不錯,但如果你在嘗試任何操作之前備份文件,它可能會奏效。

如果確實有效,請告訴我 - 我有興趣查看是否可以找到解決此問題的解決方案。

+0

謝謝達斯汀。你描述的崩潰在過去很多時候都經歷過,這也是我試圖避免將Storyboard文件作爲XML源編輯的原因。 – Stavash 2012-07-20 13:54:52

0

這是關於合併XML文件?

幸運的是,SVN允許您更改合併工具,您可以使用它合併不同類型的文件。 (如tutorial for using P4Merge

所以,現在你只需要找到一種合併XML文件的一個很好的工具(好運:))

還有的WinMerge(與DisplayXMLFiles預過濾器),或者diffxml,或XMLMergerjava xmlmerge tool