これは非常に迷惑です。「すべての例外ブレークポイント」を使用してシミュレータでデバッグしようとするたびに、この行で理由もなくアプリが停止します。
return UIApplicationMain(argc, argv, nil, NSStringFromClass([STAppDelegate class]));
他の誰かが彼がこの問題に苦労しているのを見つけましたか?
ありがとう!
[〜#〜] edit [〜#〜]
最初のスローでのバックトレース:
thread #1: tid = 0x1d96b, 0x36fbf540 libc++abi.dylib`__cxa_throw, queue = 'com.Apple.main-thread', stop reason = breakpoint 3.2
frame #0: 0x36fbf540 libc++abi.dylib`__cxa_throw
frame #1: 0x306975cc libFontParser.dylib`TFileDescriptorContext::TFileDescriptorContext(char const*) + 112
frame #2: 0x306973d8 libFontParser.dylib`TFileDataReference::TFileDataReference(char const*) + 164
frame #3: 0x306971fc libFontParser.dylib`TFileDataSurrogate::TFileDataSurrogate(char const*, bool) + 188
frame #4: 0x3069555a libFontParser.dylib`TFont::CreateFontEntitiesForFile(char const*, bool, TSimpleArray<TFont*>&, bool, short, char const*) + 1402
frame #5: 0x30694a80 libFontParser.dylib`FPFontCreateFontsWithPath + 224
frame #6: 0x2a5032bc libCGXType.A.dylib`create_private_data_with_path + 12
frame #7: 0x2a3ca3c4 CoreGraphics`CGFontCreateFontsWithPath + 24
frame #8: 0x2a4855d6 CoreGraphics`CGFontCreateFontsWithURL + 310
frame #9: 0x313dfee4 GraphicsServices`AddFontsFromURLOrPath + 68
frame #10: 0x313e39de GraphicsServices`__Initialize_block_invoke + 934
frame #11: 0x0121fabe libdispatch.dylib`_dispatch_client_callout + 22
frame #12: 0x01220750 libdispatch.dylib`dispatch_once_f + 100
frame #13: 0x313df72c GraphicsServices`Initialize + 196
frame #14: 0x377944c4 libobjc.A.dylib`_class_initialize + 536
frame #15: 0x3779a046 libobjc.A.dylib`lookUpImpOrForward + 254
frame #16: 0x37799f3e libobjc.A.dylib`_class_lookupMethodAndLoadCache3 + 34
frame #17: 0x377a01f8 libobjc.A.dylib`_objc_msgSend_uncached + 24
frame #18: 0x2d673b6e UIKit`-[UIStatusBarNewUIForegroundStyleAttributes makeTextFontForStyle:] + 78
frame #19: 0x2d634d94 UIKit`-[UIStatusBarForegroundStyleAttributes textFontForStyle:] + 104
frame #20: 0x2d5e767e UIKit`-[UIStatusBarServiceItemView updateForContentType:serviceString:serviceCrossfadeString:maxWidth:actions:] + 390
frame #21: 0x2d5e74ee UIKit`-[UIStatusBarServiceItemView updateForNewData:actions:] + 186
frame #22: 0x2d6428d0 UIKit`-[UIStatusBarItemView initWithItem:data:actions:style:] + 324
frame #23: 0x2d642568 UIKit`-[UIStatusBarLayoutManager _createViewForItem:withData:actions:] + 108
frame #24: 0x2d5e6f74 UIKit`-[UIStatusBarLayoutManager _prepareEnabledItemType:withEnabledItems:withData:actions:itemAppearing:itemDisappearing:] + 264
frame #25: 0x2d5e6e22 UIKit`-[UIStatusBarLayoutManager prepareEnabledItems:withData:actions:] + 74
frame #26: 0x2d5e6c72 UIKit`-[UIStatusBarForegroundView _setStatusBarData:actions:animated:] + 162
frame #27: 0x2d5e6b96 UIKit`-[UIStatusBarForegroundView setStatusBarData:actions:animated:] + 710
frame #28: 0x2d671ebe UIKit`__44-[UIStatusBar _prepareToSetStyle:animation:]_block_invoke + 358
frame #29: 0x2d5fc230 UIKit`+[UIView(Animation) performWithoutAnimation:] + 72
frame #30: 0x2d66fcf4 UIKit`-[UIStatusBar _prepareToSetStyle:animation:] + 688
frame #31: 0x2d6579ca UIKit`-[UIStatusBar _requestStyleAttributes:animationParameters:] + 290
frame #32: 0x2d65696e UIKit`-[UIStatusBar requestStyle:animated:] + 86
frame #33: 0x2d65559a UIKit`-[UIApplication _createStatusBarWithRequestedStyle:orientation:hidden:] + 406
frame #34: 0x2d85122a UIKit`-[UIApplication _runWithMainScene:transitionContext:completion:] + 970
frame #35: 0x2d85bc68 UIKit`__84-[UIApplication _handleApplicationActivationWithScene:transitionContext:completion:]_block_invoke + 36
frame #36: 0x2d84fc5a UIKit`-[UIApplication workspaceDidEndTransaction:] + 130
frame #37: 0x3086c0e0 FrontBoardServices`__31-[FBSSerialQueue performAsync:]_block_invoke + 12
frame #38: 0x2a13782c CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
frame #39: 0x2a136af0 CoreFoundation`__CFRunLoopDoBlocks + 216
frame #40: 0x2a13564a CoreFoundation`__CFRunLoopRun + 1714
frame #41: 0x2a082db0 CoreFoundation`CFRunLoopRunSpecific + 476
frame #42: 0x2a082bc2 CoreFoundation`CFRunLoopRunInMode + 106
frame #43: 0x2d653c36 UIKit`-[UIApplication _run] + 558
frame #44: 0x2d64ea30 UIKit`UIApplicationMain + 1440
* frame #45: 0x003b4ec2 Stox`main(argc=1, argv=0x01200b08) + 178 at main.m:17
三番:
thread #1: tid = 0x1d96b, 0x36fbf540 libc++abi.dylib`__cxa_throw, queue = 'com.Apple.main-thread', stop reason = breakpoint 3.2
frame #0: 0x36fbf540 libc++abi.dylib`__cxa_throw
frame #1: 0x30798c22 libTrueTypeScaler.dylib`ScalerNewBlock(memoryContext*, long, long, void*, unsigned char, unsigned char) + 430
frame #2: 0x3077e172 libTrueTypeScaler.dylib`OutlineToPath(memoryContext*, fnt_ElementType const*) + 178
frame #3: 0x3079502a libTrueTypeScaler.dylib`ObtainDesiredOutline(memoryContext*, fnt_ElementType const*, unsigned long, void**) + 10
frame #4: 0x3077e07c libTrueTypeScaler.dylib`RenderPath(fsg_SplineKey*, memoryContext*, scalerGlyph const*) + 36
frame #5: 0x3077c980 libTrueTypeScaler.dylib`TTRenderGlyphs + 436
frame #6: 0x306c5722 libFontParser.dylib`TConcreteFontScaler::CopyGlyphPath(unsigned short, CGAffineTransform const*) const + 378
frame #7: 0x306a0ce6 libFontParser.dylib`FPFontCopyGlyphPath + 494
frame #8: 0x2a3abb4a CoreGraphics`CGFontCreateGlyphPath + 30
frame #9: 0x2a3aba56 CoreGraphics`CGFontCreateGlyphBitmap + 266
frame #10: 0x2a3b3c1a CoreGraphics`CGGlyphBuilder::create_missing_bitmaps(CGGlyphIdentifier const*, unsigned long, CGGlyphBitmap const**) + 82
frame #11: 0x2a6fd4dc libRIP.A.dylib`render_glyphs + 172
frame #12: 0x2a6fcaca libRIP.A.dylib`draw_glyph_bitmaps + 906
frame #13: 0x2a6fc430 libRIP.A.dylib`ripc_DrawGlyphs + 1108
frame #14: 0x2a3a1002 CoreGraphics`draw_glyphs + 274
frame #15: 0x2aaae268 CoreText`DrawSbixGlyphsAtPositions(TFont const*, CGFont*, TCFRef<__CFData const*> const&, unsigned short const*, CGPoint const*, unsigned long, CGContext*, CGAffineTransform, CGAffineTransform) + 1880
frame #16: 0x2aa6bcce CoreText`CTFontDrawGlyphsWithAdvances + 470
frame #17: 0x349eba1a UIFoundation`__NSStringDrawingEngine + 6710
frame #18: 0x349efa64 UIFoundation`-[NSAttributedString(NSExtendedStringDrawing) drawWithRect:options:context:] + 532
frame #19: 0x2d603370 UIKit`-[UILabel _drawTextInRect:baselineCalculationOnly:] + 4440
frame #20: 0x2d668ed4 UIKit`-[UILabel drawTextInRect:] + 488
frame #21: 0x2d668ce8 UIKit`-[UILabel drawRect:] + 84
frame #22: 0x2d668c70 UIKit`-[UIView(CALayerDelegate) drawLayer:inContext:] + 400
frame #23: 0x2d045910 QuartzCore`-[CALayer drawInContext:] + 228
frame #24: 0x2d02f350 QuartzCore`CABackingStoreUpdate_ + 2068
frame #25: 0x2d110b6c QuartzCore`___ZN2CA5Layer8display_Ev_block_invoke + 52
frame #26: 0x2d02eb34 QuartzCore`x_blame_allocations + 88
frame #27: 0x2d02e7e4 QuartzCore`CA::Layer::display_() + 1156
frame #28: 0x2d012d9c QuartzCore`CA::Layer::display_if_needed(CA::Transaction*) + 200
frame #29: 0x2d012a60 QuartzCore`CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 24
frame #30: 0x2d012446 QuartzCore`CA::Context::commit_transaction(CA::Transaction*) + 222
frame #31: 0x2d012250 QuartzCore`CA::Transaction::commit() + 324
frame #32: 0x2d5e51c8 UIKit`_afterCACommitHandler + 132
frame #33: 0x2a137844 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 20
frame #34: 0x2a134f28 CoreFoundation`__CFRunLoopDoObservers + 276
frame #35: 0x2a13532a CoreFoundation`__CFRunLoopRun + 914
frame #36: 0x2a082db0 CoreFoundation`CFRunLoopRunSpecific + 476
frame #37: 0x2a082bc2 CoreFoundation`CFRunLoopRunInMode + 106
frame #38: 0x313e7050 GraphicsServices`GSEventRunModal + 136
frame #39: 0x2d64ea30 UIKit`UIApplicationMain + 1440
* frame #40: 0x003b4ec2 Stox`main(argc=1, argv=0x01200b08) + 178 at main.m:17
私はちょうど同じ問題を経験し、問題を追跡していました。
Info.plist
の下のFonts provided by this application
で指定するすべてのフォントが実際にアプリケーションバンドルにあることを確認してください。
デバッガーを使用してアプリ内の疑わしいフォントを追跡するより正確な方法と、呼び出し時に便利に停止されるという事実があります。
通常、これは、アプリのUIViewオブジェクトの1つ(または場合によっては最初の)をインスタンス化するときに起こります。デバッガーが壊れていることがわかり、次のようなスタックがあります。
FPFontCreateFontsWithPath
でスタックトレースのエントリを選択します私の場合、このエントリはスタックの7行目でした。
逆アセンブリを見ると、このエントリの関数シグネチャに気付くでしょう:
あ、かっこいい! Cの文字列が必要なようです。そのうちの1つはファイルパスでもあります!
これを(x86_64)シミュレーターで実行しています。このシミュレーターは、コンピューターのr
で始まるいくつかのレジスターに関数の引数を保存します。 レジスタの詳細はこちら 。
Shift + Command + Mを押すか、メニューから[デバッグ]> [デバッグワークフロー]> [メモリの表示]オプションを選択します。
このビューの下部で、レジスタを1つずつ確認してアドレスを入力します。私の場合、r14にはファイルのパスが含まれていました。
さて、これでめちゃくちゃになったフォントがわかりました。 HelveticaNeue.ttcを探しています。プロジェクトでそれへの参照を見つけましょう。
ターミナルを開き、プロジェクトに移動して実行します:
$ ~/W/X/project> grep -R "HelveticaNeue" ./
.//MyProject/Main.Storyboard: <array key="HelveticaNeue.ttc">
.//MyProject/Main.Storyboard: <string>HelveticaNeue</string>
.//MyProject/Main.Storyboard: <fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="18"/>
素晴らしい、今ではname="HelveticaNeue" family="Helvetica Neue"
with type="system"
、ストーリーボードを開いて手動で編集するか、不足しているフォントへの参照をアプリに追加します(info.plistおよびターゲット)。
バックトレースが示すように、アプリは理由もなく停止しませんでした。例外がスローされたため停止し、C++例外のように見えます。
プログラミングエラーの結果としてのみ例外がスローされるべきであり、したがって非常にまれであるObjective-Cとは異なり、多くの例外をスローおよびキャッチするC++コードが多数あります。そのような状況では、すべての例外ではなく、Objective-Cの例外にのみブレークポイントを設定するのが最善です。
.plistファイルに問題が見つからなかった場合は、.storyboardファイルに問題がある可能性があります。XcodeからソースコードまたはFinderのtextViewで開く-<customFonts key="customFonts">
内部に古い無関係の配列/フォントがありました... :)削除して停止しました
私の場合、参照はxcuserdata
の中にありました:
user$ grep -R "HelveticaNeue" ./
Binary file .//MyProject.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate matches
nmockの答え と DaNLtRの答え を組み合わせることで、この問題を解決しました。
そのため、最初は<customFonts key="customFonts">
を探しましたが、Montserrat-Light
が存在していました。
しかし、info.plistには存在せず、プロジェクトにも追加されませんでした。
Montserrat-Light.ttf
をプロジェクトにバンドルし、Fonts provided by this application
のinfo.plist
の下にこのフォントのエントリを追加すると、問題は解消しました。
したがって、上記のソリューションの概要は次のとおりです。
Storyboard
またはXib
ファイルを探します。<customFonts key="customFonts">
にありますFonts provided by this application
の下のinfo.plistにエントリを追加します。<customFonts key="customFonts">
にカスタムフォントが含まれていない場合(例:Helvetica-Neueなど)、Stroyboard
またはXib
ファイルの<customFonts key="customFonts">
エントリを削除してみてください DaNLtRの回答 に記載私は答えるのがとても遅いことを知っていますが、これが誰かを助けることを願っています。
例外がスローされていますが、呼び出し元(たとえば、libFontParserおよびlibTrueTypeScaler)が例外を処理しており、プログラムに到達していません。
問題の他の証拠(ログメッセージなど)が表示されないか、例外がプログラムに到達しない限り、実装がそれを処理していると想定します。心配することなく、デバッガでこれらのインスタンスを過ぎて続行できます。