2012-03-14 2 views
2

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

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

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. Может ли кто-нибудь пролить свет на это?

Благодаря


UPDATE

ОК, так что я просто пробовал кучу раз, и она работала. Поэтому проблема прерывистая. Я оставляю этот вопрос здесь, если кто-то еще может что-то сказать.

+0

В какой версии Xcode вы используете? – Till

+0

Если вам удалось создать свой архив, я бы сказал, просто отправьте отчет об ошибке Apple, как хорошие сообщения об ошибках, и продвигайтесь вперед с вашим проектом. О, и, может быть, быть немного более строгим в тестировании вашего приложения ... – QED

+0

@ Till - XCode 4.3 с обновлением 5.1 SDK. –

ответ

1

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

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

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

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; 
} 
Смежные вопросы