【问题标题】:Swift Project Builds and runs but fails to ArchiveSwift 项目构建并运行但无法存档
【发布时间】:2014-08-23 13:57:46
【问题描述】:

我有一个 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

我看到人们谈论可能导致此类错误的某些语法,但有谁知道如何尝试找出导致段错误的代码位?

【问题讨论】:

  • 嗨。你有没有弄清楚是什么导致了这个问题?
  • 不,实际上我搁置了我的快速开发,抱歉
  • @JozefDransfield 能否请您检查一下我的解决方案是否适合您?

标签: xcode segmentation-fault swift


【解决方案1】:

我遇到了类似的问题,“解决方案”是在发布配置的构建设置中将 swift 编译器代码生成优化级别转换为 -Onone。这是从 Xcode 6.0.1 开始的。

【讨论】:

  • 我确实遇到了上面的问题,这解决了它。很想知道原因是什么。
  • 我在找到这个答案之前找到了修复(不幸的是),是的,这绝对是发布版本(存档)的优化级别。没有一个可以游泳。 ;-)
  • 伙计,你太棒了。我在这个上浪费了几个小时。非常感谢!
  • 非常感谢。它为我节省了很多时间。在我使用这个解决方案之前,我很困惑该怎么做
  • 非常感谢。我在哭。感谢上帝
【解决方案2】:

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

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

我遇到了这样的问题。

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]?

如果这有帮助,只需打开令人惊叹的 swift 整个模块优化 + 以防你不知道整个模块优化是什么 -> 阅读这篇文章:

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

【讨论】:

  • 你的分析很棒。幸运的是,这里有像您这样的专业人士,而不仅仅是复制/粘贴的快速修复。非常感谢!
  • 很高兴为您提供帮助 ;)
【解决方案3】:

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

其中一种结构是当您使用过多的[weak self]s 时:

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

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

【讨论】:

    【解决方案4】:

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

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

    然后我们就可以构建和归档项目了。

    此外,当您将设备设置为通用 iOS 设备时,请务必按以下顺序执行步骤:

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

    【讨论】:

      猜你喜欢
      • 2018-05-11
      • 2023-03-09
      • 2018-09-01
      • 1970-01-01
      • 2022-06-20
      • 2019-11-30
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多