iOS-Anwendung kann nicht für die Verteilung archiviert werden
Frage
Meine Anwendung erstellt, läuft, simuliert usw.usw.gut!Sowohl auf den Simulatoren als auch auf den physischen Geräten funktioniert alles zu 100%.Keine Fehler oder Warnungen während des Baus.
Wenn ich jetzt versuche, mein Projekt zu archivieren, wird die folgende Fehlermeldung angezeigt:
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
und ich habe keine Ahnung warum.Ich jetzt kommt das Problem von Image.mm das benutze ich von der simple-iphone-image-processing
Projekt.Und ich denke, es hat mit ARC zu tun.Kann jemand mehr Licht ins Dunkel bringen?
Danke
UPDATE
OK, also habe ich es einfach ein paar Mal ausprobiert und es hat funktioniert.Das Problem ist also intermittierend.Ich lasse diese Frage hier, wenn jemand anderes vielleicht etwas zu sagen hat.
Lösung
Die Funktion, die bricht, ist ObjCARCOpt::runOnFunction(llvm::Function&)
.Nur zum Kichern habe ich den Code runOnFunction () unten gepostet.Der Zweck dieser Funktion ist die Optimierung von ARC-bezogenem Objektcode in der llvm::Function
objekt, das übergeben wird.Das ist in Ordnung, aber es scheint einen Fehler im Compiler zu geben, der sich auf die Objective-C ++ - Handhabung bezieht, was mich ehrlich gesagt nicht überrascht.
Fehlerberichte wurden bereits an Apple gesendet (hier, hier, wahrscheinlich an anderen Orten).Sie sollten es auch melden.
Bis dahin gibt es ein paar Dinge, die ich vorschlagen könnte.
1) Da das Problem zeitweise auftritt, fahren Sie einfach mit Ihrem Projekt fort.Das könnte für dich funktionieren, oder vielleicht auch nicht.Schließlich sollen Compiler deterministisch sein...
2) Versuchen Sie, ARC für Ihre Obj-C ++ - Sachen auszuschalten.Dies ist wahrscheinlich der einfachste Weg.
3) Deaktivieren Sie die Bogenoptimierungen.Tun Sie dies, indem Sie weglassen -enable-objc-arc-opts
von deinem Build.Wie dies mit den XCode-Build-Einstellungen gemacht wird, bleibt dem Leser als Übung überlassen.Wie auch immer, ich denke, Ihre beste Wette ist 2).
Code von llvm-3.0.src/lib/Transforms/Scalar/ObjCARC.cpp
ist unten.Ihre beste Wette ist, um auszusteigen if (!Run) return false;
. Run
ist false, wenn ARC im zu analysierenden Modul deaktiviert ist.Viel Glück, vergiss nicht, diesen Fehlerbericht einzureichen!
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;
}