JK *_*iho 129 xcode interface-builder storyboard xib ios
当多人合作时,故事板从git工作流角度来看是一种巨大的痛苦.例如,.storyboard文件中的XML具有其起始<document>标记toolsVersion和systemVersion属性,这些属性由最新文件操作符恰好运行的任何配置更改.大家同步的Xcode版本恰恰似乎帮助toolsVersion,但systemVersion变化不管是什么,这取决于具体的Mac和/或开发运行OS X的版本上.
这是愚蠢的,但大多是无害的.然而,令我们担心的是,在其他时候,只需在故事板之后打开它们,就会自动对故事板进行一些其他更改git pull.也就是说,Alice对故事板进行了更改,提交并将它们推送到存储库.然后鲍勃拉出爱丽丝的变化并打开故事板进行进一步的更改.他打开故事板的那一刻,文件图标立即变为修改,但是,未保存的状态,以及git status已发生的任何数量的变化怪异表演.所有这一切,没有鲍勃改变任何东西或自己保存文件.
我们看到的最常见的自动更改是<classes>故事板文件末尾附近整个标记层次的消失或重新出现.我们还没弄清楚造成这种情况的原因.我们可能在各种.lproj目录中有几个本地化版本的故事板,当在Interface Builder中打开它们时,类层次结构可能会自动从某些层次结构中删除并添加到其他版本中,或者单独留在某些层次结构中.这会导致很多噪音git diff,但实际上并没有破坏任何功能.我们经常会有选择地将我们所做的实际更改添加到git的索引中,提交那些,然后只丢弃自发的,荒谬的<classes>变化.这是为了保持提交小而好,因为它们应该是.然而,最终,由于Xcode不断重新进行更改,它变得太麻烦了,有人只是愤怒地提交它们以及其他一些东西......这很好,直到其他人的Xcode决定要将它们更改为否明显的原因.(我们的提交历史对此很多咒骂.)
是否有其他人看到这种行为?这是我们的一个或多个开发者Mac上的Xcode错误还是配置问题?我们在与XIB文件协作时已经看到了一些类似的行为,但故事板似乎更容易受此影响.
Mar*_*ski 77
这不是错误,这是Xcode处理故事板文件的结果.我正在编写故事板文件的差异和合并程序(GitHub链接),我花了几个小时分析故事板文件逻辑以及Xcode如何处理它.这是我发现的:
为什么故事板文件会发生奇怪的变化?
Xcode使用NSXML API将故事板文件解析为NSSet基于某种逻辑树结构.当Xcode需要编写更改时,它会NSXMLDocument根据逻辑树结构创建一个,清除storyboard文件并调用XMLDataWithOptions:再次填充文件.因为集合不保留其元素的顺序,即使最轻微的修改也可能改变整个故事板XML文件.
为什么类标签会随机消失或重新出现?
该<class>部分只不过是一个内部Xcode缓存.Xcode使用它来缓存有关类的信息.缓存经常更改..h/.m当Xcode怀疑它们已经过时时,在打开和删除类文件时添加元素(至少较旧的Xcodes表现得像这样).保存故事板时,将转储当前版本的缓存,这就是该<class>部分经常更改甚至消失的原因.
我没有反向设计Xcode; 我通过试验Xcode和storyboard文件来做出这些观察.尽管如此,我几乎100%确定它是这样工作的.
结论:
MyController1在故事板文档中更改了视图控制器.打开故事板文件,找到这样的东西
<viewController id=”ory-XY-OBM” sceneMemberID=”MyController1”>.您可以安全地仅提交此部分中的更改并忽略其他所有内容.如果您更改了segues或约束,也可以提交“ory-XY-OBM”内部的任何内容.简单!Phi*_*vin 11
通过git add -p对Xcode生成的任何文件(包括故事板,XIB,核心数据模型和项目文件)进行非常明智的使用,可以稍微减轻这个问题,所有这些文件都受到类似的瞬态修改,这些修改对实际接口/模型没有影响/项目.
我在故事板上看到的最常见的垃圾变化是系统版本号(正如你所提到的)以及该部分的不断添加和删除<classes>,我从未见过的遗漏导致问题.对于XIB,它是添加和删除<reference key="NSWindow"/>,甚至不是Cocoa Touch中的类.哇哇.
把它想象成大海:有高潮和低潮.让它洗过你.
啊.而已.
在暂存更改,重置垃圾更改以及进行干净提交时,可以忽略这些修改.
从技术角度来看,我在XIB上看到的故事板的唯一优势是Apple还没有扼杀FileMerge拒绝合并冲突的故事板.(FileMerge曾经能够合并XIB,但是新版本打破了.Thxxxx家伙!!!)
请在http://bugreporter.apple.com/上提交关于所有这些问题的大量错误!并且不要忘记在OpenRadar上创建条目.
在这里提出另一个答案,因为这种情况有了很大改善.表示StoryBoard的XIB文件的XML已经大大简化了.
我最近也咬了一口,开始使用Xcode中的界面来源代码控制.我已经在命令行上工作多年并且很开心,但界面很好,它允许你拆分提交,如果你使用链接到提交的票务系统,这非常重要.
无论如何,我今天注意到故事板上有一个变化,内置的差异显示我是文档标签(systemVersion)中的一个属性.所以没什么大不了的.
我读过一些文章,人们说SB因为合并问题而被禁止参加他们的团队.完全疯狂.他们是如此惊人,特别是现在他们内置了智能自动布局,如果你不使用它们,你真的错过了.