Подтвердить что ты не робот

Swift Project Создает и запускает, но не удается Архивировать

У меня есть проект xcode и работает на устройстве, отладка сборки все в порядке.

Однако, когда я пытаюсь архивировать проект im, получая segfault от Swift Compiler:

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

Я видел, как люди говорили о некоторой синте, которая может вызвать такую ​​ошибку, но кто-нибудь знает, как попытаться отследить, какой бит кода вызывает segfault?

4b9b3361

Ответ 1

У меня была аналогичная проблема, и "решение" заключалось в том, чтобы быстро повысить уровень оптимизации генерации кода компилятора до -Onone в настройках сборки для конфигурации выпуска. Это относится к Xcode 6.0.1. Turning off swift compiler optimization

Ответ 2

до снижения уровня оптимизации (что определенно не способ решения проблем компиляции, если вы не используете какой-то довольно аккуратный материал низкого уровня или некоторые специальности).

Просто посмотрите, что компилятор пытается рассказать вам - yeap. это еще не читаемый человеком журнал. Но вы можете читать, не так ли?:)

У меня проблема такая:

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

Если это поможет, просто включите оптимизацию оптимизатора всего стремительного целого модуля +, если вы не знаете, что такое оптимизация всего модуля → прочитайте эту статью:

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

Ответ 3

У меня тоже была эта проблема, и я обнаружил, что некоторые конструкции в коде, похоже, вызывают сбой компилятора.

Одна из конструкций заключается в том, что вы слишком много используете [weak self] следующим образом:

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

Второй [weak self] не нужен и вызывает сбой компилятора.

Ответ 4

В проекте, унаследованном от другой компании-разработчика, мы столкнулись с такой же ошибкой. Мы заметили, что были некоторые пользовательские настройки сборки, относящиеся к языковой версии Swift и диалоговому языку С++ (в разделе Apple LLVM). Вот что мы сделали, чтобы исправить:

  • Верните версию Swift в значение по умолчанию (раньше было 2.3)
  • Reset все параметры, связанные с диалектом С++
  • Обновлены контейнеры с pod update и исправлены некоторые новые предупреждения

Затем мы смогли создать и архивировать проект.

Кроме того, когда вы устанавливаете устройство на универсальное iOS-устройство, важно выполнить шаги в следующем порядке:

  • Продукт "Чистота
  • Продукт "Строить
  • Продукт "Архив