我刚刚将我的xcode升级到4.5.1版。
一切都运行良好,但现在,当我存档项目时, xcode卡住/挂起并且永远不会完成归档。
在状态顶部,文字说:
编译10个源文件中的10个......
之后什么也没发生。它只是卡住了。
我仍然可以编译和构建代码(没有归档),一切都在模拟器中运行得很好。
我重新安装了xcode。之后问题仍然存在。
任何建议都会受到批评。
更多信息:
我已经将问题确定为特定的代码行:
CGRect tmpFrame3 = seeDetailsButton.frame;
我没有看到这条线有任何问题...
为什么它在模拟器中构建和运行时工作正常但在归档时失败???
答案 0 :(得分:6)
我弄清楚这里发生了什么
首先,它与归档过程本身无关,而与 Release 模式中的构建无关
我在归档期间遇到问题的原因是因为它在发布模式下构建。
关于问题本身:
似乎xcode 4.5.1中存在某种 Apple编译器错误
我正在使用Apple LLVM编译器4.1。在编译期间,它具有不同的优化级别
在调试中 - 优化设置为“无”并关闭。在发布中,它被设置为“最快,最小[-Os]”。当我在发布模式下关闭优化(将其设置为“无”)时 - 问题不会发生
更多信息:
在深入挖掘我的代码并尝试找出在优化过程中会导致编译器错误的内容之后,我看到我有以下内容:
__weak ProfileButton *tmp = myButton;
其中ProfileButton只是一个常规按钮,继承自UIButton
当我删除__weak
时,一切正常。即使我将编译器优化设置为“最快,最小[-Os]”。
答案 1 :(得分:0)
最近遇到了同样的问题,在编译期间Xcode挂在最终文件上。与上述问题一样,将发布的优化级别设置为None([-O0]以匹配调试模式)将允许存档成功运行。
但是,对于我们的代码,特定的错误与捕获自身的块相关联。每Apple's guidelines:
“如果你需要在一个块中捕获self,例如在定义一个时 回调块,考虑内存管理很重要 影响。
Blocks保持对任何捕获对象的强引用,包括 自我,这意味着很容易得到一个强大的参考 周期...“
因此,请务必检查您的代码(如果适用),并按照Apple的最佳做法捕获对自我的弱引用(example in documentation)。
答案 2 :(得分:0)
在我的情况下,我创建了一个圆形子类
就像
@interface BaseTableViewController : PaymentTableViewController
和
@interface PaymentTabelViewController : BaseTableViewController
我所做的是重新编写最后一个子类,所以它现在看起来像这样:
@interface TopTableViewController : PaymentTableViewController
和
@interface PaymentTableViewController : BaseTableViewController
答案 3 :(得分:0)
在我的情况下,当一个源文件包含如下非常大的数组的声明时出现问题:
NSArray<NSArray<NSNumber *> *> *points =
@[
@[@38.576732f, @-90.230682f, @1495320246], // 1 item
...
@[@37.478034f, @-89.524851f, @1495336147] // 3000 item
];
大约有3k项目。将源代码行分成小代码并没有帮助。
通过将项目放在CSV文件中并在运行时解析它来修复它。
另一种方法可能是分裂成更小的数组并在运行时连接。