Приложение iOS не может быть заархивировано для распространения

Мое приложение строится, запускается, имитирует и т. д. и т. д. отлично! Все работает на 100% как на тренажерах, так и на физических устройствах. Никаких ошибок или предупреждений во время сборки.

Теперь, когда я пытаюсь заархивировать свой проект, я получаю следующую ошибку:

0  clang             0x000000010bdb3472 _ZL15PrintStackTracePv + 34
1  clang             0x000000010bdb38f9 _ZL13SignalHandleri + 553
2  libsystem_c.dylib 0x00007fff8bd8ccfa _sigtramp + 26
3  libsystem_c.dylib 0x0000000000000001 _sigtramp + 18446603338169922337
4  clang             0x000000010bc7fbbf (anonymous namespace)::ObjCARCOpt::runOnFunction(llvm::Function&) + 7407
5  clang             0x000000010b0502b2 llvm::FPPassManager::runOnFunction(llvm::Function&) + 322
6  clang             0x000000010b052baf (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) + 1039
7  clang             0x000000010b050bc1 llvm::MPPassManager::runOnModule(llvm::Module&) + 289
8  clang             0x000000010b0505c5 llvm::PassManagerImpl::run(llvm::Module&) + 277
9  clang             0x000000010b0504ad llvm::PassManager::run(llvm::Module&) + 13
10 clang             0x000000010b02f0e8 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::Module*, clang::BackendAction, llvm::raw_ostream*) + 4424
11 clang             0x000000010b02c941 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) + 513
12 clang             0x000000010aef83f6 clang::ParseAST(clang::Sema&, bool) + 406
13 clang             0x000000010aef6ed7 clang::CodeGenAction::ExecuteAction() + 855
14 clang             0x000000010aec943f clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 879
15 clang             0x000000010aec80cb clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 2683
16 clang             0x000000010aeba8ce cc1_main(char const**, char const**, char const*, void*) + 5086
17 clang             0x000000010ae950d8 main + 648
18 clang             0x000000010ae94e44 start + 52
clang: error: unable to execute command: Segmentation fault: 11
clang: error: clang frontend command failed due to signal 2 (use -v to see invocation)
clang: note: diagnostic msg: Please submit a bug report to http://developer.apple.com/bugreporter/ and include command line arguments and all diagnostic information.
clang: note: diagnostic msg: Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /var/folders/yn/jhqtwmzx2l31sytjj7ltz_qc0000gn/T/Image-u5GlrW.mii
clang: note: diagnostic msg: /var/folders/yn/jhqtwmzx2l31sytjj7ltz_qc0000gn/T/Image-u5GlrW.sh
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 254

и я понятия не имею, почему. Теперь проблема связана с Image.mm, который я использую из проекта simple-iphone-image-processing. И я думаю, что это связано с ARC. Может ли кто-нибудь пролить свет на это?

Спасибо


ОБНОВЛЕНИЕ

Итак, я просто попробовал это несколько раз, и это сработало. Так что проблема периодическая. Я оставляю этот вопрос здесь, если кто-то еще может что-то сказать.


person Nico Huysamen    schedule 14.03.2012    source источник
comment
Какую версию Xcode вы используете?   -  person Till    schedule 14.03.2012
comment
Если вам удалось создать свой архив, я бы сказал, просто отправьте отчет об ошибке в Apple, например, хорошие запросы сообщений об ошибках, и двигайтесь вперед со своим проектом. О, и, может быть, будьте немного более строгими в тестировании вашего приложения...   -  person QED    schedule 14.03.2012
comment
@Till — XCode 4.3 с обновлением SDK 5.1.   -  person Nico Huysamen    schedule 14.03.2012
comment
@psoft - Спасибо за ответ. Я не злился или что-то в этом роде. Просто не имеет смысла, что вы говорите 1, в компиляторе может быть ошибка, поэтому 2 лучше проверьте свой код. Как поможет тестирование моего кода, если ошибка в компиляторе? Впрочем, хватит туда-сюда, я не такой человек. Спасибо за ответ ниже!   -  person Nico Huysamen    schedule 14.03.2012
comment
Без проблем. Мне приходит в голову, что мой первоначальный комментарий мог показаться критикой вашей работы, а не тем, что я имел в виду. В любом случае, конечно, ошибки компилятора могут привести к ошибкам в конечной программе, хотя в этом случае вы, вероятно, в порядке. Если компилятор подозревается, но вы вынуждены его использовать — как вы и все, кто использует ARC на iPhone, вынуждены использовать LLVM — тогда требуется небольшая дополнительная проверка конечного продукта. Надеюсь, вы видите мою логику ниже. Удачи с продуктом и спасибо за реквизит!   -  person QED    schedule 14.03.2012


Ответы (1)


Нарушается функция ObjCARCOpt::runOnFunction(llvm::Function&). Просто для смеха я разместил код runOnFunction() ниже. Цель этой функции — оптимизировать объектный код, связанный с ARC, в переданном объекте llvm::Function. Это нормально, но, похоже, в компиляторе есть ошибка, связанная с обработкой Objective-C++, что, честно говоря, меня не удивляет.

Отчеты об ошибках уже отправлены в Apple (здесь, здесь, возможно, в других местах). Вы должны сообщить об этом тоже.

До тех пор, есть несколько вещей, которые я мог бы предложить.

1) Поскольку проблема носит периодический характер, просто продолжайте свой проект. Это может сработать для вас, а может и нет. В конце концов, компиляторы должны быть детерминированными...

2) Попробуйте отключить ARC для ваших файлов Obj-C++. Это, пожалуй, самый простой способ.

3) Отключите оптимизацию ARC. Сделайте это, исключив -enable-objc-arc-opts из вашей сборки. Как это сделать с помощью настроек сборки XCode, остается читателю в качестве упражнения. Во всяком случае, я думаю, что ваш лучший выбор 2).

Код от llvm-3.0.src/lib/Transforms/Scalar/ObjCARC.cpp ниже. Лучше всего выйти на if (!Run) return false;. Run будет ложным, если в анализируемом модуле отключена функция ARC. Удачи, не забудьте отправить отчет об ошибке!

bool ObjCARCOpt::runOnFunction(Function &F) {
  if (!EnableARCOpts)
    return false;

  // If nothing in the Module uses ARC, don't do anything.
  if (!Run)
    return false;

  Changed = false;

  PA.setAA(&getAnalysis<AliasAnalysis>());

  // This pass performs several distinct transformations. As a compile-time aid
  // when compiling code that isn't ObjC, skip these if the relevant ObjC
  // library functions aren't declared.

  // Preliminary optimizations. This also computs UsedInThisFunction.
  OptimizeIndividualCalls(F);

  // Optimizations for weak pointers.
  if (UsedInThisFunction & ((1 << IC_LoadWeak) |
                            (1 << IC_LoadWeakRetained) |
                            (1 << IC_StoreWeak) |
                            (1 << IC_InitWeak) |
                            (1 << IC_CopyWeak) |
                            (1 << IC_MoveWeak) |
                            (1 << IC_DestroyWeak)))
    OptimizeWeakCalls(F);

  // Optimizations for retain+release pairs.
  if (UsedInThisFunction & ((1 << IC_Retain) |
                            (1 << IC_RetainRV) |
                            (1 << IC_RetainBlock)))
    if (UsedInThisFunction & (1 << IC_Release))
      // Run OptimizeSequences until it either stops making changes or
      // no retain+release pair nesting is detected.
      while (OptimizeSequences(F)) {}

  // Optimizations if objc_autorelease is used.
  if (UsedInThisFunction &
      ((1 << IC_Autorelease) | (1 << IC_AutoreleaseRV)))
    OptimizeReturns(F);

  return Changed;
}
person QED    schedule 14.03.2012