Swift项目构建并运行但无法归档

时间:2014-07-02 16:55:01

标签: xcode segmentation-fault swift

我有一个xcode项目并在设备上运行,调试构建一切都很好。

然而,当我尝试归档项目时,我从Swift编译器中获取了一个段错误:

0  swift                    0x0000000105c36608 llvm::sys::PrintStackTrace(__sFILE*) + 40
1  swift                    0x0000000105c36af4 SignalHandler(int) + 452
2  libsystem_platform.dylib 0x00007fff852705aa _sigtramp + 26
3  libsystem_platform.dylib 0x0000000000000002 _sigtramp + 2061040242
4  swift                    0x0000000105f51896            swift::TypeBase::getTypeOfMember(swift::Module*, swift::ValueDecl const*,    swift::LazyResolver*, swift::Type) + 534
5  swift                    0x00000001050eee38 swift::SILType::getFieldType(swift::VarDecl*, swift::SILModule&) const + 56
6  swift                    0x00000001051a1252 (anonymous namespace)::SILSROA::run() + 3602
7  swift                    0x000000010516b116 swift::SILPassManager::runFunctionPasses(llvm::ArrayRef<swift::SILFunctionTransform*>) + 310
8  swift                    0x000000010516b6f9 swift::SILPassManager::runOneIteration() + 761
9  swift                    0x000000010516b92b swift::SILPassManager::run() + 251
10 swift                    0x000000010516afbc swift::runSILOptimizationPasses(swift::SILModule&, swift::SILOptions const&) + 1644
11 swift                    0x0000000104ffb141 frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 3537
12 swift                    0x0000000104ffa35d main + 1533
13 libdyld.dylib            0x00007fff885d75fd start + 1
14 libdyld.dylib            0x0000000000000052 start + 2007140950

我看到有人在谈论某些可能导致此类错误的synta,但是有没有人知道如何尝试跟踪哪些代码导致了段错误?

4 个答案:

答案 0 :(得分:34)

我有一个类似的问题,“解决方案”是在发布配置的构建设置中将swift编译器代码生成优化级别转换为-Onone。这是Xcode 6.0.1的一部分。 Turning off swift compiler optimization

答案 1 :(得分:3)

在降低优化级别之前(这绝对不是解决编译问题的方法,除非你使用一些非常简洁的低级别东西或某些专业)。

简单地看看编译器试图告诉你什么 - 是的。它还不是人类可读的日志。但你可以阅读,不能吗?:)

我遇到了这样的问题。

While running pass #1059521 SILFunctionTransform "Constant Propagation" on SILFunction "@_TTSg5VSC29UIApplicationLaunchOptionsKeyS_s8Hashable5UIKit_P__CSo8NSObjectS2_S0_10ObjectiveC_Ps9AnyObject____TFs17_dictionaryUpCastu2_Rxs8Hashable0_S_rFGVs10Dictionaryxq__GS0_q0_q1__".

如果你仔细观察那个烂摊子,你会发现你正在进行某种向上转换,这是不允许的。

这是什么意思?查看你的功能

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?)

并找到将launchOptions投射为[NSObject : AnyObject]?

的地方

在swift 3中,它已变为[UIApplicationLaunchOptionsKey: Any]?。移除该演员表并将launchOptions等待[NSObject : AnyObject]?的代码更新为。{/ p>

如果这有帮助,只需打开惊人的快速整个模块优化,以防万一你不知道整个模块的优化是什么 - &gt;阅读这篇文章:

https://swift.org/blog/whole-module-optimizations/

答案 2 :(得分:0)

我也有这个问题,我发现代码中的某些构造似乎会导致编译器崩溃。

其中一个结构就是当你使用过多的[weak self]时:

whatever { [weak self] in
    whatever2 { [weak self] in
    }
}

第二个[weak self]是不必要的,会导致编译器崩溃。

答案 3 :(得分:-1)

在从另一家开发公司继承的项目中,我们遇到了同样的错误。我们注意到有一些与 Swift语言版本 C ++语言方言(在Apple LLVM部分中)相关的自定义构建设置。以下是我们要解决的问题:

  • 将Swift版本恢复为默认值(之前为2.3)
  • 重置与C ++方言相关的所有选项
  • 使用pod update更新了广告连播并修复了一些新警告

然后我们能够构建和存档项目。

此外,当您将设备设置为通用iOS设备时,请务必遵循此顺序中的步骤:

  • 产品»清洁
  • 产品»构建
  • 产品»档案