2012-07-18 149 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