From e714b45d479f5c93513314c7feed42f33077f96f Mon Sep 17 00:00:00 2001 From: packagesdev Date: Tue, 15 Jun 2021 21:33:33 +0200 Subject: [PATCH 001/214] Try to display the image correctly --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9d8e0cb..3578fac 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Unexpectedly is a macOS utility to browse and inspect crash reports of Mac appli ## Screenshot -[Alt text](http://s.sudre.free.fr/Software/Unexpectedly/images/about_top.png "Unexpectedly text mode") +![Alt text](http://s.sudre.free.fr/Software/Unexpectedly/images/about_top.png "Unexpectedly text mode") ## Motivation From 23486d55d8861ac534610aaa9264c80cc3f4adc8 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Wed, 16 Jun 2021 21:53:56 +0200 Subject: [PATCH 002/214] Fix raised exception when dragging dSYM bundle If the displayed log is a raw crash log, an exception was raised. --- app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj | 4 ++-- .../app_unexpectedly/CUICrashLogContentsViewController.m | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj b/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj index 1d4c4ee..da311c8 100644 --- a/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj +++ b/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj @@ -2598,7 +2598,7 @@ CLANG_WARN_BOOL_CONVERSION = YES_ERROR; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 53; + CURRENT_PROJECT_VERSION = 57; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -2619,7 +2619,7 @@ CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 53; + CURRENT_PROJECT_VERSION = 57; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = app_unexpectedly/app_unexpectedly_Prefix.pch; diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogContentsViewController.m b/app_unexpectedly/app_unexpectedly/CUICrashLogContentsViewController.m index 3905ed8..c687a11 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogContentsViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogContentsViewController.m @@ -384,6 +384,9 @@ - (BOOL)fileDeadDropView:(CUIFileDeadDropView *)inView validateDropFiles:(NSArra if (inFilenames==nil) return NO; + if ([self.crashLog isKindOfClass:[CUIRawCrashLog class]]==YES) + return NO; + NSFileManager * tFileManager=[NSFileManager defaultManager]; CUIdSYMBundlesManager * tBundlesManager=[CUIdSYMBundlesManager sharedManager]; From d5af9c1fc242cdaec94609abccf655042fed08ae Mon Sep 17 00:00:00 2001 From: packagesdev Date: Wed, 16 Jun 2021 21:55:05 +0200 Subject: [PATCH 003/214] Prevent the addition of the same file multiple times as a source --- .../CUICrashLogsSourcesViewController.m | 40 ++++++++++--------- app_unexpectedly/app_unexpectedly/Info.plist | 2 +- distribution/Documents/ReadMe.rtf | 2 +- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m b/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m index a16cb2a..eb9d639 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m @@ -54,6 +54,8 @@ @interface CUICrashLogsSourcesViewController () * tOpenErrors=[NSMutableArray array]; + _openPanelExistingSingleFiles=[NSSet setWithArray:[self->_sourcesManager.allSources WB_arrayByMappingObjectsLenientlyUsingBlock:^id(CUICrashLogsSourceFileSystemItem *bSource, NSUInteger bIndex) { + + if ([bSource isKindOfClass:[CUICrashLogsSourceFileSystemItem class]]==NO) + return nil; + + return bSource.path; + + }]]; + [tOpenPanel beginSheetModalForWindow:self.view.window completionHandler:^(NSModalResponse bReturnCode) { if (bReturnCode==NSModalResponseCancel) @@ -759,7 +770,11 @@ - (NSDragOperation)tableView:(NSTableView *)inTableView validateDrop:(id CFBundleVersion - 53 + 57 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion diff --git a/distribution/Documents/ReadMe.rtf b/distribution/Documents/ReadMe.rtf index d08f0c7..0f6fe58 100644 --- a/distribution/Documents/ReadMe.rtf +++ b/distribution/Documents/ReadMe.rtf @@ -11,7 +11,7 @@ \f0\fs24 \cf0 \ \fs72 Unexpectedly 1.0 ( -\fs54 beta +\fs54 beta 2 \fs72 ) \fs24 \ \ From 59f5f3d68c8b74939469494c476f0e8aca8183a1 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Sat, 26 Jun 2021 15:27:14 +0200 Subject: [PATCH 004/214] Update app icon and remove duplicate graphic assets --- .../applicationIcon_128.png | Bin 18364 -> 18210 bytes .../AppIcon.appiconset/applicationIcon_16.png | Bin 3505 -> 3471 bytes .../applicationIcon_32-1.png | Bin 4812 -> 4803 bytes .../AppIcon.appiconset/applicationIcon_32.png | Bin 4812 -> 4803 bytes .../AppIcon.appiconset/applicationIcon_64.png | Bin 8433 -> 8463 bytes .../clock/CUIApplicationIconView.m | 548 ++++++++++-------- .../en.lproj/bottom_switch_Template.png | Bin 18214 -> 0 bytes .../en.lproj/left_switch_Template.png | Bin 17764 -> 0 bytes .../presentation_structured_Template.png | Bin 17739 -> 0 bytes .../en.lproj/presentation_text_Template.png | Bin 17752 -> 0 bytes .../en.lproj/rightview_switch_Template.png | Bin 18206 -> 0 bytes .../images/applicationIcon_128.png | Bin 18364 -> 18210 bytes .../images/applicationIcon_16.png | Bin 3505 -> 3471 bytes .../images/applicationIcon_32.png | Bin 4812 -> 4803 bytes .../images/applicationIcon_64.png | Bin 8433 -> 8463 bytes 15 files changed, 297 insertions(+), 251 deletions(-) delete mode 100644 app_unexpectedly/app_unexpectedly/en.lproj/bottom_switch_Template.png delete mode 100644 app_unexpectedly/app_unexpectedly/en.lproj/left_switch_Template.png delete mode 100644 app_unexpectedly/app_unexpectedly/en.lproj/presentation_structured_Template.png delete mode 100644 app_unexpectedly/app_unexpectedly/en.lproj/presentation_text_Template.png delete mode 100644 app_unexpectedly/app_unexpectedly/en.lproj/rightview_switch_Template.png diff --git a/app_unexpectedly/app_unexpectedly/Images.xcassets/AppIcon.appiconset/applicationIcon_128.png b/app_unexpectedly/app_unexpectedly/Images.xcassets/AppIcon.appiconset/applicationIcon_128.png index f286ec96dcad41209d3bee97b9e416bd820f46ee..da1a2cb61b43e2de440701a924b5f624c690e9c7 100644 GIT binary patch delta 15526 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
  • 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 delta 15681 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 diff --git a/app_unexpectedly/app_unexpectedly/Images.xcassets/AppIcon.appiconset/applicationIcon_16.png b/app_unexpectedly/app_unexpectedly/Images.xcassets/AppIcon.appiconset/applicationIcon_16.png index 65048071a13dd2b36fe20932358f10384590ab34..3ffc82596dfef66d0c2f25d7a9108f88fd345637 100644 GIT binary patch delta 669 zcmV;O0%HBK8;={X{|bM5NklEXPG^FIIo^LwB3yc+BrdXhD?sNLP&=3p>5MeBd9*XwQA!jesK+X%&0 ztF2pmhN)3Dp^BKcZqtrz;4!i2i_`F!W5r>7r zy{blle`?eT=c9kCtINdeOCEn){!x^OEg>n%kWwjBS64%lB>I)|BlYzS{o~`~v0TyL zG|u60-1!v#QgXm-MpNr4?5eE7o~m-pgkB?=NZ|d#Oo`2A>!ITO@bg0yMbRFKM4sz( zTIS75KN3;~CetBwbaa67c=q%OSa}g=&zx31e&-!7m+OCp+C>ha9T^#Z)%#GWJ8EqO zodUn#kBPuAqRSGzox4$IECOFvgvGBcqPk1(EKMyIs$a_j1_lPMlxHUI@$4*m`d4wh zL5nsEgOQ0CSPhGd&Kf{bpisp|2AG^TA%>>T_V#vxp;y)QYwkHCBUV=O3SFB5PD5OJ zY!{Z)E-`<4->})LdK^(!k_M7Z_7zPWGboSe{ zk7h=Dg}V67z~t@W!{Lw$ zWCcMuX*3!Sb6oy*RK~U;%d&biQ*O6=bX(K^3cnQqvnJ(kI(aGH00000NkvXXu0mjf DG~7z| delta 703 zcmV;w0zmzb8?hU({|bMdNkl4w_H3c~!kC<_Mt zA(&Vc88RfKnMBv&MOGKXTX)ykMOdH=hDj+F$}k-r(y(Uu$3i?a3)>K-p*uf)pRqJk zFM2sI=lyxk^F81DeTT*VrXy{ZxVS%Tmu`D|d(p_q2v7W@%jJJMwhLsl#O={Yt*EGY zHat9BmPjOEx7$4gS4Dh%CtkI)K=ZDyuKLc-&a$DQA%w$Wba!``(^?Yia5yx{_#cAO z(o%!bXnfq$(*t#i0x_`xolb}J^z=ux*VNQ>tFp2(?sPf@Nw&l4%Am9rIgEd;M7CxVk$|hU*2`)vAEK?4$ z&Dkg}E{54`2G8?rk|c%y5O_QuyC4X!wOS1`&Ib@%6^Vb$BGlH_A{vdN@0B0%wRtpL zzpMl&R=*kyhC`GnIRi~&qvJ(?-^;AS`31Ofvk@v4i_eqqFfcHP>J!swxS*i^;z6WH z-x%gV)%QqbDKiub-QQH;_xoEW-oNQsTTjE6@CTecnuaT96!gE1LB*=zyp{tf3KX(m zNd`t|t@wW-m*1_ctLxy1L}RX5({{Rg37H0RY+?pDmhh6t7ohwKZeNvXN`?k-#BDiq z2+L<5kZ+$ey}iA63>$s!QzenjdD2xVn4;$dGHDW8bIFAzxk6OXoMJ|&^AP3E-Q!kP zR_0UnB?>s diff --git a/app_unexpectedly/app_unexpectedly/Images.xcassets/AppIcon.appiconset/applicationIcon_32-1.png b/app_unexpectedly/app_unexpectedly/Images.xcassets/AppIcon.appiconset/applicationIcon_32-1.png index 8ca30792971b74d29469f5e9996531e6f5d208f2..7ecf92ae936cbe340e9025b290c8f43b47293367 100644 GIT binary patch delta 2011 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∾k7( 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 M07*qoM6N<$f`kLySO5S3 diff --git a/app_unexpectedly/app_unexpectedly/clock/CUIApplicationIconView.m b/app_unexpectedly/app_unexpectedly/clock/CUIApplicationIconView.m index 9c048d2..deb6f7d 100644 --- a/app_unexpectedly/app_unexpectedly/clock/CUIApplicationIconView.m +++ b/app_unexpectedly/app_unexpectedly/clock/CUIApplicationIconView.m @@ -327,7 +327,7 @@ - (void)viewDidMoveToWindow NSRect tBounds=self.bounds; - //NSRectFill(tBounds); + CGFloat tIconSize=NSWidth(tBounds); _ratio=NSWidth(tBounds)/1024.0; @@ -374,7 +374,15 @@ - (void)viewDidMoveToWindow tGear3_0.axisRadius=_ratio*8; tGear3_0.innerRadius=_ratio*20; tGear3_0.innerBranchesCount=3; - tGear3_0.innerBranchThickness=_ratio*10.0; + + if (tIconSize>64.0) + { + tGear3_0.innerBranchThickness=_ratio*10.0; + } + else + { + tGear3_0.innerBranchThickness=_ratio*30.0; + } tGear3_0.gradient=[[NSGradient alloc] initWithColors:@[[NSColor colorWithDeviceRed:227/255.0 green:173/255.0 blue:102/255.0 alpha:1.0], [NSColor colorWithDeviceRed:246/255.0 green:187/255.0 blue:59/255.0 alpha:1.0], @@ -411,9 +419,11 @@ - (void)viewDidMoveToWindow tGear0_30.axisRadius=_ratio*13; tGear0_30.innerBranchesCount=0; - tGear0_30.bezelRadius=_ratio*32; - - tGear0_30.numberOfTeeth=30; + if (tIconSize>128.0) + { + tGear0_30.bezelRadius=_ratio*32; + tGear0_30.numberOfTeeth=30; + } tGear0_30.wholeDepth=_ratio*9.0; tGear0_30.addendum=_ratio*5.0; @@ -431,7 +441,10 @@ - (void)viewDidMoveToWindow tGear0_60.axisRadius=_ratio*13; tGear0_60.innerBranchesCount=0; - tGear0_60.numberOfTeeth=60; + if (tIconSize>128.0) + { + tGear0_60.numberOfTeeth=60; + } tGear0_60.circularToothThickness=_ratio*5; tGear0_60.wholeDepth=_ratio*10; @@ -449,7 +462,16 @@ - (void)viewDidMoveToWindow tGear4_0.axisRadius=_ratio*3; tGear4_0.innerRadius=_ratio*10; tGear4_0.innerBranchesCount=4; - tGear4_0.innerBranchThickness=7*_ratio; + + + if (tIconSize>128.0) + { + tGear4_0.innerBranchThickness=7*_ratio; + } + else + { + tGear4_0.innerBranchThickness=14*_ratio; + } tGear4_0.numberOfTeeth=0; @@ -464,9 +486,12 @@ - (void)viewDidMoveToWindow // Place gears - tGear4_0.center=NSMakePoint(tCenter.x-_ratio*75, tCenter.y+_ratio*140); + if (tIconSize>32.0) + { + tGear4_0.center=NSMakePoint(tCenter.x-_ratio*75, tCenter.y+_ratio*140); - [_parts addObject:tGear4_0]; + [_parts addObject:tGear4_0]; + } CUIWatchAxis * tAxis1=[CUIWatchAxis new]; tAxis1.center=NSMakePoint(tCenter.x-_ratio*75, tCenter.y+_ratio*140); @@ -476,35 +501,44 @@ - (void)viewDidMoveToWindow // Center bridge - CUIWatchBridge * tCenterBridge=[CUIWatchBridge new]; + if (tIconSize>64) + { + CUIWatchBridge * tCenterBridge=[CUIWatchBridge new]; - tCenterBridge.bezierPath=[self centerBridgePath]; + tCenterBridge.bezierPath=[self centerBridgePath]; - [_parts addObject:tCenterBridge]; + [_parts addObject:tCenterBridge]; - CUIWatchScrew * tCenterBridgeScrew1=[tWatchScrew_Template copy]; - tCenterBridgeScrew1.radius=_ratio*10; - tCenterBridgeScrew1.rotation=-40; - tCenterBridgeScrew1.center=NSMakePoint(tCenter.x-_ratio*105, tCenter.y-_ratio*30); + CUIWatchScrew * tCenterBridgeScrew1=[tWatchScrew_Template copy]; + tCenterBridgeScrew1.radius=_ratio*10; + tCenterBridgeScrew1.rotation=-40; + tCenterBridgeScrew1.center=NSMakePoint(tCenter.x-_ratio*105, tCenter.y-_ratio*30); - [_parts addObject:tCenterBridgeScrew1]; + [_parts addObject:tCenterBridgeScrew1]; + } - CUIWatchJewel * tCenterJewel=[CUIWatchJewel new]; - tCenterJewel.center=NSMakePoint(tCenter.x-_ratio*95, tCenter.y+_ratio*85); - tCenterJewel.radius=_ratio*4.0; + if (tIconSize>128.0) + { + CUIWatchJewel * tCenterJewel=[CUIWatchJewel new]; + tCenterJewel.center=NSMakePoint(tCenter.x-_ratio*95, tCenter.y+_ratio*85); + tCenterJewel.radius=_ratio*4.0; - [_parts addObject:tCenterJewel]; + [_parts addObject:tCenterJewel]; + } - CUIWatchGear * tGearYellow1=[tGear5_60_Template copy]; + if (tIconSize>64.0) + { + CUIWatchGear * tGearYellow1=[tGear5_60_Template copy]; - tGearYellow1.center=NSMakePoint(tCenter.x+_ratio*28, tCenter.y+_ratio*60); - tGearYellow1.ticker = ^CGFloat{ + tGearYellow1.center=NSMakePoint(tCenter.x+_ratio*28, tCenter.y+_ratio*60); + tGearYellow1.ticker = ^CGFloat{ - return 1.0/60; + return 1.0/60; - }; + }; - [_parts addObject:tGearYellow1]; + [_parts addObject:tGearYellow1]; + } tGear0_8.center=NSMakePoint(tCenter.x+_ratio*28, tCenter.y+_ratio*60); tGear0_8.ticker = ^CGFloat{ @@ -589,11 +623,14 @@ - (void)viewDidMoveToWindow [_parts addObject:tLeftBridgeScrew1]; - CUIWatchJewel * tLeftJewel=[CUIWatchJewel new]; - tLeftJewel.center=NSMakePoint(tCenter.x-_ratio*136, tCenter.y+_ratio*25); - tLeftJewel.radius=_ratio*5.0; - - [_parts addObject:tLeftJewel]; + if (tIconSize>128.0) + { + CUIWatchJewel * tLeftJewel=[CUIWatchJewel new]; + tLeftJewel.center=NSMakePoint(tCenter.x-_ratio*136, tCenter.y+_ratio*25); + tLeftJewel.radius=_ratio*5.0; + + [_parts addObject:tLeftJewel]; + } // Right bridge @@ -718,6 +755,8 @@ - (void)drawRect:(NSRect)dirtyRect { NSRect tBounds=self.bounds; + CGFloat tIconSize=NSWidth(tBounds); + /*[[NSColor windowBackgroundColor] set]; NSRectFill(tBounds); @@ -961,241 +1000,245 @@ - (void)drawRect:(NSRect)dirtyRect // Universal Key - NSBezierPath * tHandlePath=[NSBezierPath bezierPath]; - - [tHandlePath moveToPoint:NSMakePoint(0, 20)]; - [tHandlePath lineToPoint:NSMakePoint(711,20)]; - [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(711, 0) - radius:20 - startAngle:90 endAngle:0 clockwise:YES]; - - [tHandlePath lineToPoint:NSMakePoint(731,-120)]; - - [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(736, -120) - radius:5 - startAngle:180 endAngle:270 clockwise:NO]; - - [tHandlePath lineToPoint:NSMakePoint(786,-125)]; - - [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(786, -120) - radius:5 - startAngle:270 endAngle:0 clockwise:NO]; - - [tHandlePath lineToPoint:NSMakePoint(791,135)]; - - [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(786, 135) - radius:5 - startAngle:0 endAngle:90 clockwise:NO]; - - [tHandlePath lineToPoint:NSMakePoint(736,140)]; - - [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(736, 135) - radius:5 - startAngle:90 endAngle:180 clockwise:NO]; - - - [tHandlePath lineToPoint:NSMakePoint(731,30)]; - - [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(728, 30) - radius:3 - startAngle:0 endAngle:225 clockwise:YES]; - - [tHandlePath lineToPoint:NSMakePoint(711,40)]; - - [tHandlePath lineToPoint:NSMakePoint(711,140)]; - - [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(731, 140) - radius:20 - startAngle:180 endAngle:90 clockwise:YES]; - - [tHandlePath lineToPoint:NSMakePoint(791,160)]; - - [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(791, 140) - radius:20 - startAngle:90 endAngle:0 clockwise:YES]; - - [tHandlePath lineToPoint:NSMakePoint(811,-125)]; - - [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(791, -125) - radius:20 - startAngle:0 endAngle:270 clockwise:YES]; - - [tHandlePath lineToPoint:NSMakePoint(731,-145)]; - - [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(731, -125) - radius:20 - startAngle:270 endAngle:180 clockwise:YES]; - - [tHandlePath lineToPoint:NSMakePoint(711,-5)]; - - [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(706, -5) - radius:5 - startAngle:0 endAngle:90 clockwise:NO]; - - [tHandlePath lineToPoint:NSMakePoint(0,0)]; - - [tHandlePath closePath]; - - NSAffineTransform * tAffineTransform=[NSAffineTransform transform]; - - - - - [tAffineTransform scaleBy:_ratio]; - [tAffineTransform translateXBy:180 yBy:352]; - [tAffineTransform rotateByDegrees:17.0]; - - [tHandlePath transformUsingAffineTransform:tAffineTransform]; - - if (self.renderingMode==CUIWatchRenderingModeWireframe) + if (tIconSize>16.0) { - [[NSColor blackColor] set]; + NSBezierPath * tHandlePath=[NSBezierPath bezierPath]; + + [tHandlePath moveToPoint:NSMakePoint(0, 20)]; + [tHandlePath lineToPoint:NSMakePoint(711,20)]; + [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(711, 0) + radius:20 + startAngle:90 endAngle:0 clockwise:YES]; + + [tHandlePath lineToPoint:NSMakePoint(731,-120)]; + + [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(736, -120) + radius:5 + startAngle:180 endAngle:270 clockwise:NO]; + + [tHandlePath lineToPoint:NSMakePoint(786,-125)]; + + [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(786, -120) + radius:5 + startAngle:270 endAngle:0 clockwise:NO]; + + [tHandlePath lineToPoint:NSMakePoint(791,135)]; + + [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(786, 135) + radius:5 + startAngle:0 endAngle:90 clockwise:NO]; + + [tHandlePath lineToPoint:NSMakePoint(736,140)]; + + [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(736, 135) + radius:5 + startAngle:90 endAngle:180 clockwise:NO]; + + + [tHandlePath lineToPoint:NSMakePoint(731,30)]; + + [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(728, 30) + radius:3 + startAngle:0 endAngle:225 clockwise:YES]; + + [tHandlePath lineToPoint:NSMakePoint(711,40)]; + + [tHandlePath lineToPoint:NSMakePoint(711,140)]; + + [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(731, 140) + radius:20 + startAngle:180 endAngle:90 clockwise:YES]; + + [tHandlePath lineToPoint:NSMakePoint(791,160)]; + + [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(791, 140) + radius:20 + startAngle:90 endAngle:0 clockwise:YES]; + + [tHandlePath lineToPoint:NSMakePoint(811,-125)]; + + [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(791, -125) + radius:20 + startAngle:0 endAngle:270 clockwise:YES]; + + [tHandlePath lineToPoint:NSMakePoint(731,-145)]; + + [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(731, -125) + radius:20 + startAngle:270 endAngle:180 clockwise:YES]; + + [tHandlePath lineToPoint:NSMakePoint(711,-5)]; + + [tHandlePath appendBezierPathWithArcWithCenter:NSMakePoint(706, -5) + radius:5 + startAngle:0 endAngle:90 clockwise:NO]; + + [tHandlePath lineToPoint:NSMakePoint(0,0)]; + + [tHandlePath closePath]; + + NSAffineTransform * tAffineTransform=[NSAffineTransform transform]; + - [tHandlePath stroke]; - } - else - { - - shadow = [NSShadow new]; - shadow.shadowOffset = NSMakeSize(0, -8*_ratio); - shadow.shadowBlurRadius =_ratio*10; - shadow.shadowColor = [NSColor colorWithDeviceWhite:0.3 alpha:0.65]; + + + [tAffineTransform scaleBy:_ratio]; + [tAffineTransform translateXBy:180 yBy:352]; + [tAffineTransform rotateByDegrees:17.0]; + + [tHandlePath transformUsingAffineTransform:tAffineTransform]; + + if (self.renderingMode==CUIWatchRenderingModeWireframe) + { + [[NSColor blackColor] set]; + + [tHandlePath stroke]; + } + else + { + + shadow = [NSShadow new]; + shadow.shadowOffset = NSMakeSize(0, -8*_ratio); + shadow.shadowBlurRadius =_ratio*10; + shadow.shadowColor = [NSColor colorWithDeviceWhite:0.3 alpha:0.65]; + + [NSGraphicsContext saveGraphicsState]; + + [shadow set]; + + [[NSColor colorWithDeviceWhite:0.5 alpha:1.0] set]; + + [tHandlePath fill]; + + [NSGraphicsContext restoreGraphicsState]; + + /*tGradient=[[NSGradient alloc] initWithColorsAndLocations:[NSColor colorWithDeviceWhite:0.55 alpha:0.5],0.0, + [NSColor colorWithDeviceWhite:0.6 alpha:1.0],0.45, + [NSColor colorWithDeviceWhite:0.90 alpha:1.0],0.5, + [NSColor colorWithDeviceWhite:0.6 alpha:1.0],0.55, + [NSColor colorWithDeviceWhite:0.75 alpha:1.0],1.0,nil];*/ + + tHandlePath.lineWidth=1.0; + [[NSColor colorWithDeviceWhite:0.40 alpha:1.0] set]; + + [tHandlePath stroke]; + + + //[[NSColor colorWithDeviceWhite:0.4 alpha:1.0] setFill]; + + //[tHandlePath fill]; + + + + //[tGradient drawInBezierPath:tHandlePath angle:286.5]; + } + + // Metal effect [NSGraphicsContext saveGraphicsState]; - [shadow set]; + [tHandlePath addClip]; - [[NSColor colorWithDeviceWhite:0.5 alpha:1.0] set]; + NSBezierPath * tWhiteGlare=[NSBezierPath bezierPath]; - [tHandlePath fill]; + [tWhiteGlare moveToPoint:NSMakePoint(2, 10)]; + [tWhiteGlare lineToPoint:NSMakePoint(711,10)]; + [tWhiteGlare appendBezierPathWithArcWithCenter:NSMakePoint(711, 0) + radius:10 + startAngle:90 endAngle:0 clockwise:YES]; - [NSGraphicsContext restoreGraphicsState]; + [tWhiteGlare lineToPoint:NSMakePoint(721,-125)]; - /*tGradient=[[NSGradient alloc] initWithColorsAndLocations:[NSColor colorWithDeviceWhite:0.55 alpha:0.5],0.0, - [NSColor colorWithDeviceWhite:0.6 alpha:1.0],0.45, - [NSColor colorWithDeviceWhite:0.90 alpha:1.0],0.5, - [NSColor colorWithDeviceWhite:0.6 alpha:1.0],0.55, - [NSColor colorWithDeviceWhite:0.75 alpha:1.0],1.0,nil];*/ + [tWhiteGlare appendBezierPathWithArcWithCenter:NSMakePoint(731, -125) + radius:10 + startAngle:180 endAngle:270 clockwise:NO]; + + [tWhiteGlare lineToPoint:NSMakePoint(791,-135)]; + + [tWhiteGlare appendBezierPathWithArcWithCenter:NSMakePoint(791, -125) + radius:10 + startAngle:270 endAngle:0 clockwise:NO]; + + [tWhiteGlare lineToPoint:NSMakePoint(801,140)]; + + [tWhiteGlare appendBezierPathWithArcWithCenter:NSMakePoint(791, 140) + radius:10 + startAngle:0 endAngle:90 clockwise:NO]; + + [tWhiteGlare lineToPoint:NSMakePoint(731,150)]; + + [tWhiteGlare appendBezierPathWithArcWithCenter:NSMakePoint(731, 140) + radius:10 + startAngle:90 endAngle:180 clockwise:NO]; + + + [tWhiteGlare lineToPoint:NSMakePoint(721,25)]; + + + [tWhiteGlare transformUsingAffineTransform:tAffineTransform]; + + [tWhiteGlare setLineWidth:18*_ratio]; + + [[NSColor colorWithDeviceWhite:0.56 alpha:1.0] set]; - tHandlePath.lineWidth=1.0; - [[NSColor colorWithDeviceWhite:0.40 alpha:1.0] set]; + [tWhiteGlare stroke]; - [tHandlePath stroke]; + [tWhiteGlare setLineWidth:16*_ratio]; + [[NSColor colorWithDeviceWhite:0.60 alpha:1.0] set]; - //[[NSColor colorWithDeviceWhite:0.4 alpha:1.0] setFill]; + [tWhiteGlare stroke]; - //[tHandlePath fill]; + [tWhiteGlare setLineWidth:14*_ratio]; + [[NSColor colorWithDeviceWhite:0.65 alpha:1.0] set]; + [tWhiteGlare stroke]; - //[tGradient drawInBezierPath:tHandlePath angle:286.5]; + [tWhiteGlare setLineWidth:11*_ratio]; + + [[NSColor colorWithDeviceWhite:0.72 alpha:1.0] set]; + + [tWhiteGlare stroke]; + + [tWhiteGlare setLineWidth:5*_ratio]; + + [[NSColor colorWithDeviceWhite:0.81 alpha:1.0] set]; + + [tWhiteGlare stroke]; + + [tWhiteGlare setLineWidth:3*_ratio]; + + [[NSColor colorWithDeviceWhite:0.9 alpha:1.0] set]; + + [tWhiteGlare stroke]; + + [tWhiteGlare setLineWidth:1]; + + [[NSColor colorWithDeviceWhite:1.0 alpha:1.0] set]; + + [tWhiteGlare stroke]; + + [NSGraphicsContext restoreGraphicsState]; + + // Encoche + + tBezierPath=[NSBezierPath bezierPath]; + + [tBezierPath moveToPoint:NSMakePoint(0+_ratio*590,10)]; + + [tBezierPath lineToPoint:NSMakePoint(0+_ratio*605,10)]; + + [tBezierPath transformUsingAffineTransform:tAffineTransform]; + + tBezierPath.lineWidth=4.0*_ratio; + + [[NSColor colorWithDeviceWhite:0.0 alpha:0.55] setStroke]; + + [tBezierPath stroke]; + } - // Metal effect - - [NSGraphicsContext saveGraphicsState]; - - [tHandlePath addClip]; - - NSBezierPath * tWhiteGlare=[NSBezierPath bezierPath]; - - [tWhiteGlare moveToPoint:NSMakePoint(2, 10)]; - [tWhiteGlare lineToPoint:NSMakePoint(711,10)]; - [tWhiteGlare appendBezierPathWithArcWithCenter:NSMakePoint(711, 0) - radius:10 - startAngle:90 endAngle:0 clockwise:YES]; - - [tWhiteGlare lineToPoint:NSMakePoint(721,-125)]; - - [tWhiteGlare appendBezierPathWithArcWithCenter:NSMakePoint(731, -125) - radius:10 - startAngle:180 endAngle:270 clockwise:NO]; - - [tWhiteGlare lineToPoint:NSMakePoint(791,-135)]; - - [tWhiteGlare appendBezierPathWithArcWithCenter:NSMakePoint(791, -125) - radius:10 - startAngle:270 endAngle:0 clockwise:NO]; - - [tWhiteGlare lineToPoint:NSMakePoint(801,140)]; - - [tWhiteGlare appendBezierPathWithArcWithCenter:NSMakePoint(791, 140) - radius:10 - startAngle:0 endAngle:90 clockwise:NO]; - - [tWhiteGlare lineToPoint:NSMakePoint(731,150)]; - - [tWhiteGlare appendBezierPathWithArcWithCenter:NSMakePoint(731, 140) - radius:10 - startAngle:90 endAngle:180 clockwise:NO]; - - - [tWhiteGlare lineToPoint:NSMakePoint(721,25)]; - - - [tWhiteGlare transformUsingAffineTransform:tAffineTransform]; - - [tWhiteGlare setLineWidth:18*_ratio]; - - [[NSColor colorWithDeviceWhite:0.56 alpha:1.0] set]; - - [tWhiteGlare stroke]; - - [tWhiteGlare setLineWidth:16*_ratio]; - - [[NSColor colorWithDeviceWhite:0.60 alpha:1.0] set]; - - [tWhiteGlare stroke]; - - [tWhiteGlare setLineWidth:14*_ratio]; - - [[NSColor colorWithDeviceWhite:0.65 alpha:1.0] set]; - - [tWhiteGlare stroke]; - - [tWhiteGlare setLineWidth:11*_ratio]; - - [[NSColor colorWithDeviceWhite:0.72 alpha:1.0] set]; - - [tWhiteGlare stroke]; - - [tWhiteGlare setLineWidth:5*_ratio]; - - [[NSColor colorWithDeviceWhite:0.81 alpha:1.0] set]; - - [tWhiteGlare stroke]; - - [tWhiteGlare setLineWidth:3*_ratio]; - - [[NSColor colorWithDeviceWhite:0.9 alpha:1.0] set]; - - [tWhiteGlare stroke]; - - [tWhiteGlare setLineWidth:1]; - - [[NSColor colorWithDeviceWhite:1.0 alpha:1.0] set]; - - [tWhiteGlare stroke]; - - [NSGraphicsContext restoreGraphicsState]; - - // Encoche - - tBezierPath=[NSBezierPath bezierPath]; - - [tBezierPath moveToPoint:NSMakePoint(0+_ratio*590,10)]; - - [tBezierPath lineToPoint:NSMakePoint(0+_ratio*605,10)]; - - [tBezierPath transformUsingAffineTransform:tAffineTransform]; - - tBezierPath.lineWidth=4.0*_ratio; - - [[NSColor colorWithDeviceWhite:0.0 alpha:0.55] setStroke]; - - [tBezierPath stroke]; - // Curl tBezierPath=[NSBezierPath bezierPath]; @@ -1266,11 +1309,14 @@ - (void)drawRect:(NSRect)dirtyRect [tBezierPath stroke]; - [NSBezierPath strokeLineFromPoint:NSMakePoint(tCenter.x-_ratio*28,tCenter.y+_ratio*85) toPoint:NSMakePoint(tCenter.x-_ratio*3,tCenter.y-_ratio*8)]; + if (tIconSize>128.0) + { + [NSBezierPath strokeLineFromPoint:NSMakePoint(tCenter.x-_ratio*28,tCenter.y+_ratio*85) toPoint:NSMakePoint(tCenter.x-_ratio*3,tCenter.y-_ratio*8)]; - [NSBezierPath strokeLineFromPoint:NSMakePoint(tCenter.x+_ratio*28,tCenter.y+_ratio*101) toPoint:NSMakePoint(tCenter.x+_ratio*62,tCenter.y+_ratio*12)]; + [NSBezierPath strokeLineFromPoint:NSMakePoint(tCenter.x+_ratio*28,tCenter.y+_ratio*101) toPoint:NSMakePoint(tCenter.x+_ratio*62,tCenter.y+_ratio*12)]; - [NSBezierPath strokeLineFromPoint:NSMakePoint(tCenter.x+_ratio*233,tCenter.y+_ratio*64) toPoint:NSMakePoint(tCenter.x+_ratio*215,tCenter.y+_ratio*157)]; + [NSBezierPath strokeLineFromPoint:NSMakePoint(tCenter.x+_ratio*233,tCenter.y+_ratio*64) toPoint:NSMakePoint(tCenter.x+_ratio*215,tCenter.y+_ratio*157)]; + } } - (NSData *)PNGData diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/bottom_switch_Template.png b/app_unexpectedly/app_unexpectedly/en.lproj/bottom_switch_Template.png deleted file mode 100644 index 658bc8d09e19c055f2682d1f9efcfd3bb31db59a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18214 zcmeI32~<-_m&YHC&AzxHDq@F4MID#06=}(@V^3(d}Jm7sJZiL zv}Mcug;Jr!UnoMj&}ayeSjgoEasVLYL8=#z;nh9Es{hd&JJ*UfxG>{h#{++lER-}d7%yKj7aviW$x zoznhib%W>bQoC~dQVScD%T+WEJDYnDA~dq>=1zIM{aRJ^lMa+kq?)k^>USaAKr&#Y z0K5;UP!<`MD_;T>LT;<80Oj8^+*hQv7Wv|`(vYE_U;AKZLypJ>0G>$08wbtMg|j0TD@6ni9-G%Y z$$yP{`o{h}+yZTzb3l6c1D`(8FdK)X`-|`2@9gNfx1`E$C3wSU%OJ0EZMn}t;9udC zPyKHnUwUdBiCZ1%H0k~0%A0T8PRwaIpt{4a^;xXbr}OGVpY(4VR=M~UGfk(rdraN1 z&pvr?AMS+VF1rH@ug+^4Vn1y&`>055BLJt@Qx!JHAv0IA6yLcnn9P)xKkWyA*CoP= z-%V5$BmB2NX$T&AWj)}OJ`afCx*XU50Bh`xQH&df*4I=3z&<_F^t7$sn~Irc(r&Vy8arZ+c-_L>ZFVL*>rU&Nu0#KBqmM85@ZT9P(n3{wU(m7= zX@3A!(ke_!BULBa)~HMa4IacO`0ZvI?NiZBih6HQ;XG;T9%IDynCTvdu5kostmke9 z!rNK@wUzh>QuHdvi*bu<0Nl1uJ4>Cg2O|qStbW%xM=Q>>n7zaCnEEZY6q_77BR%Do z`0Q+}y~Lwkw{rZoAH-5=*D&SJXDXXl1!7RuSM1JMnyJRKYR?$vYUEVUKD|6wv1Hd< zR>PU#NmC;o%2kPzg6$CCTw7J3J~E7{+J1o}GVj%3oD8 z{czZ5rn8yRovE?Y(33aE(5ftqr|zQR78LLQ!R5?vjHangj!gnjqi(aT6uk3nqxkC& z*Z~E~q=RONMKw_!sU253%scct3|_BPOZBta@Y{Q@rzV~^)-RdWIk^+xsl-Xd*?J#O z_I#Lmlre=6yTUH-Xp!eBkLb*4_>IY=y6rPuTu&(oPb3 zGfj(3f7Xe+p>}A=q4|gOOwo+2?33A#vemu&ylWY;S!=wuxbMI&CEqJ17!)zb7O0WSK*W@5e|j+iOb}tXkm2i>?1Lwae?i z*TW38j2Uz*^4ok=cEAa}qb2simjxNUiD{SCM5MV1GaiMOb$yt#1wFtR2>Oum)=7h@ zRH$LB)S^*8lX8`?K}gX@Uu*f(gSPsL4ebPY2uyggBd)lSa=h8`7f0>A{OVQh#_d7X zLDk3SE6q2U?@E6`?@jik7oS{sayFjkNg||JVejI)Qo2&^rnH@3w<2VP zSy5)u1&&KW$BL7_y+x&hs1+pN6HMvZQmrI!4nprS1x&rg?k{%Zb}-uSZkEf=@^GGL{w8GTrsx2Y+GDV05$EvI^kz5L$j)?aVpe_fd7Yc9EUrH1y{qqEUk{nta7 zfVSLlcba=7?_8G=nuU(@$-8^{{E6V~e(;qp^&M6GYdf`_V(|#~$an2ci}Ld|=WE@s z2-DU^wb8a34Y7y9h8ls4he$9^ z%iGpjk!Rpv^T+-?gZ{3>`nY<&R@Aca=XY)?gU`S{SHd+GL`6sW?6lq|ieb)f#3m4e z8(V3THv13uhwUGw@UZTrQ^+L*Q))J9J>`MLMf^qUY82P^W-~LD=@RHVhlDcCCkg^D zwSDU8i+-B=RK0z(ZX&v7wJ7vxedU{|j2T&|sb=KEHf}LXEf4;O?PSx;8GGlwo)$cB zpIT_8ekIQk-AHVVxkp=NI(O-7XH$CEfj{C(38BVU%}ejslD2D@wndVCS@1@9SmQ*ACMs$lS{V9$B<+(XLO0}A)&{^*NTE3!NJ zoUy{>uBmbXkK@C=T(|26>2OZkqPm`&g*RIETO4`y>rl_s%BfEd6rI@V>Vwp0J}b*z zPb#2n2yIbo*ZFbL&gDwElnc9yOoN);b9#Id^25vKhtUHf*HqltR&h=t;HA2^T4&Uj zm#ueuR=YFNzHR5g4?9!!s5-lL=TC3ZP0-nT&!jb^Q!iS0<8o5#!LwO8RmJQEZWFir z*&}4yO0C1$3C|L=1e*6BoYibwezxcBJBJo@LY+xV$@U^z@$t))3#FWl>-BYutr@>D z-Y`Beh`mh@&w+Q}3mSX%HkZD`|IysCvb2AIdi_$1w}LmlncK|y=<>0!-#UL+cK7?k zAA?rsEe+bxb4{^HaX{HftLSd=@6Gy6Rt(SBJBwaAX0?~yKj_|eJD&HtVQ=c8)GgttzgpL|94p$~#j0;xuPuCaakBJDlf%%S zuEnK`>sP(LAbnlX(mBoNf=}`(^4g#m(ifD$_}lK+N{*By=NGREDDDj_JGYtJ->sKs zQUCBwS?HfLhVC?{k*pq;^@R!hulB!foAEGQykMZdw&Z^Bg5JDR_tLd*Y-zHG^uEScr+%fV?G1x*Z)3G-KgK4-*6!5Y`7+ItN+LbA77uiP%Ahr{ z8|J6!4jvn<&DWiQ4u9YL@@{=&V&l<-*9q~LgML0S@S^b>^+ttÐv*P22CMhQNePWp-TL55j2cN-|GU;w) zmM{nfvW0#eR7j8rI*0-Q#X3X;vI00#gdc~;7g!m-D!FWk;Ipj^eF$_6T}0#f^PR)Q z9IvpY3|3eGi^Mjxrm9gw$WVYFjub?M1O*Btx$` z633n+VTt)7DPJf+495ligd3$+hK9opjlDjPD@ZifkU;X89Yhfw0*cUB6bAi05t}up z5p5I)j&zO9LURH+K^%cp0_m{d)j>$<^fBpon+pp1u2Ld(*aVH>Gm-BqC5%uJ2kps` z2sesZ9EVL%PmI3TdC`|Ukne{ZbN}t=rF`!AQC@GMIr(vL%6A@KwZ9%1p#LNn{r&T`M|t#TreQAO*t;vd|+NVE*KEmrW}`SJ}|Ew7YvAOQ;thE zADCB;3kF2CDaR$756mma1p^}6l;e`k2j-RIf&r0j%5ll&1M|vp!GOp%<+xa$K_cz`Sx?Fd(u`IWF0JU|u;c7!cW}9G7f9Fs~dJ42Wz~j!QNlm{*Pq21K?g z$0eH&%qzzQ10vg$=9S}u0g-LWamnTb^U86-fXFuGxMcHzdF8lZKxCV8T(bGV zymDMHAhJz4F4=rwUO6rp5ZR_2mux;TuN)T)h-_0PF17JTcR2#+dEH>>!Q4|TP9B3E z>P4`eJ?Q`tHV*(IwgbRlL(pe80Bpnnz>9SNKu!bzUEzVXR~@0cpo_gNBjmv!2P@Rd z5gN4kxS^rWKa8Ed=bN9d6$eyg1O@W-RHxYNFa}Q79lyJOxo-L)mtINBtmZ1y@TRE! z;kVZHKhAv=!QJ<6sOIe*y2)`X&!m!9(TB4LVnqNL8d3yQFZ^VPUt8u3H3qmiEVa+K ITes~$0Uh<{r~m)} diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/left_switch_Template.png b/app_unexpectedly/app_unexpectedly/en.lproj/left_switch_Template.png deleted file mode 100644 index ccf1730754da3a4fa0e7fbd6c78f662564e55b4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17764 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 diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/presentation_structured_Template.png b/app_unexpectedly/app_unexpectedly/en.lproj/presentation_structured_Template.png deleted file mode 100644 index 1a8c3f15bd517a3799ca7402235af68a5279e480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17739 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 diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/presentation_text_Template.png b/app_unexpectedly/app_unexpectedly/en.lproj/presentation_text_Template.png deleted file mode 100644 index 657b3ff4fe6428a3465c20e8e0a38b7e68209317..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17752 zcmeI3cT`i^_Qx-x^kxB6#0dcrkyL782qjc$0ztqYl1qp{5=fNd$bd?*42Y;SLDW$? zDkzG8(gYO&!44>+fQUZuH=qL+;9ZJ|0HWAH~Z}K-RIoT*=Oh8tabOV zbF`L~S}FwqfUK>Jg$s047=KHML7%@2j?tilB-h512LRFw$KN7A%8A7QAmzlOP}Z&U z;qW;;9}X8`OQ9gRfgEp^9|!=!t!b`Is%x*3@zC@4=5{gRN9{N+iV_GH^Mm1w;x)C^ zBo)@isGWMM=v+D9(sHiKt&AAa*x2wxiq1MR2c({ecd4C@-FqhHz@5)8cAfEkR5tXg zVf6B2a!=l1T2YgDg@nv;8(nApaG7lL<@5jCTUS&2q6=*rA*I2E=3T^4AXr9hlt2ZDySt;8Yc<*`uU=$8n?p-6MOTF+FTqFX$^SWc7XUKi6``{o z90_ieD`;#qh%J`eih6THYz*n;)j8VTl*=^*fEWC*=20C?(bDiWV&VRyr&sjP_1Pkw zv190jKofibeTBIBr z#Ggg(H$SrK=8Bdv#>)wt%Ptb}rMQm09DCMie?5KajahDakTiy3gvg^gRY2mlCIxk$Nxi(o*9? z2B&)N<@(6C#*ry?*oxPS#dT}^u;|)q^NU70k_q(si^x2g+}foV*5`?q?*Bk%v2T<&aNyQEv8Td!LTOv0PFok?+dmUW6c zUq5bxdH$(lm-EiiSqt@cq!1eRD%skd%|CtY{!$-hpCQ)y*ZgbqpB-E7n0U{eH$_dznUQHp!(VwhS>QWuLaW-bX@d_Kwk+>-kTm()?QhPby$J<0OP95)Z`V(niQ z+S+8H(l4xY{>`5bKP>%*1dIAab;$& z$%@WlW^t${e}s9C>=*N_wy$=g{NbE&acgH;Ekc^Uq$pTN%~v)zYDa{AjpoIMr@!vh zE=?LyEj?(QlYNRn(Os+SUgR=()Z0Y7Gbv#B1m97zM=LXNFzmqdMekO+~{%BfO|pd0MW{-pHlTf)=rIhoHx%6mR7+l?8aj`)Ad{9rBPAyy=#A=W0- zxR`WPKY&A0#niR^f9RpHTHE4cNjVfVG&zmFJ;%SJzy%T?W=8pgX6xQMu(_&lZYM8C=I zo9~bJVwfIH3QbRRJBt_Auc~3Cxu)K?W-2pFczXw94(_+xQ;$w0qf=FCpWQ0&TFd_s zu=z!3%ZIeoqSUIsthV$02K}u5==PI$^-iuz_tfRxtG-3~)499ZMEc}0tZzqNm=nb* zf_b?|9Ye>&yXQZ?aOG@J&JgXLGWl3^+Kfxo4{C0w@H#9$ zSsb@`p31~I5zeF5>T8p8(A!C^hS&72nbe}aJ?}pBNb|7uvs*?$YZn->{jPU>=^KoG znf6k;bC+@w=GJCz$f?Gv_mP=O+2{p2#N(#+F^)z@|Hn*0J4@-%ih+eeD`KTWs#L3( zNKCUqbIcRUChg^p12)}Bnrr4rMXQg$Nz@y5h* z+}fzwKLeIB%XON~+lW+-vFvt;gEp zg-p=h`$oh5JA~u8>8l(1?iSr?J8XF3-N~`O1yu`P94S5|gDx1CT(3J7VF z>QtP!I%>UG9_i|VVr~D2PPu*Vi3MThnxPK95nC$n?5Vsg;`>(GO{zO`_uKZzeVd&; zFrFQkX`iCfRLF|^4-_nFQ%+R;?TJ=VG-3y6qSF6M7`i zkhO!<+pN~!J@*rs15Jn0j-~AmLw{`F)^@shR}a0hW4k=(-8BXNix$hVgFS1?)--M! zxXK?WZ0la=e$_qYJaMc48~z*8Xu^G`y3!M+DFr2)d`tR6%P;Tp9_m#|H*9?NzC7eF zrLjj3(+S4U$_GO^LpO&$bSOOw3tTzUSYP@yXk~wXnN!);_ojVjPbtr$ADV0&ZGZBv z{kQEEK^cS1?bbtLk$am)<3Gg7Q|84b$JIy4M!iipA`=KNO#(-HzhqLH7)_e#%A==8 z>kE{XFk!!JSge*l0CPD%HK|T!;?C;0s5rd796LE>q_wi;75;4(*?`w=S8y^ti;jj)t;RJ#R zeY63Jj?*yf{1f#z^G&K+~_O^YZ6T55(q8v4bdLf@xd~4voe9NW`E|Yq&cC{U)Zy zpkqKk&>v*;d5{kGLmhf2ic~Eq6j^Fh%5tN**SVT%7NaJ$? zsT__Uc{0mp?w_FBCn&275n2v3I*UDiQ?-hOfs1BVd?p@fLF0pDJQj~dVGU7OeJT!5 z)HNXDbXQ~XL@ahzkjb8~7!FYOGiZF;cTx0-`np6Mc6O9+`oiOI7%cCQe-ve==d2hE zI?=0_%t>hw6!2Z4QLjNLDcsG^>y(y5T$2` z_d@9zco9$peQ0la<3W9Wf;WhR08ij>aF{LsF0=)QzGFP|r$RHJ&pl4{Luj}PP&O%w#g%hsI`t3^L|x5`S&@ zXKOdPqTlYWuSMbe-AJ1LX(CcMew;uD4g)0Xk}yANo*93Z3i`)w-Q*u`WS)z)Il|VG zVt^wU7@+WIsLaiTnbmJrobewwB2-79oTg3eUr6&^8@#{Acs=mjG11=;kA+?s-1z5| zbhaBV^%N|f?S@Ndlx}PmpNyXx4c0tMHU0}c3Dp(4SOm$?sll7zz1OjVK|c=*7F73n z3(J`DNye{+m%@ zv4n%bfCx5)xCHZod4;%OKm?mYT!Q()yh2H)f=wYV!F*s|AubpY!KM(GU_LOf5El%HU{i=oFdvv# zhzkZpuqnhPm=DY=#03K)*c9Rt%m?Nb;(`GYYzlD+<^%HzalwEHHiftZ^MQGVxL`m8 zn?hWI`M|tFTrePlO(8D9d|+N7E*KEOra)X$Gmn3QZ0MQKAn4)Fw9cV>(1W1}x{Zqi z0EDgpfbhKl@No<}_5#2TEC9UO20c@n1OUpMBU^7;L4BQUEzGFFtq&4#asWbRPUY|z z=J8E-txwZUGH}&Ybv}}5t2i$+;3QHjLc&V%g~J?`=4vJUN9QQjmp!Q0J0n-C$C}=_ h*sLZC#TpwE1vE90Lq{2pprHW3*3!|UzG@U77#@ diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/rightview_switch_Template.png b/app_unexpectedly/app_unexpectedly/en.lproj/rightview_switch_Template.png deleted file mode 100644 index 66529455e034f2426259d291b21f2518ff4464c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18206 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
  • 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 delta 15681 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 diff --git a/app_unexpectedly/app_unexpectedly/images/applicationIcon_16.png b/app_unexpectedly/app_unexpectedly/images/applicationIcon_16.png index 65048071a13dd2b36fe20932358f10384590ab34..3ffc82596dfef66d0c2f25d7a9108f88fd345637 100644 GIT binary patch delta 669 zcmV;O0%HBK8;={X{|bM5NklEXPG^FIIo^LwB3yc+BrdXhD?sNLP&=3p>5MeBd9*XwQA!jesK+X%&0 ztF2pmhN)3Dp^BKcZqtrz;4!i2i_`F!W5r>7r zy{blle`?eT=c9kCtINdeOCEn){!x^OEg>n%kWwjBS64%lB>I)|BlYzS{o~`~v0TyL zG|u60-1!v#QgXm-MpNr4?5eE7o~m-pgkB?=NZ|d#Oo`2A>!ITO@bg0yMbRFKM4sz( zTIS75KN3;~CetBwbaa67c=q%OSa}g=&zx31e&-!7m+OCp+C>ha9T^#Z)%#GWJ8EqO zodUn#kBPuAqRSGzox4$IECOFvgvGBcqPk1(EKMyIs$a_j1_lPMlxHUI@$4*m`d4wh zL5nsEgOQ0CSPhGd&Kf{bpisp|2AG^TA%>>T_V#vxp;y)QYwkHCBUV=O3SFB5PD5OJ zY!{Z)E-`<4->})LdK^(!k_M7Z_7zPWGboSe{ zk7h=Dg}V67z~t@W!{Lw$ zWCcMuX*3!Sb6oy*RK~U;%d&biQ*O6=bX(K^3cnQqvnJ(kI(aGH00000NkvXXu0mjf DG~7z| delta 703 zcmV;w0zmzb8?hU({|bMdNkl4w_H3c~!kC<_Mt zA(&Vc88RfKnMBv&MOGKXTX)ykMOdH=hDj+F$}k-r(y(Uu$3i?a3)>K-p*uf)pRqJk zFM2sI=lyxk^F81DeTT*VrXy{ZxVS%Tmu`D|d(p_q2v7W@%jJJMwhLsl#O={Yt*EGY zHat9BmPjOEx7$4gS4Dh%CtkI)K=ZDyuKLc-&a$DQA%w$Wba!``(^?Yia5yx{_#cAO z(o%!bXnfq$(*t#i0x_`xolb}J^z=ux*VNQ>tFp2(?sPf@Nw&l4%Am9rIgEd;M7CxVk$|hU*2`)vAEK?4$ z&Dkg}E{54`2G8?rk|c%y5O_QuyC4X!wOS1`&Ib@%6^Vb$BGlH_A{vdN@0B0%wRtpL zzpMl&R=*kyhC`GnIRi~&qvJ(?-^;AS`31Ofvk@v4i_eqqFfcHP>J!swxS*i^;z6WH z-x%gV)%QqbDKiub-QQH;_xoEW-oNQsTTjE6@CTecnuaT96!gE1LB*=zyp{tf3KX(m zNd`t|t@wW-m*1_ctLxy1L}RX5({{Rg37H0RY+?pDmhh6t7ohwKZeNvXN`?k-#BDiq z2+L<5kZ+$ey}iA63>$s!QzenjdD2xVn4;$dGHDW8bIFAzxk6OXoMJ|&^AP3E-Q!kP zR_0UnB?>s diff --git a/app_unexpectedly/app_unexpectedly/images/applicationIcon_32.png b/app_unexpectedly/app_unexpectedly/images/applicationIcon_32.png index 8ca30792971b74d29469f5e9996531e6f5d208f2..7ecf92ae936cbe340e9025b290c8f43b47293367 100644 GIT binary patch delta 2011 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∾k7( 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 M07*qoM6N<$f`kLySO5S3 From 00b16a014eb5ddc5262ccefc1ef9a83a89fa48fd Mon Sep 17 00:00:00 2001 From: packagesdev Date: Mon, 28 Jun 2021 22:51:11 +0200 Subject: [PATCH 005/214] Add check for updates automatically option --- .../project.pbxproj | 60 ++++ .../app_unexpectedly/AppDelegate.m | 17 + .../CUIPreferencePaneAdvancedViewController.h | 22 ++ .../CUIPreferencePaneAdvancedViewController.m | 75 +++++ app_unexpectedly/app_unexpectedly/Info.plist | 13 + .../app_unexpectedly/WBRemoteVersionChecker.h | 22 ++ .../app_unexpectedly/WBRemoteVersionChecker.m | 298 ++++++++++++++++++ ...UIPreferencePaneAdvancedViewController.xib | 61 ++++ .../CUIPreferencesWindowController.xib | 9 + .../en.lproj/RemoteCheck.strings | Bin 0 -> 680 bytes ...UIPreferencePaneAdvancedViewController.xib | 61 ++++ .../CUIPreferencesWindowController.xib | 9 + .../es.lproj/RemoteCheck.strings | Bin 0 -> 698 bytes ...UIPreferencePaneAdvancedViewController.xib | 61 ++++ .../CUIPreferencesWindowController.xib | 9 + .../fr.lproj/RemoteCheck.strings | Bin 0 -> 768 bytes 16 files changed, 717 insertions(+) create mode 100644 app_unexpectedly/app_unexpectedly/CUIPreferencePaneAdvancedViewController.h create mode 100644 app_unexpectedly/app_unexpectedly/CUIPreferencePaneAdvancedViewController.m create mode 100644 app_unexpectedly/app_unexpectedly/WBRemoteVersionChecker.h create mode 100644 app_unexpectedly/app_unexpectedly/WBRemoteVersionChecker.m create mode 100644 app_unexpectedly/app_unexpectedly/en.lproj/CUIPreferencePaneAdvancedViewController.xib create mode 100755 app_unexpectedly/app_unexpectedly/en.lproj/RemoteCheck.strings create mode 100644 app_unexpectedly/app_unexpectedly/es.lproj/CUIPreferencePaneAdvancedViewController.xib create mode 100755 app_unexpectedly/app_unexpectedly/es.lproj/RemoteCheck.strings create mode 100644 app_unexpectedly/app_unexpectedly/fr.lproj/CUIPreferencePaneAdvancedViewController.xib create mode 100755 app_unexpectedly/app_unexpectedly/fr.lproj/RemoteCheck.strings diff --git a/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj b/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj index da311c8..c75ce6c 100644 --- a/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj +++ b/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj @@ -12,6 +12,7 @@ F4055C8125EEE37400DC6CCA /* CUIMainWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4055C8325EEE37400DC6CCA /* CUIMainWindowController.xib */; }; F405A96D255015D800AD2F24 /* CUICXXDemangler.mm in Sources */ = {isa = PBXBuildFile; fileRef = F405A96C255015D800AD2F24 /* CUICXXDemangler.mm */; }; F405A97025501A5F00AD2F24 /* CUIParsingErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = F405A96F25501A5F00AD2F24 /* CUIParsingErrors.m */; }; + F406B4992687AB1400B90C7B /* CUIPreferencePaneAdvancedViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F406B49B2687AB1400B90C7B /* CUIPreferencePaneAdvancedViewController.xib */; }; F40ACE2D255697A3006855E5 /* CUICrashLogBrowsingState.m in Sources */ = {isa = PBXBuildFile; fileRef = F40ACE2C255697A3006855E5 /* CUICrashLogBrowsingState.m */; }; F40ACE30255697CE006855E5 /* CUICrashLogBrowsingStateRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = F40ACE2F255697CE006855E5 /* CUICrashLogBrowsingStateRegistry.m */; }; F40B0D7E24D3558800663282 /* CUIPreferencesTabBox.m in Sources */ = {isa = PBXBuildFile; fileRef = F40B0D7824D3558700663282 /* CUIPreferencesTabBox.m */; }; @@ -58,6 +59,8 @@ F420C9C4254F5F4C00D24249 /* CUIdSYMHunter.m in Sources */ = {isa = PBXBuildFile; fileRef = F420C9C3254F5F4C00D24249 /* CUIdSYMHunter.m */; }; F420F35224E95E5F006C82CD /* CUITheme.m in Sources */ = {isa = PBXBuildFile; fileRef = F420F35124E95E5F006C82CD /* CUITheme.m */; }; F4214CB524B6534400852DDE /* CUICrashLogsSourcesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F4214CB424B6534400852DDE /* CUICrashLogsSourcesManager.m */; }; + F423818C267D1D4A003837AC /* CUIPreferencePaneAdvancedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F423818A267D1D4A003837AC /* CUIPreferencePaneAdvancedViewController.m */; }; + F4238191267D3522003837AC /* WBRemoteVersionChecker.m in Sources */ = {isa = PBXBuildFile; fileRef = F4238190267D3522003837AC /* WBRemoteVersionChecker.m */; }; F42B57E224ABEF6E00F77ED5 /* CUICallsSelection.m in Sources */ = {isa = PBXBuildFile; fileRef = F42B57E124ABEF6E00F77ED5 /* CUICallsSelection.m */; }; F42D0BC425514B670021A551 /* template.source in Resources */ = {isa = PBXBuildFile; fileRef = F42D0BC225514B2E0021A551 /* template.source */; }; F4301A6825EF0DE000ACDA3F /* CUIPreferencePanePresentationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4301A6A25EF0DE000ACDA3F /* CUIPreferencePanePresentationViewController.xib */; }; @@ -233,6 +236,7 @@ F4CD32B6257D17B3008C71AA /* CUIPreferencePaneSymbolicationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F4CD32B4257D17B3008C71AA /* CUIPreferencePaneSymbolicationViewController.m */; }; F4CE83DE2554B97400A8BD87 /* CUICenteredLabelViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4CE83DD2554B97300A8BD87 /* CUICenteredLabelViewController.xib */; }; F4D5C77C2571AF900029B051 /* CUIRegisterLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = F4D5C77B2571AF900029B051 /* CUIRegisterLabel.m */; }; + F4D6C56D2680028A00B78B3D /* RemoteCheck.strings in Resources */ = {isa = PBXBuildFile; fileRef = F4D6C56B2680028A00B78B3D /* RemoteCheck.strings */; }; F4D7F15B25F04A620024E9A5 /* CUISymbolsFilesLibraryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4D7F15D25F04A620024E9A5 /* CUISymbolsFilesLibraryViewController.xib */; }; F4D7F15F25F04A9D0024E9A5 /* CUIPreferencePaneSymbolicationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4D7F16125F04A9D0024E9A5 /* CUIPreferencePaneSymbolicationViewController.xib */; }; F4E0BD25262078220048647C /* CUIAboutBoxWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E0BD24262078220048647C /* CUIAboutBoxWindow.m */; }; @@ -303,6 +307,9 @@ F405A96C255015D800AD2F24 /* CUICXXDemangler.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = CUICXXDemangler.mm; path = app_unexpectedly/Demangling/CUICXXDemangler.mm; sourceTree = ""; }; F405A96E25501A5F00AD2F24 /* CUIParsingErrors.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUIParsingErrors.h; sourceTree = ""; }; F405A96F25501A5F00AD2F24 /* CUIParsingErrors.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUIParsingErrors.m; sourceTree = ""; }; + F406B49A2687AB1400B90C7B /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/CUIPreferencePaneAdvancedViewController.xib; sourceTree = ""; }; + F406B49C2687AB1800B90C7B /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = fr.lproj/CUIPreferencePaneAdvancedViewController.xib; sourceTree = ""; }; + F406B49D2687AC1900B90C7B /* es */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = es; path = es.lproj/CUIPreferencePaneAdvancedViewController.xib; sourceTree = ""; }; F40ACE2B255697A3006855E5 /* CUICrashLogBrowsingState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUICrashLogBrowsingState.h; sourceTree = ""; }; F40ACE2C255697A3006855E5 /* CUICrashLogBrowsingState.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUICrashLogBrowsingState.m; sourceTree = ""; }; F40ACE2E255697CE006855E5 /* CUICrashLogBrowsingStateRegistry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUICrashLogBrowsingStateRegistry.h; sourceTree = ""; }; @@ -428,6 +435,10 @@ F420F35124E95E5F006C82CD /* CUITheme.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUITheme.m; sourceTree = ""; }; F4214CB324B6534400852DDE /* CUICrashLogsSourcesManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUICrashLogsSourcesManager.h; sourceTree = ""; }; F4214CB424B6534400852DDE /* CUICrashLogsSourcesManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUICrashLogsSourcesManager.m; sourceTree = ""; }; + F4238189267D1D4A003837AC /* CUIPreferencePaneAdvancedViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUIPreferencePaneAdvancedViewController.h; sourceTree = ""; }; + F423818A267D1D4A003837AC /* CUIPreferencePaneAdvancedViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUIPreferencePaneAdvancedViewController.m; sourceTree = ""; }; + F423818F267D3521003837AC /* WBRemoteVersionChecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WBRemoteVersionChecker.h; sourceTree = ""; }; + F4238190267D3522003837AC /* WBRemoteVersionChecker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WBRemoteVersionChecker.m; sourceTree = ""; }; F42B57E024ABEF6E00F77ED5 /* CUICallsSelection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUICallsSelection.h; sourceTree = ""; }; F42B57E124ABEF6E00F77ED5 /* CUICallsSelection.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUICallsSelection.m; sourceTree = ""; }; F42D0BC225514B2E0021A551 /* template.source */ = {isa = PBXFileReference; lastKnownFileType = text; path = template.source; sourceTree = ""; }; @@ -780,6 +791,9 @@ F4CE83DD2554B97300A8BD87 /* CUICenteredLabelViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CUICenteredLabelViewController.xib; sourceTree = ""; }; F4D5C77A2571AF900029B051 /* CUIRegisterLabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUIRegisterLabel.h; sourceTree = ""; }; F4D5C77B2571AF900029B051 /* CUIRegisterLabel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUIRegisterLabel.m; sourceTree = ""; }; + F4D6C56C2680028A00B78B3D /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/RemoteCheck.strings; sourceTree = ""; }; + F4D6C56E268002DE00B78B3D /* fr */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/RemoteCheck.strings; sourceTree = ""; }; + F4D6C56F2680031E00B78B3D /* es */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/RemoteCheck.strings; sourceTree = ""; }; F4D7F15C25F04A620024E9A5 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/CUISymbolsFilesLibraryViewController.xib; sourceTree = ""; }; F4D7F15E25F04A630024E9A5 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = fr.lproj/CUISymbolsFilesLibraryViewController.xib; sourceTree = ""; }; F4D7F16025F04A9D0024E9A5 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/CUIPreferencePaneSymbolicationViewController.xib; sourceTree = ""; }; @@ -960,6 +974,16 @@ name = Views; sourceTree = ""; }; + F423818E267D3511003837AC /* RemoteVersionChecker */ = { + isa = PBXGroup; + children = ( + F423818F267D3521003837AC /* WBRemoteVersionChecker.h */, + F4238190267D3522003837AC /* WBRemoteVersionChecker.m */, + F4D6C56A2680028200B78B3D /* Resources */, + ); + name = RemoteVersionChecker; + sourceTree = ""; + }; F423D8CA2673F5F200E2D31D /* Panels */ = { isa = PBXGroup; children = ( @@ -1286,6 +1310,9 @@ F4B67835258F702E0047369E /* CUIPreferencePaneCrashreporterViewController.h */, F4B67836258F702E0047369E /* CUIPreferencePaneCrashreporterViewController.m */, F4A3A6E925ED817E0018053E /* CUIPreferencePaneCrashreporterViewController.xib */, + F4238189267D1D4A003837AC /* CUIPreferencePaneAdvancedViewController.h */, + F423818A267D1D4A003837AC /* CUIPreferencePaneAdvancedViewController.m */, + F406B49B2687AB1400B90C7B /* CUIPreferencePaneAdvancedViewController.xib */, ); name = Controllers; sourceTree = ""; @@ -1445,6 +1472,7 @@ F4CC570124A79EDA00150EC4 /* app_unexpectedly */ = { isa = PBXGroup; children = ( + F423818E267D3511003837AC /* RemoteVersionChecker */, F4341C68258EB8B8001A5605 /* CrashReporterPreferences */, F4CDFB50257EE1BC002A73D0 /* Views */, F4B138542522945E00D9DE2F /* dSYM */, @@ -1587,6 +1615,14 @@ name = Views; sourceTree = ""; }; + F4D6C56A2680028200B78B3D /* Resources */ = { + isa = PBXGroup; + children = ( + F4D6C56B2680028A00B78B3D /* RemoteCheck.strings */, + ); + name = Resources; + sourceTree = ""; + }; F4E1C10E24C22CA0000F5C0F /* Presentation Text */ = { isa = PBXGroup; children = ( @@ -1862,6 +1898,7 @@ F4D7F15F25F04A9D0024E9A5 /* CUIPreferencePaneSymbolicationViewController.xib in Resources */, F4754D7125F5678700B0D48F /* CUICrashLogPresentationOutlineViewController.xib in Resources */, F4F892F92575A6DC00BE4CE0 /* CUIRegistersViewController.xib in Resources */, + F4D6C56D2680028A00B78B3D /* RemoteCheck.strings in Resources */, F46D779F25ED8D3600039663 /* CUIInspectorUserViewController.xib in Resources */, F464F20D24ACF9CF007A3A96 /* CUICrashLogsMainViewController.xib in Resources */, F46D77AB25ED9EAE00039663 /* CUICollectionViewRegisterItem.xib in Resources */, @@ -1870,6 +1907,7 @@ F4A3A6E325ED81260018053E /* CUIPreferencePaneGeneralViewController.xib in Resources */, F4D7F15B25F04A620024E9A5 /* CUISymbolsFilesLibraryViewController.xib in Resources */, F4F892FE2575A70800BE4CE0 /* CUIRegistersMainViewController.xib in Resources */, + F406B4992687AB1400B90C7B /* CUIPreferencePaneAdvancedViewController.xib in Resources */, F45A2D6925EC602B0007D50E /* CUIBinaryImagesViewController.xib in Resources */, F4A3A6E725ED817E0018053E /* CUIPreferencePaneCrashreporterViewController.xib in Resources */, F416687A24B0BA5000C2AB89 /* CUICrashLogContentsViewController.xib in Resources */, @@ -2011,6 +2049,7 @@ F414D09724BFBC6300A7095C /* CUICrashLogBinaryImages.m in Sources */, F47AF8C0255DE61E0037E2D8 /* NSCrashLogTextScrollView.m in Sources */, F40B0D8724D3569800663282 /* NSColor+LabelColor.m in Sources */, + F4238191267D3522003837AC /* WBRemoteVersionChecker.m in Sources */, F48BAB3625D9D4140005F3E5 /* CUIThreadImageCell.m in Sources */, F416687924B0BA5000C2AB89 /* CUICrashLogContentsViewController.m in Sources */, F49673FE24D0CF6400716289 /* CUIPreferencesWindowController.m in Sources */, @@ -2095,6 +2134,7 @@ F46BAF59250162C900991970 /* CUIPreferencesWindow.m in Sources */, F4871E0A25435AF400580562 /* DWRFSection_debug_aranges.m in Sources */, F40BEAFC24E9FEF8007A3F60 /* NSDictionary+WBExtensions.m in Sources */, + F423818C267D1D4A003837AC /* CUIPreferencePaneAdvancedViewController.m in Sources */, F497303A25F796E6001D01FE /* CUIHopperDisassemblerManager.m in Sources */, F4CC570624A79EDA00150EC4 /* AppDelegate.m in Sources */, F4CC572424A7A1D100150EC4 /* CUICrashLogsProvider.m in Sources */, @@ -2122,6 +2162,16 @@ name = CUIMainWindowController.xib; sourceTree = ""; }; + F406B49B2687AB1400B90C7B /* CUIPreferencePaneAdvancedViewController.xib */ = { + isa = PBXVariantGroup; + children = ( + F406B49A2687AB1400B90C7B /* en */, + F406B49C2687AB1800B90C7B /* fr */, + F406B49D2687AC1900B90C7B /* es */, + ); + name = CUIPreferencePaneAdvancedViewController.xib; + sourceTree = ""; + }; F40B832825FC0AEC0091D886 /* EXC_CRASH_SIGSEGV.html */ = { isa = PBXVariantGroup; children = ( @@ -2472,6 +2522,16 @@ name = MainMenu.xib; sourceTree = ""; }; + F4D6C56B2680028A00B78B3D /* RemoteCheck.strings */ = { + isa = PBXVariantGroup; + children = ( + F4D6C56C2680028A00B78B3D /* en */, + F4D6C56E268002DE00B78B3D /* fr */, + F4D6C56F2680031E00B78B3D /* es */, + ); + name = RemoteCheck.strings; + sourceTree = ""; + }; F4D7F15D25F04A620024E9A5 /* CUISymbolsFilesLibraryViewController.xib */ = { isa = PBXVariantGroup; children = ( diff --git a/app_unexpectedly/app_unexpectedly/AppDelegate.m b/app_unexpectedly/app_unexpectedly/AppDelegate.m index ad54512..1952d7b 100644 --- a/app_unexpectedly/app_unexpectedly/AppDelegate.m +++ b/app_unexpectedly/app_unexpectedly/AppDelegate.m @@ -48,8 +48,12 @@ #import "CUICrashLogsOpenErrorPanel.h" +#import "WBRemoteVersionChecker.h" + NSString * const CUIApplicationShowDebugMenuKey=@"ui.menu.debug.show"; +NSString * const CUIApplicationShowDebugDidChangeNotification=@"CUIApplicationShowDebugDidChangeNotification"; + @interface AppDelegate () { IBOutlet NSMenu * _themesMenu; @@ -77,6 +81,8 @@ - (IBAction)showUnexpectedlyWebSite:(id)sender; - (void)themesListDidChange:(NSNotification *)inNotification; +- (void)showDebugMenuDidChange:(NSNotification *)inNotification; + @end @implementation AppDelegate @@ -102,6 +108,8 @@ - (void)awakeFromNib NSNotificationCenter * tNotificationCenter=[NSNotificationCenter defaultCenter]; [tNotificationCenter addObserver:self selector:@selector(themesListDidChange:) name:CUIThemesManagerThemesListDidChangeNotification object:nil]; + + [tNotificationCenter addObserver:self selector:@selector(showDebugMenuDidChange:) name:CUIApplicationShowDebugDidChangeNotification object:nil]; } #pragma mark - @@ -404,6 +412,8 @@ - (BOOL)application:(NSApplication *)sender openFile:(NSString *)inFilePath - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { + [WBRemoteVersionChecker sharedChecker]; + _mainWindowController=[CUIMainWindowController new]; //NSLog(@"%@",_mainWindowController.window.frameAutosaveName); @@ -423,4 +433,11 @@ - (void)themesListDidChange:(NSNotification *)inNotification [self refreshThemesMenu]; } +- (void)showDebugMenuDidChange:(NSNotification *)inNotification +{ + NSUserDefaults * tUserDefaults=[NSUserDefaults standardUserDefaults]; + + _debugMenuBarItem.hidden=([tUserDefaults boolForKey:CUIApplicationShowDebugMenuKey]==NO); +} + @end diff --git a/app_unexpectedly/app_unexpectedly/CUIPreferencePaneAdvancedViewController.h b/app_unexpectedly/app_unexpectedly/CUIPreferencePaneAdvancedViewController.h new file mode 100644 index 0000000..a0270fa --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/CUIPreferencePaneAdvancedViewController.h @@ -0,0 +1,22 @@ +/* + Copyright (c) 2021, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "CUIPreferencePaneViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface CUIPreferencePaneAdvancedViewController : CUIPreferencePaneViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/app_unexpectedly/app_unexpectedly/CUIPreferencePaneAdvancedViewController.m b/app_unexpectedly/app_unexpectedly/CUIPreferencePaneAdvancedViewController.m new file mode 100644 index 0000000..5e2f1a9 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/CUIPreferencePaneAdvancedViewController.m @@ -0,0 +1,75 @@ +/* + Copyright (c) 2021, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "CUIPreferencePaneAdvancedViewController.h" + +#import "WBRemoteVersionChecker.h" + +extern NSString * const CUIApplicationShowDebugMenuKey; + +extern NSString * const CUIApplicationShowDebugDidChangeNotification; + +@interface CUIPreferencePaneAdvancedViewController () +{ + IBOutlet NSButton * _remoteVersionCheckerCheckbox; + + IBOutlet NSButton * _showDebugMenuCheckbox; +} + +- (IBAction)switchRemoteVersionCheck:(id)sender; + +- (IBAction)switchShowDebugMenu:(id)sender; + +@end + +@implementation CUIPreferencePaneAdvancedViewController + +- (NSString *)nibName +{ + return @"CUIPreferencePaneAdvancedViewController"; +} + +#pragma mark - + +- (void)viewWillAppear +{ + [super viewWillAppear]; + + // Remote Version Check + + _remoteVersionCheckerCheckbox.state=([WBRemoteVersionChecker sharedChecker].isCheckEnabled==YES) ? NSOnState: NSOffState; + + // Show Debug Menu + + NSUserDefaults * tDefaults=[NSUserDefaults standardUserDefaults]; + + _showDebugMenuCheckbox.state=([tDefaults boolForKey:CUIApplicationShowDebugMenuKey]==YES) ? NSOnState: NSOffState; +} + +#pragma mark - + +- (IBAction)switchRemoteVersionCheck:(NSButton *)sender +{ + [WBRemoteVersionChecker sharedChecker].checkEnabled=(sender.state==NSOnState); +} + +- (IBAction)switchShowDebugMenu:(NSButton *)sender +{ + NSUserDefaults * tDefaults=[NSUserDefaults standardUserDefaults]; + + [tDefaults setBool:(sender.state==NSOnState) forKey:CUIApplicationShowDebugMenuKey]; + + [[NSNotificationCenter defaultCenter] postNotificationName:CUIApplicationShowDebugDidChangeNotification object:nil]; +} + +@end diff --git a/app_unexpectedly/app_unexpectedly/Info.plist b/app_unexpectedly/app_unexpectedly/Info.plist index b72ba64..761e712 100644 --- a/app_unexpectedly/app_unexpectedly/Info.plist +++ b/app_unexpectedly/app_unexpectedly/Info.plist @@ -179,5 +179,18 @@ + NSAppTransportSecurity + + NSExceptionDomains + + s.sudre.free.fr + + NSExceptionAllowsInsecureHTTPLoads + + + + + WBVersionCheckURL + http://s.sudre.free.fr/Software/Unexpectedly/RemoteVersion.plist diff --git a/app_unexpectedly/app_unexpectedly/WBRemoteVersionChecker.h b/app_unexpectedly/app_unexpectedly/WBRemoteVersionChecker.h new file mode 100644 index 0000000..ee23625 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/WBRemoteVersionChecker.h @@ -0,0 +1,22 @@ +/* + Copyright (c) 2012-2021, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import + +@interface WBRemoteVersionChecker : NSObject + + @property (nonatomic,getter=isCheckEnabled) BOOL checkEnabled; + ++ (WBRemoteVersionChecker *)sharedChecker; + +@end diff --git a/app_unexpectedly/app_unexpectedly/WBRemoteVersionChecker.m b/app_unexpectedly/app_unexpectedly/WBRemoteVersionChecker.m new file mode 100644 index 0000000..446dbbd --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/WBRemoteVersionChecker.m @@ -0,0 +1,298 @@ +/* + Copyright (c) 2012-2021 Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "WBRemoteVersionChecker.h" + +#define WBREMOTEVERSIONREMINDER_PERIOD (24*3600) // Every day +#define WBREMOTEVERSIONCHECK_PERIOD (3*24*3600) // Every 3 days + +NSString * const WBRemoteCheckEnabledKey=@"WBRemoteCheckEnabled"; +NSString * const WBRemoteLastCheckDateKey=@"WBRemoteLastCheckDate"; +NSString * const WBLastReminderDateKey=@"WBLastReminderDate"; +NSString * const WBRemoteAvailableVersionKey=@"WBRemoteAvailableVersion"; +NSString * const WBRemoteAvailableVersionURLKey=@"WBRemoteAvailableVersionURL"; + + +NSString * const WBSkipRemoteAvailableVersionKey=@"WBSkipRemoteAvailableVersion"; + +NSString * const WBVersionCheckURL=@"WBVersionCheckURL"; + +@interface WBRemoteVersionChecker () +{ + NSString * _productName; + NSString * _productLocalVersion; + NSString * _productCheckURL; + + NSUserDefaults * _defaults; + + NSMutableData * _data; +} + +@end + +@implementation WBRemoteVersionChecker + ++ (void)initialize +{ + [[NSUserDefaults standardUserDefaults] registerDefaults:@{ + WBRemoteCheckEnabledKey:@(YES), + + }]; +} + ++ (WBRemoteVersionChecker *)sharedChecker +{ + static dispatch_once_t onceToken; + static WBRemoteVersionChecker * sRemoteVersionChecker=nil; + + dispatch_once(&onceToken, ^{ + + sRemoteVersionChecker=[WBRemoteVersionChecker new]; + }); + + return sRemoteVersionChecker; +} + +#pragma mark - + +- (instancetype)init +{ + self=[super init]; + + if (self!=nil) + { + NSBundle * tBundle=[NSBundle mainBundle]; + + _productName=[tBundle objectForInfoDictionaryKey:@"CFBundleName"]; + _productLocalVersion=[tBundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; + _productCheckURL=[tBundle objectForInfoDictionaryKey:WBVersionCheckURL]; + + _defaults=[NSUserDefaults standardUserDefaults]; + + if (_productLocalVersion.length>0) + { + NSDate * tCurrentDate=[NSDate date]; + + if ([_defaults boolForKey:WBSkipRemoteAvailableVersionKey]==NO) + { + NSString * tRemoteVersion=[_defaults objectForKey:WBRemoteAvailableVersionKey]; + + if (tRemoteVersion!=nil) + { + if ([tRemoteVersion compare:_productLocalVersion options:NSNumericSearch]==NSOrderedDescending) + { + NSDate * tLastReminderDate=[_defaults objectForKey:WBLastReminderDateKey]; + + if (tLastReminderDate==nil || [tCurrentDate timeIntervalSinceDate:tLastReminderDate]>WBREMOTEVERSIONREMINDER_PERIOD) + { + NSString * tDownloadURL=[_defaults objectForKey:WBRemoteAvailableVersionURLKey]; + + if (tDownloadURL!=nil) + { + // Display dialog + + NSAlert * tAlert=[NSAlert new]; + tAlert.messageText=[NSString stringWithFormat:NSLocalizedStringFromTable(@"A new version of %@ is available.",@"RemoteCheck",@""),_productName]; + tAlert.informativeText=[NSString stringWithFormat:NSLocalizedStringFromTable(@"%@ %@ is now available - you have %@. Would you like to download it now?",@"RemoteCheck",@""),_productName,tRemoteVersion,_productLocalVersion]; + + [tAlert addButtonWithTitle:NSLocalizedStringFromTable(@"Download",@"RemoteCheck",@"")]; + [tAlert addButtonWithTitle:NSLocalizedStringFromTable(@"Skip This Version",@"RemoteCheck",@"")]; + [tAlert addButtonWithTitle:NSLocalizedStringFromTable(@"Remind Me Later",@"RemoteCheck",@"")]; + + NSModalResponse tResponse=[tAlert runModal]; + + switch(tResponse) + { + case NSAlertFirstButtonReturn: + + // Download + + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:tDownloadURL]]; + + [_defaults setObject:[NSDate date] forKey:WBLastReminderDateKey]; + + break; + + case NSAlertSecondButtonReturn: + + // Skip + + [_defaults setBool:YES forKey:WBSkipRemoteAvailableVersionKey]; + + break; + + case NSAlertThirdButtonReturn: + + // Remind me later + + [_defaults setObject:[NSDate date] forKey:WBLastReminderDateKey]; + + break; + + default: + + break; + } + } + } + } + } + } + + if (_productCheckURL.length>0) + { + // Check whether it's time to check for a newer version + + BOOL tCheckEnabled=[_defaults boolForKey:WBRemoteCheckEnabledKey]; + + if (tCheckEnabled==YES) + { + NSDate * tLastCheckDate=[_defaults objectForKey:WBRemoteLastCheckDateKey]; + + if (tLastCheckDate==nil || ([tCurrentDate timeIntervalSinceDate:tLastCheckDate]>WBREMOTEVERSIONCHECK_PERIOD)) + { + // Perform Remote Check + + _data=nil; + + NSURLRequest * tRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:_productCheckURL]]; + + if (tRequest!=nil) + { + NSURLConnection * tURLConnection=[[NSURLConnection alloc] initWithRequest:tRequest delegate:self]; + + if (tURLConnection==nil) + { + NSLog(@"Could not allocate NSURLConnection"); + } + } + else + { + NSLog(@"Could not allocate NSURLRequest"); + } + + } + } + } + } + } + + return self; +} + +#pragma mark - + +- (BOOL)isCheckEnabled +{ + id tObject=[_defaults objectForKey:WBRemoteCheckEnabledKey]; + + if (tObject==nil || [_defaults boolForKey:WBRemoteCheckEnabledKey]==YES) + return YES; + + return NO; +} + +- (void)setCheckEnabled:(BOOL)inBool +{ + [_defaults setBool:inBool forKey:WBRemoteCheckEnabledKey]; +} + +#pragma mark - NSURLConnectionDataDelegate + +- (void)connection:(NSURLConnection *)inConnection didReceiveResponse:(NSURLResponse *)inResponse +{ + if (inConnection!=nil) + { + NSHTTPURLResponse * tHTTPResponse=(NSHTTPURLResponse *) inResponse; + + switch (tHTTPResponse.statusCode) + { + case 200: + + break; + + default: + + [inConnection cancel]; + + break; + } + } +} + +- (void)connection:(NSURLConnection *)inConnection didReceiveData:(NSData *)inData +{ + if (inConnection!=nil && inData!=nil) + { + if (_data==nil) + _data=[inData mutableCopy]; + else + [_data appendData:inData]; + } +} + +- (void)connection:(NSURLConnection *)inConnection didFailWithError:(NSError *)inError +{ + if (inConnection!=nil) + _data=nil; +} + +- (void)connectionDidFinishLoading:(NSURLConnection *)inConnection +{ + if (inConnection==nil) + return; + + + if (_data==nil) + return; + + [_defaults setObject:[NSDate date] forKey:WBRemoteLastCheckDateKey]; + + NSPropertyListFormat tPropertyListFormat; + NSDictionary * tDictionary=[NSPropertyListSerialization propertyListWithData:_data options:NSPropertyListImmutable format:&tPropertyListFormat error:NULL]; + + if (tDictionary==nil) + { + _data=nil; + return; + } + + NSString * tRemoteVersion=tDictionary[WBRemoteAvailableVersionKey]; + + NSString * tLocalRemoteVersion=[_defaults objectForKey:WBRemoteAvailableVersionKey]; + + if (tLocalRemoteVersion!=nil && [tRemoteVersion compare:tLocalRemoteVersion options:NSNumericSearch]!=NSOrderedDescending) + { + _data=nil; + return; + } + + if (_productLocalVersion!=nil) + { + if ([tRemoteVersion compare:_productLocalVersion options:NSNumericSearch]==NSOrderedDescending) + { + NSString * tRemoteURL=[tDictionary objectForKey:WBRemoteAvailableVersionURLKey]; + + if (tRemoteURL!=nil) + { + [_defaults setObject:tRemoteURL forKey:WBRemoteAvailableVersionURLKey]; + [_defaults setObject:tRemoteVersion forKey:WBRemoteAvailableVersionKey]; + [_defaults setBool:NO forKey:WBSkipRemoteAvailableVersionKey]; + } + } + } + + _data=nil; +} + +@end diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/CUIPreferencePaneAdvancedViewController.xib b/app_unexpectedly/app_unexpectedly/en.lproj/CUIPreferencePaneAdvancedViewController.xib new file mode 100644 index 0000000..5e65e93 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/en.lproj/CUIPreferencePaneAdvancedViewController.xib @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/CUIPreferencesWindowController.xib b/app_unexpectedly/app_unexpectedly/en.lproj/CUIPreferencesWindowController.xib index c7faa63..5702015 100644 --- a/app_unexpectedly/app_unexpectedly/en.lproj/CUIPreferencesWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/en.lproj/CUIPreferencesWindowController.xib @@ -53,6 +53,13 @@ + + + + + + + @@ -60,6 +67,7 @@ + @@ -72,6 +80,7 @@ + diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/RemoteCheck.strings b/app_unexpectedly/app_unexpectedly/en.lproj/RemoteCheck.strings new file mode 100755 index 0000000000000000000000000000000000000000..c8a5ffedc9353a8b79977058cfbf4228f9721241 GIT binary patch literal 680 zcmd6lK@Y(|5QX2_uh=wkKIkZ`l$s%~iB0v1mby_0CS)BGm&8bI1=PFzzv1er!52JFt)88r$EmDq zFltf1(m#N!b~aq9n#Wq-ne?NGG(smpOh7z z4c}%cZ>HWU_DpfXYR{xIoXc-{{_+k=mT#~H?*xt=e2MpR?42IrZ05O3&QCbU_W+AU BY?uH5 literal 0 HcmV?d00001 diff --git a/app_unexpectedly/app_unexpectedly/es.lproj/CUIPreferencePaneAdvancedViewController.xib b/app_unexpectedly/app_unexpectedly/es.lproj/CUIPreferencePaneAdvancedViewController.xib new file mode 100644 index 0000000..faf2738 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/es.lproj/CUIPreferencePaneAdvancedViewController.xib @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/es.lproj/CUIPreferencesWindowController.xib b/app_unexpectedly/app_unexpectedly/es.lproj/CUIPreferencesWindowController.xib index 8b4a6ab..411f6e5 100644 --- a/app_unexpectedly/app_unexpectedly/es.lproj/CUIPreferencesWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/es.lproj/CUIPreferencesWindowController.xib @@ -53,6 +53,13 @@ + + + + + + + @@ -60,6 +67,7 @@ + @@ -72,6 +80,7 @@ + diff --git a/app_unexpectedly/app_unexpectedly/es.lproj/RemoteCheck.strings b/app_unexpectedly/app_unexpectedly/es.lproj/RemoteCheck.strings new file mode 100755 index 0000000000000000000000000000000000000000..a950d0527e4f606a1f58ff19a11350c7b5f2897f GIT binary patch literal 698 zcmZXSO-jT-5QX2`Q#1jW&ILqNn1u^PP|J?w-F&Np9PVYe`oBWbS5G0`e-mU-blHW_xoa + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/fr.lproj/CUIPreferencesWindowController.xib b/app_unexpectedly/app_unexpectedly/fr.lproj/CUIPreferencesWindowController.xib index 4b198f8..cb05516 100644 --- a/app_unexpectedly/app_unexpectedly/fr.lproj/CUIPreferencesWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/fr.lproj/CUIPreferencesWindowController.xib @@ -53,6 +53,13 @@ + + + + + + + @@ -60,6 +67,7 @@ + @@ -72,6 +80,7 @@ + diff --git a/app_unexpectedly/app_unexpectedly/fr.lproj/RemoteCheck.strings b/app_unexpectedly/app_unexpectedly/fr.lproj/RemoteCheck.strings new file mode 100755 index 0000000000000000000000000000000000000000..d4889531bb996ffc7b951c4d157a10d11749d96e GIT binary patch literal 768 zcmaKqOHRW;5JYRuDMpr9k_$u#kk}x>20~be#DEpYwgxANoQCV=62R-8Shf;`EYGLA zr>eSUe!eqZDX3De59SSX)Vm7R!~)|BA$H)s#cE~x%ExUztG|pWN(8oIA%l0~kYK+HpAFB#FBmU_+g5JEMV;qrr@=OV5 zUsb}tbX_f3(_`or9n_q+%EEOf){8;kNmCmC>n3On%Er0P%{6%DrFolcOT>IVcFT}W z_0&(A>s$KkaV!$R+HroTx%V6ON;DE*fmzT;%f4c5t1p@U&e`jOPWv03{E6A0e890n z4J;E_(;JyOZ}*CNtQ!=WcX6+4&fL1H!;X9Wdump$-u%B~7j#Px)=M1RK*}T^BKd|d T$BpDb!)opCwtj0}O_ literal 0 HcmV?d00001 From 51fca28dfaaba5c9ee7cb4d9a5e632076ce7f111 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Mon, 28 Jun 2021 22:53:19 +0200 Subject: [PATCH 006/214] Modify code to prevent duplicates in the list of sources - Prevent a single file to be both in the list of sources and in another source (directory, standard directory). - Disable directories already listed as sources in the add dialog. --- .../CUICrashLogsSourcesViewController.m | 34 ++++++++++++++----- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m b/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m index eb9d639..441a94b 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m @@ -56,6 +56,8 @@ @interface CUICrashLogsSourcesViewController () * tOpenErrors=[NSMutableArray array]; - _openPanelExistingSingleFiles=[NSSet setWithArray:[self->_sourcesManager.allSources WB_arrayByMappingObjectsLenientlyUsingBlock:^id(CUICrashLogsSourceFileSystemItem *bSource, NSUInteger bIndex) { - - if ([bSource isKindOfClass:[CUICrashLogsSourceFileSystemItem class]]==NO) - return nil; + CUICrashLogsSourceAll * tSourcesAll=[CUICrashLogsSourceAll crashLogsSourceAll]; + + _openPanelExistingSingleFiles=[NSSet setWithArray:[tSourcesAll.crashLogs WB_arrayByMappingObjectsLenientlyUsingBlock:^id(CUICrashLog *bCrashLog, NSUInteger bIndex) { + + return bCrashLog.crashLogFilePath; + }]]; + + _openPanelExistingDirectories=[NSSet setWithArray:[self->_sourcesManager.allSources WB_arrayByMappingObjectsLenientlyUsingBlock:^id(CUICrashLogsSourceDirectory *bCrashSource, NSUInteger bIndex) { - return bSource.path; + if ([bCrashSource isKindOfClass:[CUICrashLogsSourceDirectory class]]==NO) + return nil; + return bCrashSource.path; }]]; [tOpenPanel beginSheetModalForWindow:self.view.window completionHandler:^(NSModalResponse bReturnCode) { + self->_openPanelExistingSingleFiles=nil; + self->_openPanelExistingDirectories=nil; + if (bReturnCode==NSModalResponseCancel) return; @@ -379,6 +390,10 @@ - (IBAction)CUI_MENUACTION_addSource:(id)sender else { tSource=[[CUICrashLogsSourceDirectory alloc] initWithContentsOfFileSystemItemAtPath:tURL.path error:NULL]; + + // Check if the directory is not already a source + + // A COMPLETER } if (tSource==nil) @@ -771,10 +786,6 @@ - (NSDragOperation)tableView:(NSTableView *)inTableView validateDrop:(id Date: Fri, 2 Jul 2021 21:43:27 +0200 Subject: [PATCH 007/214] Get absolute path for relative path using the compilation directory. --- .../app_unexpectedly/DWARF/DWRFFileObject.m | 10 ++++++- .../DWARF/DWRFSection_debug_info.h | 4 +++ .../DWARF/DWRFSection_debug_info.m | 28 +++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/app_unexpectedly/app_unexpectedly/DWARF/DWRFFileObject.m b/app_unexpectedly/app_unexpectedly/DWARF/DWRFFileObject.m index 2de8061..05bba34 100644 --- a/app_unexpectedly/app_unexpectedly/DWARF/DWRFFileObject.m +++ b/app_unexpectedly/app_unexpectedly/DWARF/DWRFFileObject.m @@ -237,9 +237,17 @@ - (void)lookUpSymbolicationDataForMachineInstructionAddress:(uint64_t)inAddress // A AMELIORER (path absolu à trouver) } + NSString * tFilePath=tLocation.fileName; + if (tFilePath.length>0 && [tFilePath characterAtIndex:0]!='/') + { + NSString * tCompilationDirectory=tCompilationUnit.compilationDirectory; + + if (tCompilationDirectory.length>0) + tFilePath=[tCompilationDirectory stringByAppendingPathComponent:tFilePath]; + } - tSymbolicationData.sourceFilePath=tLocation.fileName; + tSymbolicationData.sourceFilePath=tFilePath; tSymbolicationData.lineNumber=tLocation.lineNumber; tSymbolicationData.columnNumber=tLocation.columnNumber; diff --git a/app_unexpectedly/app_unexpectedly/DWARF/DWRFSection_debug_info.h b/app_unexpectedly/app_unexpectedly/DWARF/DWRFSection_debug_info.h index 509e905..fae6ea1 100644 --- a/app_unexpectedly/app_unexpectedly/DWARF/DWRFSection_debug_info.h +++ b/app_unexpectedly/app_unexpectedly/DWARF/DWRFSection_debug_info.h @@ -31,6 +31,8 @@ @property (nonatomic,readonly) BOOL isConstant; +@property (nonatomic,readonly) BOOL isString; + @end @interface DWRFDebuggingInformationEntry : NSObject @@ -97,6 +99,8 @@ @property (nonatomic,readonly) DW_LANG language; +@property (nonatomic,readonly) NSString * compilationDirectory; + - (DWRFDebuggingInformationEntry *)entryAtAddress:(uint8_t *)inAddress; - (DWRFSubProgramEntry *)subProgramForMachineInstructionAddress:(uint64_t)inAddress; diff --git a/app_unexpectedly/app_unexpectedly/DWARF/DWRFSection_debug_info.m b/app_unexpectedly/app_unexpectedly/DWARF/DWRFSection_debug_info.m index 0d1e808..9ed193e 100644 --- a/app_unexpectedly/app_unexpectedly/DWARF/DWRFSection_debug_info.m +++ b/app_unexpectedly/app_unexpectedly/DWARF/DWRFSection_debug_info.m @@ -69,6 +69,29 @@ - (BOOL)isConstant return NO; } +- (BOOL)iString +{ + switch(self.form) + { + case DW_FORM_strp: + case DW_FORM_strx1: + case DW_FORM_strx2: + case DW_FORM_strx3: + case DW_FORM_strx4: + + case DW_FORM_strx: + + return YES; + + + default: + + break; + } + + return NO; +} + - (NSString *)description { if (self.isAddress==YES) @@ -1306,6 +1329,11 @@ -(DW_LANG)language return _compileUnitEntry.language; } +-(NSString *)compilationDirectory +{ + return _compileUnitEntry.compilationDirectory; +} + - (DWRFDebuggingInformationEntry *)entryAtAddress:(uint8_t *)inAddress { return [_compileUnitEntry entryAtAddress:inAddress]; From 7ab945b416353fef102d57af21f6a68ba7722127 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Tue, 31 Aug 2021 23:14:35 +0200 Subject: [PATCH 008/214] Code style + call super --- app_unexpectedly/app_unexpectedly/CUIMainWindowController.m | 2 +- .../app_unexpectedly/CUISymbolsFilesLibraryViewController.m | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app_unexpectedly/app_unexpectedly/CUIMainWindowController.m b/app_unexpectedly/app_unexpectedly/CUIMainWindowController.m index 46f730a..e2f33fb 100644 --- a/app_unexpectedly/app_unexpectedly/CUIMainWindowController.m +++ b/app_unexpectedly/app_unexpectedly/CUIMainWindowController.m @@ -205,7 +205,7 @@ - (void)crashLogsSelectionDidChange:(NSNotification *)inNotification NSString * tCrashLogFilePath=tCrashLog.crashLogFilePath; - self.window.title=[tCrashLogFilePath lastPathComponent]; + self.window.title=tCrashLogFilePath.lastPathComponent; self.window.representedFilename=tCrashLogFilePath; } diff --git a/app_unexpectedly/app_unexpectedly/CUISymbolsFilesLibraryViewController.m b/app_unexpectedly/app_unexpectedly/CUISymbolsFilesLibraryViewController.m index 9159a9f..72c5ee4 100644 --- a/app_unexpectedly/app_unexpectedly/CUISymbolsFilesLibraryViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUISymbolsFilesLibraryViewController.m @@ -122,6 +122,8 @@ - (void)viewDidAppear - (void)viewWillDisappear { + [super viewWillDisappear]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:CUIdSYMBundlesManagerDidAddBundlesNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:CUIdSYMBundlesManagerDidRemoveBundlesNotification object:nil]; From 8317cd0453e081fa31a235b13d2ad3b5859a2879 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Tue, 31 Aug 2021 23:15:38 +0200 Subject: [PATCH 009/214] Handle some additional keypath --- .../app_unexpectedly/CUICrashLog.m | 6 ++++ .../app_unexpectedly/CUIRawCrashLog.h | 5 +++ .../app_unexpectedly/CUIRawCrashLog.m | 36 ++++++++++++++++++- 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLog.m b/app_unexpectedly/app_unexpectedly/CUICrashLog.m index 041b249..4b310ba 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLog.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLog.m @@ -189,6 +189,12 @@ - (id)valueForKeyPath:(NSString *)inKeyPath if ([inKeyPath isEqualToString:@"header.executablePath"]==YES) return self.header.executablePath; + if ([inKeyPath isEqualToString:@"header.executableVersion"]==YES) + return self.header.executableVersion; + + if ([inKeyPath isEqualToString:@"header.operatingSystemVersion.stringValue"]==YES) + return self.header.operatingSystemVersion.stringValue; + if ([inKeyPath isEqualToString:@"exceptionInformation.crashedThreadName"]==YES) return self.exceptionInformation.crashedThreadName; diff --git a/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.h b/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.h index 8378e09..38eca34 100644 --- a/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.h +++ b/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.h @@ -62,6 +62,11 @@ typedef NS_ENUM(NSUInteger, CUICrashLogReportSourceType) - (BOOL)finalizeParsing; +@property (nonatomic,readonly,copy) NSString * crashLogFileName; + + +- (NSComparisonResult)compareCrashLogFileName:(CUIRawCrashLog *)otherCrashLog; + - (NSComparisonResult)compareProcessName:(CUIRawCrashLog *)otherCrashLog; - (NSComparisonResult)compareDateReverse:(CUIRawCrashLog *)otherCrashLog; diff --git a/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.m b/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.m index c870f18..8448fa7 100644 --- a/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.m +++ b/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.m @@ -27,6 +27,8 @@ @interface CUIRawCrashLog () id _reserved2; // dateTime id _reserved3; // header.bundleIdentifier id _reserved4; // header.executablePath + id _reserved5; // header.executableVersion + id _reserved6; // header.operatingSystemVersion.stringValue } @property (copy) NSString * crashLogFilePath; @@ -189,10 +191,26 @@ - (id)valueForKeyPath:(NSString *)inKeyPath if ([inKeyPath isEqualToString:@"header.executablePath"]==YES) return (_reserved4==nil) ? @"" : _reserved4; + if ([inKeyPath isEqualToString:@"header.executableVersion"]==YES) + return (_reserved5==nil) ? @"" : _reserved5; + + if ([inKeyPath isEqualToString:@"header.operatingSystemVersion.stringValue"]==YES) + return (_reserved6==nil) ? @"" : _reserved6; + if ([inKeyPath isEqualToString:@"exceptionInformation.crashedThreadName"]==YES) return @""; - return [super valueForKeyPath:inKeyPath]; + id tValue=nil; + + @try + { + tValue=[super valueForKeyPath:inKeyPath]; + } + + @catch(NSException * bException) + { + tValue=@""; + } } - (NSString *)processName @@ -305,6 +323,10 @@ - (BOOL)finalizeParsing _reserved3=[tHeader.bundleIdentifier copy]; _reserved4=[tHeader.executablePath copy]; + + _reserved5=[tHeader.executableVersion copy]; + + _reserved6=[tHeader.operatingSystemVersion.stringValue copy]; } return YES; @@ -312,6 +334,18 @@ - (BOOL)finalizeParsing #pragma mark - +- (NSString *)crashLogFileName +{ + return self.crashLogFilePath.lastPathComponent.stringByDeletingPathExtension; +} + +#pragma mark - + +- (NSComparisonResult)compareCrashLogFileName:(CUIRawCrashLog *)otherCrashLog +{ + return [self.crashLogFileName compare:otherCrashLog.crashLogFileName options:NSNumericSearch|NSCaseInsensitiveSearch]; +} + - (NSComparisonResult)compareProcessName:(CUIRawCrashLog *)otherCrashLog { NSComparisonResult tResult=[self.processName compare:otherCrashLog.processName options:NSNumericSearch|NSCaseInsensitiveSearch]; From 7dc3571bd9e1b5dd48939c26df896e39958d9fa7 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Fri, 5 Nov 2021 00:10:28 +0100 Subject: [PATCH 010/214] Add files and localized strings for the future --- .../NSTableView+Selection.h | 12 ++++++++++++ .../NSTableView+Selection.m | 12 ++++++++++++ .../en.lproj/Predicates.strings | 18 +++++++++++++++++- .../es.lproj/Predicates.strings | 18 +++++++++++++++++- .../fr.lproj/Predicates.strings | 18 +++++++++++++++++- 5 files changed, 75 insertions(+), 3 deletions(-) diff --git a/app_unexpectedly/AppKit + Extensions/NSTableView+Selection.h b/app_unexpectedly/AppKit + Extensions/NSTableView+Selection.h index b41c167..ac27f7c 100644 --- a/app_unexpectedly/AppKit + Extensions/NSTableView+Selection.h +++ b/app_unexpectedly/AppKit + Extensions/NSTableView+Selection.h @@ -1,3 +1,15 @@ +/* + Copyright (c) 2021, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #import diff --git a/app_unexpectedly/AppKit + Extensions/NSTableView+Selection.m b/app_unexpectedly/AppKit + Extensions/NSTableView+Selection.m index b2871bf..70e5646 100644 --- a/app_unexpectedly/AppKit + Extensions/NSTableView+Selection.m +++ b/app_unexpectedly/AppKit + Extensions/NSTableView+Selection.m @@ -1,3 +1,15 @@ +/* + Copyright (c) 2021, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #import "NSTableView+Selection.h" diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/Predicates.strings b/app_unexpectedly/app_unexpectedly/en.lproj/Predicates.strings index 483a1fe..48e0c1d 100644 --- a/app_unexpectedly/app_unexpectedly/en.lproj/Predicates.strings +++ b/app_unexpectedly/app_unexpectedly/en.lproj/Predicates.strings @@ -21,12 +21,24 @@ "%[header.executablePath]@ %[ends with]@ %@" = "%1$[Executable Path]@ %2$[ends with]@ %3$@"; "%[header.executablePath]@ %[contains]@ %@" = "%1$[Executable Path]@ %2$[contains]@ %3$@"; +"%[header.executableVersion]@ %[is]@ %@" = "%1$[Executable Version]@ %2$[is]@ %3$@"; +"%[header.executableVersion]@ %[is not]@ %@" = "%1$[Executable Version]@ %2$[is not]@ %3$@"; +"%[header.executableVersion]@ %[begins with]@ %@" = "%1$[Executable Version]@ %2$[begins with]@ %3$@"; +"%[header.executableVersion]@ %[ends with]@ %@" = "%1$[Executable Version]@ %2$[ends with]@ %3$@"; +"%[header.executableVersion]@ %[contains]@ %@" = "%1$[Executable Version]@ %2$[contains]@ %3$@"; + "%[exceptionInformation.crashedThreadName]@ %[is]@ %@" = "%1$[Crashed Thread Name]@ %2$[is]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[is not]@ %@" = "%1$[Crashed Thread Name]@ %2$[is not]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[begins with]@ %@" = "%1$[Crashed Thread Name]@ %2$[begins with]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[ends with]@ %@" = "%1$[Crashed Thread Name]@ %2$[ends with]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[contains]@ %@" = "%1$[Crashed Thread Name]@ %2$[contains]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[is]@ %@" = "%1$[Operating System Version]@ %2$[is]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[is not]@ %@" = "%1$[Operating System Version]@ %2$[is not]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[begins with]@ %@" = "%1$[Operating System Version]@ %2$[begins with]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[ends with]@ %@" = "%1$[Operating System Version]@ %2$[ends with]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[contains]@ %@" = "%1$[Operating System Version]@ %2$[contains]@ %3$@"; + "%[dateTime]@ %[is less than or equal to]@ %@" = "%1$[Date]@ %2$[is earlier than or equal to]@ %3$@"; "%[dateTime]@ %[is greater than or equal to]@ %@" = "%1$[Date]@ %2$[is later than or equal to]@ %3$@"; @@ -53,7 +65,11 @@ "%[exceptionSignal]@ is %[SIGTRAP]@" = "%1$[Exception Signal]@ is %2$[SIGTRAP]@"; "%[exceptionSignal]@ is %[Code Signature Invalid]@" = "%1$[Exception Signal]@ is %2$[Code Signature Invalid]@"; - +"%[crashLogFileName]@ %[is]@ %@" = "%1$[Report File Name]@ %2$[is]@ %3$@"; +"%[crashLogFileName]@ %[is not]@ %@" = "%1$[Report File Name]@ %2$[is not]@ %3$@"; +"%[crashLogFileName]@ %[begins with]@ %@" = "%1$[Report File Name]@ %2$[begins with]@ %3$@"; +"%[crashLogFileName]@ %[ends with]@ %@" = "%1$[Report File Name]@ %2$[ends with]@ %3$@"; +"%[crashLogFileName]@ %[contains]@ %@" = "%1$[Report File Name]@ %2$[contains]@ %3$@"; "%[reportSourceTypeNumber]@ is %[0]@" = "%1$[Source]@ is %2$[System Reports]@"; "%[reportSourceTypeNumber]@ is %[1]@" = "%1$[Source]@ is %2$[User Reports]@"; diff --git a/app_unexpectedly/app_unexpectedly/es.lproj/Predicates.strings b/app_unexpectedly/app_unexpectedly/es.lproj/Predicates.strings index f8ee386..2cb7789 100644 --- a/app_unexpectedly/app_unexpectedly/es.lproj/Predicates.strings +++ b/app_unexpectedly/app_unexpectedly/es.lproj/Predicates.strings @@ -21,12 +21,24 @@ "%[header.executablePath]@ %[ends with]@ %@" = "%1$[Ruta del ejecutable]@ %2$[acaba en]@ %3$@"; "%[header.executablePath]@ %[contains]@ %@" = "%1$[Ruta del ejecutable]@ %2$[contiene]@ %3$@"; +"%[header.executableVersion]@ %[is]@ %@" = "%1$[Versión del ejectuable]@ %2$[es]@ %3$@"; +"%[header.executableVersion]@ %[is not]@ %@" = "%1$[Versión del ejectuable]@ %2$[no es]@ %3$@"; +"%[header.executableVersion]@ %[begins with]@ %@" = "%1$[Versión del ejectuable]@ %2$[empieza por]@ %3$@"; +"%[header.executableVersion]@ %[ends with]@ %@" = "%1$[Versión del ejectuable]@ %2$[acaba en]@ %3$@"; +"%[header.executableVersion]@ %[contains]@ %@" = "%1$[Versión del ejectuable]@ %2$[contiene]@ %3$@"; + "%[exceptionInformation.crashedThreadName]@ %[is]@ %@" = "%1$[Nombre del thread fallado]@ %2$[es]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[is not]@ %@" = "%1$[Nombre del thread fallado]@ %2$[no es]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[begins with]@ %@" = "%1$[Nombre del thread fallado]@ %2$[empieza por]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[ends with]@ %@" = "%1$[Nombre del thread fallado]@ %2$[acaba en]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[contains]@ %@" = "%1$[Nombre del thread fallado]@ %2$[contiene]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[is]@ %@" = "%1$[Versión del sistema operativo]@ %2$[es]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[is not]@ %@" = "%1$[Versión del sistema operativo]@ %2$[no es]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[begins with]@ %@" = "%1$[Versión del sistema operativo]@ %2$[empieza por]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[ends with]@ %@" = "%1$[Versión del sistema operativo]@ %2$[acaba en]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[contains]@ %@" = "%1$[Versión del sistema operativo]@ %2$[contiene]@ %3$@"; + "%[dateTime]@ %[is less than or equal to]@ %@" = "%1$[Fecha]@ %2$[es anterior a]@ %3$@"; "%[dateTime]@ %[is greater than or equal to]@ %@" = "%1$[Fecha]@ %2$[es posterior a]@ %3$@"; @@ -53,7 +65,11 @@ "%[exceptionSignal]@ is %[SIGTRAP]@" = "%1$[Señal de excepción]@ es %2$[SIGTRAP]@"; "%[exceptionSignal]@ is %[Code Signature Invalid]@" = "%1$[Señal de excepción]@ es %2$[Code Signature Invalid]@"; - +"%[crashLogFileName]@ %[is]@ %@" = "%1$[Nombre de archivo de informe]@ %2$[es]@ %3$@"; +"%[crashLogFileName]@ %[is not]@ %@" = "%1$[Nombre de archivo de informe]@ %2$[no es]@ %3$@"; +"%[crashLogFileName]@ %[begins with]@ %@" = "%1$[Nombre de archivo de informe]@ %2$[empieza por]@ %3$@"; +"%[crashLogFileName]@ %[ends with]@ %@" = "%1$[Nombre de archivo de informe]@ %2$[acaba en]@ %3$@"; +"%[crashLogFileName]@ %[contains]@ %@" = "%1$[Nombre de archivo de informe]@ %2$[contiene]@ %3$@"; "%[reportSourceTypeNumber]@ is %[0]@" = "%1$[Fuente]@ es %2$[Informes del sistema]@"; "%[reportSourceTypeNumber]@ is %[1]@" = "%1$[Fuente]@ es %2$[Informes del usuario]@"; diff --git a/app_unexpectedly/app_unexpectedly/fr.lproj/Predicates.strings b/app_unexpectedly/app_unexpectedly/fr.lproj/Predicates.strings index 026b995..a113209 100644 --- a/app_unexpectedly/app_unexpectedly/fr.lproj/Predicates.strings +++ b/app_unexpectedly/app_unexpectedly/fr.lproj/Predicates.strings @@ -21,12 +21,24 @@ "%[header.executablePath]@ %[ends with]@ %@" = "%1$[Le chemin de l'exécutable]@ %2$[se termine par]@ %3$@"; "%[header.executablePath]@ %[contains]@ %@" = "%1$[Le chemin de l'exécutable]@ %2$[contient]@ %3$@"; +"%[header.executableVersion]@ %[is]@ %@" = "%1$[La version de l'exécutable]@ %2$[est]@ %3$@"; +"%[header.executableVersion]@ %[is not]@ %@" = "%1$[La version de l'exécutable]@ %2$[n'est pas]@ %3$@"; +"%[header.executableVersion]@ %[begins with]@ %@" = "%1$[La version de l'exécutable]@ %2$[commence par]@ %3$@"; +"%[header.executableVersion]@ %[ends with]@ %@" = "%1$[La version de l'exécutable]@ %2$[se termine par]@ %3$@"; +"%[header.executableVersion]@ %[contains]@ %@" = "%1$[La version de l'exécutable]@ %2$[contient]@ %3$@"; + "%[exceptionInformation.crashedThreadName]@ %[is]@ %@" = "%1$[Le nom du thread planté]@ %2$[est]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[is not]@ %@" = "%1$[Le nom du thread planté]@ %2$[n'est pas]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[begins with]@ %@" = "%1$[Le nom du thread planté]@ %2$[commence par]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[ends with]@ %@" = "%1$[Le nom du thread planté]@ %2$[se termine par]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[contains]@ %@" = "%1$[Le nom du thread planté]@ %2$[contient]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[is]@ %@" = "%1$[La version de l'OS]@ %2$[est]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[is not]@ %@" = "%1$[La version de l'OS]@ %2$[n'est pas]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[begins with]@ %@" = "%1$[La version de l'OS]@ %2$[commence par]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[ends with]@ %@" = "%1$[La version de l'OS]@ %2$[se termine par]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[contains]@ %@" = "%1$[La version de l'OS]@ %2$[contient]@ %3$@"; + "%[dateTime]@ %[is less than or equal to]@ %@" = "%1$[La date]@ %2$[est antérieure ou égale à]@ %3$@"; "%[dateTime]@ %[is greater than or equal to]@ %@" = "%1$[La date]@ %2$[est postérieure ou égale à]@ %3$@"; @@ -53,7 +65,11 @@ "%[exceptionSignal]@ is %[SIGTRAP]@" = "%1$[Le signal de l'exception]@ est %2$[SIGTRAP]@"; "%[exceptionSignal]@ is %[Code Signature Invalid]@" = "%1$[Le signal de l'exception]@ est %2$[Code Signature Invalid]@"; - +"%[crashLogFileName]@ %[is]@ %@" = "%1$[Le nom du fichier du rapport]@ %2$[est]@ %3$@"; +"%[crashLogFileName]@ %[is not]@ %@" = "%1$[Le nom du fichier du rapport]@ %2$[n'est pas]@ %3$@"; +"%[crashLogFileName]@ %[begins with]@ %@" = "%1$[Le nom du fichier du rapport]@ %2$[commence par]@ %3$@"; +"%[crashLogFileName]@ %[ends with]@ %@" = "%1$[Le nom du fichier du rapport]@ %2$[se termine par]@ %3$@"; +"%[crashLogFileName]@ %[contains]@ %@" = "%1$[Le nom du fichier du rapport]@ %2$[contient]@ %3$@"; "%[reportSourceTypeNumber]@ is %[0]@" = "%1$[La source]@ est %2$[les rapports système]@"; "%[reportSourceTypeNumber]@ is %[1]@" = "%1$[La source]@ est %2$[les rapports utilisateurs]@"; From 42ccf461f782c4a90776c0093803e4f7833f66b5 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Thu, 11 Nov 2021 11:16:39 +0100 Subject: [PATCH 011/214] Add new preferences --- .../CUIApplicationPreferences.h | 4 ++++ .../CUIApplicationPreferences.m | 21 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/CUIApplicationPreferences.h b/app_unexpectedly/app_unexpectedly/CUIApplicationPreferences.h index c769b2f..cd03e6e 100644 --- a/app_unexpectedly/app_unexpectedly/CUIApplicationPreferences.h +++ b/app_unexpectedly/app_unexpectedly/CUIApplicationPreferences.h @@ -65,6 +65,8 @@ typedef NS_ENUM(NSUInteger, CUICrashLogsSortType) @property (nonatomic) CUICrashLogsSortType crashLogsSortType; + @property (nonatomic) BOOL crashLogsShowFileNames; + + (CUIApplicationPreferences *)sharedPreferences; @@ -79,3 +81,5 @@ extern NSString * const CUIPreferencesTextModeLineWrappingDidChangeNotification; extern NSString * const CUIPreferencesSymbolicationSymbolicateAutomaticallyDidChangeNotification; extern NSString * const CUIPreferencesCrashLogsSortTypeDidChangeNotification; + +extern NSString * const CUIPreferencesCrashLogsShowFileNamesDidChangeNotification; diff --git a/app_unexpectedly/app_unexpectedly/CUIApplicationPreferences.m b/app_unexpectedly/app_unexpectedly/CUIApplicationPreferences.m index 65f5364..30416ed 100644 --- a/app_unexpectedly/app_unexpectedly/CUIApplicationPreferences.m +++ b/app_unexpectedly/app_unexpectedly/CUIApplicationPreferences.m @@ -59,6 +59,8 @@ // Crash Logs List +NSString * const CUIPreferencesCrashLogsShowFileNamesKey=@"showFileNames"; + NSString * const CUIPreferencesCrashLogsSortTypeKey=@"crashLogs.list.sort"; // Notifications @@ -74,7 +76,7 @@ NSString * const CUIPreferencesCrashLogsSortTypeDidChangeNotification=@"CUIPreferencesCrashLogsSortTypeDidChangeNotification"; - +NSString * const CUIPreferencesCrashLogsShowFileNamesDidChangeNotification=@"CUIPreferencesCrashLogsShowFileNamesDidChangeNotification"; @interface CUIApplicationPreferences () { @@ -144,7 +146,8 @@ - (instancetype)init // Crash Logs - CUIPreferencesCrashLogsSortTypeKey:@(CUICrashLogsSortDateDescending) + CUIPreferencesCrashLogsSortTypeKey:@(CUICrashLogsSortDateDescending), + CUIPreferencesCrashLogsSortTypeKey:@(NO) }]; @@ -192,6 +195,8 @@ - (instancetype)init _crashLogsSortType=[_defaults integerForKey:CUIPreferencesCrashLogsSortTypeKey]; + _crashLogsShowFileNames=[_defaults boolForKey:CUIPreferencesCrashLogsShowFileNamesKey]; + } return self; @@ -287,4 +292,16 @@ - (void)setCrashLogsSortType:(CUICrashLogsSortType)inCrashLogsSortType [[NSNotificationCenter defaultCenter] postNotificationName:CUIPreferencesCrashLogsSortTypeDidChangeNotification object:nil]; } +- (void)setCrashLogsShowFileNames:(BOOL)inCrashLogsShowFileNames +{ + if (_crashLogsShowFileNames==inCrashLogsShowFileNames) + return; + + _crashLogsShowFileNames=inCrashLogsShowFileNames; + + [_defaults setObject:@(_crashLogsShowFileNames) forKey:CUIPreferencesCrashLogsShowFileNamesKey]; + + [[NSNotificationCenter defaultCenter] postNotificationName:CUIPreferencesCrashLogsShowFileNamesDidChangeNotification object:nil]; +} + @end From b7af2afbe2010f8295eceb08bb723ae7bf80c75a Mon Sep 17 00:00:00 2001 From: packagesdev Date: Thu, 11 Nov 2021 11:17:04 +0100 Subject: [PATCH 012/214] Take into account new key --- app_unexpectedly/app_unexpectedly/CUICrashLog.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLog.m b/app_unexpectedly/app_unexpectedly/CUICrashLog.m index 4b310ba..5be9acf 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLog.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLog.m @@ -272,7 +272,8 @@ - (BOOL)detectSectionsOfTextualRepresentation:(NSArray *)inLines error:(NSError NSString * tString=inLines[tFirstLine]; if ([tString hasPrefix:@"Application Specific Information:"]==YES || - [tString hasPrefix:@"VM Regions Near"]==YES) + [tString hasPrefix:@"VM Regions Near"]==YES || + [tString hasPrefix:@"VM Region Info:"]==YES) { tRange=[CUICrashLogSectionsDetector detectDiagnosticMessageSectionRangeInTextualRepresentation:inLines atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(tFirstLine,inLines.count-tFirstLine)]]; From 63446bc2e51ac709e5571ecc31ab95c37b0524e7 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Thu, 11 Nov 2021 11:17:16 +0100 Subject: [PATCH 013/214] Take into account new key --- app_unexpectedly/app_unexpectedly/CUICrashLogSectionsDetector.m | 1 + 1 file changed, 1 insertion(+) diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogSectionsDetector.m b/app_unexpectedly/app_unexpectedly/CUICrashLogSectionsDetector.m index 90ca36d..b3d3c0a 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogSectionsDetector.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogSectionsDetector.m @@ -50,6 +50,7 @@ + (NSRange)detectExceptionInformationSectionRangeInTextualRepresentation:(NSArra if ([bLine hasPrefix:@"Application Specific Information:"]==YES || [bLine hasPrefix:@"VM Regions Near"]==YES || + [bLine hasPrefix:@"VM Region Info:"]==YES || [bLine isEqualToString:@"Backtrace not available"]==YES || From b2caba793833690d06b99f297cec76d34f40544d Mon Sep 17 00:00:00 2001 From: packagesdev Date: Thu, 11 Nov 2021 11:17:59 +0100 Subject: [PATCH 014/214] Take into account new preference --- app_unexpectedly/app_unexpectedly/AppDelegate.m | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app_unexpectedly/app_unexpectedly/AppDelegate.m b/app_unexpectedly/app_unexpectedly/AppDelegate.m index 1952d7b..175f217 100644 --- a/app_unexpectedly/app_unexpectedly/AppDelegate.m +++ b/app_unexpectedly/app_unexpectedly/AppDelegate.m @@ -178,6 +178,13 @@ - (BOOL)validateMenuItem:(NSMenuItem *)inMenuItem inMenuItem.state=(tDefaults.reportUncaughtExceptions==YES) ? NSOnState : NSOffState; } + if (tAction==@selector(switchLogsListShowFileNames:)) + { + CUIApplicationPreferences * tApplicationPreferences=[CUIApplicationPreferences sharedPreferences]; + + inMenuItem.state=(tApplicationPreferences.crashLogsShowFileNames==YES) ? NSOnState : NSOffState; + } + return YES; } From eab6f8474ee3bc11a98b46b088aae4745147e45a Mon Sep 17 00:00:00 2001 From: packagesdev Date: Thu, 11 Nov 2021 11:19:27 +0100 Subject: [PATCH 015/214] Better support for spacebar scrolling --- .../app_unexpectedly/CUITableViewNoSpace.h | 22 ++++++++++ .../app_unexpectedly/CUITableViewNoSpace.m | 41 +++++++++++++++++++ .../CUICrashLogsSourcesViewController.xib | 2 +- .../CUICrashLogsSourcesViewController.xib | 2 +- .../CUICrashLogsSourcesViewController.xib | 2 +- 5 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 app_unexpectedly/app_unexpectedly/CUITableViewNoSpace.h create mode 100644 app_unexpectedly/app_unexpectedly/CUITableViewNoSpace.m diff --git a/app_unexpectedly/app_unexpectedly/CUITableViewNoSpace.h b/app_unexpectedly/app_unexpectedly/CUITableViewNoSpace.h new file mode 100644 index 0000000..218dc1d --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/CUITableViewNoSpace.h @@ -0,0 +1,22 @@ +/* + Copyright (c) 2021, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface CUITableViewNoSpace : NSTableView + +@end + +NS_ASSUME_NONNULL_END diff --git a/app_unexpectedly/app_unexpectedly/CUITableViewNoSpace.m b/app_unexpectedly/app_unexpectedly/CUITableViewNoSpace.m new file mode 100644 index 0000000..8311c91 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/CUITableViewNoSpace.m @@ -0,0 +1,41 @@ +/* + Copyright (c) 2021, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "CUITableViewNoSpace.h" + +@implementation CUITableViewNoSpace + +- (void)keyDown:(NSEvent *)inEvent +{ + NSString * tTypedText=inEvent.characters; + + NSUInteger tLength=tTypedText.length; + + for(NSUInteger tIndex=0;tIndex - + diff --git a/app_unexpectedly/app_unexpectedly/es.lproj/CUICrashLogsSourcesViewController.xib b/app_unexpectedly/app_unexpectedly/es.lproj/CUICrashLogsSourcesViewController.xib index 3ea57c4..c809377 100644 --- a/app_unexpectedly/app_unexpectedly/es.lproj/CUICrashLogsSourcesViewController.xib +++ b/app_unexpectedly/app_unexpectedly/es.lproj/CUICrashLogsSourcesViewController.xib @@ -27,7 +27,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/fr.lproj/CUICrashLogsSourcesViewController.xib b/app_unexpectedly/app_unexpectedly/fr.lproj/CUICrashLogsSourcesViewController.xib index e15a9b0..0d8a1cb 100644 --- a/app_unexpectedly/app_unexpectedly/fr.lproj/CUICrashLogsSourcesViewController.xib +++ b/app_unexpectedly/app_unexpectedly/fr.lproj/CUICrashLogsSourcesViewController.xib @@ -27,7 +27,7 @@ - + From 8969b2613a0da420c5de63519a719c93d5d35a80 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Fri, 12 Nov 2021 20:25:12 +0100 Subject: [PATCH 016/214] Add NSString category --- .../Foundation + Extensions/NSString+CPU.h | 21 +++++++++++ .../Foundation + Extensions/NSString+CPU.m | 37 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 app_unexpectedly/Foundation + Extensions/NSString+CPU.h create mode 100644 app_unexpectedly/Foundation + Extensions/NSString+CPU.m diff --git a/app_unexpectedly/Foundation + Extensions/NSString+CPU.h b/app_unexpectedly/Foundation + Extensions/NSString+CPU.h new file mode 100644 index 0000000..0a6aa44 --- /dev/null +++ b/app_unexpectedly/Foundation + Extensions/NSString+CPU.h @@ -0,0 +1,21 @@ +/* + Copyright (c) 2021, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import + +@interface NSString (CPU) + +- (cpu_type_t)CUI_CPUType; + +@end + diff --git a/app_unexpectedly/Foundation + Extensions/NSString+CPU.m b/app_unexpectedly/Foundation + Extensions/NSString+CPU.m new file mode 100644 index 0000000..0e7b9a6 --- /dev/null +++ b/app_unexpectedly/Foundation + Extensions/NSString+CPU.m @@ -0,0 +1,37 @@ +/* + Copyright (c) 2021, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "NSString+CPU.h" + +@implementation NSString (CPU) + +- (cpu_type_t)CUI_CPUType +{ + static NSDictionary * sCPUFamiliesRegistry=nil; + + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + + sCPUFamiliesRegistry=@{ + @"X86-64":@(CPU_TYPE_X86), + @"arm64":@(CPU_ARCH_ABI64) + }; + + }); + + NSNumber * tCPUFamily=sCPUFamiliesRegistry[self]; + + return (tCPUFamily!=nil) ? [tCPUFamily intValue] : CPU_TYPE_X86; +} + +@end From 4545b069c7243d85e208a42775d3452638c764be Mon Sep 17 00:00:00 2001 From: packagesdev Date: Thu, 18 Nov 2021 00:26:16 +0100 Subject: [PATCH 017/214] Add submodule --- .gitmodules | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .gitmodules diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..67a3a02 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "submodules/ips2crash"] + path = submodules/ips2crash + url = https://github.com/packagesdev/ips2crash From d4906fd5d99f935a5c523bcced8095362ac2a68f Mon Sep 17 00:00:00 2001 From: packagesdev Date: Thu, 18 Nov 2021 00:30:48 +0100 Subject: [PATCH 018/214] Start supporting .ips format --- .../project.pbxproj | 226 ++- .../app_unexpectedly/CUIBinaryImage.h | 4 + .../app_unexpectedly/CUIBinaryImage.m | 40 + ...naryImage+UI.h => CUIBinaryImageUtility.h} | 4 +- ...naryImage+UI.m => CUIBinaryImageUtility.m} | 12 +- .../CUIBinaryImagesViewController.m | 16 +- .../app_unexpectedly/CUICallStackBacktrace.h | 5 + .../app_unexpectedly/CUICallStackBacktrace.m | 34 + .../CUICollectionViewRegisterItem.m | 16 + .../CUIContentsViewController.m | 6 +- .../app_unexpectedly/CUICrashDataTransform.h | 20 + ...ansformation.m => CUICrashDataTransform.m} | 657 ++++---- .../app_unexpectedly/CUICrashLog.h | 17 - .../app_unexpectedly/CUICrashLog.m | 257 ++- .../app_unexpectedly/CUICrashLogBacktraces.h | 6 +- .../app_unexpectedly/CUICrashLogBacktraces.m | 54 +- .../CUICrashLogBinaryImages.h | 6 +- .../CUICrashLogBinaryImages.m | 50 +- .../CUICrashLogDianosticMessages.h | 4 + .../CUICrashLogDianosticMessages.m | 22 + .../CUICrashLogExceptionInformation.h | 4 + .../CUICrashLogExceptionInformation.m | 40 + .../app_unexpectedly/CUICrashLogHeader.h | 4 + .../app_unexpectedly/CUICrashLogHeader.m | 67 + ...UICrashLogPresentationTextViewController.m | 95 +- .../app_unexpectedly/CUICrashLogThreadState.h | 4 + .../app_unexpectedly/CUICrashLogThreadState.m | 90 + .../CUICrashLogsListViewController.h | 1 - .../CUICrashLogsListViewController.m | 100 +- .../app_unexpectedly/CUICrashLogsProvider.m | 10 +- .../CUICrashLogsSourceSmart.m | 13 +- .../CUICrashLogsSourceSmartEditorPanel.m | 29 +- .../CUICrashLogsSourcesViewController.m | 6 +- ...extTransformation.h => CUIDataTransform.h} | 44 +- .../app_unexpectedly/CUIDataTransform.m | 95 ++ .../app_unexpectedly/CUIIPSTransform.h | 26 + .../app_unexpectedly/CUIIPSTransform.m | 1476 +++++++++++++++++ ...PresentationTextNavigationViewController.m | 20 +- .../app_unexpectedly/CUIRawCrashLog.h | 18 + .../app_unexpectedly/CUIRawCrashLog.m | 75 +- .../app_unexpectedly/CUIStackFrame+UI.m | 4 +- .../app_unexpectedly/CUIStackFrame.h | 6 + .../app_unexpectedly/CUIStackFrame.m | 41 + app_unexpectedly/app_unexpectedly/CUIThread.h | 5 + app_unexpectedly/app_unexpectedly/CUIThread.m | 34 + app_unexpectedly/app_unexpectedly/Info.plist | 36 +- .../CUICollectionViewRegisterItem.xib | 7 +- .../CUICrashLogsListViewController.xib | 44 +- .../CUICollectionViewRegisterItem.xib | 1 + .../CUICrashLogsListViewController.xib | 48 +- .../CUICollectionViewRegisterItem.xib | 7 +- .../CUICrashLogsListViewController.xib | 48 +- .../crashreport.xcodeproj/project.pbxproj | 291 +++- .../crashreport/GeneratePreviewForURL.m | 31 +- .../crashreport/GenerateThumbnailForURL.m | 32 +- 55 files changed, 3653 insertions(+), 655 deletions(-) rename app_unexpectedly/app_unexpectedly/{CUIBinaryImage+UI.h => CUIBinaryImageUtility.h} (97%) rename app_unexpectedly/app_unexpectedly/{CUIBinaryImage+UI.m => CUIBinaryImageUtility.m} (97%) create mode 100644 app_unexpectedly/app_unexpectedly/CUICrashDataTransform.h rename app_unexpectedly/app_unexpectedly/{CUIRawTextTransformation.m => CUICrashDataTransform.m} (73%) rename app_unexpectedly/app_unexpectedly/{CUIRawTextTransformation.h => CUIDataTransform.h} (76%) create mode 100644 app_unexpectedly/app_unexpectedly/CUIDataTransform.m create mode 100644 app_unexpectedly/app_unexpectedly/CUIIPSTransform.h create mode 100644 app_unexpectedly/app_unexpectedly/CUIIPSTransform.m diff --git a/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj b/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj index c75ce6c..aefa4c5 100644 --- a/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj +++ b/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj @@ -61,8 +61,33 @@ F4214CB524B6534400852DDE /* CUICrashLogsSourcesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F4214CB424B6534400852DDE /* CUICrashLogsSourcesManager.m */; }; F423818C267D1D4A003837AC /* CUIPreferencePaneAdvancedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F423818A267D1D4A003837AC /* CUIPreferencePaneAdvancedViewController.m */; }; F4238191267D3522003837AC /* WBRemoteVersionChecker.m in Sources */ = {isa = PBXBuildFile; fileRef = F4238190267D3522003837AC /* WBRemoteVersionChecker.m */; }; + F428C0702724592D00FB8CAC /* IPSImage.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0412724592900FB8CAC /* IPSImage.m */; }; + F428C0712724592D00FB8CAC /* IPSIncidentHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0422724592900FB8CAC /* IPSIncidentHeader.m */; }; + F428C0722724592D00FB8CAC /* IPSIncidentExceptionInformation.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0432724592900FB8CAC /* IPSIncidentExceptionInformation.m */; }; + F428C0732724592D00FB8CAC /* IPSIncidentDiagnosticMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0442724592900FB8CAC /* IPSIncidentDiagnosticMessage.m */; }; + F428C0742724592D00FB8CAC /* IPSReport.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0452724592900FB8CAC /* IPSReport.m */; }; + F428C0752724592D00FB8CAC /* IPSThreadInstructionState.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0462724592900FB8CAC /* IPSThreadInstructionState.m */; }; + F428C0762724592D00FB8CAC /* IPSThreadInstructionStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0472724592900FB8CAC /* IPSThreadInstructionStream.m */; }; + F428C0772724592D00FB8CAC /* IPSRegisterState.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0492724592900FB8CAC /* IPSRegisterState.m */; }; + F428C0782724592D00FB8CAC /* IPSDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C04A2724592A00FB8CAC /* IPSDateFormatter.m */; }; + F428C0792724592D00FB8CAC /* IPSApplicationSpecificInformation.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C04B2724592A00FB8CAC /* IPSApplicationSpecificInformation.m */; }; + F428C07A2724592D00FB8CAC /* IPSSummary.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C04C2724592A00FB8CAC /* IPSSummary.m */; }; + F428C07B2724592D00FB8CAC /* IPSTermination.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C04D2724592A00FB8CAC /* IPSTermination.m */; }; + F428C07C2724592D00FB8CAC /* IPSExternalModificationSummary.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C04E2724592A00FB8CAC /* IPSExternalModificationSummary.m */; }; + F428C07D2724592D00FB8CAC /* IPSExternalModificationStatistics.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0502724592A00FB8CAC /* IPSExternalModificationStatistics.m */; }; + F428C07E2724592D00FB8CAC /* IPSBundleInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0532724592A00FB8CAC /* IPSBundleInfo.m */; }; + F428C07F2724592D00FB8CAC /* IPSException.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0542724592A00FB8CAC /* IPSException.m */; }; + F428C0802724592D00FB8CAC /* IPSThread.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0572724592A00FB8CAC /* IPSThread.m */; }; + F428C0812724592D00FB8CAC /* IPSThreadFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0592724592B00FB8CAC /* IPSThreadFrame.m */; }; + F428C0822724592D00FB8CAC /* IPSError.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C05B2724592B00FB8CAC /* IPSError.m */; }; + F428C0832724592D00FB8CAC /* IPSOperatingSystemVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C05E2724592B00FB8CAC /* IPSOperatingSystemVersion.m */; }; + F428C0842724592D00FB8CAC /* IPSThreadState.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0622724592B00FB8CAC /* IPSThreadState.m */; }; + F428C0852724592D00FB8CAC /* IPSLegacyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C0682724592C00FB8CAC /* IPSLegacyInfo.m */; }; + F428C0862724592D00FB8CAC /* IPSIncident.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C06A2724592C00FB8CAC /* IPSIncident.m */; }; + F428C08A27245BD100FB8CAC /* IPSReport+CrashRepresentation.m in Sources */ = {isa = PBXBuildFile; fileRef = F428C08927245BD100FB8CAC /* IPSReport+CrashRepresentation.m */; }; F42B57E224ABEF6E00F77ED5 /* CUICallsSelection.m in Sources */ = {isa = PBXBuildFile; fileRef = F42B57E124ABEF6E00F77ED5 /* CUICallsSelection.m */; }; F42D0BC425514B670021A551 /* template.source in Resources */ = {isa = PBXBuildFile; fileRef = F42D0BC225514B2E0021A551 /* template.source */; }; + F42E50012724B7550092181A /* CUICrashDataTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = F42E50002724B7550092181A /* CUICrashDataTransform.m */; }; F4301A6825EF0DE000ACDA3F /* CUIPreferencePanePresentationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4301A6A25EF0DE000ACDA3F /* CUIPreferencePanePresentationViewController.xib */; }; F4306D592577E168007E667F /* CUICrashLogThreadState+UI.m in Sources */ = {isa = PBXBuildFile; fileRef = F4306D582577E168007E667F /* CUICrashLogThreadState+UI.m */; }; F432ACC824A95014000A3E7A /* CUIThreadsListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F432ACC624A95014000A3E7A /* CUIThreadsListViewController.m */; }; @@ -82,7 +107,7 @@ F440A3E924AA35AC00C23DA1 /* CUICrashLogsSourceDirectory.m in Sources */ = {isa = PBXBuildFile; fileRef = F440A3E824AA35AC00C23DA1 /* CUICrashLogsSourceDirectory.m */; }; F440A3EC24AA38E600C23DA1 /* CUICrashLogsSourceAll.m in Sources */ = {isa = PBXBuildFile; fileRef = F440A3EB24AA38E600C23DA1 /* CUICrashLogsSourceAll.m */; }; F442FCED24AB855C00E87B69 /* CUIBinaryImagesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F442FCEB24AB855C00E87B69 /* CUIBinaryImagesViewController.m */; }; - F442FCF124AB8A8B00E87B69 /* CUIBinaryImage+UI.m in Sources */ = {isa = PBXBuildFile; fileRef = F442FCF024AB8A8B00E87B69 /* CUIBinaryImage+UI.m */; }; + F442FCF124AB8A8B00E87B69 /* CUIBinaryImageUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = F442FCF024AB8A8B00E87B69 /* CUIBinaryImageUtility.m */; }; F44356F324A8A113001D3D35 /* CUICrashLogPresentationOutlineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F44356F124A8A113001D3D35 /* CUICrashLogPresentationOutlineViewController.m */; }; F44356FF24A8A8B5001D3D35 /* CUIThreadNamedTableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = F44356FE24A8A8B5001D3D35 /* CUIThreadNamedTableCellView.m */; }; F44E7B7F255C83D500025C04 /* NoodleLineNumberView.m in Sources */ = {isa = PBXBuildFile; fileRef = F44E7B7C255C83D500025C04 /* NoodleLineNumberView.m */; }; @@ -129,6 +154,7 @@ F46D77AB25ED9EAE00039663 /* CUICollectionViewRegisterItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = F46D77AD25ED9EAE00039663 /* CUICollectionViewRegisterItem.xib */; }; F472CC972550631A003F6338 /* CUISwiftDemangler.m in Sources */ = {isa = PBXBuildFile; fileRef = F472CC962550631A003F6338 /* CUISwiftDemangler.m */; }; F4754D7125F5678700B0D48F /* CUICrashLogPresentationOutlineViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4754D7325F5678700B0D48F /* CUICrashLogPresentationOutlineViewController.xib */; }; + F475FB4026DBAC8200A113D8 /* CUITableViewNoSpace.m in Sources */ = {isa = PBXBuildFile; fileRef = F475FB3F26DBAC8200A113D8 /* CUITableViewNoSpace.m */; }; F476EEBE25686DEF00F40F87 /* CUIAboutBoxFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = F476EEBD25686DEF00F40F87 /* CUIAboutBoxFooterView.m */; }; F476EEC125686EC000F40F87 /* CUIContentBox.m in Sources */ = {isa = PBXBuildFile; fileRef = F476EEBF25686EC000F40F87 /* CUIContentBox.m */; }; F4775479255B0054006BA662 /* CUIThemesTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = F4775478255B0054006BA662 /* CUIThemesTableView.m */; }; @@ -235,10 +261,14 @@ F4CCCC6E24AE9EDA0031BC27 /* CUICrashLogsSource+UI.m in Sources */ = {isa = PBXBuildFile; fileRef = F4CCCC6D24AE9EDA0031BC27 /* CUICrashLogsSource+UI.m */; }; F4CD32B6257D17B3008C71AA /* CUIPreferencePaneSymbolicationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F4CD32B4257D17B3008C71AA /* CUIPreferencePaneSymbolicationViewController.m */; }; F4CE83DE2554B97400A8BD87 /* CUICenteredLabelViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4CE83DD2554B97300A8BD87 /* CUICenteredLabelViewController.xib */; }; + F4D0EE95273DB8CD00CC9737 /* IPSThreadState+RegisterDisplayName.m in Sources */ = {isa = PBXBuildFile; fileRef = F4D0EE93273DB8CC00CC9737 /* IPSThreadState+RegisterDisplayName.m */; }; + F4D14D682745C0A9003698AD /* IPSImage+UserCode.m in Sources */ = {isa = PBXBuildFile; fileRef = F4D14D662745C0A9003698AD /* IPSImage+UserCode.m */; }; F4D5C77C2571AF900029B051 /* CUIRegisterLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = F4D5C77B2571AF900029B051 /* CUIRegisterLabel.m */; }; F4D6C56D2680028A00B78B3D /* RemoteCheck.strings in Resources */ = {isa = PBXBuildFile; fileRef = F4D6C56B2680028A00B78B3D /* RemoteCheck.strings */; }; F4D7F15B25F04A620024E9A5 /* CUISymbolsFilesLibraryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4D7F15D25F04A620024E9A5 /* CUISymbolsFilesLibraryViewController.xib */; }; F4D7F15F25F04A9D0024E9A5 /* CUIPreferencePaneSymbolicationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4D7F16125F04A9D0024E9A5 /* CUIPreferencePaneSymbolicationViewController.xib */; }; + F4DAFBEE2736B7B200FB50A6 /* CUIIPSTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = F4DAFBED2736B7B200FB50A6 /* CUIIPSTransform.m */; }; + F4DAFBF12736B7D500FB50A6 /* CUIDataTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = F4DAFBF02736B7D500FB50A6 /* CUIDataTransform.m */; }; F4E0BD25262078220048647C /* CUIAboutBoxWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E0BD24262078220048647C /* CUIAboutBoxWindow.m */; }; F4E861BA255496310061E203 /* CUIRawCrashLog.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E861B9255496310061E203 /* CUIRawCrashLog.m */; }; F4E91ADD256A98050017C3EE /* CUIFontBoxView.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E91ADC256A98050017C3EE /* CUIFontBoxView.m */; }; @@ -261,8 +291,8 @@ F4F9BAF224EF060E00D08FBD /* CUIInspectorUserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F4F9BAF024EF060E00D08FBD /* CUIInspectorUserViewController.m */; }; F4F9BAF724EF06BC00D08FBD /* CUIInspectorGeneralViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F4F9BAF524EF06BC00D08FBD /* CUIInspectorGeneralViewController.m */; }; F4F9D3362556C7DB00D28E6E /* CUILineJumperWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = F4F9D3342556C7DB00D28E6E /* CUILineJumperWindowController.m */; }; + F4FA4323273EF2F30068EDB8 /* NSString+CPU.m in Sources */ = {isa = PBXBuildFile; fileRef = F4FA4322273EF2F30068EDB8 /* NSString+CPU.m */; }; F4FB9EA62579BAF700692B2A /* CUILineJumperWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4FB9EA52579BAF700692B2A /* CUILineJumperWindowController.xib */; }; - F4FC77A924E1F6AB001F82CA /* CUIRawTextTransformation.m in Sources */ = {isa = PBXBuildFile; fileRef = F4FC77A824E1F6AA001F82CA /* CUIRawTextTransformation.m */; }; F4FE2DEA25615CA800C1774A /* CUICrashLogExceptionInformation+UI.m in Sources */ = {isa = PBXBuildFile; fileRef = F4FE2DE925615CA800C1774A /* CUICrashLogExceptionInformation+UI.m */; }; /* End PBXBuildFile section */ @@ -439,9 +469,60 @@ F423818A267D1D4A003837AC /* CUIPreferencePaneAdvancedViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUIPreferencePaneAdvancedViewController.m; sourceTree = ""; }; F423818F267D3521003837AC /* WBRemoteVersionChecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WBRemoteVersionChecker.h; sourceTree = ""; }; F4238190267D3522003837AC /* WBRemoteVersionChecker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WBRemoteVersionChecker.m; sourceTree = ""; }; + F428C0412724592900FB8CAC /* IPSImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSImage.m; path = ../submodules/ips2crash/Model/IPSImage.m; sourceTree = ""; }; + F428C0422724592900FB8CAC /* IPSIncidentHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSIncidentHeader.m; path = ../submodules/ips2crash/Model/IPSIncidentHeader.m; sourceTree = ""; }; + F428C0432724592900FB8CAC /* IPSIncidentExceptionInformation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSIncidentExceptionInformation.m; path = ../submodules/ips2crash/Model/IPSIncidentExceptionInformation.m; sourceTree = ""; }; + F428C0442724592900FB8CAC /* IPSIncidentDiagnosticMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSIncidentDiagnosticMessage.m; path = ../submodules/ips2crash/Model/IPSIncidentDiagnosticMessage.m; sourceTree = ""; }; + F428C0452724592900FB8CAC /* IPSReport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSReport.m; path = ../submodules/ips2crash/Model/IPSReport.m; sourceTree = ""; }; + F428C0462724592900FB8CAC /* IPSThreadInstructionState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSThreadInstructionState.m; path = ../submodules/ips2crash/Model/IPSThreadInstructionState.m; sourceTree = ""; }; + F428C0472724592900FB8CAC /* IPSThreadInstructionStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSThreadInstructionStream.m; path = ../submodules/ips2crash/Model/IPSThreadInstructionStream.m; sourceTree = ""; }; + F428C0482724592900FB8CAC /* IPSIncident.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSIncident.h; path = ../submodules/ips2crash/Model/IPSIncident.h; sourceTree = ""; }; + F428C0492724592900FB8CAC /* IPSRegisterState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSRegisterState.m; path = ../submodules/ips2crash/Model/IPSRegisterState.m; sourceTree = ""; }; + F428C04A2724592A00FB8CAC /* IPSDateFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSDateFormatter.m; path = ../submodules/ips2crash/Model/IPSDateFormatter.m; sourceTree = ""; }; + F428C04B2724592A00FB8CAC /* IPSApplicationSpecificInformation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSApplicationSpecificInformation.m; path = ../submodules/ips2crash/Model/IPSApplicationSpecificInformation.m; sourceTree = ""; }; + F428C04C2724592A00FB8CAC /* IPSSummary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSSummary.m; path = ../submodules/ips2crash/Model/IPSSummary.m; sourceTree = ""; }; + F428C04D2724592A00FB8CAC /* IPSTermination.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSTermination.m; path = ../submodules/ips2crash/Model/IPSTermination.m; sourceTree = ""; }; + F428C04E2724592A00FB8CAC /* IPSExternalModificationSummary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSExternalModificationSummary.m; path = ../submodules/ips2crash/Model/IPSExternalModificationSummary.m; sourceTree = ""; }; + F428C04F2724592A00FB8CAC /* IPSError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSError.h; path = ../submodules/ips2crash/Model/IPSError.h; sourceTree = ""; }; + F428C0502724592A00FB8CAC /* IPSExternalModificationStatistics.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSExternalModificationStatistics.m; path = ../submodules/ips2crash/Model/IPSExternalModificationStatistics.m; sourceTree = ""; }; + F428C0512724592A00FB8CAC /* IPSReport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSReport.h; path = ../submodules/ips2crash/Model/IPSReport.h; sourceTree = ""; }; + F428C0522724592A00FB8CAC /* IPSTermination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSTermination.h; path = ../submodules/ips2crash/Model/IPSTermination.h; sourceTree = ""; }; + F428C0532724592A00FB8CAC /* IPSBundleInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSBundleInfo.m; path = ../submodules/ips2crash/Model/IPSBundleInfo.m; sourceTree = ""; }; + F428C0542724592A00FB8CAC /* IPSException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSException.m; path = ../submodules/ips2crash/Model/IPSException.m; sourceTree = ""; }; + F428C0552724592A00FB8CAC /* IPSObjectProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSObjectProtocol.h; path = ../submodules/ips2crash/Model/IPSObjectProtocol.h; sourceTree = ""; }; + F428C0562724592A00FB8CAC /* IPSSummary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSSummary.h; path = ../submodules/ips2crash/Model/IPSSummary.h; sourceTree = ""; }; + F428C0572724592A00FB8CAC /* IPSThread.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSThread.m; path = ../submodules/ips2crash/Model/IPSThread.m; sourceTree = ""; }; + F428C0582724592B00FB8CAC /* IPSIncidentExceptionInformation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSIncidentExceptionInformation.h; path = ../submodules/ips2crash/Model/IPSIncidentExceptionInformation.h; sourceTree = ""; }; + F428C0592724592B00FB8CAC /* IPSThreadFrame.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSThreadFrame.m; path = ../submodules/ips2crash/Model/IPSThreadFrame.m; sourceTree = ""; }; + F428C05A2724592B00FB8CAC /* IPSExternalModificationSummary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSExternalModificationSummary.h; path = ../submodules/ips2crash/Model/IPSExternalModificationSummary.h; sourceTree = ""; }; + F428C05B2724592B00FB8CAC /* IPSError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSError.m; path = ../submodules/ips2crash/Model/IPSError.m; sourceTree = ""; }; + F428C05C2724592B00FB8CAC /* IPSDateFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSDateFormatter.h; path = ../submodules/ips2crash/Model/IPSDateFormatter.h; sourceTree = ""; }; + F428C05D2724592B00FB8CAC /* IPSThreadFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSThreadFrame.h; path = ../submodules/ips2crash/Model/IPSThreadFrame.h; sourceTree = ""; }; + F428C05E2724592B00FB8CAC /* IPSOperatingSystemVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSOperatingSystemVersion.m; path = ../submodules/ips2crash/Model/IPSOperatingSystemVersion.m; sourceTree = ""; }; + F428C05F2724592B00FB8CAC /* IPSThreadInstructionState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSThreadInstructionState.h; path = ../submodules/ips2crash/Model/IPSThreadInstructionState.h; sourceTree = ""; }; + F428C0602724592B00FB8CAC /* IPSThreadInstructionStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSThreadInstructionStream.h; path = ../submodules/ips2crash/Model/IPSThreadInstructionStream.h; sourceTree = ""; }; + F428C0612724592B00FB8CAC /* IPSThreadState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSThreadState.h; path = ../submodules/ips2crash/Model/IPSThreadState.h; sourceTree = ""; }; + F428C0622724592B00FB8CAC /* IPSThreadState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSThreadState.m; path = ../submodules/ips2crash/Model/IPSThreadState.m; sourceTree = ""; }; + F428C0632724592B00FB8CAC /* IPSImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSImage.h; path = ../submodules/ips2crash/Model/IPSImage.h; sourceTree = ""; }; + F428C0642724592C00FB8CAC /* IPSExternalModificationStatistics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSExternalModificationStatistics.h; path = ../submodules/ips2crash/Model/IPSExternalModificationStatistics.h; sourceTree = ""; }; + F428C0652724592C00FB8CAC /* IPSApplicationSpecificInformation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSApplicationSpecificInformation.h; path = ../submodules/ips2crash/Model/IPSApplicationSpecificInformation.h; sourceTree = ""; }; + F428C0662724592C00FB8CAC /* IPSLegacyInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSLegacyInfo.h; path = ../submodules/ips2crash/Model/IPSLegacyInfo.h; sourceTree = ""; }; + F428C0672724592C00FB8CAC /* IPSBundleInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSBundleInfo.h; path = ../submodules/ips2crash/Model/IPSBundleInfo.h; sourceTree = ""; }; + F428C0682724592C00FB8CAC /* IPSLegacyInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSLegacyInfo.m; path = ../submodules/ips2crash/Model/IPSLegacyInfo.m; sourceTree = ""; }; + F428C0692724592C00FB8CAC /* IPSThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSThread.h; path = ../submodules/ips2crash/Model/IPSThread.h; sourceTree = ""; }; + F428C06A2724592C00FB8CAC /* IPSIncident.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IPSIncident.m; path = ../submodules/ips2crash/Model/IPSIncident.m; sourceTree = ""; }; + F428C06B2724592C00FB8CAC /* IPSIncidentDiagnosticMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSIncidentDiagnosticMessage.h; path = ../submodules/ips2crash/Model/IPSIncidentDiagnosticMessage.h; sourceTree = ""; }; + F428C06C2724592C00FB8CAC /* IPSRegisterState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSRegisterState.h; path = ../submodules/ips2crash/Model/IPSRegisterState.h; sourceTree = ""; }; + F428C06D2724592C00FB8CAC /* IPSIncidentHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSIncidentHeader.h; path = ../submodules/ips2crash/Model/IPSIncidentHeader.h; sourceTree = ""; }; + F428C06E2724592D00FB8CAC /* IPSOperatingSystemVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSOperatingSystemVersion.h; path = ../submodules/ips2crash/Model/IPSOperatingSystemVersion.h; sourceTree = ""; }; + F428C06F2724592D00FB8CAC /* IPSException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IPSException.h; path = ../submodules/ips2crash/Model/IPSException.h; sourceTree = ""; }; + F428C08827245BD100FB8CAC /* IPSReport+CrashRepresentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "IPSReport+CrashRepresentation.h"; path = "../submodules/ips2crash/tool_ips2crash/ips2crash/IPSReport+CrashRepresentation.h"; sourceTree = ""; }; + F428C08927245BD100FB8CAC /* IPSReport+CrashRepresentation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "IPSReport+CrashRepresentation.m"; path = "../submodules/ips2crash/tool_ips2crash/ips2crash/IPSReport+CrashRepresentation.m"; sourceTree = ""; }; F42B57E024ABEF6E00F77ED5 /* CUICallsSelection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUICallsSelection.h; sourceTree = ""; }; F42B57E124ABEF6E00F77ED5 /* CUICallsSelection.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUICallsSelection.m; sourceTree = ""; }; F42D0BC225514B2E0021A551 /* template.source */ = {isa = PBXFileReference; lastKnownFileType = text; path = template.source; sourceTree = ""; }; + F42E4FFF2724B7550092181A /* CUICrashDataTransform.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUICrashDataTransform.h; sourceTree = ""; }; + F42E50002724B7550092181A /* CUICrashDataTransform.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUICrashDataTransform.m; sourceTree = ""; }; F4301A6925EF0DE000ACDA3F /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/CUIPreferencePanePresentationViewController.xib; sourceTree = ""; }; F4301A6B25EF0DE200ACDA3F /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = fr.lproj/CUIPreferencePanePresentationViewController.xib; sourceTree = ""; }; F4306D572577E168007E667F /* CUICrashLogThreadState+UI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CUICrashLogThreadState+UI.h"; sourceTree = ""; }; @@ -480,8 +561,8 @@ F440A3EB24AA38E600C23DA1 /* CUICrashLogsSourceAll.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUICrashLogsSourceAll.m; sourceTree = ""; }; F442FCEA24AB855C00E87B69 /* CUIBinaryImagesViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUIBinaryImagesViewController.h; sourceTree = ""; }; F442FCEB24AB855C00E87B69 /* CUIBinaryImagesViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUIBinaryImagesViewController.m; sourceTree = ""; }; - F442FCEF24AB8A8B00E87B69 /* CUIBinaryImage+UI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CUIBinaryImage+UI.h"; sourceTree = ""; }; - F442FCF024AB8A8B00E87B69 /* CUIBinaryImage+UI.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "CUIBinaryImage+UI.m"; sourceTree = ""; }; + F442FCEF24AB8A8B00E87B69 /* CUIBinaryImageUtility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUIBinaryImageUtility.h; sourceTree = ""; }; + F442FCF024AB8A8B00E87B69 /* CUIBinaryImageUtility.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUIBinaryImageUtility.m; sourceTree = ""; }; F44356F024A8A113001D3D35 /* CUICrashLogPresentationOutlineViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CUICrashLogPresentationOutlineViewController.h; sourceTree = ""; }; F44356F124A8A113001D3D35 /* CUICrashLogPresentationOutlineViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CUICrashLogPresentationOutlineViewController.m; sourceTree = ""; }; F44356FD24A8A8B5001D3D35 /* CUIThreadNamedTableCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CUIThreadNamedTableCellView.h; sourceTree = ""; }; @@ -582,6 +663,8 @@ F472CC962550631A003F6338 /* CUISwiftDemangler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CUISwiftDemangler.m; path = app_unexpectedly/Demangling/CUISwiftDemangler.m; sourceTree = ""; }; F4754D7225F5678700B0D48F /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/CUICrashLogPresentationOutlineViewController.xib; sourceTree = ""; }; F4754D7425F5678A00B0D48F /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = fr.lproj/CUICrashLogPresentationOutlineViewController.xib; sourceTree = ""; }; + F475FB3E26DBAC8200A113D8 /* CUITableViewNoSpace.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUITableViewNoSpace.h; sourceTree = ""; }; + F475FB3F26DBAC8200A113D8 /* CUITableViewNoSpace.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUITableViewNoSpace.m; sourceTree = ""; }; F476EEBC25686DEF00F40F87 /* CUIAboutBoxFooterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CUIAboutBoxFooterView.h; sourceTree = ""; }; F476EEBD25686DEF00F40F87 /* CUIAboutBoxFooterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CUIAboutBoxFooterView.m; sourceTree = ""; }; F476EEBF25686EC000F40F87 /* CUIContentBox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CUIContentBox.m; sourceTree = ""; }; @@ -789,6 +872,10 @@ F4CD32B3257D17B3008C71AA /* CUIPreferencePaneSymbolicationViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUIPreferencePaneSymbolicationViewController.h; sourceTree = ""; }; F4CD32B4257D17B3008C71AA /* CUIPreferencePaneSymbolicationViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUIPreferencePaneSymbolicationViewController.m; sourceTree = ""; }; F4CE83DD2554B97300A8BD87 /* CUICenteredLabelViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CUICenteredLabelViewController.xib; sourceTree = ""; }; + F4D0EE93273DB8CC00CC9737 /* IPSThreadState+RegisterDisplayName.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "IPSThreadState+RegisterDisplayName.m"; path = "../submodules/ips2crash/tool_ips2crash/ips2crash/IPSThreadState+RegisterDisplayName.m"; sourceTree = ""; }; + F4D0EE94273DB8CC00CC9737 /* IPSThreadState+RegisterDisplayName.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "IPSThreadState+RegisterDisplayName.h"; path = "../submodules/ips2crash/tool_ips2crash/ips2crash/IPSThreadState+RegisterDisplayName.h"; sourceTree = ""; }; + F4D14D662745C0A9003698AD /* IPSImage+UserCode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "IPSImage+UserCode.m"; path = "../submodules/ips2crash/tool_ips2crash/ips2crash/IPSImage+UserCode.m"; sourceTree = ""; }; + F4D14D672745C0A9003698AD /* IPSImage+UserCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "IPSImage+UserCode.h"; path = "../submodules/ips2crash/tool_ips2crash/ips2crash/IPSImage+UserCode.h"; sourceTree = ""; }; F4D5C77A2571AF900029B051 /* CUIRegisterLabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUIRegisterLabel.h; sourceTree = ""; }; F4D5C77B2571AF900029B051 /* CUIRegisterLabel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUIRegisterLabel.m; sourceTree = ""; }; F4D6C56C2680028A00B78B3D /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/RemoteCheck.strings; sourceTree = ""; }; @@ -798,6 +885,10 @@ F4D7F15E25F04A630024E9A5 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = fr.lproj/CUISymbolsFilesLibraryViewController.xib; sourceTree = ""; }; F4D7F16025F04A9D0024E9A5 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/CUIPreferencePaneSymbolicationViewController.xib; sourceTree = ""; }; F4D7F16225F04A9E0024E9A5 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = fr.lproj/CUIPreferencePaneSymbolicationViewController.xib; sourceTree = ""; }; + F4DAFBEC2736B7B200FB50A6 /* CUIIPSTransform.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUIIPSTransform.h; sourceTree = ""; }; + F4DAFBED2736B7B200FB50A6 /* CUIIPSTransform.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUIIPSTransform.m; sourceTree = ""; }; + F4DAFBEF2736B7D500FB50A6 /* CUIDataTransform.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUIDataTransform.h; sourceTree = ""; }; + F4DAFBF02736B7D500FB50A6 /* CUIDataTransform.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUIDataTransform.m; sourceTree = ""; }; F4E0BD23262078220048647C /* CUIAboutBoxWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUIAboutBoxWindow.h; sourceTree = ""; }; F4E0BD24262078220048647C /* CUIAboutBoxWindow.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUIAboutBoxWindow.m; sourceTree = ""; }; F4E1C11124C22CF5000F5C0F /* CUILightTableViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUILightTableViewController.h; sourceTree = ""; }; @@ -851,9 +942,9 @@ F4F9BAF524EF06BC00D08FBD /* CUIInspectorGeneralViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUIInspectorGeneralViewController.m; sourceTree = ""; }; F4F9D3332556C7DB00D28E6E /* CUILineJumperWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUILineJumperWindowController.h; sourceTree = ""; }; F4F9D3342556C7DB00D28E6E /* CUILineJumperWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUILineJumperWindowController.m; sourceTree = ""; }; + F4FA4321273EF2F30068EDB8 /* NSString+CPU.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "NSString+CPU.h"; path = "Foundation + Extensions/NSString+CPU.h"; sourceTree = ""; }; + F4FA4322273EF2F30068EDB8 /* NSString+CPU.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "NSString+CPU.m"; path = "Foundation + Extensions/NSString+CPU.m"; sourceTree = ""; }; F4FB9EA52579BAF700692B2A /* CUILineJumperWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CUILineJumperWindowController.xib; sourceTree = ""; }; - F4FC77A724E1F6AA001F82CA /* CUIRawTextTransformation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUIRawTextTransformation.h; sourceTree = ""; }; - F4FC77A824E1F6AA001F82CA /* CUIRawTextTransformation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUIRawTextTransformation.m; sourceTree = ""; }; F4FE2DE525613B5400C1774A /* CUIKeyViews.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CUIKeyViews.h; sourceTree = ""; }; F4FE2DE825615CA800C1774A /* CUICrashLogExceptionInformation+UI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CUICrashLogExceptionInformation+UI.h"; sourceTree = ""; }; F4FE2DE925615CA800C1774A /* CUICrashLogExceptionInformation+UI.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "CUICrashLogExceptionInformation+UI.m"; sourceTree = ""; }; @@ -942,6 +1033,8 @@ F45F2F5A2538EF3F0030A402 /* NSFileManager+ExtendedAttributes.m */, F464FA1325D2DA2A00E024A3 /* NSSet+WBExtensions.h */, F464FA1425D2DA2A00E024A3 /* NSSet+WBExtensions.m */, + F4FA4321273EF2F30068EDB8 /* NSString+CPU.h */, + F4FA4322273EF2F30068EDB8 /* NSString+CPU.m */, ); name = "Foundation + Extensions"; sourceTree = ""; @@ -994,6 +1087,73 @@ name = Panels; sourceTree = ""; }; + F428C0402724591300FB8CAC /* ips model */ = { + isa = PBXGroup; + children = ( + F428C0652724592C00FB8CAC /* IPSApplicationSpecificInformation.h */, + F428C04B2724592A00FB8CAC /* IPSApplicationSpecificInformation.m */, + F428C0672724592C00FB8CAC /* IPSBundleInfo.h */, + F428C0532724592A00FB8CAC /* IPSBundleInfo.m */, + F428C05C2724592B00FB8CAC /* IPSDateFormatter.h */, + F428C04A2724592A00FB8CAC /* IPSDateFormatter.m */, + F428C04F2724592A00FB8CAC /* IPSError.h */, + F428C05B2724592B00FB8CAC /* IPSError.m */, + F428C06F2724592D00FB8CAC /* IPSException.h */, + F428C0542724592A00FB8CAC /* IPSException.m */, + F428C0642724592C00FB8CAC /* IPSExternalModificationStatistics.h */, + F428C0502724592A00FB8CAC /* IPSExternalModificationStatistics.m */, + F428C05A2724592B00FB8CAC /* IPSExternalModificationSummary.h */, + F428C04E2724592A00FB8CAC /* IPSExternalModificationSummary.m */, + F428C0632724592B00FB8CAC /* IPSImage.h */, + F428C0412724592900FB8CAC /* IPSImage.m */, + F428C0482724592900FB8CAC /* IPSIncident.h */, + F428C06A2724592C00FB8CAC /* IPSIncident.m */, + F428C06B2724592C00FB8CAC /* IPSIncidentDiagnosticMessage.h */, + F428C0442724592900FB8CAC /* IPSIncidentDiagnosticMessage.m */, + F428C0582724592B00FB8CAC /* IPSIncidentExceptionInformation.h */, + F428C0432724592900FB8CAC /* IPSIncidentExceptionInformation.m */, + F428C06D2724592C00FB8CAC /* IPSIncidentHeader.h */, + F428C0422724592900FB8CAC /* IPSIncidentHeader.m */, + F428C0662724592C00FB8CAC /* IPSLegacyInfo.h */, + F428C0682724592C00FB8CAC /* IPSLegacyInfo.m */, + F428C0552724592A00FB8CAC /* IPSObjectProtocol.h */, + F428C06E2724592D00FB8CAC /* IPSOperatingSystemVersion.h */, + F428C05E2724592B00FB8CAC /* IPSOperatingSystemVersion.m */, + F428C06C2724592C00FB8CAC /* IPSRegisterState.h */, + F428C0492724592900FB8CAC /* IPSRegisterState.m */, + F428C0512724592A00FB8CAC /* IPSReport.h */, + F428C0452724592900FB8CAC /* IPSReport.m */, + F428C0562724592A00FB8CAC /* IPSSummary.h */, + F428C04C2724592A00FB8CAC /* IPSSummary.m */, + F428C0522724592A00FB8CAC /* IPSTermination.h */, + F428C04D2724592A00FB8CAC /* IPSTermination.m */, + F428C0692724592C00FB8CAC /* IPSThread.h */, + F428C0572724592A00FB8CAC /* IPSThread.m */, + F428C05D2724592B00FB8CAC /* IPSThreadFrame.h */, + F428C0592724592B00FB8CAC /* IPSThreadFrame.m */, + F428C05F2724592B00FB8CAC /* IPSThreadInstructionState.h */, + F428C0462724592900FB8CAC /* IPSThreadInstructionState.m */, + F428C0602724592B00FB8CAC /* IPSThreadInstructionStream.h */, + F428C0472724592900FB8CAC /* IPSThreadInstructionStream.m */, + F428C0612724592B00FB8CAC /* IPSThreadState.h */, + F428C0622724592B00FB8CAC /* IPSThreadState.m */, + ); + name = "ips model"; + sourceTree = ""; + }; + F428C08727245BBF00FB8CAC /* ips model + Extensions */ = { + isa = PBXGroup; + children = ( + F4D0EE94273DB8CC00CC9737 /* IPSThreadState+RegisterDisplayName.h */, + F4D0EE93273DB8CC00CC9737 /* IPSThreadState+RegisterDisplayName.m */, + F4D14D672745C0A9003698AD /* IPSImage+UserCode.h */, + F4D14D662745C0A9003698AD /* IPSImage+UserCode.m */, + F428C08827245BD100FB8CAC /* IPSReport+CrashRepresentation.h */, + F428C08927245BD100FB8CAC /* IPSReport+CrashRepresentation.m */, + ); + name = "ips model + Extensions"; + sourceTree = ""; + }; F4341C68258EB8B8001A5605 /* CrashReporterPreferences */ = { isa = PBXGroup; children = ( @@ -1095,8 +1255,6 @@ F464F20F24ACFBA1007A3A96 /* CUIRegister.m */, F4BBAC5B24AA7D37000511BE /* CUIBinaryImage.h */, F4BBAC5C24AA7D37000511BE /* CUIBinaryImage.m */, - F442FCEF24AB8A8B00E87B69 /* CUIBinaryImage+UI.h */, - F442FCF024AB8A8B00E87B69 /* CUIBinaryImage+UI.m */, F4ED75882501A29700316E73 /* CUIStackFrame.h */, F4ED75892501A29700316E73 /* CUIStackFrame.m */, F4CC573124A7ABAF00150EC4 /* CUICallStackBacktrace.h */, @@ -1451,6 +1609,8 @@ F45F84D3266ABB5800F354F3 /* crashreport.xcodeproj */, F43BA4E425F2674100D8D68A /* SharedConfigurationSettings.xcconfig */, F43C828D24D8AD850096F27B /* CUIStackFrameComponents.h */, + F428C0402724591300FB8CAC /* ips model */, + F428C08727245BBF00FB8CAC /* ips model + Extensions */, F4B9AD23253199EE0083FA6C /* Mach-o */, F405A96A255015B500AD2F24 /* Demangling */, F4871DF125435AE500580562 /* DWARF */, @@ -1499,6 +1659,8 @@ F420F35124E95E5F006C82CD /* CUITheme.m */, F49C47C824E9B48B003FC65C /* CUIThemesManager.h */, F49C47C924E9B48B003FC65C /* CUIThemesManager.m */, + F442FCEF24AB8A8B00E87B69 /* CUIBinaryImageUtility.h */, + F442FCF024AB8A8B00E87B69 /* CUIBinaryImageUtility.m */, F496740C24D0D74A00716289 /* CUIApplicationPreferences.h */, F496740D24D0D74A00716289 /* CUIApplicationPreferences.m */, F483845424EB1BEB00FAEF5D /* CUIApplicationPreferences+Themes.h */, @@ -1602,6 +1764,8 @@ children = ( F49A6D7C25474F6E00466D15 /* CUIInactiveButton.h */, F49A6D7D25474F6E00466D15 /* CUIInactiveButton.m */, + F475FB3E26DBAC8200A113D8 /* CUITableViewNoSpace.h */, + F475FB3F26DBAC8200A113D8 /* CUITableViewNoSpace.m */, ); name = Views; sourceTree = ""; @@ -1627,8 +1791,12 @@ isa = PBXGroup; children = ( F4BC576E24DF423C00063545 /* Views */, - F4FC77A724E1F6AA001F82CA /* CUIRawTextTransformation.h */, - F4FC77A824E1F6AA001F82CA /* CUIRawTextTransformation.m */, + F4DAFBEF2736B7D500FB50A6 /* CUIDataTransform.h */, + F4DAFBF02736B7D500FB50A6 /* CUIDataTransform.m */, + F42E4FFF2724B7550092181A /* CUICrashDataTransform.h */, + F42E50002724B7550092181A /* CUICrashDataTransform.m */, + F4DAFBEC2736B7B200FB50A6 /* CUIIPSTransform.h */, + F4DAFBED2736B7B200FB50A6 /* CUIIPSTransform.m */, F4F9D3332556C7DB00D28E6E /* CUILineJumperWindowController.h */, F4F9D3342556C7DB00D28E6E /* CUILineJumperWindowController.m */, F4FB9EA52579BAF700692B2A /* CUILineJumperWindowController.xib */, @@ -1944,19 +2112,20 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + F428C07F2724592D00FB8CAC /* IPSException.m in Sources */, F483845924EB26DF00FAEF5D /* CUIThemeItemsGroup+UI.m in Sources */, + F4D14D682745C0A9003698AD /* IPSImage+UserCode.m in Sources */, F4871E0625435AF400580562 /* DWRFSection_debug_abbrev.m in Sources */, F43C828824D892620096F27B /* CUIPreferencePanePresentationTextViewController.m in Sources */, F40B0D9724D3572E00663282 /* NSColor+String.m in Sources */, F44E7B80255C83D500025C04 /* NoodleLineNumberMarker.m in Sources */, - F442FCF124AB8A8B00E87B69 /* CUIBinaryImage+UI.m in Sources */, + F442FCF124AB8A8B00E87B69 /* CUIBinaryImageUtility.m in Sources */, F4651F8624B297420090DF10 /* CUIOperatingSystemVersion.m in Sources */, F48944222545836F00E3E360 /* CUISymbolsFilesLibraryViewController.m in Sources */, F4B9AD3325319A410083FA6C /* MCHSegment.m in Sources */, F43362FE25FCEFBA006E7894 /* CUIRawCrashLog+Path.m in Sources */, F4FE2DEA25615CA800C1774A /* CUICrashLogExceptionInformation+UI.m in Sources */, F405A96D255015D800AD2F24 /* CUICXXDemangler.mm in Sources */, - F4FC77A924E1F6AB001F82CA /* CUIRawTextTransformation.m in Sources */, F497AD5524B8FE88008517B7 /* CUICrashLogsSourceSmartEditorPanel.m in Sources */, F4A0BEF8261BC39700BADEED /* CUIWatchScrew.m in Sources */, F416686F24B0AEE800C2AB89 /* CUIContentsViewController.m in Sources */, @@ -1964,14 +2133,19 @@ F4B9AD3825319A410083FA6C /* MCHMachBinary.m in Sources */, F4AA22B72561A233001A1315 /* CUIAboutBoxWindowController.m in Sources */, F40ACE30255697CE006855E5 /* CUICrashLogBrowsingStateRegistry.m in Sources */, + F428C0792724592D00FB8CAC /* IPSApplicationSpecificInformation.m in Sources */, + F4D0EE95273DB8CD00CC9737 /* IPSThreadState+RegisterDisplayName.m in Sources */, F49C47CA24E9B48B003FC65C /* CUIThemesManager.m in Sources */, F416688224B0BBFC00C2AB89 /* CUICrashLogPresentationViewController.m in Sources */, + F428C0802724592D00FB8CAC /* IPSThread.m in Sources */, + F428C08A27245BD100FB8CAC /* IPSReport+CrashRepresentation.m in Sources */, F4A0BEF4261BC39700BADEED /* CUIWatchAxis.m in Sources */, F4EFE75224BA48F500DB97AC /* CUIMainWindow.m in Sources */, F43C828C24D8A39B0096F27B /* CUITextModeDisplaySettings.m in Sources */, F414D08E24BFB57700A7095C /* CUICrashLogDianosticMessages.m in Sources */, F4871E0325435AF400580562 /* DWRFSection_debug_info.m in Sources */, F4CC573024A7A95A00150EC4 /* CUIThread.m in Sources */, + F428C0732724592D00FB8CAC /* IPSIncidentDiagnosticMessage.m in Sources */, F4BD6A0025553E9000F98F3E /* CUICrashLogSectionsDetector.m in Sources */, F4F8D26924F29624007661D6 /* CUIPresentationTextNavigationViewController.m in Sources */, F469AB2524B3DDEA0053C824 /* CUICrashLogExceptionInformation.m in Sources */, @@ -1979,8 +2153,10 @@ F4F5395924D21DB800D537BC /* CUIPreferencePaneGeneralViewController.m in Sources */, F4B9AD3425319A410083FA6C /* MCHObjectFile.m in Sources */, F4B649D324EDCD2300008C47 /* CUIInspectorExecutableViewController.m in Sources */, + F428C0812724592D00FB8CAC /* IPSThreadFrame.m in Sources */, F476EEC125686EC000F40F87 /* CUIContentBox.m in Sources */, F4CC572724A7A2B200150EC4 /* CUICrashLog.m in Sources */, + F4FA4323273EF2F30068EDB8 /* NSString+CPU.m in Sources */, F476EEBE25686DEF00F40F87 /* CUIAboutBoxFooterView.m in Sources */, F420C9C4254F5F4C00D24249 /* CUIdSYMHunter.m in Sources */, F4A0BEF1261BC39700BADEED /* CUIWatchGear.m in Sources */, @@ -1988,8 +2164,10 @@ F4B9AD3B25319D7C0083FA6C /* MCHSegmentLoadCommand.m in Sources */, F4F5821C256FC7B90032FC53 /* DWRFSection_debug_str_offsets.m in Sources */, F4559F3724AF232800B8EF41 /* CUICrashLogHeader.m in Sources */, + F428C0762724592D00FB8CAC /* IPSThreadInstructionStream.m in Sources */, F4545C3C256C1AF900F62A39 /* CUIRegistersWindowController.m in Sources */, F4A0BEF6261BC39700BADEED /* CUIWatchPart.m in Sources */, + F428C07C2724592D00FB8CAC /* IPSExternalModificationSummary.m in Sources */, F4B649D724EDD09A00008C47 /* CUIInspectorStackableViewController.m in Sources */, F4CC572D24A7A5F000150EC4 /* CUICrashLog+Transform.m in Sources */, F4627F1225704557007E5CD0 /* CUICollectionViewRegisterItem.m in Sources */, @@ -2001,10 +2179,15 @@ F41ECA5324AB689B00CE56C7 /* CUIInspectorViewController.m in Sources */, F440A3E624AA31B500C23DA1 /* CUICrashLogsSourceFile.m in Sources */, F472CC972550631A003F6338 /* CUISwiftDemangler.m in Sources */, + F428C07A2724592D00FB8CAC /* IPSSummary.m in Sources */, + F428C0782724592D00FB8CAC /* IPSDateFormatter.m in Sources */, F4040A7924F5BC230072BF65 /* CUINavigationView.m in Sources */, F4B018372620FEC7009727F1 /* CUIApplicationIconView.m in Sources */, F4BC577124DF426200063545 /* CUIAATextFieldCell.m in Sources */, F47F76652673548600A74905 /* CUICrashLogsOpenErrorRecord.m in Sources */, + F428C07E2724592D00FB8CAC /* IPSBundleInfo.m in Sources */, + F428C07D2724592D00FB8CAC /* IPSExternalModificationStatistics.m in Sources */, + F428C0752724592D00FB8CAC /* IPSThreadInstructionState.m in Sources */, F40B0D8824D3569800663282 /* NSResponder+Appearance.m in Sources */, F43A9A832591260C005AB2AA /* CUIOutlineModeDisplaySettings.m in Sources */, F4AC864A2558A03B004F2637 /* CUIExportAccessoryViewController.m in Sources */, @@ -2018,6 +2201,7 @@ F4871E0925435AF400580562 /* DWRFObject.m in Sources */, F4214CB524B6534400852DDE /* CUICrashLogsSourcesManager.m in Sources */, F4871E0D25437A6A00580562 /* CUISymbolicationDataCache.m in Sources */, + F428C07B2724592D00FB8CAC /* IPSTermination.m in Sources */, F440A3E924AA35AC00C23DA1 /* CUICrashLogsSourceDirectory.m in Sources */, F414D09124BFBC3A00A7095C /* CUICrashLogBacktraces.m in Sources */, F4A0BEF7261BC39700BADEED /* CUIWatchBridge.m in Sources */, @@ -2026,6 +2210,7 @@ F4871E0525435AF400580562 /* DWRFSection_debug_line.m in Sources */, F40BEAF124E9F754007A3F60 /* CUIThemeItemAttributes.m in Sources */, F4B138572522948700D9DE2F /* NSBundle+dSYM.m in Sources */, + F428C0742724592D00FB8CAC /* IPSReport.m in Sources */, F49A6D8125476F7B00466D15 /* CUISymbolicationDataFormatter.m in Sources */, F416687E24B0BBA300C2AB89 /* CUICrashLogPresentationTextViewController.m in Sources */, F4EBADB724A8F10000DF4271 /* CUICrashLogTableCellView.m in Sources */, @@ -2039,8 +2224,11 @@ F4B9AD3625319A410083FA6C /* MCHLoadCommand.m in Sources */, F480692E24AF7D83009665F2 /* CUICrashLogsListViewController.m in Sources */, F4ED18A324EC77A300ED7EF2 /* NSArray+UniqueName.m in Sources */, + F42E50012724B7550092181A /* CUICrashDataTransform.m in Sources */, + F428C0822724592D00FB8CAC /* IPSError.m in Sources */, F4E0BD25262078220048647C /* CUIAboutBoxWindow.m in Sources */, F4C269CD2503BCC100C8F3B3 /* CUISymbolicationManager.m in Sources */, + F4DAFBEE2736B7B200FB50A6 /* CUIIPSTransform.m in Sources */, F47F76622673542600A74905 /* CUICrashLogsOpenErrorRecord+UI.m in Sources */, F462DD3124ADC5F900044AB1 /* CUICrashLogsSourceSmart.m in Sources */, F483845624EB1BEB00FAEF5D /* CUIApplicationPreferences+Themes.m in Sources */, @@ -2052,10 +2240,12 @@ F4238191267D3522003837AC /* WBRemoteVersionChecker.m in Sources */, F48BAB3625D9D4140005F3E5 /* CUIThreadImageCell.m in Sources */, F416687924B0BA5000C2AB89 /* CUICrashLogContentsViewController.m in Sources */, + F428C0842724592D00FB8CAC /* IPSThreadState.m in Sources */, F49673FE24D0CF6400716289 /* CUIPreferencesWindowController.m in Sources */, F4040A7624F5B9CE0072BF65 /* CUINavigationChevronView.m in Sources */, F4EAFA2C24FA6CD100C0B729 /* CUICrashLogTextView.m in Sources */, F4341C6B258EB8FE001A5605 /* CUICrashReporterDefaults.m in Sources */, + F428C0722724592D00FB8CAC /* IPSIncidentExceptionInformation.m in Sources */, F496740E24D0D74A00716289 /* CUIApplicationPreferences.m in Sources */, F40B0D9D24D370A200663282 /* NSDictionary+MutableDeepCopy.m in Sources */, F40B0D9424D3571B00663282 /* NSTableView+Selection.m in Sources */, @@ -2068,6 +2258,8 @@ F4871E0725435AF400580562 /* DWRFFileObject.m in Sources */, F4871E10254384E100580562 /* CUIdSYMBundlesManager.m in Sources */, F4B74C1924B233C900CD1E60 /* CUIRightViewController.m in Sources */, + F428C0712724592D00FB8CAC /* IPSIncidentHeader.m in Sources */, + F428C0772724592D00FB8CAC /* IPSRegisterState.m in Sources */, F4CD32B6257D17B3008C71AA /* CUIPreferencePaneSymbolicationViewController.m in Sources */, F41D66B025921F3400C0D491 /* CUIPreferencePanePresentationViewController.m in Sources */, F49A55DE24C7A7F900D249DE /* CUICallTableCellView.m in Sources */, @@ -2075,6 +2267,7 @@ F40B0D9124D356F900663282 /* NSToolbar+Packages.m in Sources */, F46198E924CA390700FA9717 /* CUICrashLogBacktraces+Utilities.m in Sources */, F49227C824A8D45000772411 /* CUIStackFrame+UI.m in Sources */, + F428C0832724592D00FB8CAC /* IPSOperatingSystemVersion.m in Sources */, F432ACD024A95042000A3E7A /* CUIThreadsColumnViewController.m in Sources */, F416688624B0BF2000C2AB89 /* CUISidebarViewController.m in Sources */, F4B57C0C24AF5607000851FF /* CUICrashLogsSourceToday.m in Sources */, @@ -2099,11 +2292,13 @@ F4CCCC6524AE810E0031BC27 /* CUICrashLogsSourcesSelection.m in Sources */, F432ACCC24A9502A000A3E7A /* CUIThreadsViewController.m in Sources */, F40B0D8E24D356A200663282 /* NSIndexSet+Analysis.m in Sources */, + F4DAFBF12736B7D500FB50A6 /* CUIDataTransform.m in Sources */, F4B9AD3225319A410083FA6C /* MCHMemoryBufferWrapper.m in Sources */, F40B0D8024D3558800663282 /* CUIPreferencesTabButton.m in Sources */, F464F21024ACFBA1007A3A96 /* CUIRegister.m in Sources */, F4EBADB424A8F04F00DF4271 /* CUICrashLog+UI.m in Sources */, F46198EE24CA459700FA9717 /* CUIInspectorAlternateBackgroundView.m in Sources */, + F475FB4026DBAC8200A113D8 /* CUITableViewNoSpace.m in Sources */, F47F7668267355EA00A74905 /* CUICrashLogErrors.m in Sources */, F4F9BAF224EF060E00D08FBD /* CUIInspectorUserViewController.m in Sources */, F4CC570824A79EDA00150EC4 /* main.m in Sources */, @@ -2124,6 +2319,7 @@ F4B52E212548B8B4007593FD /* CUIdSYMBundle+UI.m in Sources */, F496740324D0D05800716289 /* CUIPreferencePaneViewController.m in Sources */, F4ED758A2501A29700316E73 /* CUIStackFrame.m in Sources */, + F428C0702724592D00FB8CAC /* IPSImage.m in Sources */, F4871DC02543566E00580562 /* CUIdSYMBundle.m in Sources */, F4A7696A2555D9DE00F9D9D3 /* CUIRawCrashLog+UI.m in Sources */, F4871E0425435AF400580562 /* DWRFSection_debug_str.m in Sources */, @@ -2132,12 +2328,14 @@ F40B77DA24AF1426001A8131 /* CUICrashLogsSourceAll+UI.m in Sources */, F4A0BEF2261BC39700BADEED /* CUIWatchJewel.m in Sources */, F46BAF59250162C900991970 /* CUIPreferencesWindow.m in Sources */, + F428C0862724592D00FB8CAC /* IPSIncident.m in Sources */, F4871E0A25435AF400580562 /* DWRFSection_debug_aranges.m in Sources */, F40BEAFC24E9FEF8007A3F60 /* NSDictionary+WBExtensions.m in Sources */, F423818C267D1D4A003837AC /* CUIPreferencePaneAdvancedViewController.m in Sources */, F497303A25F796E6001D01FE /* CUIHopperDisassemblerManager.m in Sources */, F4CC570624A79EDA00150EC4 /* AppDelegate.m in Sources */, F4CC572424A7A1D100150EC4 /* CUICrashLogsProvider.m in Sources */, + F428C0852724592D00FB8CAC /* IPSLegacyInfo.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2658,7 +2856,7 @@ CLANG_WARN_BOOL_CONVERSION = YES_ERROR; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 57; + CURRENT_PROJECT_VERSION = 59; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -2679,7 +2877,7 @@ CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 57; + CURRENT_PROJECT_VERSION = 59; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = app_unexpectedly/app_unexpectedly_Prefix.pch; diff --git a/app_unexpectedly/app_unexpectedly/CUIBinaryImage.h b/app_unexpectedly/app_unexpectedly/CUIBinaryImage.h index 274b9fd..6302983 100644 --- a/app_unexpectedly/app_unexpectedly/CUIBinaryImage.h +++ b/app_unexpectedly/app_unexpectedly/CUIBinaryImage.h @@ -13,6 +13,8 @@ #import +#import "IPSImage.h" + @interface CUIAddressesRange : NSObject @property NSUInteger loadAddress; @@ -52,4 +54,6 @@ - (instancetype)initWithString:(NSString *)inString reportVersion:(NSUInteger)inReportVersion error:(NSError **)outError; +- (instancetype)initWithImage:(IPSImage *)inImage error:(NSError **)outError; + @end diff --git a/app_unexpectedly/app_unexpectedly/CUIBinaryImage.m b/app_unexpectedly/app_unexpectedly/CUIBinaryImage.m index 3c09114..f89d041 100644 --- a/app_unexpectedly/app_unexpectedly/CUIBinaryImage.m +++ b/app_unexpectedly/app_unexpectedly/CUIBinaryImage.m @@ -13,6 +13,10 @@ #import "CUIBinaryImage.h" +#import "NSString+CPU.h" + +#import "IPSImage+UserCode.h" + @interface CUIAddressesRange () + (CUIAddressesRange *)addressesRangeWithLocation:(NSUInteger)inLocation length:(NSUInteger)inLength; @@ -243,6 +247,42 @@ - (instancetype)initWithString:(NSString *)inString reportVersion:(NSUInteger)in return self; } +- (instancetype)initWithImage:(IPSImage *)inImage error:(NSError **)outError +{ + if ([inImage isKindOfClass:[IPSImage class]]==NO) + { + if (outError!=NULL) + *outError=[NSError errorWithDomain:NSPOSIXErrorDomain code:EINVAL userInfo:@{}]; + + return nil; + } + + self=[super init]; + + if (self!=nil) + { + _userCode=inImage.isUserCode; + + _identifier=[((inImage.bundleIdentifier!=nil) ? inImage.bundleIdentifier : inImage.name) copy]; + + _architecture=[inImage.architecture CUI_CPUType]; + + _version=[inImage.bundleShortVersionString copy]; + + _buildNumber=[inImage.bundleVersion copy]; + + _UUID=[inImage.UUID.UUIDString copy]; + + _path=[inImage.path copy]; + + _addressesRange=[CUIAddressesRange new]; + _addressesRange.loadAddress=inImage.loadAddress; + _addressesRange.length=inImage.size; + } + + return self; +} + #pragma mark - - (NSUInteger)binaryImageOffset diff --git a/app_unexpectedly/app_unexpectedly/CUIBinaryImage+UI.h b/app_unexpectedly/app_unexpectedly/CUIBinaryImageUtility.h similarity index 97% rename from app_unexpectedly/app_unexpectedly/CUIBinaryImage+UI.h rename to app_unexpectedly/app_unexpectedly/CUIBinaryImageUtility.h index 097d603..737d673 100644 --- a/app_unexpectedly/app_unexpectedly/CUIBinaryImage+UI.h +++ b/app_unexpectedly/app_unexpectedly/CUIBinaryImageUtility.h @@ -11,8 +11,6 @@ Redistribution and use in source and binary forms, with or without modification, THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#import "CUIBinaryImage.h" - #import extern NSString * const CUIBinaryImageGroupAppKitUIKit; @@ -29,7 +27,7 @@ extern NSString * const CUIBinaryImageGroupSystem; extern NSString * const CUIBinaryImageGroupUserCode; extern NSString * const CUIBinaryImageGroupWebInternet; -@interface CUIBinaryImage (UI) +@interface CUIBinaryImageUtility : NSObject + (NSString *)binaryImageGroupForIdentifier:(NSString *)inIdentifier; diff --git a/app_unexpectedly/app_unexpectedly/CUIBinaryImage+UI.m b/app_unexpectedly/app_unexpectedly/CUIBinaryImageUtility.m similarity index 97% rename from app_unexpectedly/app_unexpectedly/CUIBinaryImage+UI.m rename to app_unexpectedly/app_unexpectedly/CUIBinaryImageUtility.m index 0b75966..8aa0bf9 100644 --- a/app_unexpectedly/app_unexpectedly/CUIBinaryImage+UI.m +++ b/app_unexpectedly/app_unexpectedly/CUIBinaryImageUtility.m @@ -11,7 +11,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#import "CUIBinaryImage+UI.h" +#import "CUIBinaryImageUtility.h" NSString * const CUIBinaryImageGroupAppKitUIKit=@"AppKit/UIKit"; NSString * const CUIBinaryImageGroupAudioSpeech=@"Audio/Speech"; @@ -28,7 +28,7 @@ NSString * const CUIBinaryImageGroupWebInternet=@"Web/Internet"; -@implementation CUIBinaryImage (UI) +@implementation CUIBinaryImageUtility + (NSString *)binaryImageGroupForIdentifier:(NSString *)inIdentifier { @@ -273,9 +273,9 @@ + (NSColor *)colorForBinaryImageGroup:(NSString *)inBinaryImageGroup + (NSImage *)iconForIdentifier:(NSString *)inIdentifier { - NSString * tBinaryImageGroup=[CUIBinaryImage binaryImageGroupForIdentifier:inIdentifier]; + NSString * tBinaryImageGroup=[CUIBinaryImageUtility binaryImageGroupForIdentifier:inIdentifier]; - return [CUIBinaryImage iconForBinaryImageGroup:tBinaryImageGroup]; + return [CUIBinaryImageUtility iconForBinaryImageGroup:tBinaryImageGroup]; } + (NSImage *)iconForPath:(NSString *)inPath @@ -298,9 +298,9 @@ + (NSColor *)colorForUserCode + (NSColor *)colorForIdentifier:(NSString *)inIdentifier { - NSString * tBinaryImageGroup=[CUIBinaryImage binaryImageGroupForIdentifier:inIdentifier]; + NSString * tBinaryImageGroup=[CUIBinaryImageUtility binaryImageGroupForIdentifier:inIdentifier]; - return [CUIBinaryImage colorForBinaryImageGroup:tBinaryImageGroup]; + return [CUIBinaryImageUtility colorForBinaryImageGroup:tBinaryImageGroup]; } @end diff --git a/app_unexpectedly/app_unexpectedly/CUIBinaryImagesViewController.m b/app_unexpectedly/app_unexpectedly/CUIBinaryImagesViewController.m index d28942b..830d53a 100644 --- a/app_unexpectedly/app_unexpectedly/CUIBinaryImagesViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUIBinaryImagesViewController.m @@ -15,7 +15,7 @@ #import "CUIBinaryImage.h" -#import "CUIBinaryImage+UI.h" +#import "CUIBinaryImageUtility.h" #import "CUICallsSelection.h" @@ -304,26 +304,16 @@ - (NSView *)tableView:(NSTableView *)inTableView viewForTableColumn:(NSTableColu tTableCellView.textField.stringValue=tBinaryImage.identifier; if (tBinaryImage.isUserCode==YES) - { tTableCellView.imageView.image=[NSImage imageNamed:@"call-usercode"]; - } else - { - tTableCellView.imageView.image=[CUIBinaryImage iconForIdentifier:tBinaryImage.identifier]; - } - - + tTableCellView.imageView.image=[CUIBinaryImageUtility iconForIdentifier:tBinaryImage.identifier]; } else if ([tTableColumnIdentifier isEqualToString:@"version"]==YES) { if (tBinaryImage.buildNumber==nil) - { - tTableCellView.textField.stringValue=tBinaryImage.version; - } + tTableCellView.textField.stringValue=(tBinaryImage.version!=nil) ? tBinaryImage.version : @"-"; else - { tTableCellView.textField.stringValue=[NSString stringWithFormat:@"%@ (%@)",tBinaryImage.version,tBinaryImage.buildNumber]; - } } else if ([tTableColumnIdentifier isEqualToString:@"addresses"]==YES) { diff --git a/app_unexpectedly/app_unexpectedly/CUICallStackBacktrace.h b/app_unexpectedly/app_unexpectedly/CUICallStackBacktrace.h index a84f4e6..5a25d55 100644 --- a/app_unexpectedly/app_unexpectedly/CUICallStackBacktrace.h +++ b/app_unexpectedly/app_unexpectedly/CUICallStackBacktrace.h @@ -15,10 +15,15 @@ #import "CUIStackFrame.h" +#import "IPSThreadFrame.h" +#import "IPSImage.h" + @interface CUICallStackBacktrace : NSObject @property (readonly) NSArray * stackFrames; - (instancetype)initWithTextualRepresentation:(NSArray *)inLines error:(NSError **)outError; +- (instancetype)initWithFrames:(NSArray *)inFrames binaryImages:(NSArray *)inImages error:(NSError **)outError; + @end diff --git a/app_unexpectedly/app_unexpectedly/CUICallStackBacktrace.m b/app_unexpectedly/app_unexpectedly/CUICallStackBacktrace.m index 2c90893..ceb5c84 100644 --- a/app_unexpectedly/app_unexpectedly/CUICallStackBacktrace.m +++ b/app_unexpectedly/app_unexpectedly/CUICallStackBacktrace.m @@ -65,6 +65,40 @@ - (instancetype)initWithTextualRepresentation:(NSArray *)inLines error:(NSError return self; } +- (instancetype)initWithFrames:(NSArray *)inFrames binaryImages:(NSArray *)inImages error:(NSError **)outError +{ + if ([inFrames isKindOfClass:[NSArray class]]==NO) + { + if (outError!=NULL) + *outError=[NSError errorWithDomain:NSPOSIXErrorDomain code:EINVAL userInfo:@{}]; + + return nil; + } + + self=[super init]; + + if (self!=nil) + { + _stackFrames=[inFrames WB_arrayByMappingObjectsUsingBlock:^CUIStackFrame *(IPSThreadFrame * bFrame, NSUInteger bIndex) { + + CUIStackFrame * tStackFrame=[[CUIStackFrame alloc] initWithThreadFrame:bFrame + atIndex:bIndex + image:inImages[bFrame.imageIndex] + error:NULL]; + + if (tStackFrame==nil) + { + return nil; + } + + return tStackFrame; + + }]; + } + + return self; +} + #pragma mark - - (NSString *)description diff --git a/app_unexpectedly/app_unexpectedly/CUICollectionViewRegisterItem.m b/app_unexpectedly/app_unexpectedly/CUICollectionViewRegisterItem.m index 2c495f3..ede4008 100644 --- a/app_unexpectedly/app_unexpectedly/CUICollectionViewRegisterItem.m +++ b/app_unexpectedly/app_unexpectedly/CUICollectionViewRegisterItem.m @@ -17,6 +17,8 @@ #import "CUIRegisterLabel.h" +#define MACOS_BIGSUR_WIDTH_INSET 3.0 + NSString * const CUIRegisterItemViewAsValueDidChangeNotification=@"CUIRegisterItemViewAsValueDidChangeNotification"; @interface CUICollectionViewRegisterItem () @@ -24,6 +26,8 @@ @interface CUICollectionViewRegisterItem () IBOutlet NSTextField * _registerNameLabel; IBOutlet CUIRegisterLabel * _registerValueLabel; + + IBOutlet NSPopUpButton* _registerValueDisplayFormatPopUpButton; } @end @@ -32,6 +36,18 @@ @implementation CUICollectionViewRegisterItem - (void)viewDidLoad { [super viewDidLoad]; + + if (NSAppKitVersionNumber>0/*2022.00*/) // A VERIFIER + { + // Deal with macOS Big Sur different UI metrics + + NSRect tFrame=_registerValueDisplayFormatPopUpButton.frame; + + tFrame.origin.x+=MACOS_BIGSUR_WIDTH_INSET; + tFrame.size.width-=MACOS_BIGSUR_WIDTH_INSET; + + _registerValueDisplayFormatPopUpButton.frame=tFrame; + } } #pragma mark - diff --git a/app_unexpectedly/app_unexpectedly/CUIContentsViewController.m b/app_unexpectedly/app_unexpectedly/CUIContentsViewController.m index c8e08f6..eac76fb 100644 --- a/app_unexpectedly/app_unexpectedly/CUIContentsViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUIContentsViewController.m @@ -172,11 +172,13 @@ - (void)setSelection:(CUICrashLogsSelection *)inSelection } if (_currentController!=tNewController) + { [_currentController.view removeFromSuperview]; - tNewController.view.frame=_contentsView.bounds; + tNewController.view.frame=_contentsView.bounds; - [_contentsView addSubview:tNewController.view]; + [_contentsView addSubview:tNewController.view]; + } _currentController=tNewController; diff --git a/app_unexpectedly/app_unexpectedly/CUICrashDataTransform.h b/app_unexpectedly/app_unexpectedly/CUICrashDataTransform.h new file mode 100644 index 0000000..6f901d7 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/CUICrashDataTransform.h @@ -0,0 +1,20 @@ +/* + Copyright (c) 2020-2021, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "CUIDataTransform.h" + +#import "CUICrashLog.h" + +@interface CUICrashDataTransform : CUIDataTransform + +@end diff --git a/app_unexpectedly/app_unexpectedly/CUIRawTextTransformation.m b/app_unexpectedly/app_unexpectedly/CUICrashDataTransform.m similarity index 73% rename from app_unexpectedly/app_unexpectedly/CUIRawTextTransformation.m rename to app_unexpectedly/app_unexpectedly/CUICrashDataTransform.m index 6846284..10574f9 100644 --- a/app_unexpectedly/app_unexpectedly/CUIRawTextTransformation.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashDataTransform.m @@ -11,14 +11,14 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#import "CUIRawTextTransformation.h" +#import "CUICrashDataTransform.h" #import "CUIApplicationPreferences.h" #import "CUIApplicationPreferences+Themes.h" #import "CUICrashLogBinaryImages.h" -#import "CUIBinaryImage+UI.h" +#import "CUIBinaryImageUtility.h" #import "CUIThemesManager.h" #import "CUIThemeItemsGroup+UI.h" @@ -31,15 +31,30 @@ #import "CUISymbolicationDataFormatter.h" #endif -NSString * const CUIGenericAnchorAttributeName=@"CUIGenericAnchorAttributeName"; +@interface CUICrashLog (Private) -NSString * const CUISectionAnchorAttributeName=@"CUISectionAnchorAttributeName"; + // Sections ranges -NSString * const CUIThreadAnchorAttributeName=@"CUIThreadAnchorAttributeName"; + @property (readonly) NSRange headerRange; -NSString * const CUIBinaryAnchorAttributeName=@"CUIBinaryAnchorAttributeName"; + @property (readonly) NSRange exceptionInformationRange; + @property (readonly) NSRange diagnosticMessagesRange; -@interface CUIRawTextTransformation () + @property (readonly) NSRange backtracesRange; + + @property (readonly) NSRange threadStateRange; + + @property (readonly) NSRange binaryImagesRange; + +@end + +@interface CUIDataTransform (Private) + +- (void)setOutput:(NSAttributedString *)inOutput; + +@end + +@interface CUICrashDataTransform () { NSDictionary * _cachedPlainTextAttributes; @@ -76,37 +91,13 @@ @interface CUIRawTextTransformation () CUISymbolicationDataFormatter * _symbolicationDataFormatter; #endif } - - @property CUICrashLog * crashLog; + @property (copy) NSString * processPath; - -- (void)updatesCachedAttributes; - -- (NSArray *)processedHeaderSectionLines:(NSArray *)inLines error:(NSError **)outError; - -- (NSArray *)processedExceptionInformationSectionLines:(NSArray *)inLines error:(NSError **)outError; - -- (NSArray *)processedDiagnosticMessagesSectionLines:(NSArray *)inLines error:(NSError **)outError; - -- (NSArray *)processedBacktracesSectionLines:(NSArray *)inLines error:(NSError **)outError; - -- (NSArray *)processedThreadStateSectionLines:(NSArray *)inLines error:(NSError **)outError; - -- (NSArray *)processedBinaryImagesSectionLines:(NSArray *)inLines reportVersion:(NSUInteger)inReportVersion error:(NSError **)outError; - -- (NSAttributedString *)joinLines:(NSArray *)inLines withString:(NSString *)inNewLineFeed; - -- (id)processedStackFrameLine:(NSString *)inLine stackFrame:(CUIStackFrame *)inStackFrame; - -- (NSArray *)processedThreadBacktraceLines:(NSArray *)inLines error:(NSError **)outError; - -- (id)processedBinaryImageLine:(NSString *)inLine reportVersion:(NSUInteger)inReportVersion; - @end -@implementation CUIRawTextTransformation +@implementation CUICrashDataTransform - (instancetype)init { @@ -114,7 +105,6 @@ - (instancetype)init if (self!=nil) { - _hyperlinksStyle=CUIHyperlinksInternal; #ifndef __DISABLE_SYMBOLICATION_ _symbolicationDataFormatter=[CUISymbolicationDataFormatter new]; @@ -126,6 +116,8 @@ - (instancetype)init return self; } +#pragma mark - + - (void)updatesCachedAttributes { NSFontManager * tFontManager = [NSFontManager sharedFontManager]; @@ -148,7 +140,7 @@ - (void)updatesCachedAttributes tMutableParagraphStyle.tabStops=@[]; [tMutableParagraphStyle setLineSpacing:2.0]; - + for (NSUInteger tIndex = 1; tIndex <= 20; tIndex++) { NSTextTab *tabStop = [[NSTextTab alloc] initWithType:NSLeftTabStopType location: 40 * (tIndex)]; @@ -203,161 +195,167 @@ - (void)updatesCachedAttributes _cachedParsingErrorAttributes=[tParsingErrorDictionary copy]; } -- (NSAttributedString *)transformCrashLog:(CUICrashLog *)inCrashLog -{ - if (inCrashLog==nil) - return nil; - - if ([inCrashLog isMemberOfClass:[CUIRawCrashLog class]]==YES) - return [self transformCrashLog:inCrashLog lines:@[]]; - - NSMutableArray * tLines=[NSMutableArray array]; - - [inCrashLog.rawText enumerateLinesUsingBlock:^(NSString * bLine, BOOL * bOutStop) { - - [tLines addObject:bLine]; - }]; - - return [self transformCrashLog:inCrashLog lines:tLines]; -} +#pragma mark - -- (NSAttributedString *)transformCrashLog:(CUICrashLog *)inCrashLog lines:(NSArray *)inLines +- (BOOL)transform { - if (inCrashLog==nil || inLines==nil) - return nil; - - [self updatesCachedAttributes]; + if ([super transform]==NO) + return NO; + CUICrashLog * tCrashLog=self.input; - if ([inCrashLog isMemberOfClass:[CUIRawCrashLog class]]==YES) + if ([tCrashLog isKindOfClass:[CUIRawCrashLog class]]==NO) { - NSAttributedString * tMutableAttributedString=[[NSAttributedString alloc] initWithString:inCrashLog.rawText - attributes:_cachedPlainTextAttributes]; + // A COMPLETER - return tMutableAttributedString; + return NO; } - self.crashLog=inCrashLog; - - self.processPath=inCrashLog.header.executablePath; - - - - NSMutableArray * tMutableArray=[inLines mutableCopy]; - + [self updatesCachedAttributes]; - if (inCrashLog.binaryImagesRange.location!=NSNotFound) + if ([tCrashLog isMemberOfClass:[CUIRawCrashLog class]]==YES) { - if ((_displaySettings.visibleSections & CUIDocumentBinaryImagesSection)==0) - { - [tMutableArray removeObjectsInRange:inCrashLog.binaryImagesRange]; - } - else - { - NSArray * tBacktracesLines=[inLines subarrayWithRange:inCrashLog.binaryImagesRange]; - - NSArray * tFilteredLines=[self processedBinaryImagesSectionLines:tBacktracesLines reportVersion:inCrashLog.reportVersion error:NULL]; - - [tMutableArray removeObjectsInRange:inCrashLog.binaryImagesRange]; - - [tMutableArray insertObjects:tFilteredLines atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(inCrashLog.binaryImagesRange.location,tFilteredLines.count)]]; - } + NSAttributedString * tAttributedString=[[NSAttributedString alloc] initWithString:tCrashLog.rawText + attributes:_cachedPlainTextAttributes]; + + self.output=tAttributedString; + + return YES; } - if (inCrashLog.threadStateRange.location!=NSNotFound) + if ([tCrashLog isMemberOfClass:[CUICrashLog class]]==YES) { - if ((_displaySettings.visibleSections & CUIDocumentThreadStateSection)==0) - { - [tMutableArray removeObjectsInRange:inCrashLog.threadStateRange]; - } - else - { - NSArray * tThreadStateLines=[inLines subarrayWithRange:inCrashLog.threadStateRange]; - - NSArray * tFilteredLines=[self processedThreadStateSectionLines:tThreadStateLines error:NULL]; - - [tMutableArray removeObjectsInRange:inCrashLog.threadStateRange]; + self.processPath=tCrashLog.header.executablePath; + + NSMutableArray * tLines=[NSMutableArray array]; + + [tCrashLog.rawText enumerateLinesUsingBlock:^(NSString * bLine, BOOL * bOutStop) { - [tMutableArray insertObjects:tFilteredLines atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(inCrashLog.threadStateRange.location,tFilteredLines.count)]]; - } - } - - if (inCrashLog.backtracesRange.location!=NSNotFound) - { - if ((_displaySettings.visibleSections & CUIDocumentBacktracesSection)==0) + [tLines addObject:bLine]; + }]; + + NSMutableArray * tMutableArray=[tLines mutableCopy]; + + + if (tCrashLog.binaryImagesRange.location!=NSNotFound) { - [tMutableArray removeObjectsInRange:inCrashLog.backtracesRange]; + if ((self.displaySettings.visibleSections & CUIDocumentBinaryImagesSection)==0) + { + [tMutableArray removeObjectsInRange:tCrashLog.binaryImagesRange]; + } + else + { + NSArray * tBacktracesLines=[tLines subarrayWithRange:tCrashLog.binaryImagesRange]; + + NSArray * tFilteredLines=[self processedBinaryImagesSectionLines:tBacktracesLines reportVersion:tCrashLog.reportVersion error:NULL]; + + [tMutableArray removeObjectsInRange:tCrashLog.binaryImagesRange]; + + [tMutableArray insertObjects:tFilteredLines atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(tCrashLog.binaryImagesRange.location,tFilteredLines.count)]]; + } } - else + + if (tCrashLog.threadStateRange.location!=NSNotFound) { - NSArray * tBacktracesLines=[inLines subarrayWithRange:inCrashLog.backtracesRange]; - - NSArray * tFilteredLines=[self processedBacktracesSectionLines:tBacktracesLines error:NULL]; - - [tMutableArray removeObjectsInRange:inCrashLog.backtracesRange]; - - [tMutableArray insertObjects:tFilteredLines atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(inCrashLog.backtracesRange.location,tFilteredLines.count)]]; + if ((self.displaySettings.visibleSections & CUIDocumentThreadStateSection)==0) + { + [tMutableArray removeObjectsInRange:tCrashLog.threadStateRange]; + } + else + { + NSArray * tThreadStateLines=[tLines subarrayWithRange:tCrashLog.threadStateRange]; + + NSArray * tFilteredLines=[self processedThreadStateSectionLines:tThreadStateLines error:NULL]; + + [tMutableArray removeObjectsInRange:tCrashLog.threadStateRange]; + + [tMutableArray insertObjects:tFilteredLines atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(tCrashLog.threadStateRange.location,tFilteredLines.count)]]; + } } - } - - - if (inCrashLog.diagnosticMessagesRange.location!=NSNotFound) - { - if ((_displaySettings.visibleSections & CUIDocumentDiagnosticMessagesSection)==0) + + if (tCrashLog.backtracesRange.location!=NSNotFound) { - [tMutableArray removeObjectsInRange:inCrashLog.diagnosticMessagesRange]; + if ((self.displaySettings.visibleSections & CUIDocumentBacktracesSection)==0) + { + [tMutableArray removeObjectsInRange:tCrashLog.backtracesRange]; + } + else + { + NSArray * tBacktracesLines=[tLines subarrayWithRange:tCrashLog.backtracesRange]; + + NSArray * tFilteredLines=[self processedBacktracesSectionLines:tBacktracesLines error:NULL]; + + [tMutableArray removeObjectsInRange:tCrashLog.backtracesRange]; + + [tMutableArray insertObjects:tFilteredLines atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(tCrashLog.backtracesRange.location,tFilteredLines.count)]]; + } } - else + + + if (tCrashLog.diagnosticMessagesRange.location!=NSNotFound) { - NSArray * tDiagnosticMessagesLines=[inLines subarrayWithRange:inCrashLog.diagnosticMessagesRange]; - - NSArray * tFilteredLines=[self processedDiagnosticMessagesSectionLines:tDiagnosticMessagesLines error:NULL]; - - [tMutableArray removeObjectsInRange:inCrashLog.diagnosticMessagesRange]; - - [tMutableArray insertObjects:tFilteredLines atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(inCrashLog.diagnosticMessagesRange.location,tFilteredLines.count)]]; + if ((self.displaySettings.visibleSections & CUIDocumentDiagnosticMessagesSection)==0) + { + [tMutableArray removeObjectsInRange:tCrashLog.diagnosticMessagesRange]; + } + else + { + NSArray * tDiagnosticMessagesLines=[tLines subarrayWithRange:tCrashLog.diagnosticMessagesRange]; + + NSArray * tFilteredLines=[self processedDiagnosticMessagesSectionLines:tDiagnosticMessagesLines error:NULL]; + + [tMutableArray removeObjectsInRange:tCrashLog.diagnosticMessagesRange]; + + [tMutableArray insertObjects:tFilteredLines atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(tCrashLog.diagnosticMessagesRange.location,tFilteredLines.count)]]; + } } - } - - - if (inCrashLog.exceptionInformationRange.location!=NSNotFound) - { - if ((_displaySettings.visibleSections & CUIDocumentExceptionInformationSection)==0) + + + if (tCrashLog.exceptionInformationRange.location!=NSNotFound) { - [tMutableArray removeObjectsInRange:inCrashLog.exceptionInformationRange]; + if ((self.displaySettings.visibleSections & CUIDocumentExceptionInformationSection)==0) + { + [tMutableArray removeObjectsInRange:tCrashLog.exceptionInformationRange]; + } + else + { + NSArray * tExceptionInformationLines=[tLines subarrayWithRange:tCrashLog.exceptionInformationRange]; + + NSArray * tFilteredLines=[self processedExceptionInformationSectionLines:tExceptionInformationLines error:NULL]; + + [tMutableArray removeObjectsInRange:tCrashLog.exceptionInformationRange]; + + [tMutableArray insertObjects:tFilteredLines atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(tCrashLog.exceptionInformationRange.location,tFilteredLines.count)]]; + } } - else + + + if (tCrashLog.isHeaderAvailable==YES) { - NSArray * tExceptionInformationLines=[inLines subarrayWithRange:inCrashLog.exceptionInformationRange]; - - NSArray * tFilteredLines=[self processedExceptionInformationSectionLines:tExceptionInformationLines error:NULL]; - - [tMutableArray removeObjectsInRange:inCrashLog.exceptionInformationRange]; - - [tMutableArray insertObjects:tFilteredLines atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(inCrashLog.exceptionInformationRange.location,tFilteredLines.count)]]; + if ((self.displaySettings.visibleSections & CUIDocumentHeaderSection)==0) + { + [tMutableArray removeObjectsInRange:tCrashLog.headerRange]; + } + else + { + NSArray * HeaderLines=[tLines subarrayWithRange:tCrashLog.headerRange]; + + NSArray * tFilteredLines=[self processedHeaderSectionLines:HeaderLines error:NULL]; + + [tMutableArray removeObjectsInRange:tCrashLog.headerRange]; + + [tMutableArray insertObjects:tFilteredLines atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(tCrashLog.headerRange.location,tFilteredLines.count)]]; + } } + + self.output=[self joinLines:tMutableArray withString:@"\n"]; + + return YES; } + // A COMPLETER - if (inCrashLog.headerRange.location!=NSNotFound) - { - if ((_displaySettings.visibleSections & CUIDocumentHeaderSection)==0) - { - [tMutableArray removeObjectsInRange:inCrashLog.headerRange]; - } - else - { - NSArray * tExceptionInformationLines=[inLines subarrayWithRange:inCrashLog.headerRange]; - - NSArray * tFilteredLines=[self processedHeaderSectionLines:tExceptionInformationLines error:NULL]; - - [tMutableArray removeObjectsInRange:inCrashLog.headerRange]; - - [tMutableArray insertObjects:tFilteredLines atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(inCrashLog.headerRange.location,tFilteredLines.count)]]; - } - } - - return [self joinLines:tMutableArray withString:@"\n"]; + return NO; } #pragma mark - Header @@ -407,7 +405,7 @@ - (NSArray *)processedHeaderSectionLines:(NSArray *)inLines error:(NSError **)ou NSMutableAttributedString * tProcessedLine=[[NSMutableAttributedString alloc] initWithString:bLine attributes:self->_cachedPlainTextAttributes]; - + if (bLineNumber==0) { NSDictionary * tJumpAnchorAttributes=@{ @@ -417,25 +415,23 @@ - (NSArray *)processedHeaderSectionLines:(NSArray *)inLines error:(NSError **)ou [tProcessedLine addAttributes:tJumpAnchorAttributes range:NSMakeRange(0,bLine.length)]; } - //if (self.displaySettings.highlightSyntax==YES) - { - [tProcessedLine addAttributes:self->_cachedKeyAttributes range:tKeyRange]; - - if ([tKey isEqualToString:@"Path"]==YES) - { - [tProcessedLine addAttributes:self->_cachedPathAttributes range:tValueRange]; - } - else if ([tKey isEqualToString:@"Version"]==YES || - [tKey isEqualToString:@"OS Version"]==YES) - { - [tProcessedLine addAttributes:self->_cachedVersionAttributes range:tValueRange]; - } - else if ([tKey isEqualToString:@"Anonymous UUID"]==YES || - [tKey isEqualToString:@"Sleep/Wake UUID"]==YES) - { - [tProcessedLine addAttributes:self->_cachedUUIDAttributes range:tValueRange]; - } + [tProcessedLine addAttributes:self->_cachedKeyAttributes range:tKeyRange]; + + + if ([tKey isEqualToString:@"Path"]==YES) + { + [tProcessedLine addAttributes:self->_cachedPathAttributes range:tValueRange]; + } + else if ([tKey isEqualToString:@"Version"]==YES || + [tKey isEqualToString:@"OS Version"]==YES) + { + [tProcessedLine addAttributes:self->_cachedVersionAttributes range:tValueRange]; + } + else if ([tKey isEqualToString:@"Anonymous UUID"]==YES || + [tKey isEqualToString:@"Sleep/Wake UUID"]==YES) + { + [tProcessedLine addAttributes:self->_cachedUUIDAttributes range:tValueRange]; } [tProcessedLines addObject:tProcessedLine]; @@ -475,12 +471,12 @@ - (NSArray *)processedExceptionInformationSectionLines:(NSArray *)inLines error: tScanner.scanLocation==tLineLength) { [tProcessedLines addObject:bLine]; - + return; } NSRange tKeyRange=NSMakeRange(0,tScanner.scanLocation+1); - + tScanner.scanLocation=tScanner.scanLocation+1; @@ -498,10 +494,7 @@ - (NSArray *)processedExceptionInformationSectionLines:(NSArray *)inLines error: NSMutableAttributedString * tProcessedLine=[[NSMutableAttributedString alloc] initWithString:bLine attributes:self->_cachedPlainTextAttributes]; - //if (self.displaySettings.highlightSyntax==YES) - { - [tProcessedLine addAttributes:self->_cachedKeyAttributes range:tKeyRange]; - } + [tProcessedLine addAttributes:self->_cachedKeyAttributes range:tKeyRange]; if (bLineNumber==0) { @@ -519,13 +512,13 @@ - (NSArray *)processedExceptionInformationSectionLines:(NSArray *)inLines error: case CUIHyperlinksInternal: //if (self.displaySettings.highlightSyntax==YES) - { - [tProcessedLine addAttributes:@{ - NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle|NSUnderlineStylePatternDash) - } - - range:tValueRange]; - } + { + [tProcessedLine addAttributes:@{ + NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle|NSUnderlineStylePatternDash) + } + + range:tValueRange]; + } [tProcessedLine addAttributes:@{ NSLinkAttributeName:[NSURL URLWithString:@"a://exception_type"] @@ -533,7 +526,7 @@ - (NSArray *)processedExceptionInformationSectionLines:(NSArray *)inLines error: range:tValueRange]; break; - + default: break; @@ -543,7 +536,7 @@ - (NSArray *)processedExceptionInformationSectionLines:(NSArray *)inLines error: if ([tKey isEqualToString:@"Crashed Thread"]==YES) { if ((self.displaySettings.visibleSections & CUIDocumentBacktracesSection)==CUIDocumentBacktracesSection && - self.crashLog.backtraces.threads.count>0) + ((CUICrashLog *)self.input).backtraces.threads.count>0) { switch(self.hyperlinksStyle) { @@ -571,10 +564,7 @@ - (NSArray *)processedExceptionInformationSectionLines:(NSArray *)inLines error: } } - //if (self.displaySettings.highlightSyntax==YES) - { - [tProcessedLine addAttributes:self->_cachedCrashedThreadLabelAttributes range:tValueRange]; - } + [tProcessedLine addAttributes:self->_cachedCrashedThreadLabelAttributes range:tValueRange]; } [tProcessedLines addObject:tProcessedLine]; @@ -655,12 +645,12 @@ - (NSArray *)processedBacktracesSectionLines:(NSArray *)inLines error:(NSError * return inLines; NSMutableArray * tProcessedLines=[NSMutableArray array]; - + __block NSInteger tThreadEntityLineStart=0; __block NSInteger tThreadEntityLineEnd=0; [inLines enumerateObjectsUsingBlock:^(NSString * bLine, NSUInteger bLineNumber, BOOL *bOutStop) { - + // Retrieve thread number, crashed status and dispatch queue name if (bLine.length!=0) @@ -680,7 +670,7 @@ - (NSArray *)processedBacktracesSectionLines:(NSArray *)inLines error:(NSError * }]; NSMutableAttributedString * tMutableAttributedString=tProcessedLines.firstObject; - + NSDictionary * tJumpAnchorAttributes=@{ CUISectionAnchorAttributeName:@"section:Backtraces" }; @@ -718,7 +708,7 @@ - (NSArray *)processedThreadBacktraceLines:(NSArray *)inLines error:(NSError **) return [tProcessedLines copy]; } - CUICrashLogBacktraces * tBacktraces=self.crashLog.backtraces; + CUICrashLogBacktraces * tBacktraces=((CUICrashLog *)self.input).backtraces; CUIThread * tThread=nil; @@ -812,15 +802,11 @@ - (NSArray *)processedThreadBacktraceLines:(NSArray *)inLines error:(NSError **) break; } } - - //if (self.displaySettings.highlightSyntax==YES) - { - NSDictionary * tAttributes=(tCrashedThread==YES) ? _cachedCrashedThreadLabelAttributes : _cachedThreadLabelAttributes; - - [tMutableAttributedString addAttributes:tAttributes - range:tStringRange]; - } + NSDictionary * tAttributes=(tCrashedThread==YES) ? _cachedCrashedThreadLabelAttributes : _cachedThreadLabelAttributes; + + [tMutableAttributedString addAttributes:tAttributes + range:tStringRange]; NSMutableArray * tProcessedLines=[NSMutableArray arrayWithObject:tMutableAttributedString]; @@ -912,7 +898,7 @@ - (id)processedStackFrameLine:(NSString *)inLine stackFrame:(CUIStackFrame *)inS BOOL tIsUserCode=NO; - CUICrashLogBinaryImages * tBinaryImages=self.crashLog.binaryImages; + CUICrashLogBinaryImages * tBinaryImages=((CUICrashLog *)self.input).binaryImages; CUIBinaryImage * tBinaryImage=[tBinaryImages binaryImageWithIdentifierOrName:tBinaryImageIdentifier identifier:&tBinaryImageIdentifier]; @@ -942,7 +928,7 @@ - (id)processedStackFrameLine:(NSString *)inLine stackFrame:(CUIStackFrame *)inS return [[NSAttributedString alloc] initWithString:tLine]; __block NSUInteger tSavedScanLocation=tScanner.scanLocation; - + #ifndef __DISABLE_SYMBOLICATION_ BOOL tSymbolicateAutomatically=[CUIApplicationPreferences sharedPreferences].symbolicateAutomatically; @@ -974,59 +960,59 @@ - (id)processedStackFrameLine:(NSString *)inLine stackFrame:(CUIStackFrame *)inS if (tSymbolicateAutomatically==YES) { // Default values - + NSUInteger tAddress=tMachineInstructionAddress-tBinaryImage.binaryImageOffset; - + [[CUISymbolicationManager sharedSymbolicationManager] lookUpSymbolicationDataForMachineInstructionAddress:tAddress - binaryUUID:tBinaryImage.UUID - completionHandler:^(CUISymbolicationDataLookUpResult bLookUpResult, CUISymbolicationData *bSymbolicationData) { - - switch(bLookUpResult) - { - case CUISymbolicationDataLookUpResultError: - case CUISymbolicationDataLookUpResultNotFound: - - break; - - case CUISymbolicationDataLookUpResultFound: - { - inStackFrame.symbolicationData=bSymbolicationData; - - [[NSNotificationCenter defaultCenter] postNotificationName:CUIStackFrameSymbolicationDidSucceedNotification - object:self.crashLog]; - - break; - } - - case CUISymbolicationDataLookUpResultFoundInCache: - { - inStackFrame.symbolicationData=bSymbolicationData; - - NSMutableString * tTemporaryLine=[[tLine substringToIndex:tScanner.scanLocation-tSymbol.length] mutableCopy]; - - tSavedScanLocation+=(bSymbolicationData.stackFrameSymbol.length-tSymbol.length); - - [tTemporaryLine appendString:[self->_symbolicationDataFormatter stringForObjectValue:bSymbolicationData]]; - - tLine=[tTemporaryLine copy]; - - break; - } - - } - - }]; + binaryUUID:tBinaryImage.UUID + completionHandler:^(CUISymbolicationDataLookUpResult bLookUpResult, CUISymbolicationData *bSymbolicationData) { + + switch(bLookUpResult) + { + case CUISymbolicationDataLookUpResultError: + case CUISymbolicationDataLookUpResultNotFound: + + break; + + case CUISymbolicationDataLookUpResultFound: + { + inStackFrame.symbolicationData=bSymbolicationData; + + [[NSNotificationCenter defaultCenter] postNotificationName:CUIStackFrameSymbolicationDidSucceedNotification + object:self.input]; + + break; + } + + case CUISymbolicationDataLookUpResultFoundInCache: + { + inStackFrame.symbolicationData=bSymbolicationData; + + NSMutableString * tTemporaryLine=[[tLine substringToIndex:tScanner.scanLocation-tSymbol.length] mutableCopy]; + + tSavedScanLocation+=(bSymbolicationData.stackFrameSymbol.length-tSymbol.length); + + [tTemporaryLine appendString:[self->_symbolicationDataFormatter stringForObjectValue:bSymbolicationData]]; + + tLine=[tTemporaryLine copy]; + + break; + } + + } + + }]; } } - + #endif NSMutableAttributedString * tProcessedLine=[[NSMutableAttributedString alloc] initWithString:tLine attributes:_cachedPlainTextAttributes]; NSRange tRange=NSMakeRange(0,tLine.length); - + NSDictionary * tDictionary=(tIsUserCode==YES) ? _cachedExecutableCodeAttributes : _cachedOSCodeAttributes; - + [tProcessedLine addAttributes:tDictionary range:tRange]; @@ -1055,7 +1041,7 @@ - (id)processedStackFrameLine:(NSString *)inLine stackFrame:(CUIStackFrame *)inS tURLComponents.path=tAbsolutePath; NSURL * tURL=tURLComponents.URL; - + if (tURL!=nil) { [tProcessedLine addAttributes:@{ @@ -1081,10 +1067,7 @@ - (id)processedStackFrameLine:(NSString *)inLine stackFrame:(CUIStackFrame *)inS } else { - //if (self.displaySettings.highlightSyntax==YES) - { - [tProcessedLine addAttributes:_cachedMemoryAddressAttributes range:tMemoryAddressRange]; - } + [tProcessedLine addAttributes:_cachedMemoryAddressAttributes range:tMemoryAddressRange]; } if ((self.displaySettings.visibleStackFrameComponents & CUIStackFrameBinaryNameComponent)==0) @@ -1093,9 +1076,9 @@ - (id)processedStackFrameLine:(NSString *)inLine stackFrame:(CUIStackFrame *)inS } else { - if (self.hyperlinksStyle!=CUIHyperlinksNone && ((_displaySettings.visibleSections & CUIDocumentBinaryImagesSection)==CUIDocumentBinaryImagesSection)) + if (self.hyperlinksStyle!=CUIHyperlinksNone && ((self.displaySettings.visibleSections & CUIDocumentBinaryImagesSection)==CUIDocumentBinaryImagesSection)) { - NSString * tCleanedUpIdenftifier=[tBinaryImageIdentifier stringByTrimmingCharactersInSet:_whitespaceCharacterSet]; + NSString * tCleanedUpIdentifier=[tBinaryImageIdentifier stringByTrimmingCharactersInSet:_whitespaceCharacterSet]; CUIBinaryImage * tBinaryImage=[tBinaryImages binaryImageWithIdentifier:tBinaryImageIdentifier]; @@ -1120,7 +1103,7 @@ - (id)processedStackFrameLine:(NSString *)inLine stackFrame:(CUIStackFrame *)inS switch(self.hyperlinksStyle) { case CUIHyperlinksInternal: - + tURL=[NSURL URLWithString:[NSString stringWithFormat:@"bin://%@",tBinaryImageIdentifier]]; break; @@ -1137,8 +1120,8 @@ - (id)processedStackFrameLine:(NSString *)inLine stackFrame:(CUIStackFrame *)inS } if (tURL!=nil) - [tProcessedLine addAttributes:@{NSLinkAttributeName:tURL} range:NSMakeRange(tBinaryImageIdentifierRange.location,tCleanedUpIdenftifier.length)]; - + [tProcessedLine addAttributes:@{NSLinkAttributeName:tURL} range:NSMakeRange(tBinaryImageIdentifierRange.location,tCleanedUpIdentifier.length)]; + } } } @@ -1179,58 +1162,58 @@ - (NSArray *)processedThreadStateSectionLines:(NSArray *)inLines error:(NSError [inLines enumerateObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:tOtherLinesRange] - options:0 - usingBlock:^(NSString * bLine, NSUInteger bLineNumber, BOOL * bOutStop) { - - NSMutableAttributedString * tMutableAttributedString=[[NSMutableAttributedString alloc] initWithString:bLine attributes:self->_cachedKeyAttributes]; - - if (bLine.length<4) - { - tLastLine=bLineNumber+1; - - [tProcessedLines addObject:tMutableAttributedString]; - - *bOutStop=YES; - return; - } - - NSScanner * tRegistersScanner=[NSScanner scannerWithString:bLine]; - - tRegistersScanner.charactersToBeSkipped=self->_whitespaceCharacterSet; - - while (tRegistersScanner.isAtEnd==NO) - { - tRegistersScanner.charactersToBeSkipped=nil; - - [tRegistersScanner scanCharactersFromSet:self->_whitespaceCharacterSet intoString:nil]; - - NSString * tRegisterName; - - tRegistersScanner.charactersToBeSkipped=self->_whitespaceCharacterSet; - - if ([tRegistersScanner scanUpToString:@":" intoString:&tRegisterName]==NO) - return; - - if ([tRegistersScanner scanString:@": " intoString:NULL]==NO) - return; - - NSRange tValueRange=NSMakeRange(tRegistersScanner.scanLocation, 0); - - if ([tRegistersScanner scanHexLongLong:NULL]==NO) - return; - - tValueRange.length=tRegistersScanner.scanLocation-1-tValueRange.location+1; - - tRegistersScanner.charactersToBeSkipped=nil; - - [tRegistersScanner scanCharactersFromSet:self->_whitespaceCharacterSet intoString:nil]; - - [tMutableAttributedString addAttributes:self->_cachedRegisterValueAttributes range:tValueRange]; - } - - [tProcessedLines addObject:tMutableAttributedString]; - - }]; + options:0 + usingBlock:^(NSString * bLine, NSUInteger bLineNumber, BOOL * bOutStop) { + + NSMutableAttributedString * tMutableAttributedString=[[NSMutableAttributedString alloc] initWithString:bLine attributes:self->_cachedKeyAttributes]; + + if (bLine.length<4) + { + tLastLine=bLineNumber+1; + + [tProcessedLines addObject:tMutableAttributedString]; + + *bOutStop=YES; + return; + } + + NSScanner * tRegistersScanner=[NSScanner scannerWithString:bLine]; + + tRegistersScanner.charactersToBeSkipped=self->_whitespaceCharacterSet; + + while (tRegistersScanner.isAtEnd==NO) + { + tRegistersScanner.charactersToBeSkipped=nil; + + [tRegistersScanner scanCharactersFromSet:self->_whitespaceCharacterSet intoString:nil]; + + NSString * tRegisterName; + + tRegistersScanner.charactersToBeSkipped=self->_whitespaceCharacterSet; + + if ([tRegistersScanner scanUpToString:@":" intoString:&tRegisterName]==NO) + return; + + if ([tRegistersScanner scanString:@": " intoString:NULL]==NO) + return; + + NSRange tValueRange=NSMakeRange(tRegistersScanner.scanLocation, 0); + + if ([tRegistersScanner scanHexLongLong:NULL]==NO) + return; + + tValueRange.length=tRegistersScanner.scanLocation-1-tValueRange.location+1; + + tRegistersScanner.charactersToBeSkipped=nil; + + [tRegistersScanner scanCharactersFromSet:self->_whitespaceCharacterSet intoString:nil]; + + [tMutableAttributedString addAttributes:self->_cachedRegisterValueAttributes range:tValueRange]; + } + + [tProcessedLines addObject:tMutableAttributedString]; + + }]; // Remaining lines @@ -1309,7 +1292,7 @@ - (NSArray *)processedBinaryImagesSectionLines:(NSArray *)inLines reportVersion: }; NSMutableAttributedString * tAttributedString=[[NSMutableAttributedString alloc] initWithString:inLines.firstObject attributes:tJumpAnchorAttributes]; - + NSDictionary * tFirstLineAttributes=_cachedKeyAttributes; if (tFirstLineAttributes!=nil) @@ -1325,26 +1308,26 @@ - (NSArray *)processedBinaryImagesSectionLines:(NSArray *)inLines reportVersion: options:0 usingBlock:^(NSString * bLine, NSUInteger bLineNumber, BOOL *bOutStop) { - if (bLine.length==0) - { - [tProcessedLines addObjectsFromArray:[inLines subarrayWithRange:NSMakeRange(bLineNumber,inLines.count-1-bLineNumber+1)]]; - - *bOutStop=YES; - - return; - } + if (bLine.length==0) + { + [tProcessedLines addObjectsFromArray:[inLines subarrayWithRange:NSMakeRange(bLineNumber,inLines.count-1-bLineNumber+1)]]; + + *bOutStop=YES; + + return; + } - id tProcessedLine=[self processedBinaryImageLine:bLine reportVersion:inReportVersion]; + id tProcessedLine=[self processedBinaryImageLine:bLine reportVersion:inReportVersion]; - if (tProcessedLine==nil) - { - tProcessedLine=[[NSAttributedString alloc] initWithString:bLine attributes:self->_cachedParsingErrorAttributes]; - - NSLog(@"Error transforming line: %@",bLine); - } + if (tProcessedLine==nil) + { + tProcessedLine=[[NSAttributedString alloc] initWithString:bLine attributes:self->_cachedParsingErrorAttributes]; + + NSLog(@"Error transforming line: %@",bLine); + } - [tProcessedLines addObject:tProcessedLine]; - }]; + [tProcessedLines addObject:tProcessedLine]; + }]; return tProcessedLines; } @@ -1497,7 +1480,7 @@ - (id)processedBinaryImageLine:(NSString *)inLine reportVersion:(NSUInteger)inRe if ([CUIThemesManager sharedManager].currentTheme.isMonochrome==NO) { tIdentifierAttributes=@{ - NSForegroundColorAttributeName:(tIsUserCode==YES) ? [CUIBinaryImage colorForUserCode]: [CUIBinaryImage colorForIdentifier:tIdentifier] + NSForegroundColorAttributeName:(tIsUserCode==YES) ? [CUIBinaryImageUtility colorForUserCode]: [CUIBinaryImageUtility colorForIdentifier:tIdentifier] }; } diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLog.h b/app_unexpectedly/app_unexpectedly/CUICrashLog.h index 9d1a7d3..fb1c03b 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLog.h +++ b/app_unexpectedly/app_unexpectedly/CUICrashLog.h @@ -30,23 +30,6 @@ @interface CUICrashLog : CUIRawCrashLog - // Sections ranges - - @property (readonly) NSRange headerRange; - - @property (readonly) NSRange exceptionInformationRange; - @property (readonly) NSRange diagnosticMessagesRange; - - @property (readonly) NSRange backtracesRange; - - @property (readonly) NSRange threadStateRange; - - @property (readonly) NSRange binaryImagesRange; - - - - - @property (readonly) CUICrashLogHeader * header; @property (readonly) CUICrashLogExceptionInformation * exceptionInformation; diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLog.m b/app_unexpectedly/app_unexpectedly/CUICrashLog.m index 5be9acf..e7edb8c 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLog.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLog.m @@ -67,84 +67,99 @@ - (instancetype)initWithString:(NSString *)inString error:(NSError **)outError if (self!=nil) { - _headerRange.location=NSNotFound; - - _exceptionInformationRange.location=NSNotFound; - _diagnosticMessagesRange.location=NSNotFound; - - _backtracesRange.location=NSNotFound; - - _threadStateRange.location=NSNotFound; - - _binaryImagesRange.location=NSNotFound; - NSError * tError=nil; - NSMutableArray * tLines=[NSMutableArray array]; - - [inString enumerateLinesUsingBlock:^(NSString * bLine, BOOL * bOutStop) { - - [tLines addObject:bLine]; - }]; - - @try + if (self.ipsReport!=nil) { - BOOL tResult=[self detectSectionsOfTextualRepresentation:tLines error:&tError]; + IPSIncident * tIncident=self.ipsReport.incident; + + _header=[[CUICrashLogHeader alloc] initWithIPSIncident:tIncident error:&tError]; - if (tResult==NO) + if (_header==nil) { - NSLog(@"Error detecting section : %@",tError.userInfo[CUIParsingErrorSectionNameKey]); - - _parsingError=tError; - - // Raw Text Mode only - // A COMPLETER return nil; } - _header=[[CUICrashLogHeader alloc] initWithTextualRepresentation:[tLines subarrayWithRange:_headerRange] error:&tError]; + _exceptionInformation=[[CUICrashLogExceptionInformation alloc] initWithIPSIncident:tIncident error:&tError]; - if (_header==nil) + if (_exceptionInformation==nil) { - if (tError!=nil) - { - NSUInteger tAbsoluteLineNumber=[tError.userInfo[CUIParsingErrorLineKey] unsignedIntegerValue]+_headerRange.location; - - NSLog(@"Error parsing line : %lu",tAbsoluteLineNumber); - - _parsingError=[NSError errorWithDomain:CUIParsingErrorDomain code:tError.code userInfo:@{CUIParsingErrorLineKey:@(tAbsoluteLineNumber)}]; - } + // A COMPLETER + return nil; + } + + _diagnosticMessages=[[CUICrashLogDianosticMessages alloc] initWithIPSIncident:tIncident error:&tError]; + + if (_diagnosticMessages==nil) + { // A COMPLETER return nil; } + } + else + { + _headerRange.location=NSNotFound; - _exceptionInformation=[[CUICrashLogExceptionInformation alloc] initWithTextualRepresentation:[tLines subarrayWithRange:_exceptionInformationRange] reportVersion:_header.reportVersion error:&tError]; + _exceptionInformationRange.location=NSNotFound; + _diagnosticMessagesRange.location=NSNotFound; - if (_exceptionInformation==nil) + _backtracesRange.location=NSNotFound; + + _threadStateRange.location=NSNotFound; + + _binaryImagesRange.location=NSNotFound; + + + + NSMutableArray * tLines=[NSMutableArray array]; + + [self.rawText enumerateLinesUsingBlock:^(NSString * bLine, BOOL * bOutStop) { + + [tLines addObject:bLine]; + }]; + + @try { - if (tError!=nil) + BOOL tResult=[self detectSectionsOfTextualRepresentation:tLines error:&tError]; + + if (tResult==NO) { - NSUInteger tAbsoluteLineNumber=[tError.userInfo[CUIParsingErrorLineKey] unsignedIntegerValue]+_headerRange.location; + NSLog(@"Error detecting section : %@",tError.userInfo[CUIParsingErrorSectionNameKey]); + + _parsingError=tError; - NSLog(@"Error parsing line : %lu",tAbsoluteLineNumber); + // Raw Text Mode only + + // A COMPLETER - _parsingError=[NSError errorWithDomain:CUIParsingErrorDomain code:tError.code userInfo:@{CUIParsingErrorLineKey:@(tAbsoluteLineNumber)}]; + return nil; } - // A COMPLETER + _header=[[CUICrashLogHeader alloc] initWithTextualRepresentation:[tLines subarrayWithRange:_headerRange] error:&tError]; - return nil; - } - - if (_diagnosticMessagesRange.location!=NSNotFound) - { - _diagnosticMessages=[[CUICrashLogDianosticMessages alloc] initWithTextualRepresentation:[tLines subarrayWithRange:_diagnosticMessagesRange] reportVersion:_header.reportVersion error:&tError]; + if (_header==nil) + { + if (tError!=nil) + { + NSUInteger tAbsoluteLineNumber=[tError.userInfo[CUIParsingErrorLineKey] unsignedIntegerValue]+_headerRange.location; + + NSLog(@"Error parsing line : %lu",tAbsoluteLineNumber); + + _parsingError=[NSError errorWithDomain:CUIParsingErrorDomain code:tError.code userInfo:@{CUIParsingErrorLineKey:@(tAbsoluteLineNumber)}]; + } + + // A COMPLETER + + return nil; + } - if (_diagnosticMessages==nil) + _exceptionInformation=[[CUICrashLogExceptionInformation alloc] initWithTextualRepresentation:[tLines subarrayWithRange:_exceptionInformationRange] reportVersion:_header.reportVersion error:&tError]; + + if (_exceptionInformation==nil) { if (tError!=nil) { @@ -159,20 +174,41 @@ - (instancetype)initWithString:(NSString *)inString error:(NSError **)outError return nil; } + + if (_diagnosticMessagesRange.location!=NSNotFound) + { + _diagnosticMessages=[[CUICrashLogDianosticMessages alloc] initWithTextualRepresentation:[tLines subarrayWithRange:_diagnosticMessagesRange] reportVersion:_header.reportVersion error:&tError]; + + if (_diagnosticMessages==nil) + { + if (tError!=nil) + { + NSUInteger tAbsoluteLineNumber=[tError.userInfo[CUIParsingErrorLineKey] unsignedIntegerValue]+_headerRange.location; + + NSLog(@"Error parsing line : %lu",tAbsoluteLineNumber); + + _parsingError=[NSError errorWithDomain:CUIParsingErrorDomain code:tError.code userInfo:@{CUIParsingErrorLineKey:@(tAbsoluteLineNumber)}]; + } + + // A COMPLETER + + return nil; + } + } + + // The other sections will be parsed when the log is displayed for real } - // The other sections will be parsed when the log is displayed for real - } - - @catch (NSException *exception) - { - NSLog(@"Exception raised while parsing \"%@\"",self.rawText); - - return nil; - } - - @finally - { + @catch (NSException *exception) + { + NSLog(@"Exception raised while parsing \"%@\"",self.rawText); + + return nil; + } + + @finally + { + } } } @@ -181,6 +217,54 @@ - (instancetype)initWithString:(NSString *)inString error:(NSError **)outError #pragma mark - +- (BOOL)isHeaderAvailable +{ + if ([super isHeaderAvailable]==YES) + return YES; + + return (self.headerRange.location!=NSNotFound); +} + +- (BOOL)isExceptionInformationAvailable +{ + if ([super isExceptionInformationAvailable]==YES) + return YES; + + return (self.exceptionInformationRange.location!=NSNotFound); +} + +- (BOOL)isDiagnosticMessageAvailable +{ + if ([super isDiagnosticMessageAvailable]==YES) + return YES; + + return (self.diagnosticMessagesRange.location!=NSNotFound); +} + +- (BOOL)isBacktracesAvailable +{ + if ([super isBacktracesAvailable]==YES) + return YES; + + return (self.backtracesRange.location!=NSNotFound); +} + +- (BOOL)isThreadStateAvailable +{ + if ([super isThreadStateAvailable]==YES) + return YES; + + return (self.threadStateRange.location!=NSNotFound); +} + +- (BOOL)isBinaryImagesAvailable +{ + if ([super isBinaryImagesAvailable]==YES) + return YES; + + return (self.binaryImagesRange.location!=NSNotFound); +} + - (id)valueForKeyPath:(NSString *)inKeyPath { if ([inKeyPath isEqualToString:@"header.bundleIdentifier"]==YES) @@ -365,6 +449,51 @@ - (BOOL)isFullyParsed - (BOOL)finalizeParsing { + NSError * tError; + IPSReport * tIPSReport=self.ipsReport; + + if (tIPSReport!=nil) + { + if (tIPSReport.incident.threads!=nil) + { + _backtraces=[[CUICrashLogBacktraces alloc] initWithIPSIncident:tIPSReport.incident error:&tError]; + + if (_backtraces==nil) + { + // A COMPLETER + + return NO; + } + } + + { + _threadState=[[CUICrashLogThreadState alloc] initWithIPSIncident:tIPSReport.incident error:&tError]; + + if (_threadState==nil) + { + // A COMPLETER + + return NO; + } + } + + if (tIPSReport.incident.binaryImages!=nil) + { + _binaryImages=[[CUICrashLogBinaryImages alloc] initWithIPSIncident:tIPSReport.incident error:&tError]; + + if (_binaryImages==nil) + { + // A COMPLETER + + return NO; + } + } + + self.fullyParsed=YES; + + return YES; + } + NSMutableArray * tLines=[NSMutableArray array]; [self.rawText enumerateLinesUsingBlock:^(NSString * bLine, BOOL * bOutStop) { @@ -372,8 +501,6 @@ - (BOOL)finalizeParsing [tLines addObject:bLine]; }]; - NSError * tError; - if (self.backtracesRange.location!=NSNotFound) { _backtraces=[[CUICrashLogBacktraces alloc] initWithTextualRepresentation:[tLines subarrayWithRange:self.backtracesRange] reportVersion:_header.reportVersion error:&tError]; diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogBacktraces.h b/app_unexpectedly/app_unexpectedly/CUICrashLogBacktraces.h index ffdef26..5254649 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogBacktraces.h +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogBacktraces.h @@ -15,16 +15,18 @@ #import "CUIThread.h" +#import "IPSIncident.h" + @interface CUICrashLogBacktraces : NSObject @property (readonly) BOOL hasApplicationSpecificBacktrace; -@property (readonly) NSUInteger relativeCrashedThreadLine; - @property (nonatomic,readonly) NSArray * threads; - (instancetype)initWithTextualRepresentation:(NSArray *)inLines reportVersion:(NSUInteger)inReportVersion error:(NSError **)outError; +- (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **)outError; + - (CUIThread *)threadNamed:(NSString *)inName; - (CUIThread *)threadWithNumber:(NSUInteger)inThreadNumber; diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogBacktraces.m b/app_unexpectedly/app_unexpectedly/CUICrashLogBacktraces.m index 44730cc..64a93d4 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogBacktraces.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogBacktraces.m @@ -15,14 +15,14 @@ #import "CUIParsingErrors.h" +#import "NSArray+WBExtensions.h" + @interface CUICrashLogBacktraces () { NSMutableArray * _threads; } -@property BOOL hasApplicationSpecificBacktrace; - -@property NSUInteger relativeCrashedThreadLine; +@property (readwrite) BOOL hasApplicationSpecificBacktrace; - (BOOL)parseTextualRepresentation:(NSArray *)inLines outError:(NSError **)outError; @@ -30,8 +30,6 @@ - (BOOL)parseTextualRepresentation:(NSArray *)inLines outError:(NSError **)outEr @implementation CUICrashLogBacktraces - - - (instancetype)initWithTextualRepresentation:(NSArray *)inLines reportVersion:(NSUInteger)inReportVersion error:(NSError **)outError { if ([inLines isKindOfClass:[NSArray class]]==NO) @@ -46,8 +44,6 @@ - (instancetype)initWithTextualRepresentation:(NSArray *)inLines reportVersion:( if (self!=nil) { - _relativeCrashedThreadLine=NSNotFound; - _threads=[NSMutableArray array]; if ([self parseTextualRepresentation:inLines outError:outError]==NO) @@ -59,6 +55,47 @@ - (instancetype)initWithTextualRepresentation:(NSArray *)inLines reportVersion:( return self; } +- (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **)outError +{ + if ([inIncident isKindOfClass:[IPSIncident class]]==NO) + { + if (outError!=NULL) + *outError=[NSError errorWithDomain:NSPOSIXErrorDomain code:EINVAL userInfo:@{}]; + + return nil; + } + + self=[super init]; + + if (self!=nil) + { + NSArray * tThreads=inIncident.threads; + + if (tThreads==nil) + { + // A COMPLETER + + return nil; + } + + //_hasApplicationSpecificBacktrace=; + + _threads=[[tThreads WB_arrayByMappingObjectsUsingBlock:^CUIThread *(IPSThread * bThread, NSUInteger bIndex) { + + CUIThread * tThread=[[CUIThread alloc] initWithIPSThread:bThread atIndex:bIndex binaryImages:inIncident.binaryImages error:NULL]; + + if (tThread==nil) + { + // A COMPLETER + } + + return tThread; + }] mutableCopy]; + } + + return self; +} + #pragma mark - - (CUIThread *)threadNamed:(NSString *)inName @@ -120,9 +157,6 @@ - (BOOL)parseTextualRepresentation:(NSArray *)inLines outError:(NSError **)outEr if (tThread.isApplicationSpecificBacktrace==YES) self.hasApplicationSpecificBacktrace=YES; - if (tThread.isCrashed==YES) - self.relativeCrashedThreadLine=tThreadEntityLineStart; - [self->_threads addObject:tThread]; diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogBinaryImages.h b/app_unexpectedly/app_unexpectedly/CUICrashLogBinaryImages.h index 4c89b40..cdc0e63 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogBinaryImages.h +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogBinaryImages.h @@ -15,9 +15,11 @@ #import "CUIBinaryImage.h" +#import "IPSIncident.h" + @interface CUICrashLogBinaryImages : NSObject - @property (nonatomic,readonly) NSArray * binaryImages; + @property (readonly) NSArray * binaryImages; @property (nonatomic,readonly) NSArray * allUUIDs; @@ -25,6 +27,8 @@ - (instancetype)initWithTextualRepresentation:(NSArray *)inLines reportVersion:(NSUInteger)inReportVersion error:(NSError **)outError; +- (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **)outError; + - (CUIBinaryImage *)binaryImageWithIdentifier:(NSString *)inIdentifier; - (CUIBinaryImage *)binaryImageForMemoryAddress:(NSUInteger)inMemoryAddress; diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogBinaryImages.m b/app_unexpectedly/app_unexpectedly/CUICrashLogBinaryImages.m index 38c771c..0f126f2 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogBinaryImages.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogBinaryImages.m @@ -19,8 +19,6 @@ @interface CUICrashLogBinaryImages () { - NSMutableArray * _binaryImages; - NSMutableDictionary * _binaryImagesRegistry; NSMutableDictionary * _binaryNamesRegistry; @@ -28,6 +26,8 @@ @interface CUICrashLogBinaryImages () NSMutableDictionary * _binaryNameToIdentifierRosettaStone; } +@property (readwrite) NSArray * binaryImages; + - (BOOL)parseTextualRepresentation:(NSArray *)inLines reportVersion:(NSUInteger)inReportVersion outError:(NSError **)outError; @end @@ -49,7 +49,7 @@ - (instancetype)initWithTextualRepresentation:(NSArray *)inLines reportVersion:( if (self!=nil) { - _binaryImages=[NSMutableArray array]; + _binaryImages=[NSArray array]; _binaryImagesRegistry=[NSMutableDictionary dictionary]; @@ -66,6 +66,44 @@ - (instancetype)initWithTextualRepresentation:(NSArray *)inLines reportVersion:( return self; } +- (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **)outError +{ + if ([inIncident isKindOfClass:[IPSIncident class]]==NO) + { + if (outError!=NULL) + *outError=[NSError errorWithDomain:NSPOSIXErrorDomain code:EINVAL userInfo:@{}]; + + return nil; + } + + self=[super init]; + + if (self!=nil) + { + _binaryImages=(NSArray *)[inIncident.binaryImages WB_arrayByMappingObjectsUsingBlock:^CUIBinaryImage *(IPSImage * bImage, NSUInteger bIndex) { + + CUIBinaryImage * tBinaryImage=[[CUIBinaryImage alloc] initWithImage:bImage error:NULL]; + + if (tBinaryImage==nil) + { + // A COMPLETER + } + else + { + if (bIndex==0) + tBinaryImage.mainImage=YES; + } + + return tBinaryImage; + + }]; + + // A COMPLETER + } + + return self; +} + #pragma mark - - (BOOL)parseTextualRepresentation:(NSArray *)inLines reportVersion:(NSUInteger)inReportVersion outError:(NSError **)outError @@ -77,6 +115,8 @@ - (BOOL)parseTextualRepresentation:(NSArray *)inLines reportVersion:(NSUInteger) NSArray * tImagesLines=[inLines subarrayWithRange:NSMakeRange(1, inLines.count-1)]; + NSMutableArray * tBinaryImages=[NSMutableArray array]; + [tImagesLines enumerateObjectsUsingBlock:^(NSString * bLine, NSUInteger bLineNumber, BOOL *bOutStop) { NSUInteger tLineLength=bLine.length; @@ -102,7 +142,7 @@ - (BOOL)parseTextualRepresentation:(NSArray *)inLines reportVersion:(NSUInteger) if (bLineNumber==0) tBinaryImage.mainImage=YES; - [self->_binaryImages addObject:tBinaryImage]; + [tBinaryImages addObject:tBinaryImage]; self->_binaryImagesRegistry[tBinaryImage.identifier]=tBinaryImage; @@ -114,6 +154,8 @@ - (BOOL)parseTextualRepresentation:(NSArray *)inLines reportVersion:(NSUInteger) }]; + _binaryImages=[tBinaryImages copy]; + if (outError!=NULL && tError!=nil) *outError=tError; diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.h b/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.h index 42634ba..d768c60 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.h +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.h @@ -13,10 +13,14 @@ #import +#import "IPSIncident.h" + @interface CUICrashLogDianosticMessages : NSObject @property (readonly,copy) NSString * messages; - (instancetype)initWithTextualRepresentation:(NSArray *)inLines reportVersion:(NSUInteger)inReportVersion error:(NSError **)outError; +- (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **)outError; + @end diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m b/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m index 5969d2b..440455d 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m @@ -45,6 +45,28 @@ - (instancetype)initWithTextualRepresentation:(NSArray *)inLines reportVersion:( return self; } +- (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **)outError +{ + if ([inIncident isKindOfClass:[IPSIncident class]]==NO) + { + if (outError!=NULL) + *outError=[NSError errorWithDomain:NSPOSIXErrorDomain code:EINVAL userInfo:@{}]; + + return nil; + } + + self=[super init]; + + if (self!=nil) + { + IPSIncidentDiagnosticMessage * tDiagnosticMessage=inIncident.diagnosticMessage; + + //_messages=; + } + + return self; +} + #pragma mark - - (BOOL)parseTextualRepresentation:(NSArray *)inLines outError:(NSError **)outError diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogExceptionInformation.h b/app_unexpectedly/app_unexpectedly/CUICrashLogExceptionInformation.h index 78c5760..b396493 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogExceptionInformation.h +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogExceptionInformation.h @@ -13,6 +13,8 @@ #import +#import "IPSIncident.h" + @interface CUICrashLogExceptionInformation : NSObject @property (readonly) NSInteger crashedThreadIndex; // -1 -> Unknown @@ -31,6 +33,8 @@ - (instancetype)initWithTextualRepresentation:(NSArray *)inLines reportVersion:(NSUInteger)inReportVersion error:(NSError **)outError; +- (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **)outError; + - (NSString *)displayedExceptionType; @end diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogExceptionInformation.m b/app_unexpectedly/app_unexpectedly/CUICrashLogExceptionInformation.m index b47da39..9cb73cc 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogExceptionInformation.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogExceptionInformation.m @@ -15,6 +15,8 @@ #import "CUIParsingErrors.h" +#import "NSArray+WBExtensions.h" + @interface CUICrashLogExceptionInformation () @property NSInteger crashedThreadIndex; // -1 -> Unknown @@ -156,6 +158,44 @@ - (instancetype)initWithTextualRepresentation:(NSArray *)inLines reportVersion:( return self; } +- (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **)outError +{ + if ([inIncident isKindOfClass:[IPSIncident class]]==NO) + { + if (outError!=NULL) + *outError=[NSError errorWithDomain:NSPOSIXErrorDomain code:EINVAL userInfo:@{}]; + + return nil; + } + + self=[super init]; + + if (self!=nil) + { + IPSIncidentExceptionInformation * tExceptionInformation=inIncident.exceptionInformation; + + _crashedThreadIndex=tExceptionInformation.faultingThread; + + if (tExceptionInformation.legacyInfo.threadTriggered.queue!=nil) + _crashedThreadName=[NSString stringWithFormat:@"Dispatch queue: %@",tExceptionInformation.legacyInfo.threadTriggered.queue]; + + _exceptionType=tExceptionInformation.exception.type; + + _exceptionSignal=tExceptionInformation.exception.signal; + + _exceptionSubtype=tExceptionInformation.exception.codes; + + _exceptionCodes=[tExceptionInformation.exception.rawCodes WB_arrayByMappingObjectsUsingBlock:^NSString *(NSNumber * bNumber, NSUInteger bIndex) { + + return @"A COMPLETER"; + }]; + + _exceptionNote=(tExceptionInformation.isCorpse==YES) ? @"EXC_CORPSE_NOTIFY" : nil; + } + + return self; +} + #pragma mark - - (BOOL)parseTextualRepresentation:(NSArray *)inLines outError:(NSError **)outError diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogHeader.h b/app_unexpectedly/app_unexpectedly/CUICrashLogHeader.h index 03db3de..f927505 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogHeader.h +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogHeader.h @@ -13,6 +13,8 @@ #import +#import "IPSIncident.h" + #import "CUIOperatingSystemVersion.h" #include "CUICodeType.h" @@ -69,4 +71,6 @@ - (instancetype)initWithTextualRepresentation:(NSArray *)inLines error:(NSError **)outError; +- (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **)outError; + @end diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogHeader.m b/app_unexpectedly/app_unexpectedly/CUICrashLogHeader.m index 747dec4..4fe7e12 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogHeader.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogHeader.m @@ -191,6 +191,73 @@ - (instancetype)initWithTextualRepresentation:(NSArray *)inLines error:(NSError return self; } +- (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **)outError +{ + if ([inIncident isKindOfClass:[IPSIncident class]]==NO) + { + if (outError!=NULL) + *outError=[NSError errorWithDomain:NSPOSIXErrorDomain code:EINVAL userInfo:@{}]; + + return nil; + } + + self=[super init]; + + if (self!=nil) + { + IPSIncidentHeader * tIPSHeader=inIncident.header; + + _reportVersion=12; + + _dateTime=tIPSHeader.captureTime; + + _operatingSystemVersion=[[CUIOperatingSystemVersion alloc] initWithString:tIPSHeader.operatingSystemVersion.train]; + + _systemIntegrityProtectionEnabled=tIPSHeader.systemIntegrityProtectionEnable; + + _bridgeOSVersion=nil; + + + _anonymousUUID=tIPSHeader.crashReporterKey.UUIDString; + + + _codeType=CUICodeTypeARM_64; + + if ([tIPSHeader.cpuType isEqualToString:@"X86-64"]==YES) + { + _codeType=CUICodeTypeX86_64; + } + else if ([tIPSHeader.cpuType isEqualToString:@"ARM-64"]==YES) + { + _codeType=CUICodeTypeARM_64; + } + + /*_native=;*/ + + + _executablePath=tIPSHeader.processPath; + + _bundleIdentifier=tIPSHeader.bundleInfo.bundleIdentifier; + + _executableVersion=tIPSHeader.bundleInfo.bundleShortVersionString; + + + _responsibleProcessName=tIPSHeader.responsibleProcessName; + _responsibleProcessIdentifier=tIPSHeader.responsibleProcessID; + + _processName=tIPSHeader.processName; + _processIdentifier=tIPSHeader.processID; + + _parentProcessName=tIPSHeader.parentProcessName; + _parentProcessIdentifier=tIPSHeader.parentProcessID; + + + _userIdentifier=tIPSHeader.userID; + } + + return self; +} + #pragma mark - - (BOOL)parseTextualRepresentation:(NSArray *)inLines outError:(NSError **)outError diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogPresentationTextViewController.m b/app_unexpectedly/app_unexpectedly/CUICrashLogPresentationTextViewController.m index c66e025..38aeb85 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogPresentationTextViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogPresentationTextViewController.m @@ -17,7 +17,7 @@ -#import "CUIBinaryImage+UI.h" +#import "CUIBinaryImageUtility.h" #import "CUIApplicationPreferences.h" #import "CUIApplicationPreferences+Themes.h" @@ -25,7 +25,8 @@ #import "CUIThemesManager.h" #import "CUIThemeItemsGroup+UI.h" -#import "CUIRawTextTransformation.h" +#import "CUIIPSTransform.h" +#import "CUICrashDataTransform.h" #import "CUIExceptionTypePopUpViewController.h" @@ -60,21 +61,12 @@ @interface CUICrashLogPresentationTextViewController () _filterPattern options:NSCaseInsensitiveSearch].location!=NSNotFound) + if (self->_showsFileNames==NO) { - [self->_filteredAndSortedCrashLogsArray addObject:bCrashLog]; + NSString * tResponsibleProcessName=bCrashLog.header.responsibleProcessName; - return; + if (tResponsibleProcessName!=nil && [tResponsibleProcessName rangeOfString:self->_filterPattern options:NSCaseInsensitiveSearch].location!=NSNotFound) + { + [self->_filteredAndSortedCrashLogsArray addObject:bCrashLog]; + + return; + } + } + else + { + NSString * tCrashLogFileName=bCrashLog.crashLogFilePath.lastPathComponent.stringByDeletingPathExtension; + + if (tCrashLogFileName!=nil && [tCrashLogFileName rangeOfString:self->_filterPattern options:NSCaseInsensitiveSearch].location!=NSNotFound) + { + [self->_filteredAndSortedCrashLogsArray addObject:bCrashLog]; + + return; + } } if ([bCrashLog.exceptionInformation.exceptionType rangeOfString:self->_filterPattern options:NSCaseInsensitiveSearch].location!=NSNotFound || @@ -207,8 +233,10 @@ - (void)refreshList case CUICrashLogsSortProcessNameAscending: - [_filteredAndSortedCrashLogsArray sortUsingSelector:@selector(compareProcessName:)]; - + if (_showsFileNames==NO) + [_filteredAndSortedCrashLogsArray sortUsingSelector:@selector(compareProcessName:)]; + else + [_filteredAndSortedCrashLogsArray sortUsingSelector:@selector(compareCrashLogFileName:)]; break; } @@ -263,6 +291,9 @@ - (void)refreshList - (BOOL)validateMenuItem:(NSMenuItem *)inMenuItem { + if (inMenuItem.tag==-1) + return NO; + SEL tAction=inMenuItem.action; if (tAction==@selector(showInFinder:) || @@ -319,6 +350,13 @@ - (BOOL)validateMenuItem:(NSMenuItem *)inMenuItem return YES; } + if (tAction==@selector(switchDisplayedName:)) + { + inMenuItem.state=(inMenuItem.tag==_showsFileNames) ? NSOnState : NSOffState; + + return YES; + } + if (tAction==@selector(switchSortType:)) { inMenuItem.state=(inMenuItem.tag==_sortType) ? NSOnState : NSOffState; @@ -326,6 +364,8 @@ - (BOOL)validateMenuItem:(NSMenuItem *)inMenuItem return YES; } + + return YES; } @@ -451,9 +491,19 @@ - (IBAction)takeFilterPatternFrom:(NSSearchField *)sender [self refreshList]; } -- (IBAction)switchSortType:(NSPopUpButton *)sender +- (IBAction)switchDisplayedName:(NSMenuItem *)sender { - NSInteger tTag=sender.selectedTag; + NSInteger tTag=sender.tag; + + if (tTag!=_showsFileNames) + { + [CUIApplicationPreferences sharedPreferences].crashLogsShowFileNames=tTag; + } +} + +- (IBAction)switchSortType:(NSMenuItem *)sender +{ + NSInteger tTag=sender.tag; if (tTag!=_sortType) { @@ -476,10 +526,27 @@ - (NSView *)tableView:(NSTableView *)inTableView viewForTableColumn:(NSTableColu CUIRawCrashLog * tCrashLog=_filteredAndSortedCrashLogsArray[inRow]; - tTableCellView.imageView.image=((CUICrashLog *)tCrashLog).processIcon; - + if (_showsFileNames==NO) + { + tTableCellView.imageView.image=((CUICrashLog *)tCrashLog).processIcon; - tTableCellView.textField.stringValue=tCrashLog.processName; + tTableCellView.textField.stringValue=tCrashLog.processName; + tTableCellView.textField.lineBreakMode=NSLineBreakByTruncatingTail; + } + else + { + static NSImage * sCrashLogFileIcon=nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + + sCrashLogFileIcon=[[NSWorkspace sharedWorkspace] iconForFileType:@"com.apple.crashreport"]; + + }); + + tTableCellView.imageView.image=sCrashLogFileIcon; + tTableCellView.textField.stringValue=tCrashLog.crashLogFilePath.lastPathComponent.stringByDeletingPathExtension; + tTableCellView.textField.lineBreakMode=NSLineBreakByTruncatingMiddle; + } tTableCellView.dateLabel.formatter=_crashLogDateFormatter; tTableCellView.dateLabel.objectValue=tCrashLog.dateTime; @@ -677,4 +744,11 @@ - (void)crashLogsSortTypeDidChange:(NSNotification *)inNotification [self refreshList]; } +- (void)showFileNamesDidChange:(NSNotification *)inNotification +{ + _showsFileNames=[CUIApplicationPreferences sharedPreferences].crashLogsShowFileNames; + + [self refreshList]; +} + @end diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogsProvider.m b/app_unexpectedly/app_unexpectedly/CUICrashLogsProvider.m index a8c42d5..bb1ce72 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogsProvider.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogsProvider.m @@ -54,7 +54,10 @@ - (id)crashLogWithContentsOfFile:(NSString *)inPath error:(NSError **)outError return nil; } - if ([inPath.pathExtension caseInsensitiveCompare:@"crash"]!=NSOrderedSame) + NSString * tExtension=inPath.pathExtension; + + if ([tExtension caseInsensitiveCompare:@"crash"]!=NSOrderedSame && + [tExtension caseInsensitiveCompare:@"ips"]!=NSOrderedSame) return nil; NSError * tError=nil; @@ -123,7 +126,10 @@ - (NSArray *)crashLogsForDirectory:(NSString *)inDirectoryPath error:(NSError ** NSArray * tCrashLogsArray=[tArray WB_arrayByMappingObjectsLenientlyUsingBlock:^id(NSString * bComponent, NSUInteger bIndex) { - if ([bComponent.pathExtension caseInsensitiveCompare:@"crash"]!=NSOrderedSame) + NSString * tComponentExtension=bComponent.pathExtension; + + if ([tComponentExtension caseInsensitiveCompare:@"crash"]!=NSOrderedSame && + [tComponentExtension caseInsensitiveCompare:@"ips"]!=NSOrderedSame) return nil; NSString * tFilePath=[inDirectoryPath stringByAppendingPathComponent:bComponent]; diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogsSourceSmart.m b/app_unexpectedly/app_unexpectedly/CUICrashLogsSourceSmart.m index e141a51..531dc95 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogsSourceSmart.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogsSourceSmart.m @@ -16,6 +16,10 @@ #import "CUICrashLogsSourceAll.h" #define SMARTSOURCE_VERSION_1 1 +#define SMARTSOURCE_VERSION_2 2 + +#define SMARTSOURCE_CURRENTVERSION SMARTSOURCE_VERSION_2 +#define SMARTSOURCE_MAXIMUMSUPPORTEDVERSION SMARTSOURCE_VERSION_2 NSString * const CUICrashLogsSourcesSmartVersionKey=@"version"; @@ -44,7 +48,7 @@ - (instancetype)init self.name=NSLocalizedString(@"Untitled source", @""); - _version=SMARTSOURCE_VERSION_1; + _version=SMARTSOURCE_CURRENTVERSION; _predicate=[NSPredicate predicateWithFormat:@"processName = \"MyApplication\""]; } @@ -74,6 +78,13 @@ - (instancetype)initWithRepresentation:(NSDictionary *)inRepresentation _version=SMARTSOURCE_VERSION_1; } + if (_version>SMARTSOURCE_MAXIMUMSUPPORTEDVERSION) + { + NSLog(@"Smart Source object version (%lu) is not supported by this version of Unexpectedly",(unsigned long)_version); + + return nil; + } + NSString * tString=inRepresentation[CUICrashLogsSourcesSmartPredicateKey]; if ([tString isKindOfClass:[NSString class]]==NO) diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogsSourceSmartEditorPanel.m b/app_unexpectedly/app_unexpectedly/CUICrashLogsSourceSmartEditorPanel.m index d4147e7..ca2df87 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogsSourceSmartEditorPanel.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogsSourceSmartEditorPanel.m @@ -52,7 +52,9 @@ - (void)windowDidLoad NSArray *keyPaths = @[[NSExpression expressionForKeyPath:@"processName"], [NSExpression expressionForKeyPath:@"header.bundleIdentifier"], [NSExpression expressionForKeyPath:@"header.executablePath"], - [NSExpression expressionForKeyPath:@"exceptionInformation.crashedThreadName"]]; + [NSExpression expressionForKeyPath:@"header.executableVersion"], + [NSExpression expressionForKeyPath:@"exceptionInformation.crashedThreadName"], + [NSExpression expressionForKeyPath:@"header.operatingSystemVersion.stringValue"]]; NSPredicateEditorRowTemplate * tRowTemplate1 = [[NSPredicateEditorRowTemplate alloc] initWithLeftExpressions:keyPaths rightExpressionAttributeType:NSStringAttributeType @@ -97,6 +99,8 @@ - (void)windowDidLoad options:(NSCaseInsensitivePredicateOption | NSDiacriticInsensitivePredicateOption)]; + // Row Template 4 + NSPredicateEditorRowTemplate * tRowTemplate4 = [[NSPredicateEditorRowTemplate alloc] initWithLeftExpressions:@[[NSExpression expressionForKeyPath:@"exceptionSignal"]] rightExpressions:@[[NSExpression expressionForConstantValue:@"SIGABRT"], [NSExpression expressionForConstantValue:@"SIGBUS"], @@ -112,9 +116,24 @@ - (void)windowDidLoad options:(NSCaseInsensitivePredicateOption | NSDiacriticInsensitivePredicateOption)]; - // Row Template 4 + // Row Template 5 - NSPredicateEditorRowTemplate * tRowTemplate5 = [[NSPredicateEditorRowTemplate alloc] initWithLeftExpressions:@[[NSExpression expressionForKeyPath:@"reportSourceTypeNumber"]] + keyPaths = @[[NSExpression expressionForKeyPath:@"crashLogFileName"]]; + + NSPredicateEditorRowTemplate * tRowTemplate5 = [[NSPredicateEditorRowTemplate alloc] initWithLeftExpressions:keyPaths + rightExpressionAttributeType:NSStringAttributeType + modifier:NSDirectPredicateModifier + operators:@[@(NSEqualToPredicateOperatorType), + @(NSNotEqualToPredicateOperatorType), + @(NSBeginsWithPredicateOperatorType), + @(NSEndsWithPredicateOperatorType), + @(NSContainsPredicateOperatorType)] + options:(NSCaseInsensitivePredicateOption | + NSDiacriticInsensitivePredicateOption)]; + + // Row Template 6 + + NSPredicateEditorRowTemplate * tRowTemplate6 = [[NSPredicateEditorRowTemplate alloc] initWithLeftExpressions:@[[NSExpression expressionForKeyPath:@"reportSourceTypeNumber"]] rightExpressions:@[[NSExpression expressionForConstantValue:@(CUICrashLogReportSourceTypeUser)], [NSExpression expressionForConstantValue:@(CUICrashLogReportSourceTypeSystem)], [NSExpression expressionForConstantValue:@(CUICrashLogReportSourceTypeOther)]] @@ -124,12 +143,14 @@ - (void)windowDidLoad NSDiacriticInsensitivePredicateOption)]; + + NSArray *compoundTypes = @[@(NSAndPredicateType), @(NSOrPredicateType)]; NSPredicateEditorRowTemplate * tRowTemplateCompound = [[NSPredicateEditorRowTemplate alloc] initWithCompoundTypes:compoundTypes]; - _predicatorEditor.rowTemplates=@[tRowTemplate1, tRowTemplate2,tRowTemplate3,tRowTemplate4,tRowTemplate5,tRowTemplateCompound]; + _predicatorEditor.rowTemplates=@[tRowTemplate1, tRowTemplate2,tRowTemplate3,tRowTemplate4,tRowTemplate5,tRowTemplate6,tRowTemplateCompound]; // Default button diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m b/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m index 441a94b..7a26bf9 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m @@ -783,7 +783,8 @@ - (NSDragOperation)tableView:(NSTableView *)inTableView validateDrop:(id )inf if (tIsDirectory==NO) { - if ([bPath.pathExtension caseInsensitiveCompare:@"crash"]==NSOrderedSame) + if ([bPath.pathExtension caseInsensitiveCompare:@"crash"]==NSOrderedSame || + [bPath.pathExtension caseInsensitiveCompare:@"ips"]==NSOrderedSame) { tSource=[[CUICrashLogsSourceFile alloc] initWithContentsOfFileSystemItemAtPath:bPath error:&tError]; diff --git a/app_unexpectedly/app_unexpectedly/CUIRawTextTransformation.h b/app_unexpectedly/app_unexpectedly/CUIDataTransform.h similarity index 76% rename from app_unexpectedly/app_unexpectedly/CUIRawTextTransformation.h rename to app_unexpectedly/app_unexpectedly/CUIDataTransform.h index 99667e3..8a3b281 100644 --- a/app_unexpectedly/app_unexpectedly/CUIRawTextTransformation.h +++ b/app_unexpectedly/app_unexpectedly/CUIDataTransform.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2020-2021, Stephane Sudre + Copyright (c) 2021, Stephane Sudre All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -11,34 +11,11 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - - -/* - - JIRA formatting - - {{monospaced text}} - - {color:#d04437}colored text{color} - - _Italic_ - - *bold* - - +underline+ - - ------------------------------------ - - */ - - #import #import "CUITextModeDisplaySettings.h" -#import "CUICrashLog.h" - - +extern NSString * const CUIDataTransformErrorDomain; extern NSString * const CUIGenericAnchorAttributeName; @@ -48,7 +25,6 @@ extern NSString * const CUIThreadAnchorAttributeName; extern NSString * const CUIBinaryAnchorAttributeName; - typedef NS_ENUM(NSUInteger, CUIHyperlinksStyle) { CUIHyperlinksNone, @@ -56,18 +32,22 @@ typedef NS_ENUM(NSUInteger, CUIHyperlinksStyle) CUIHyperlinksHTML }; +@interface CUIDataTransform : NSObject + + @property (nonatomic) CUIHyperlinksStyle hyperlinksStyle; + + @property (nonatomic) CUITextModeDisplaySettings * displaySettings; + @property (nonatomic) CGFloat fontSizeDelta; -@interface CUIRawTextTransformation : NSObject - @property CUIHyperlinksStyle hyperlinksStyle; + @property (nonatomic) id input; - @property CUITextModeDisplaySettings * displaySettings; + @property (readonly) NSAttributedString * output; - @property CGFloat fontSizeDelta; -- (NSAttributedString *)transformCrashLog:(CUICrashLog *)inCrashLog; + @property (readonly) NSError * error; -- (NSAttributedString *)transformCrashLog:(CUICrashLog *)inCrashLog lines:(NSArray *)inLines; +- (BOOL)transform; @end diff --git a/app_unexpectedly/app_unexpectedly/CUIDataTransform.m b/app_unexpectedly/app_unexpectedly/CUIDataTransform.m new file mode 100644 index 0000000..5b44b44 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/CUIDataTransform.m @@ -0,0 +1,95 @@ +/* + Copyright (c) 2021, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "CUIDataTransform.h" + +NSString * const CUIDataTransformErrorDomain=@"fr.whitebox.data-tranform.error"; + + +NSString * const CUIGenericAnchorAttributeName=@"CUIGenericAnchorAttributeName"; + +NSString * const CUISectionAnchorAttributeName=@"CUISectionAnchorAttributeName"; + +NSString * const CUIThreadAnchorAttributeName=@"CUIThreadAnchorAttributeName"; + +NSString * const CUIBinaryAnchorAttributeName=@"CUIBinaryAnchorAttributeName"; + +@interface CUIDataTransform () + + @property (nonatomic,readwrite) NSAttributedString * output; + + @property (readwrite) NSError * error; + +- (void)setOutput:(NSAttributedString *)inOutput; + +@end + +@implementation CUIDataTransform + +- (instancetype)init +{ + self=[super init]; + + if (self!=nil) + { + _hyperlinksStyle=CUIHyperlinksInternal; + } + + return self; +} + +#pragma mark - + +- (void)setHyperlinksStyle:(CUIHyperlinksStyle)inHyperlinksStyle +{ + _output=nil; + + _hyperlinksStyle=inHyperlinksStyle; +} + +- (void)setDisplaySettings:(CUITextModeDisplaySettings *)inDisplaySettings +{ + _output=nil; + + _displaySettings=inDisplaySettings; +} + +- (void)setFontSizeDelta:(CGFloat)inFontSizeDelta +{ + _output=nil; + + _fontSizeDelta=inFontSizeDelta; +} + +- (void)setInput:(id)inInput +{ + _output=nil; + + _input=inInput; +} + +- (void)setOutput:(NSAttributedString *)inOutput +{ + _output=inOutput; +} + +#pragma mark - + +- (BOOL)transform +{ + self.output=nil; + + return YES; +} + +@end diff --git a/app_unexpectedly/app_unexpectedly/CUIIPSTransform.h b/app_unexpectedly/app_unexpectedly/CUIIPSTransform.h new file mode 100644 index 0000000..1f05c1f --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/CUIIPSTransform.h @@ -0,0 +1,26 @@ +/* + Copyright (c) 2021, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#import "CUIDataTransform.h" + +#import "IPSReport.h" + +#import "CUICrashLog.h" + +@interface CUIIPSTransform : CUIDataTransform + +@property (nonatomic) CUICrashLog * crashlog; + +@end + diff --git a/app_unexpectedly/app_unexpectedly/CUIIPSTransform.m b/app_unexpectedly/app_unexpectedly/CUIIPSTransform.m new file mode 100644 index 0000000..aba93b8 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/CUIIPSTransform.m @@ -0,0 +1,1476 @@ +/* + Copyright (c) 2021, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#import "CUIIPSTransform.h" + +#import "IPSDateFormatter.h" + +#import "IPSThreadState+RegisterDisplayName.h" +#import "IPSImage+UserCode.h" + +#import "CUIApplicationPreferences.h" +#import "CUIApplicationPreferences+Themes.h" + +#import "CUICrashLogBinaryImages.h" + +#import "CUIBinaryImageUtility.h" + +#import "CUIThemesManager.h" +#import "CUIThemeItemsGroup+UI.h" + +#ifndef __DISABLE_SYMBOLICATION_ +#import "CUIdSYMBundlesManager.h" + +#import "CUISymbolicationManager.h" + +#import "CUISymbolicationDataFormatter.h" +#endif + +#import "CUIStackFrame.h" + +@interface CUIDataTransform (Private) + +- (void)setOutput:(NSAttributedString *)inOutput; + +@end + +@interface CUIIPSTransform () +{ + NSDictionary * _cachedPlainTextAttributes; + + NSDictionary * _cachedKeyAttributes; + + NSDictionary * _cachedVersionAttributes; + + NSDictionary * _cachedPathAttributes; + + NSDictionary * _cachedUUIDAttributes; + + NSDictionary * _cachedCrashedThreadLabelAttributes; + + NSDictionary * _cachedThreadLabelAttributes; + + NSDictionary * _cachedExecutableCodeAttributes; + + NSDictionary * _cachedOSCodeAttributes; + + NSDictionary * _cachedMemoryAddressAttributes; + + + NSDictionary * _cachedRegisterValueAttributes; + + + NSDictionary * _cachedParsingErrorAttributes; + + NSColor * _cachedUnderlineColor; + + + NSCharacterSet * _whitespaceCharacterSet; + +#ifndef __DISABLE_SYMBOLICATION_ + CUISymbolicationDataFormatter * _symbolicationDataFormatter; +#endif +} + +- (void)updatesCachedAttributes; + +@end + +@implementation CUIIPSTransform + ++ (NSString *)binaryImageStringForAddress:(NSUInteger)inAddress +{ + NSString * tString=[NSString stringWithFormat:@"0x%lx",inAddress]; + + NSUInteger tLength=tString.length; + + NSString * tSpaceString=@" "; + + return [[tSpaceString substringFromIndex:tLength] stringByAppendingString:tString]; +} + +- (instancetype)init +{ + self=[super init]; + + if (self!=nil) + { + +#ifndef __DISABLE_SYMBOLICATION_ + _symbolicationDataFormatter=[CUISymbolicationDataFormatter new]; +#endif + + _whitespaceCharacterSet=[NSCharacterSet whitespaceCharacterSet]; + } + + return self; +} + +#pragma mark - + +- (void)updatesCachedAttributes +{ + NSFontManager * tFontManager = [NSFontManager sharedFontManager]; + + CUIThemesManager * tThemesManager=[CUIThemesManager sharedManager]; + + CUIThemeItemsGroup * tItemsGroup=[tThemesManager.currentTheme itemsGroupWithIdentifier:[CUIApplicationPreferences groupIdentifierForPresentationMode:CUIPresentationModeText]]; + + NSMutableArray * tItemsNames=[tItemsGroup.itemsNames mutableCopy]; + + [tItemsNames removeObject:CUIThemeItemBackground]; + [tItemsNames removeObject:CUIThemeItemLineNumber]; + [tItemsNames removeObject:CUIThemeItemSelectionBackground]; + [tItemsNames removeObject:CUIThemeItemSelectionText]; + + // TabStops settings + + NSMutableParagraphStyle * tMutableParagraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; + + tMutableParagraphStyle.tabStops=@[]; + + [tMutableParagraphStyle setLineSpacing:2.0]; + + for (NSUInteger tIndex = 1; tIndex <= 20; tIndex++) + { + NSTextTab *tabStop = [[NSTextTab alloc] initWithType:NSLeftTabStopType location: 40 * (tIndex)]; + [tMutableParagraphStyle addTabStop:tabStop]; + } + + NSMutableDictionary * tMutableDictionary=[NSMutableDictionary dictionary]; + + for(NSString * tItemName in tItemsNames) + { + CUIThemeItemAttributes * tItemAttributes=[tItemsGroup attributesForItem:tItemName]; + + NSFont * tFont=tItemAttributes.font; + + NSFont * tAdjustedFont=nil; + + tAdjustedFont=[tFontManager convertFont:tFont toSize:tFont.pointSize + self.fontSizeDelta]; + + if (tAdjustedFont==nil) + tAdjustedFont=tFont; + + tMutableDictionary[tItemName]=@{ + NSFontAttributeName:tAdjustedFont, + NSForegroundColorAttributeName:tItemAttributes.color, + NSParagraphStyleAttributeName:tMutableParagraphStyle + }; + } + + _cachedPlainTextAttributes=tMutableDictionary[CUIThemeItemPlainText]; + + NSColor * tForegroundColor=_cachedPlainTextAttributes[NSForegroundColorAttributeName]; + _cachedUnderlineColor=[tForegroundColor colorWithAlphaComponent:0.35]; + + _cachedKeyAttributes=tMutableDictionary[CUIThemeItemKey]; + _cachedThreadLabelAttributes=tMutableDictionary[CUIThemeItemThreadLabel]; + _cachedCrashedThreadLabelAttributes=tMutableDictionary[CUIThemeItemCrashedThreadLabel]; + + _cachedExecutableCodeAttributes=tMutableDictionary[CUIThemeItemExecutableCode]; + _cachedOSCodeAttributes=tMutableDictionary[CUIThemeItemOSCode]; + + _cachedVersionAttributes=tMutableDictionary[CUIThemeItemVersion]; + _cachedMemoryAddressAttributes=tMutableDictionary[CUIThemeItemMemoryAddress]; + _cachedPathAttributes=tMutableDictionary[CUIThemeItemPath]; + _cachedUUIDAttributes=tMutableDictionary[CUIThemeItemUUID]; + _cachedRegisterValueAttributes=tMutableDictionary[CUIThemeItemRegisterValue]; + + + NSMutableDictionary * tParsingErrorDictionary=[_cachedPlainTextAttributes mutableCopy]; + + tParsingErrorDictionary[NSForegroundColorAttributeName]=[NSColor redColor]; + + _cachedParsingErrorAttributes=[tParsingErrorDictionary copy]; +} + +#pragma mark - + +- (NSAttributedString *)attributedStringForKey:(NSString *)inString +{ + if (inString==nil) + return nil; + + return [[NSAttributedString alloc] initWithString:inString attributes:_cachedKeyAttributes]; +} + +- (NSAttributedString *)attributedStringForKeyWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2) +{ + if (format==nil) + return nil; + + va_list args; + va_start(args, format); + NSString * tString=[[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + return [[NSAttributedString alloc] initWithString:tString attributes:_cachedKeyAttributes]; +} + + +- (NSAttributedString *)attributedStringForPlainText:(NSString *)inString +{ + if (inString==nil) + return nil; + + return [[NSAttributedString alloc] initWithString:inString attributes:_cachedPlainTextAttributes]; +} + +- (NSAttributedString *)attributedStringForPlainTextWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2) +{ + if (format==nil) + return nil; + + va_list args; + va_start(args, format); + NSString * tString=[[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + return [[NSAttributedString alloc] initWithString:tString attributes:_cachedPlainTextAttributes]; +} + +- (NSAttributedString *)attributedStringForPath:(NSString *)inString +{ + if (inString==nil) + return nil; + + return [[NSAttributedString alloc] initWithString:inString attributes:_cachedPathAttributes]; +} + +- (NSAttributedString *)attributedStringForPathWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2) +{ + if (format==nil) + return nil; + + va_list args; + va_start(args, format); + NSString * tString=[[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + return [[NSAttributedString alloc] initWithString:tString attributes:_cachedPathAttributes]; +} + +- (NSAttributedString *)attributedStringForVersion:(NSString *)inString +{ + if (inString==nil) + return nil; + + return [[NSAttributedString alloc] initWithString:inString attributes:_cachedVersionAttributes]; +} + +- (NSAttributedString *)attributedStringForVersionWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2) +{ + if (format==nil) + return nil; + + va_list args; + va_start(args, format); + NSString * tString=[[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + return [[NSAttributedString alloc] initWithString:tString attributes:_cachedVersionAttributes]; +} + +- (NSAttributedString *)attributedStringForUUID:(NSString *)inString +{ + if (inString==nil) + return nil; + + return [[NSAttributedString alloc] initWithString:inString attributes:_cachedUUIDAttributes]; +} + +- (NSAttributedString *)attributedStringForUUIDWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2) +{ + if (format==nil) + return nil; + + va_list args; + va_start(args, format); + NSString * tString=[[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + return [[NSAttributedString alloc] initWithString:tString attributes:_cachedUUIDAttributes]; +} + +- (NSAttributedString *)attributedStringForThreadLabel:(NSString *)inString +{ + if (inString==nil) + return nil; + + return [[NSAttributedString alloc] initWithString:inString attributes:_cachedThreadLabelAttributes]; +} + +- (NSAttributedString *)attributedStringForThreadLabelWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2) +{ + if (format==nil) + return nil; + + va_list args; + va_start(args, format); + NSString * tString=[[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + return [[NSAttributedString alloc] initWithString:tString attributes:_cachedThreadLabelAttributes]; +} + +- (NSAttributedString *)attributedStringForCrashedThreadLabel:(NSString *)inString +{ + if (inString==nil) + return nil; + + return [[NSAttributedString alloc] initWithString:inString attributes:_cachedCrashedThreadLabelAttributes]; +} + +- (NSAttributedString *)attributedStringForCrashedThreadLabelWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2) +{ + if (format==nil) + return nil; + + va_list args; + va_start(args, format); + NSString * tString=[[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + return [[NSAttributedString alloc] initWithString:tString attributes:_cachedCrashedThreadLabelAttributes]; +} + +- (NSAttributedString *)attributedStringForMemoryAddress:(NSString *)inString +{ + if (inString==nil) + return nil; + + return [[NSAttributedString alloc] initWithString:inString attributes:_cachedMemoryAddressAttributes]; +} + +- (NSAttributedString *)attributedStringForMemoryAddressWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2) +{ + if (format==nil) + return nil; + + va_list args; + va_start(args, format); + NSString * tString=[[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + return [[NSAttributedString alloc] initWithString:tString attributes:_cachedMemoryAddressAttributes]; +} + +- (NSAttributedString *)attributedStringForUser:(BOOL)inUserCode code:(NSString *)inString +{ + if (inString==nil) + return nil; + + return [[NSAttributedString alloc] initWithString:inString attributes:(inUserCode==YES) ? _cachedExecutableCodeAttributes : _cachedOSCodeAttributes]; +} + +- (NSAttributedString *)attributedStringForUser:(BOOL)inUserCode codeWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(2,3) +{ + if (format==nil) + return nil; + + va_list args; + va_start(args, format); + NSString * tString=[[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + return [[NSAttributedString alloc] initWithString:tString attributes:(inUserCode==YES) ? _cachedExecutableCodeAttributes : _cachedOSCodeAttributes]; +} + +- (NSAttributedString *)attributedStringForRegisterValueWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2) +{ + if (format==nil) + return nil; + + va_list args; + va_start(args, format); + NSString * tString=[[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + return [[NSAttributedString alloc] initWithString:tString attributes:_cachedRegisterValueAttributes]; +} + +- (NSAttributedString *)attributedStringForUser:(BOOL)inUserCode binaryImageIdentifier:(NSString *)inIdentifier +{ + if (inIdentifier==nil) + return nil; + + NSMutableDictionary * tMutableDictionary=[_cachedPlainTextAttributes mutableCopy]; + tMutableDictionary[NSForegroundColorAttributeName]=(inUserCode==YES) ? [CUIBinaryImageUtility colorForUserCode]: [CUIBinaryImageUtility colorForIdentifier:inIdentifier]; + + return [[NSAttributedString alloc] initWithString:(inUserCode==NO) ? inIdentifier : [NSString stringWithFormat:@"+%@",inIdentifier] + attributes:tMutableDictionary]; +} + +#pragma mark - + +- (NSArray *)attributedLinesForHeaderOfIncident:(IPSIncident *)inIncident +{ + IPSIncidentHeader * tHeader=inIncident.header; + + NSMutableArray * tMutableArray=[NSMutableArray array]; + + NSMutableAttributedString * tMutableAttributedString=[[self attributedStringForKey:@"Process:"] mutableCopy]; + + NSDictionary * tJumpAnchorAttributes=@{ + CUISectionAnchorAttributeName:@"section:Header" + }; + + [tMutableAttributedString addAttributes:tJumpAnchorAttributes range:NSMakeRange(0,tMutableAttributedString.length)]; + + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@" %@ [%d]",tHeader.processName,tHeader.processID]]; + + [tMutableArray addObject:tMutableAttributedString]; + + + tMutableAttributedString=[[self attributedStringForKey:@"Path:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPath:tHeader.processPath]]; + + [tMutableArray addObject:tMutableAttributedString]; + + + IPSBundleInfo * tBundleInfo=tHeader.bundleInfo; + + tMutableAttributedString=[[self attributedStringForKey:@"Identifier:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@" %@",(tBundleInfo.bundleIdentifier!=nil) ? tBundleInfo.bundleIdentifier : tHeader.processName]]; + + [tMutableArray addObject:tMutableAttributedString]; + + + tMutableAttributedString=[[self attributedStringForKey:@"Version:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + + [tMutableAttributedString appendAttributedString:[self attributedStringForVersion:(tBundleInfo.bundleShortVersionString!=nil) ? tBundleInfo.bundleShortVersionString : @"???"]]; + + if (tBundleInfo.bundleVersion!=nil) + [tMutableAttributedString appendAttributedString:[self attributedStringForVersionWithFormat:@" (%@)",tBundleInfo.bundleVersion]]; + + [tMutableArray addObject:tMutableAttributedString]; + + + tMutableAttributedString=[[self attributedStringForKey:@"Code Type:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@" %@",tHeader.cpuType]]; + + [tMutableArray addObject:tMutableAttributedString]; + + + tMutableAttributedString=[[self attributedStringForKey:@"Parent Process:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@" %@ [%d]",tHeader.parentProcessName,tHeader.parentProcessID]]; + + [tMutableArray addObject:tMutableAttributedString]; + + if (tHeader.responsibleProcessName!=nil) + { + tMutableAttributedString=[[self attributedStringForKey:@"Responsible:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@" %@ [%d]",tHeader.responsibleProcessName,tHeader.responsibleProcessID]]; + + [tMutableArray addObject:tMutableAttributedString]; + } + + tMutableAttributedString=[[self attributedStringForKey:@"User ID:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@" %d",tHeader.userID]]; + + [tMutableArray addObject:tMutableAttributedString]; + + [tMutableArray addObject:@""]; + + tMutableAttributedString=[[self attributedStringForKey:@"Date/Time:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@" %@",[[IPSDateFormatter sharedFormatter] stringFromDate:tHeader.captureTime]]]; + + [tMutableArray addObject:tMutableAttributedString]; + + tMutableAttributedString=[[self attributedStringForKey:@"OS Version:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + [tMutableAttributedString appendAttributedString:[self attributedStringForVersionWithFormat:@"%@ (%@)",tHeader.operatingSystemVersion.train,tHeader.operatingSystemVersion.build]]; + + [tMutableArray addObject:tMutableAttributedString]; + + tMutableAttributedString=[[self attributedStringForKey:@"Report Version:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" 12"]]; + + [tMutableArray addObject:tMutableAttributedString]; + + tMutableAttributedString=[[self attributedStringForKey:@"Anonymous UUID:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + [tMutableAttributedString appendAttributedString:[self attributedStringForUUID:tHeader.crashReporterKey.UUIDString]]; + + [tMutableArray addObject:tMutableAttributedString]; + + [tMutableArray addObject:@""]; + + if (tHeader.sleepWakeUUID!=nil) + { + tMutableAttributedString=[[self attributedStringForKey:@"Sleep/Wake UUID:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + [tMutableAttributedString appendAttributedString:[self attributedStringForUUID:tHeader.sleepWakeUUID.UUIDString]]; + + [tMutableArray addObject:tMutableAttributedString]; + } + + tMutableAttributedString=[[self attributedStringForKey:@"Time Awake Since Boot:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@" %lu seconds",(unsigned long)tHeader.uptime]]; + + [tMutableArray addObject:tMutableAttributedString]; + + [tMutableArray addObject:@""]; + + tMutableAttributedString=[[self attributedStringForKey:@"System Integrity Protection:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@" %@",(tHeader.systemIntegrityProtectionEnable==YES) ? @"enabled" : @"disabled"]]; + + [tMutableArray addObject:tMutableAttributedString]; + + [tMutableArray addObject:@""]; + + return tMutableArray; +} + +- (NSArray *)attributedLinesForExceptionInformationOfIncident:(IPSIncident *)inIncident +{ + IPSIncidentExceptionInformation * tExceptionInformation=inIncident.exceptionInformation; + + NSMutableArray * tMutableArray=[NSMutableArray array]; + + NSMutableAttributedString * tMutableAttributedString=[[self attributedStringForKey:@"Crashed Thread:"] mutableCopy]; + + NSDictionary * tJumpAnchorAttributes=@{ + CUISectionAnchorAttributeName:@"section:Exception Information" + }; + + [tMutableAttributedString addAttributes:tJumpAnchorAttributes range:NSMakeRange(0,tMutableAttributedString.length)]; + + if ((self.displaySettings.visibleSections & CUIDocumentBacktracesSection)==CUIDocumentBacktracesSection && + inIncident.threads.count>0) + { + switch(self.hyperlinksStyle) + { + case CUIHyperlinksInternal: + + [tMutableAttributedString addAttributes:@{ + NSLinkAttributeName:[NSURL URLWithString:@"a://crashed_thread"] + } + range:NSMakeRange(0,tMutableAttributedString.length)]; + + break; + + case CUIHyperlinksHTML: + + [tMutableAttributedString addAttributes:@{ + NSLinkAttributeName:[NSURL URLWithString:@"sharp://crashed_thread"] + } + range:NSMakeRange(0,tMutableAttributedString.length)]; + + break; + + default: + + break; + } + } + + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + [tMutableAttributedString appendAttributedString:[self attributedStringForCrashedThreadLabelWithFormat:@"%lu",(unsigned long)tExceptionInformation.faultingThread]]; + + IPSLegacyInfo * tLegacyInfo=tExceptionInformation.legacyInfo; + + if (tLegacyInfo.threadTriggered.queue!=nil) + [tMutableAttributedString appendAttributedString:[self attributedStringForCrashedThreadLabelWithFormat:@" Dispatch queue: %@",tLegacyInfo.threadTriggered.queue]]; + + [tMutableArray addObject:tMutableAttributedString]; + + [tMutableArray addObject:@""]; + + IPSException * tException=tExceptionInformation.exception; + + tMutableAttributedString=[[self attributedStringForKey:@"Exception Type:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + + NSMutableAttributedString * tValueAttributedString=[[self attributedStringForPlainTextWithFormat:@"%@ (%@)",tException.type,tException.signal] mutableCopy]; + + switch(self.hyperlinksStyle) + { + case CUIHyperlinksInternal: + + [tValueAttributedString addAttributes:@{ + NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle|NSUnderlineStylePatternDash) + } + + range:NSMakeRange(0, tValueAttributedString.length)]; + + [tValueAttributedString addAttributes:@{ + NSLinkAttributeName:[NSURL URLWithString:@"a://exception_type"] + } + range:NSMakeRange(0, tValueAttributedString.length)]; + + break; + + default: + + break; + } + + [tMutableAttributedString appendAttributedString:tValueAttributedString]; + + [tMutableArray addObject:tMutableAttributedString]; + + tMutableAttributedString=[[self attributedStringForKey:@"Exception Codes:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@" %@",(tException.subtype!=nil) ? tException.subtype : tException.codes]]; + + [tMutableArray addObject:tMutableAttributedString]; + + if (tExceptionInformation.isCorpse==YES) + { + tMutableAttributedString=[[self attributedStringForKey:@"Exception Note:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" EXC_CORPSE_NOTIFY"]]; + + [tMutableArray addObject:tMutableAttributedString]; + } + + [tMutableArray addObject:@""]; + + IPSTermination * tTermination=tExceptionInformation.termination; + + tMutableAttributedString=[[self attributedStringForKey:@"Termination Reason:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@" Namespace %@, Code 0x%lx",tTermination.namespace,(unsigned long)tTermination.code]]; + + [tMutableArray addObject:tMutableAttributedString]; + + if (tTermination.byProc!=nil) + { + tMutableAttributedString=[[self attributedStringForKey:@"Terminating Process:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@" %@ [%d]",tTermination.byProc,tTermination.byPid]]; + + [tMutableArray addObject:tMutableAttributedString]; + } + + [tMutableArray addObject:@""]; + + return tMutableArray; +} + +- (NSArray *)attributedLinesForDiagnosticMessageOfIncident:(IPSIncident *)inIncident +{ + IPSIncidentDiagnosticMessage * tDiagnosticMessage=inIncident.diagnosticMessage; + + NSMutableArray * tMutableArray=[NSMutableArray array]; + + if (tDiagnosticMessage!=nil) + { + if (tDiagnosticMessage.vmregioninfo!=nil) + { + NSMutableAttributedString * tMutableAttributedString=[[self attributedStringForKey:@"VM Region Info:"] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@" %@",tDiagnosticMessage.vmregioninfo]]; + + [tMutableArray addObject:tMutableAttributedString]; + + [tMutableArray addObject:@""]; + } + + if (tDiagnosticMessage.asi!=nil) + { + NSMutableAttributedString * tMutableAttributedString=[[self attributedStringForKey:@"Application Specific Information:"] mutableCopy]; + + [tMutableArray addObject:tMutableAttributedString]; + + + [tDiagnosticMessage.asi.applicationsInformation enumerateKeysAndObjectsUsingBlock:^(NSString * bProcess, NSArray * bInformation, BOOL * bOutStop) { + + [bInformation enumerateObjectsUsingBlock:^(NSString * bInformation, NSUInteger bIndex, BOOL * bOutStop2) { + + [tMutableArray addObject:[self attributedStringForPlainText:bInformation]]; + }]; + + }]; + + [tMutableArray addObject:@""]; + } + + NSMutableAttributedString * tMutableAttributedString=tMutableArray.firstObject; + + if ([tMutableAttributedString isKindOfClass:[NSMutableAttributedString class]]==YES) + { + NSDictionary * tJumpAnchorAttributes=@{ + CUISectionAnchorAttributeName:@"section:Diagnostic Messages" + }; + + [tMutableAttributedString addAttributes:tJumpAnchorAttributes range:NSMakeRange(0,tMutableAttributedString.length)]; + } + } + + return tMutableArray; +} + +- (NSArray *)attributedLinesForBacktracesOfIncident:(IPSIncident *)inIncident +{ + #define BINARYIMAGENAME_AND_SPACE_MAXLEN 34 + + NSMutableArray * tMutableArray=[NSMutableArray array]; +#ifndef __DISABLE_SYMBOLICATION_ + NSArray * tBacktracesThreads=self.crashlog.backtraces.threads; +#endif + + NSString * tProcessPath=inIncident.header.processPath; + + NSArray * tSortedBinaryImages=[inIncident.binaryImages sortedArrayUsingSelector:@selector(compare:)]; + + [inIncident.threads enumerateObjectsUsingBlock:^(IPSThread * bThread, NSUInteger bThreadIndex, BOOL * bOutStop) { + +#ifndef __DISABLE_SYMBOLICATION_ + CUIThread * tBacktraceThread=tBacktracesThreads[bThreadIndex]; +#endif + NSString * tDispatchQueueString=(bThread.queue!=nil) ? [NSString stringWithFormat:@": Dispatch queue: %@",bThread.queue] : @""; + + NSMutableAttributedString * tMutableAttributedString=nil; + + if (bThread.triggered==YES) + { + tMutableAttributedString=[[self attributedStringForCrashedThreadLabelWithFormat:@"Thread %lu Crashed:%@\n",(unsigned long)bThreadIndex,tDispatchQueueString] mutableCopy]; + + switch(self.hyperlinksStyle) + { + case CUIHyperlinksInternal: + + [tMutableAttributedString addAttributes:@{ + CUIGenericAnchorAttributeName:@"a:crashed_thread" + } + range:NSMakeRange(0, tMutableAttributedString.length)]; + + break; + + case CUIHyperlinksHTML: + { + NSURL * tURL=[NSURL URLWithString:@"anchor://crashed_thread"]; + + if (tURL!=nil) + [tMutableAttributedString addAttributes:@{NSLinkAttributeName:tURL} + range:NSMakeRange(0, tMutableAttributedString.length)]; + + break; + } + default: + + break; + } + } + else + { + if ((self.displaySettings.visibleSections & CUIDocumentBacktraceCrashedThreadSubSection)!=0) + return; + + tMutableAttributedString=[[self attributedStringForThreadLabelWithFormat:@"Thread %lu:%@\n",(unsigned long)bThreadIndex,tDispatchQueueString] mutableCopy]; + } + + [tMutableAttributedString addAttributes:@{ + CUIThreadAnchorAttributeName:[NSString stringWithFormat:@"thread:%lu",(unsigned long)bThreadIndex] + } + range:NSMakeRange(0, tMutableAttributedString.length)]; + + [tMutableArray addObject:tMutableAttributedString]; + +#ifndef __DISABLE_SYMBOLICATION_ + NSArray * tStackFrames=tBacktraceThread.callStackBacktrace.stackFrames; +#endif + + [bThread.frames enumerateObjectsUsingBlock:^(IPSThreadFrame * bFrame, NSUInteger bFrameIndex, BOOL * _Nonnull stop) { + + IPSImage * tBinaryImage=inIncident.binaryImages[bFrame.imageIndex]; + + BOOL tIsUserCode=tBinaryImage.isUserCode; + + if (tIsUserCode==NO) + { + if ([tSortedBinaryImages indexOfObjectIdenticalTo:tBinaryImage]==0) + { + tIsUserCode=YES; + } + else + { + NSString * tPath=tBinaryImage.path; + + tIsUserCode=(tPath!=nil && [tProcessPath isEqualToString:tPath]==YES); + } + } + + NSString * tFrameIndexString=[NSString stringWithFormat:@"%lu",(unsigned long)bFrameIndex]; + + NSString * tIndexSpace=[@" " substringFromIndex:tFrameIndexString.length]; + + NSMutableAttributedString * tMutableAttributedString=[[self attributedStringForUser:tIsUserCode code:tFrameIndexString] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForUser:tIsUserCode code:tIndexSpace]]; + + if ((self.displaySettings.visibleStackFrameComponents & CUIStackFrameBinaryNameComponent)==CUIStackFrameBinaryNameComponent) + { + NSString * tBinaryImageIdentifier=(tBinaryImage.bundleIdentifier!=nil) ? tBinaryImage.bundleIdentifier : tBinaryImage.name; + + NSUInteger tImageNameLength=tBinaryImageIdentifier.length; + + NSMutableAttributedString * tMutableBinaryImageAttributedString=[[self attributedStringForUser:tIsUserCode code:tBinaryImageIdentifier] mutableCopy]; + + if (self.hyperlinksStyle!=CUIHyperlinksNone && ((self.displaySettings.visibleSections & CUIDocumentBinaryImagesSection)==CUIDocumentBinaryImagesSection)) + { + NSURL * tURL=nil; + + switch(self.hyperlinksStyle) + { + case CUIHyperlinksInternal: + + tURL=[NSURL URLWithString:[NSString stringWithFormat:@"bin://%@",tBinaryImage.UUID.UUIDString]]; + + break; + + case CUIHyperlinksHTML: + + tURL=[NSURL URLWithString:[NSString stringWithFormat:@"sharp://%@",tBinaryImage.UUID.UUIDString]]; + + break; + + default: + + break; + } + + if (tURL!=nil) + [tMutableBinaryImageAttributedString addAttributes:@{NSLinkAttributeName:tURL} range:NSMakeRange(0,tMutableBinaryImageAttributedString.length)]; + } + + [tMutableAttributedString appendAttributedString:tMutableBinaryImageAttributedString]; + + if ((tImageNameLength+4)>BINARYIMAGENAME_AND_SPACE_MAXLEN) + { + [tMutableAttributedString appendAttributedString:[self attributedStringForUser:tIsUserCode code:@" "]]; + } + else + { + NSString * tImageSpace=[@" " substringFromIndex:tImageNameLength]; + + [tMutableAttributedString appendAttributedString:[self attributedStringForUser:tIsUserCode code:tImageSpace]]; + } + } + + NSUInteger tAddress=tBinaryImage.loadAddress+bFrame.imageOffset; + + if ((self.displaySettings.visibleStackFrameComponents & CUIStackFrameMachineInstructionAddressComponent)==CUIStackFrameMachineInstructionAddressComponent) + { + [tMutableAttributedString appendAttributedString:[self attributedStringForMemoryAddressWithFormat:@"0x%016lx ",(unsigned long)tAddress]]; + } + +#ifndef __DISABLE_SYMBOLICATION_ + + BOOL tSymbolicateAutomatically=[CUIApplicationPreferences sharedPreferences].symbolicateAutomatically; + CUIStackFrame * tStackFrame=tStackFrames[bFrameIndex]; + CUISymbolicationData * tSymbolicationData=nil; + + if (tSymbolicateAutomatically==YES) + { + tSymbolicationData=tStackFrame.symbolicationData; + } + + if (tSymbolicationData!=nil) + { + if (tSymbolicationData.stackFrameSymbol==nil) + NSLog(@"Missing stackFrameSymbol"); + + [tMutableAttributedString appendAttributedString:[self attributedStringForUser:tIsUserCode code:[self->_symbolicationDataFormatter stringForObjectValue:tSymbolicationData]]]; + } + else + { + if (tSymbolicateAutomatically==YES) + { + // Default values + + NSUInteger tImageOffset=bFrame.imageOffset; + + [[CUISymbolicationManager sharedSymbolicationManager] lookUpSymbolicationDataForMachineInstructionAddress:tImageOffset + binaryUUID:tBinaryImage.UUID.UUIDString + completionHandler:^(CUISymbolicationDataLookUpResult bLookUpResult, CUISymbolicationData *bSymbolicationData) { + + switch(bLookUpResult) + { + case CUISymbolicationDataLookUpResultError: + case CUISymbolicationDataLookUpResultNotFound: + + if (bFrame.symbol!=nil) + { + [tMutableAttributedString appendAttributedString:[self attributedStringForUser:tIsUserCode code:bFrame.symbol]]; + + if ((self.displaySettings.visibleStackFrameComponents & CUIStackFrameByteOffsetComponent)==CUIStackFrameByteOffsetComponent) + [tMutableAttributedString appendAttributedString:[self attributedStringForUser:tIsUserCode codeWithFormat:@" + %lu",(unsigned long)bFrame.symbolLocation]]; + } + else + { + [tMutableAttributedString appendAttributedString:[self attributedStringForUser:tIsUserCode codeWithFormat:@"0x%lx",(unsigned long)tBinaryImage.loadAddress]]; + + if ((self.displaySettings.visibleStackFrameComponents & CUIStackFrameByteOffsetComponent)==CUIStackFrameByteOffsetComponent) + [tMutableAttributedString appendAttributedString:[self attributedStringForUser:tIsUserCode codeWithFormat:@" + %lu",(unsigned long)(tAddress-tBinaryImage.loadAddress)]]; + } + + if (bFrame.sourceFile!=nil) + [tMutableAttributedString appendAttributedString:[self attributedStringForUser:tIsUserCode codeWithFormat:@" (%@:%lu)",bFrame.sourceFile,(unsigned long)bFrame.sourceLine]]; + + break; + + case CUISymbolicationDataLookUpResultFound: + { + tStackFrame.symbolicationData=bSymbolicationData; + + [[NSNotificationCenter defaultCenter] postNotificationName:CUIStackFrameSymbolicationDidSucceedNotification + object:self.input]; + + break; + } + + case CUISymbolicationDataLookUpResultFoundInCache: + { + tStackFrame.symbolicationData=bSymbolicationData; + + [tMutableAttributedString appendAttributedString:[self attributedStringForUser:tIsUserCode code:[self->_symbolicationDataFormatter stringForObjectValue:bSymbolicationData]]]; + + break; + } + + } + + }]; + } + } + +#endif + + [tMutableArray addObject:tMutableAttributedString]; + + }]; + + [tMutableArray addObject:@""]; + }]; + + NSMutableAttributedString * tMutableAttributedString=tMutableArray.firstObject; + + if ([tMutableAttributedString isKindOfClass:[NSMutableAttributedString class]]==YES) + { + NSDictionary * tJumpAnchorAttributes=@{ + CUISectionAnchorAttributeName:@"section:Backtraces" + }; + + [tMutableAttributedString addAttributes:tJumpAnchorAttributes range:NSMakeRange(0,tMutableAttributedString.length)]; + } + + return tMutableArray; +} + +- (NSArray *)attributedLinesForThreadStateOfIncident:(IPSIncident *)inIncident +{ + IPSIncidentHeader * tHeader=inIncident.header; + IPSThreadState * tCrashedThreadState=nil; + IPSIncidentExceptionInformation * tExceptionInformation=inIncident.exceptionInformation; + + NSMutableArray * tMutableArray=[NSMutableArray array]; + + IPSThreadInstructionState * tCrashThreadInstructionState=nil; + + if (tExceptionInformation.faultingThread=32 && tByteValue<127) + tASCIIRepresentation[tASCIIIndex]=tByteValue; + } + + [tMutableString appendFormat:@" %s",tASCIIRepresentation]; + + if (tByteIndex==tOffset) + [tMutableString appendString:@" <=="]; + + tAttributedString=[self attributedStringForPlainText:tMutableString]; + + [tMutableArray addObject:tAttributedString]; + } + + [tMutableArray addObject:@""]; + } + } + + NSMutableAttributedString * tMutableAttributedString=tMutableArray.firstObject; + + if ([tMutableAttributedString isKindOfClass:[NSMutableAttributedString class]]==YES) + { + NSDictionary * tJumpAnchorAttributes=@{ + CUISectionAnchorAttributeName:@"section:Thread State" + }; + + [tMutableAttributedString addAttributes:tJumpAnchorAttributes range:NSMakeRange(0,tMutableAttributedString.length)]; + } + + return tMutableArray; +} + +- (NSArray *)attributedLinesForBinaryImagesOfIncident:(IPSIncident *)inIncident +{ + NSMutableArray * tMutableArray=[NSMutableArray array]; + + __block NSMutableAttributedString * tMutableAttributedString=[[self attributedStringForKey:@"Binary Images:"] mutableCopy]; + + [tMutableArray addObject:tMutableAttributedString]; + + BOOL tIsMonochromeTheme=[CUIThemesManager sharedManager].currentTheme.isMonochrome; + + [[inIncident.binaryImages sortedArrayUsingSelector:@selector(compare:)] enumerateObjectsUsingBlock:^(IPSImage * bImage, NSUInteger bIndex, BOOL * bOutStop) { + + NSString * tSpaceString=@" "; + + NSString * tAddressString=[NSString stringWithFormat:@"0x%lx",bImage.loadAddress]; + + NSUInteger tLength=tAddressString.length; + + tMutableAttributedString=[[self attributedStringForPlainText:[tSpaceString substringFromIndex:tLength]] mutableCopy]; + + [tMutableAttributedString appendAttributedString:[self attributedStringForMemoryAddress:tAddressString]]; + + [tMutableAttributedString appendAttributedString:[[self attributedStringForPlainText:@" - "] mutableCopy]]; + + tAddressString=[NSString stringWithFormat:@"0x%lx",bImage.loadAddress+bImage.size]; + + tLength=tAddressString.length; + + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:[tSpaceString substringFromIndex:tLength]]]; + + [tMutableAttributedString appendAttributedString:[self attributedStringForMemoryAddress:tAddressString]]; + + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + + NSString * tBinaryImageIdentifier=(bImage.bundleIdentifier!=nil) ? bImage.bundleIdentifier : bImage.name; + + if (tIsMonochromeTheme==YES) + { + if (bImage.isUserCode==YES) + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@"+"]]; + + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:tBinaryImageIdentifier]]; + } + else + { + [tMutableAttributedString appendAttributedString:[self attributedStringForUser:bImage.isUserCode binaryImageIdentifier:tBinaryImageIdentifier]]; + } + + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + + if (bImage.bundleShortVersionString!=nil || bImage.bundleVersion!=nil) + { + if (bImage.bundleVersion==nil) + [tMutableAttributedString appendAttributedString:[self attributedStringForVersionWithFormat:@"(%@)",bImage.bundleShortVersionString]]; + else + [tMutableAttributedString appendAttributedString:[self attributedStringForVersionWithFormat:@"(%@ - %@)",(bImage.bundleShortVersionString!=nil) ? bImage.bundleShortVersionString : @"???",bImage.bundleVersion]]; + } + else + { + [tMutableAttributedString appendAttributedString:[self attributedStringForVersion:@"(???)"]]; + + } + + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + + NSString * tUUIDString=bImage.UUID.UUIDString; + + [tMutableAttributedString appendAttributedString:[self attributedStringForUUIDWithFormat:@"<%@>",tUUIDString]]; + + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + + [tMutableAttributedString appendAttributedString:[self attributedStringForPath:bImage.path]]; + + switch(self.hyperlinksStyle) + { + case CUIHyperlinksHTML: + { + NSURL * tURL=[NSURL URLWithString:[NSString stringWithFormat:@"anchor://%@",tUUIDString]]; + + if (tURL!=nil) + [tMutableAttributedString addAttributes:@{NSLinkAttributeName:tURL} + range:NSMakeRange(0, tMutableAttributedString.length)]; + + break; + } + + default: + + [tMutableAttributedString addAttributes:@{CUIBinaryAnchorAttributeName:[NSString stringWithFormat:@"bin:%@",tUUIDString]} + range:NSMakeRange(0, tMutableAttributedString.length)]; + + break; + } + + + [tMutableArray addObject:tMutableAttributedString]; + + }]; + + [tMutableArray addObject:@""]; + + // External Modification Summary + + if (inIncident.extMods!=nil) + { + __auto_type (^processStatistics)(IPSExternalModificationStatistics *) = ^(IPSExternalModificationStatistics * inObject) { + + tMutableAttributedString=[[self attributedStringForPlainText:@" "] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForKey:@"task_for_pid:"]]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@"%ld",(long)inObject.taskForPid]]; + + [tMutableArray addObject:tMutableAttributedString]; + + tMutableAttributedString=[[self attributedStringForPlainText:@" "] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForKey:@"thread_create:"]]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@"%ld",(long)inObject.threadCreate]]; + + [tMutableArray addObject:tMutableAttributedString]; + + tMutableAttributedString=[[self attributedStringForPlainText:@" "] mutableCopy]; + [tMutableAttributedString appendAttributedString:[self attributedStringForKey:@"thread_set_state:"]]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainTextWithFormat:@"%ld",(long)inObject.threadSetState]]; + [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; + + [tMutableArray addObject:tMutableAttributedString]; + }; + + tMutableAttributedString=[[self attributedStringForKey:@"External Modification Summary:"] mutableCopy]; + + [tMutableArray addObject:tMutableAttributedString]; + + tMutableAttributedString=[[self attributedStringForKey:@" Calls made by other processes targeting this process:"] mutableCopy]; + + [tMutableArray addObject:tMutableAttributedString]; + + processStatistics(inIncident.extMods.targeted); + + tMutableAttributedString=[[self attributedStringForKey:@" Calls made by this process:"] mutableCopy]; + + [tMutableArray addObject:tMutableAttributedString]; + + processStatistics(inIncident.extMods.caller); + + tMutableAttributedString=[[self attributedStringForKey:@" Calls made by all processes on this machine:"] mutableCopy]; + + [tMutableArray addObject:tMutableAttributedString]; + + processStatistics(inIncident.extMods.system); + + [tMutableArray addObject:@""]; + } + + // VM Summary + + if (inIncident.vmSummary!=nil) + { + tMutableAttributedString=[[self attributedStringForKey:@"VM Region Summary:"] mutableCopy]; + + [tMutableArray addObject:tMutableAttributedString]; + + tMutableAttributedString=[[self attributedStringForPlainText:inIncident.vmSummary] mutableCopy]; + + [tMutableArray addObject:tMutableAttributedString]; + } + + tMutableAttributedString=tMutableArray.firstObject; + + if ([tMutableAttributedString isKindOfClass:[NSMutableAttributedString class]]==YES) + { + NSDictionary * tJumpAnchorAttributes=@{ + CUISectionAnchorAttributeName:@"section:Binary Images" + }; + + [tMutableAttributedString addAttributes:tJumpAnchorAttributes range:NSMakeRange(0,tMutableAttributedString.length)]; + } + + return tMutableArray; +} + +#pragma mark - + +- (BOOL)transform +{ + if ([super transform]==NO) + return NO; + + IPSReport * tReport=(IPSReport *)self.input; + + if ([tReport isKindOfClass:[IPSReport class]]==NO) + { + // A COMPLETER + + return NO; + } + + IPSIncident * tIncident=tReport.incident; + + + [self updatesCachedAttributes]; + + NSMutableArray * tMutableArray=[NSMutableArray array]; + + // Header + + if ((self.displaySettings.visibleSections & CUIDocumentHeaderSection)==CUIDocumentHeaderSection) + { + NSArray * tAttributedLines=[self attributedLinesForHeaderOfIncident:tIncident]; + + if (tAttributedLines==nil) + return NO; + + [tMutableArray addObjectsFromArray:tAttributedLines]; + } + + // Exception Information + + if ((self.displaySettings.visibleSections & CUIDocumentExceptionInformationSection)==CUIDocumentExceptionInformationSection) + { + NSArray * tAttributedLines=[self attributedLinesForExceptionInformationOfIncident:tIncident]; + + if (tAttributedLines==nil) + return NO; + + [tMutableArray addObjectsFromArray:tAttributedLines]; + } + + // Diagnostic Message + + if ((self.displaySettings.visibleSections & CUIDocumentDiagnosticMessagesSection)==CUIDocumentDiagnosticMessagesSection) + { + NSArray * tAttributedLines=[self attributedLinesForDiagnosticMessageOfIncident:tIncident]; + + if (tAttributedLines==nil) + return NO; + + [tMutableArray addObjectsFromArray:tAttributedLines]; + } + + // Backtraces + + if ((self.displaySettings.visibleSections & CUIDocumentBacktracesSection)==CUIDocumentBacktracesSection) + { + NSArray * tAttributedLines=[self attributedLinesForBacktracesOfIncident:tIncident]; + + if (tAttributedLines==nil) + return NO; + + [tMutableArray addObjectsFromArray:tAttributedLines]; + } + + // Thread State + + if ((self.displaySettings.visibleSections & CUIDocumentThreadStateSection)==CUIDocumentThreadStateSection) + { + NSArray * tAttributedLines=[self attributedLinesForThreadStateOfIncident:tIncident]; + + if (tAttributedLines==nil) + return NO; + + [tMutableArray addObjectsFromArray:tAttributedLines]; + } + + // Binary Images + + if ((self.displaySettings.visibleSections & CUIDocumentBinaryImagesSection)==CUIDocumentBinaryImagesSection) + { + NSArray * tAttributedLines=[self attributedLinesForBinaryImagesOfIncident:tIncident]; + + if (tAttributedLines==nil) + return NO; + + [tMutableArray addObjectsFromArray:tAttributedLines]; + } + + self.output=[self joinLines:tMutableArray withString:@"\n"]; + + return YES; +} + +#pragma mark - + +- (NSAttributedString *)joinLines:(NSArray *)inLines withString:(NSString *)inNewLineFeed +{ + NSMutableAttributedString * tMutableAttributedString=[NSMutableAttributedString new]; + + [inLines enumerateObjectsUsingBlock:^(id bLine, NSUInteger bLineNumber, BOOL * bOutStop) { + + if ([bLine isKindOfClass:[NSString class]]==YES) + { + NSAttributedString * tAttributedString=[[NSAttributedString alloc] initWithString:bLine + attributes:self->_cachedPlainTextAttributes]; + + [tMutableAttributedString appendAttributedString:tAttributedString]; + + if (bLineNumber_cachedPlainTextAttributes]]; + + return; + } + + if ([bLine isKindOfClass:[NSAttributedString class]]==YES) + { + [tMutableAttributedString appendAttributedString:bLine]; + + if (bLineNumber_cachedPlainTextAttributes]]; + } + }]; + + return tMutableAttributedString; +} + +@end diff --git a/app_unexpectedly/app_unexpectedly/CUIPresentationTextNavigationViewController.m b/app_unexpectedly/app_unexpectedly/CUIPresentationTextNavigationViewController.m index 2575a7c..12f9aa0 100644 --- a/app_unexpectedly/app_unexpectedly/CUIPresentationTextNavigationViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUIPresentationTextNavigationViewController.m @@ -440,21 +440,21 @@ - (void)refreshSectionsMenu NSArray * tArray=@[ @{ @"title":NSLocalizedString(@"Header",@""), - @"range":[NSValue valueWithRange:tCrashLog.headerRange], + @"available":@(tCrashLog.isHeaderAvailable), @"tag":@"section:Header", @"visible":@(tDocumentSections&CUIDocumentHeaderSection), @"icon":@"menuHeader", }, @{ @"title":NSLocalizedString(@"Exception Information",@""), - @"range":[NSValue valueWithRange:tCrashLog.exceptionInformationRange], + @"available":@(tCrashLog.isExceptionInformationAvailable), @"tag":@"section:Exception Information", @"visible":@(tDocumentSections&CUIDocumentExceptionInformationSection), @"icon":@"menuException", }, @{ @"title":NSLocalizedString(@"Diagnostic Messages",@""), - @"range":[NSValue valueWithRange:tCrashLog.diagnosticMessagesRange], + @"available":@(tCrashLog.isDiagnosticMessageAvailable), @"tag":@"section:Diagnostic Messages", @"visible":@(tDocumentSections&CUIDocumentDiagnosticMessagesSection), @"icon":@"menuDiagnostic", @@ -468,10 +468,7 @@ - (void)refreshSectionsMenu if (tVisibleFlag==0) continue; - NSValue * tValue=tDictionary[@"range"]; - NSRange tRange=tValue.rangeValue; - - if (tRange.location!=NSNotFound) + if ([tDictionary[@"available"] boolValue]==YES) { tMenuItem=[[NSMenuItem alloc] initWithTitle:tDictionary[@"title"] action:@selector(switchSection:) keyEquivalent:@""]; @@ -564,14 +561,14 @@ - (void)refreshSectionsMenu tArray=@[ @{ @"title":NSLocalizedString(@"Thread State",@""), - @"range":[NSValue valueWithRange:tCrashLog.threadStateRange], + @"available":@(tCrashLog.isThreadStateAvailable), @"tag":@"section:Thread State", @"visible":@(tDocumentSections&CUIDocumentThreadStateSection), @"icon":@"menuThreadState", }, @{ @"title":NSLocalizedString(@"Binary Images",@""), - @"range":[NSValue valueWithRange:tCrashLog.binaryImagesRange], + @"available":@(tCrashLog.isBinaryImagesAvailable), @"tag":@"section:Binary Images", @"visible":@(tDocumentSections&CUIDocumentBinaryImagesSection), @"icon":@"menuBinaryImage", @@ -585,10 +582,7 @@ - (void)refreshSectionsMenu if (tVisibleFlag==0) continue; - NSValue * tValue=tDictionary[@"range"]; - NSRange tRange=tValue.rangeValue; - - if (tRange.location!=NSNotFound) + if ([tDictionary[@"available"] boolValue]==YES) { tMenuItem=[[NSMenuItem alloc] initWithTitle:tDictionary[@"title"] action:@selector(switchSection:) keyEquivalent:@""]; diff --git a/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.h b/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.h index 38eca34..9204569 100644 --- a/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.h +++ b/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.h @@ -15,6 +15,8 @@ #import "CUICrashLogErrors.h" +#import "IPSReport.h" + typedef NS_ENUM(NSUInteger, CUICrashLogReportSourceType) { CUICrashLogReportSourceTypeSystem=0, @@ -26,6 +28,8 @@ typedef NS_ENUM(NSUInteger, CUICrashLogReportSourceType) @property (readonly) id resourceIdentifier; + @property (readonly) IPSReport * ipsReport; + @property (readonly,copy) NSString * rawText; @property (readonly,copy) NSString * crashLogFilePath; @@ -35,6 +39,20 @@ typedef NS_ENUM(NSUInteger, CUICrashLogReportSourceType) @property (nonatomic,readonly) BOOL isFullyParsed; + @property (nonatomic,readonly,getter=isHeaderAvailable) BOOL headerAvailable; + + @property (nonatomic,readonly,getter=isExceptionInformationAvailable) BOOL exceptionInformationAvailable; + + @property (nonatomic,readonly,getter=isDiagnosticMessageAvailable) BOOL diagnosticMessageAvailable; + + @property (nonatomic,readonly,getter=isBacktracesAvailable) BOOL backtracesAvailable; + + @property (nonatomic,readonly,getter=isThreadStateAvailable) BOOL threadStateAvailable; + + @property (nonatomic,readonly,getter=isBinaryImagesAvailable) BOOL binaryImagesAvailable; + + + @property (nonatomic,readonly,copy) NSString * processName; @property (nonatomic,readonly) NSDate * dateTime; diff --git a/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.m b/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.m index 8448fa7..a1484f7 100644 --- a/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.m +++ b/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.m @@ -152,7 +152,34 @@ - (instancetype)initWithString:(NSString *)inString error:(NSError **)outError return nil; } - if ([inString hasPrefix:@"Process:"]==NO) + if ([inString hasPrefix:@"Process:"]==YES) + { + self=[super init]; + + if (self!=nil) + { + _rawText=[inString copy]; + + _resourceIdentifier=[NSUUID UUID]; + } + } + else if ([inString hasPrefix:@"{"]==YES) + { + self=[super init]; + + if (self!=nil) + { + _ipsReport=[[IPSReport alloc] initWithString:inString error:NULL]; + + if (_ipsReport==nil) + return nil; + + _rawText=nil; + + _resourceIdentifier=[NSUUID UUID]; + } + } + else { if (outError!=NULL) { @@ -169,20 +196,48 @@ - (instancetype)initWithString:(NSString *)inString error:(NSError **)outError return nil; } - self=[super init]; - - if (self!=nil) - { - _rawText=[inString copy]; - - _resourceIdentifier=[NSUUID UUID]; - } - return self; } #pragma mark - +- (BOOL)isHeaderAvailable +{ + return (self.ipsReport.incident.header!=nil); +} + +- (BOOL)isExceptionInformationAvailable +{ + return (self.ipsReport.incident.exceptionInformation!=nil); +} + +- (BOOL)isDiagnosticMessageAvailable +{ + return (self.ipsReport.incident.diagnosticMessage!=nil); +} + +- (BOOL)isBacktracesAvailable +{ + return (self.ipsReport.incident.threads!=nil); +} + +- (BOOL)isThreadStateAvailable +{ + return (self.ipsReport.incident.threads[self.ipsReport.incident.exceptionInformation.faultingThread]!=nil); +} + +- (BOOL)isBinaryImagesAvailable +{ + return (self.ipsReport.incident.binaryImages!=nil); +} + +- (id)valueForUndefinedKey:(NSString *)inKey +{ + NSLog(@"Undefined key '%@'",inKey); + + return @""; +} + - (id)valueForKeyPath:(NSString *)inKeyPath { if ([inKeyPath isEqualToString:@"header.bundleIdentifier"]==YES) diff --git a/app_unexpectedly/app_unexpectedly/CUIStackFrame+UI.m b/app_unexpectedly/app_unexpectedly/CUIStackFrame+UI.m index 2da44b3..b8dbf84 100644 --- a/app_unexpectedly/app_unexpectedly/CUIStackFrame+UI.m +++ b/app_unexpectedly/app_unexpectedly/CUIStackFrame+UI.m @@ -13,13 +13,13 @@ #import "CUIStackFrame+UI.h" -#import "CUIBinaryImage+UI.h" +#import "CUIBinaryImageUtility.h" @implementation CUIStackFrame (UI) - (NSImage *)binaryImageIcon { - return [CUIBinaryImage iconForIdentifier:self.binaryImageIdentifier]; + return [CUIBinaryImageUtility iconForIdentifier:self.binaryImageIdentifier]; } - (NSString *)pasteboardRepresentationWithComponents:(CUIStackFrameComponents)inComponents diff --git a/app_unexpectedly/app_unexpectedly/CUIStackFrame.h b/app_unexpectedly/app_unexpectedly/CUIStackFrame.h index 5e169d6..d9882d2 100644 --- a/app_unexpectedly/app_unexpectedly/CUIStackFrame.h +++ b/app_unexpectedly/app_unexpectedly/CUIStackFrame.h @@ -15,6 +15,10 @@ #import "CUISymbolicationData.h" +#import "IPSThreadFrame.h" + +#import "IPSImage.h" + extern NSString * const CUIStackFrameSymbolicationDidSucceedNotification; @interface CUIStackFrame : NSObject @@ -38,6 +42,8 @@ extern NSString * const CUIStackFrameSymbolicationDidSucceedNotification; - (instancetype)initWithString:(NSString *)inString error:(NSError **)outError; +- (instancetype)initWithThreadFrame:(IPSThreadFrame *)inFrame atIndex:(NSUInteger)inIndex image:(IPSImage *)inImage error:(NSError **)outError; + - (CUIStackFrame *)stackFrameCloneWithBinaryImageIdentifier:(NSString *)inBinaryImageIdentifier; @end diff --git a/app_unexpectedly/app_unexpectedly/CUIStackFrame.m b/app_unexpectedly/app_unexpectedly/CUIStackFrame.m index 86e407c..e55cf6f 100644 --- a/app_unexpectedly/app_unexpectedly/CUIStackFrame.m +++ b/app_unexpectedly/app_unexpectedly/CUIStackFrame.m @@ -141,6 +141,47 @@ - (instancetype)initWithString:(NSString *)inString error:(NSError **)outError return self; } +- (instancetype)initWithThreadFrame:(IPSThreadFrame *)inFrame atIndex:(NSUInteger)inIndex image:(IPSImage *)inImage error:(NSError **)outError +{ + if ([inFrame isKindOfClass:[IPSThreadFrame class]]==NO || + [inImage isKindOfClass:[IPSImage class]]==NO) + { + if (outError!=NULL) + *outError=[NSError errorWithDomain:NSPOSIXErrorDomain code:EINVAL userInfo:@{}]; + + return nil; + } + + self=[super init]; + + if (self!=nil) + { + _index=inIndex; + + _binaryImageIdentifier=[(inImage.bundleIdentifier!=nil) ? inImage.bundleIdentifier : inImage.name copy]; + + _machineInstructionAddress=inImage.loadAddress+inFrame.imageOffset; + + if (inFrame.symbol!=nil) + { + _symbol=[inFrame.symbol copy]; + _byteOffset=inFrame.symbolLocation; + } + else + { + _symbol=[NSString stringWithFormat:@"0x%lx",(unsigned long)inImage.loadAddress]; + + _byteOffset=_machineInstructionAddress-inImage.loadAddress; + } + + _sourceFile=[inFrame.sourceFile copy]; + + _lineNumber=inFrame.sourceLine; + } + + return self; +} + #pragma mark - - (CUIStackFrame *)stackFrameCloneWithBinaryImageIdentifier:(NSString *)inBinaryImageIdentifier diff --git a/app_unexpectedly/app_unexpectedly/CUIThread.h b/app_unexpectedly/app_unexpectedly/CUIThread.h index 38821ba..40d96a3 100644 --- a/app_unexpectedly/app_unexpectedly/CUIThread.h +++ b/app_unexpectedly/app_unexpectedly/CUIThread.h @@ -15,6 +15,9 @@ #import "CUICallStackBacktrace.h" +#import "IPSThread.h" +#import "IPSImage.h" + @interface CUIThread : NSObject @property (readonly,getter=isApplicationSpecificBacktrace) BOOL applicationSpecificBackTrace; @@ -30,4 +33,6 @@ - (instancetype)initWithTextualRepresentation:(NSArray *)inLines error:(NSError **)outError; +- (instancetype)initWithIPSThread:(IPSThread *)inThread atIndex:(NSUInteger)inIndex binaryImages:(NSArray *)inImages error:(NSError **)outError; + @end diff --git a/app_unexpectedly/app_unexpectedly/CUIThread.m b/app_unexpectedly/app_unexpectedly/CUIThread.m index e398d3e..909193d 100644 --- a/app_unexpectedly/app_unexpectedly/CUIThread.m +++ b/app_unexpectedly/app_unexpectedly/CUIThread.m @@ -106,6 +106,40 @@ - (instancetype)initWithTextualRepresentation:(NSArray *)inLines error:(NSError return self; } +- (instancetype)initWithIPSThread:(IPSThread *)inThread atIndex:(NSUInteger)inIndex binaryImages:(NSArray *)inImages error:(NSError **)outError +{ + if ([inThread isKindOfClass:[IPSThread class]]==NO) + { + if (outError!=NULL) + *outError=[NSError errorWithDomain:NSPOSIXErrorDomain code:EINVAL userInfo:@{}]; + + return nil; + } + + self=[super init]; + + if (self!=nil) + { + //_applicationSpecificBackTrace=; + + _crashed=inThread.triggered; + + _number=inIndex; + + if (inThread.queue!=nil) + _name=[NSString stringWithFormat:@"Dispatch queue: %@",inThread.queue]; + + _callStackBacktrace=[[CUICallStackBacktrace alloc] initWithFrames:inThread.frames binaryImages:inImages error:NULL]; + + if (_callStackBacktrace==nil) + { + // A COMPLETER + } + } + + return self; +} + #pragma mark - - (NSString *)description diff --git a/app_unexpectedly/app_unexpectedly/Info.plist b/app_unexpectedly/app_unexpectedly/Info.plist index 761e712..e7a50a9 100644 --- a/app_unexpectedly/app_unexpectedly/Info.plist +++ b/app_unexpectedly/app_unexpectedly/Info.plist @@ -68,6 +68,32 @@ LSHandlerRank Alternate + + CFBundleTypeExtensions + + ips + + CFBundleTypeIconFile + + CFBundleTypeMIMETypes + + text/plain + + CFBundleTypeName + Analytics Report + CFBundleTypeRole + Viewer + LSItemContentTypes + + com.apple.ips + + LSTypeIsPackage + + NSPersistentStoreTypeKey + Binary + LSHandlerRank + Alternate + CFBundleTypeExtensions @@ -123,9 +149,17 @@ CFBundleTypeRole Viewer + + CFBundleTypeExtensions + + ips + + CFBundleTypeRole + Viewer + CFBundleVersion - 57 + 59 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/CUICollectionViewRegisterItem.xib b/app_unexpectedly/app_unexpectedly/en.lproj/CUICollectionViewRegisterItem.xib index 317cedc..40eb5d0 100644 --- a/app_unexpectedly/app_unexpectedly/en.lproj/CUICollectionViewRegisterItem.xib +++ b/app_unexpectedly/app_unexpectedly/en.lproj/CUICollectionViewRegisterItem.xib @@ -38,15 +38,15 @@ - + - - - - diff --git a/app_unexpectedly/app_unexpectedly/es.lproj/CUICollectionViewRegisterItem.xib b/app_unexpectedly/app_unexpectedly/es.lproj/CUICollectionViewRegisterItem.xib index 805320b..9bc21ec 100644 --- a/app_unexpectedly/app_unexpectedly/es.lproj/CUICollectionViewRegisterItem.xib +++ b/app_unexpectedly/app_unexpectedly/es.lproj/CUICollectionViewRegisterItem.xib @@ -71,6 +71,7 @@ + diff --git a/app_unexpectedly/app_unexpectedly/es.lproj/CUICrashLogsListViewController.xib b/app_unexpectedly/app_unexpectedly/es.lproj/CUICrashLogsListViewController.xib index 4e2a05a..d154993 100644 --- a/app_unexpectedly/app_unexpectedly/es.lproj/CUICrashLogsListViewController.xib +++ b/app_unexpectedly/app_unexpectedly/es.lproj/CUICrashLogsListViewController.xib @@ -28,7 +28,7 @@ - + @@ -118,22 +118,54 @@ - + - - - - diff --git a/app_unexpectedly/app_unexpectedly/fr.lproj/CUICollectionViewRegisterItem.xib b/app_unexpectedly/app_unexpectedly/fr.lproj/CUICollectionViewRegisterItem.xib index 4cb52bd..f6de265 100644 --- a/app_unexpectedly/app_unexpectedly/fr.lproj/CUICollectionViewRegisterItem.xib +++ b/app_unexpectedly/app_unexpectedly/fr.lproj/CUICollectionViewRegisterItem.xib @@ -38,15 +38,15 @@ - + - - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogsSourceSmartEditorWindowController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogsSourceSmartEditorWindowController.xib index d08538f..ac504e8 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogsSourceSmartEditorWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogsSourceSmartEditorWindowController.xib @@ -56,8 +56,8 @@ - - + + @@ -119,11 +119,11 @@ DQ - + - - + + @@ -165,26 +165,26 @@ - - - - - - - - - + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/Localizable.strings b/app_unexpectedly/app_unexpectedly/ja.lproj/Localizable.strings index c68894f7678f7b165ece85b6d96732b25c6587dd..bf7b43fda1220835fbe10857f5a7d4e7dfa04558 100755 GIT binary patch delta 122 zcmbPc`M_d>2`l>>gB=Dt4faoNWR{-X#VRuSgNOjfB!jr=868%Yo9D2u;Nq+I*C
      Pog+L#puoIA<%#aOKQv_zEG89j~%PBdTPl#vp4?zjW$v1=yHk%1+ GaRLBQ>>P0b diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/MainMenu.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/MainMenu.xib index 4b44fff..d44cfc5 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/MainMenu.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/MainMenu.xib @@ -367,7 +367,7 @@ CA - + @@ -425,7 +425,7 @@ CA - + From d4a11cbd9d7898d2ebb7a7fb0fd34b3f1274949f Mon Sep 17 00:00:00 2001 From: packagesdev Date: Sun, 16 Jan 2022 23:49:10 +0100 Subject: [PATCH 037/214] Update Japanese localization Add more localized Japanese strings Fix the Open Error dialog where the titles of the headers of the table were not localized. --- .../CUICrashLogsOpenErrorPanel.m | 11 ++++++++--- .../CUICrashLogsOpenErrorWindowController.xib | 2 +- .../en.lproj/Localizable.strings | Bin 7690 -> 7782 bytes .../es.lproj/Localizable.strings | Bin 8336 -> 8422 bytes .../fr.lproj/Localizable.strings | Bin 8620 -> 8702 bytes .../CUIBinaryImagesViewController.xib | 10 +++++----- .../CUICollectionViewRegisterItem.xib | 6 +++--- ...shLogPresentationOutlineViewController.xib | 10 +++++----- ...CrashLogPresentationTextViewController.xib | 6 +++--- ...hLogsSourceSmartEditorWindowController.xib | 10 +++++----- .../CUICrashLogsSourcesViewController.xib | 4 ++-- .../CUIExportAccessoryViewController.xib | 6 +++--- ...referencePaneFontscolorsViewController.xib | 18 +++++++++--------- ...encePanePresentationTextViewController.xib | 6 +++--- ...eferencePanePresentationViewController.xib | 6 +++--- ...ferencePaneSymbolicationViewController.xib | 6 +++--- .../ja.lproj/Localizable.strings | Bin 7264 -> 7300 bytes .../app_unexpectedly/ja.lproj/MainMenu.xib | 14 +++++++------- 18 files changed, 60 insertions(+), 55 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogsOpenErrorPanel.m b/app_unexpectedly/app_unexpectedly/CUICrashLogsOpenErrorPanel.m index 5fd31e4..ba2377a 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogsOpenErrorPanel.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogsOpenErrorPanel.m @@ -44,6 +44,12 @@ - (void)windowDidLoad { [super windowDidLoad]; + NSTableColumn * tTableColumn=[_tableView tableColumnWithIdentifier:@"file"]; + tTableColumn.headerCell.title=NSLocalizedString(@"Name",@""); + + tTableColumn=[_tableView tableColumnWithIdentifier:@"reason"]; + tTableColumn.headerCell.title=NSLocalizedString(@"Reason",@""); + NSRect tButtonFrame=_defaultButton.frame; _defaultButton.title=NSLocalizedString(@"OK",@""); @@ -91,14 +97,14 @@ - (void)updateUI case 1: - tMessageString=NSLocalizedString(@"An error occurred when opening the file.", @""); + tMessageString=NSLocalizedString(@"An error occurred while opening the file.", @""); tInformativeString=NSLocalizedString(@"The file can't be opened for the following reason:", @""); break; default: - tMessageString=NSLocalizedString(@"An error occurred when opening some files.", @""); + tMessageString=NSLocalizedString(@"An error occurred while opening some files.", @""); tInformativeString=NSLocalizedString(@"These files can't be opened for the following reasons:", @""); break; @@ -153,7 +159,6 @@ - (NSView *)tableView:(NSTableView *)inTableView viewForTableColumn:(NSTableColu { CUICrashLogsOpenErrorRecord * tRecord=_errors[inRow]; - NSString * tTableColumnIdentifier=inTableColumn.identifier; NSTableCellView * tTableCellView=[inTableView makeViewWithIdentifier:tTableColumnIdentifier owner:self]; diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogsOpenErrorWindowController.xib b/app_unexpectedly/app_unexpectedly/CUICrashLogsOpenErrorWindowController.xib index d3ea7a6..4c6b389 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogsOpenErrorWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogsOpenErrorWindowController.xib @@ -154,7 +154,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/Localizable.strings b/app_unexpectedly/app_unexpectedly/en.lproj/Localizable.strings index 42cd8986dd406b7f3af15097510fe2c876c7ce64..0d8e87cfaa02a96636522f2df5d41a9ac35fef89 100755 GIT binary patch delta 149 zcmeCOd1kZWp9E_rLk>ggWJbwwI7@wUlcWKhCp`Itqz4L5VzZsp8Rif!1|ap9FI%L*C?gN%hHVWH~0klhlCn!@=}!$!HM0Sz78lGXSi&5M=-W diff --git a/app_unexpectedly/app_unexpectedly/es.lproj/Localizable.strings b/app_unexpectedly/app_unexpectedly/es.lproj/Localizable.strings index 99b2d01441a9e16cd5613733a70543574aa8ac99..ec656ceaa4cbeea6b21ac84553f34f036d1bbf2f 100755 GIT binary patch delta 111 zcmbQ>_{?!biZp8`Lk>gg}>D3^5v!qNl3jlBr2mJs5 diff --git a/app_unexpectedly/app_unexpectedly/fr.lproj/Localizable.strings b/app_unexpectedly/app_unexpectedly/fr.lproj/Localizable.strings index 61ae65acc81e5537c7d08d41d331d7cbd508f50b..a036c6c599cc8f02d135c723ec70cad4d2e7d5ee 100755 GIT binary patch delta 107 zcmZ4E{LgvAH)+;Ph8%{}$v>qpLs*;7%iLv|yg-J<%a0+EA(tVQL5V?u!4`;>82lLW hfg(x_)(l)gsKgKilucwP28!k(sR{y$Wx_>4Y5^(%7XbhO delta 24 ecmez8yvBLMH)-ZnhP=tYr7wf%&6j2FvH$>!`3ju? diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIBinaryImagesViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIBinaryImagesViewController.xib index 4ab91a9..b2838ac 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIBinaryImagesViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIBinaryImagesViewController.xib @@ -120,8 +120,8 @@ - - + + @@ -135,11 +135,11 @@ - + - + @@ -169,7 +169,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICollectionViewRegisterItem.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICollectionViewRegisterItem.xib index 40eb5d0..12296b0 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICollectionViewRegisterItem.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICollectionViewRegisterItem.xib @@ -46,10 +46,10 @@ - - + + - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationOutlineViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationOutlineViewController.xib index b522ae1..187863c 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationOutlineViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationOutlineViewController.xib @@ -34,10 +34,10 @@ - + - - + + @@ -47,7 +47,7 @@ - + @@ -221,7 +221,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationTextViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationTextViewController.xib index 57ff4a2..89740d9 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationTextViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationTextViewController.xib @@ -26,12 +26,12 @@ - + - - - - + - - + + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencesWindowController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencesWindowController.xib index 821366a..37eb0e4 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencesWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencesWindowController.xib @@ -33,12 +33,12 @@ - + - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/Localizable.strings b/app_unexpectedly/app_unexpectedly/ja.lproj/Localizable.strings index c10120fbd12784d415cda4140dc53740706e64f7..abf92cf724cce06184c31621e85cfee6e1d6c920 100755 GIT binary patch delta 65 zcmX?S@y~n%6Q7vhgx$eL3?>XtX_Kes8N4yLYw*Y5gu!MzzI#l3R$XgT9~vAs*bNlh TVX)arkb{v0B(^z0=p82jTnHKJ delta 38 tcmexoe$HY86W`=Lymp(V`0g-Gej+F``IdmlW;Q`KMj%IFvy{*iP5>ik4Z#2a diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/MainMenu.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/MainMenu.xib index 5fd3afb..3ee29b4 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/MainMenu.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/MainMenu.xib @@ -343,9 +343,9 @@ CA - + - + @@ -360,7 +360,7 @@ CA - + @@ -418,7 +418,7 @@ CA - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/Predicates.strings b/app_unexpectedly/app_unexpectedly/ja.lproj/Predicates.strings index acb05e8..d742b19 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/Predicates.strings +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/Predicates.strings @@ -1,77 +1,77 @@ /* Predicate Editor */ -"%[All]@ of the following are true" = "%1$[All]@ of the following are true"; -"%[Any]@ of the following are true" = "%1$[Any]@ of the following are true"; +"%[All]@ of the following are true" = "以下の条件の%1$[すべてを満たす]@"; +"%[Any]@ of the following are true" = "以下の条件の%1$[いずれかを満たす]@"; -"%[processName]@ %[is]@ %@" = "%1$[Process Name]@ %2$[is]@ %3$@"; -"%[processName]@ %[is not]@ %@" = "%1$[Process Name]@ %2$[is not]@ %3$@"; -"%[processName]@ %[begins with]@ %@" = "%1$[Process Name]@ %2$[begins with]@ %3$@"; -"%[processName]@ %[ends with]@ %@" = "%1$[Process Name]@ %2$[ends with]@ %3$@"; -"%[processName]@ %[contains]@ %@" = "%1$[Process Name]@ %2$[含む]@ %3$@"; +"%[processName]@ %[is]@ %@" = "%1$[プロセス名]@ %2$[が]@ %3$@"; +"%[processName]@ %[is not]@ %@" = "%1$[プロセス名]@ %2$[is not]@ %3$@"; +"%[processName]@ %[begins with]@ %@" = "%1$[プロセス名]@ %2$[begins with]@ %3$@"; +"%[processName]@ %[ends with]@ %@" = "%1$[プロセス名]@ %2$[ends with]@ %3$@"; +"%[processName]@ %[contains]@ %@" = "%1$[プロセス名]@ %2$[含む]@ %3$@"; -"%[header.bundleIdentifier]@ %[is]@ %@" = "%1$[Identifier]@ %2$[is]@ %3$@"; +"%[header.bundleIdentifier]@ %[is]@ %@" = "%1$[Identifier]@ %2$[が]@ %3$@"; "%[header.bundleIdentifier]@ %[is not]@ %@" = "%1$[Identifier]@ %2$[is not]@ %3$@"; "%[header.bundleIdentifier]@ %[begins with]@ %@" = "%1$[Identifier]@ %2$[begins with]@ %3$@"; "%[header.bundleIdentifier]@ %[ends with]@ %@" = "%1$[Identifier]@ %2$[ends with]@ %3$@"; "%[header.bundleIdentifier]@ %[contains]@ %@" = "%1$[Identifier]@ %2$[含む]@ %3$@"; -"%[header.executablePath]@ %[is]@ %@" = "%1$[Executable Path]@ %2$[is]@ %3$@"; +"%[header.executablePath]@ %[is]@ %@" = "%1$[Executable Path]@ %2$[が]@ %3$@"; "%[header.executablePath]@ %[is not]@ %@" = "%1$[Executable Path]@ %2$[is not]@ %3$@"; "%[header.executablePath]@ %[begins with]@ %@" = "%1$[Executable Path]@ %2$[begins with]@ %3$@"; "%[header.executablePath]@ %[ends with]@ %@" = "%1$[Executable Path]@ %2$[ends with]@ %3$@"; "%[header.executablePath]@ %[contains]@ %@" = "%1$[Executable Path]@ %2$[含む]@ %3$@"; -"%[header.executableVersion]@ %[is]@ %@" = "%1$[Executable Version]@ %2$[is]@ %3$@"; +"%[header.executableVersion]@ %[is]@ %@" = "%1$[Executable Version]@ %2$[が]@ %3$@"; "%[header.executableVersion]@ %[is not]@ %@" = "%1$[Executable Version]@ %2$[is not]@ %3$@"; "%[header.executableVersion]@ %[begins with]@ %@" = "%1$[Executable Version]@ %2$[begins with]@ %3$@"; "%[header.executableVersion]@ %[ends with]@ %@" = "%1$[Executable Version]@ %2$[ends with]@ %3$@"; "%[header.executableVersion]@ %[contains]@ %@" = "%1$[Executable Version]@ %2$[含む]@ %3$@"; -"%[exceptionInformation.crashedThreadName]@ %[is]@ %@" = "%1$[Crashed Thread Name]@ %2$[is]@ %3$@"; +"%[exceptionInformation.crashedThreadName]@ %[is]@ %@" = "%1$[Crashed Thread Name]@ %2$[が]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[is not]@ %@" = "%1$[Crashed Thread Name]@ %2$[is not]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[begins with]@ %@" = "%1$[Crashed Thread Name]@ %2$[begins with]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[ends with]@ %@" = "%1$[Crashed Thread Name]@ %2$[ends with]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[contains]@ %@" = "%1$[Crashed Thread Name]@ %2$[含む]@ %3$@"; -"%[header.operatingSystemVersion.stringValue]@ %[is]@ %@" = "%1$[Operating System Version]@ %2$[is]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[is]@ %@" = "%1$[Operating System Version]@ %2$[が]@ %3$@"; "%[header.operatingSystemVersion.stringValue]@ %[is not]@ %@" = "%1$[Operating System Version]@ %2$[is not]@ %3$@"; "%[header.operatingSystemVersion.stringValue]@ %[begins with]@ %@" = "%1$[Operating System Version]@ %2$[begins with]@ %3$@"; "%[header.operatingSystemVersion.stringValue]@ %[ends with]@ %@" = "%1$[Operating System Version]@ %2$[ends with]@ %3$@"; "%[header.operatingSystemVersion.stringValue]@ %[contains]@ %@" = "%1$[Operating System Version]@ %2$[含む]@ %3$@"; -"%[dateTime]@ %[is less than or equal to]@ %@" = "%1$[Date]@ %2$[is earlier than or equal to]@ %3$@"; -"%[dateTime]@ %[is greater than or equal to]@ %@" = "%1$[Date]@ %2$[is later than or equal to]@ %3$@"; +"%[dateTime]@ %[is less than or equal to]@ %@" = "%1$[日付]@ %2$[is earlier than or equal to]@ %3$@"; +"%[dateTime]@ %[is greater than or equal to]@ %@" = "%1$[日付]@ %2$[is later than or equal to]@ %3$@"; -"%[exceptionType]@ is %[EXC_ARITHMETIC]@" = "%1$[Exception Type]@ is %2$[EXC_ARITHMETIC]@"; -"%[exceptionType]@ is %[EXC_BAD_ACCESS]@" = "%1$[Exception Type]@ is %2$[EXC_BAD_ACCESS]@"; -"%[exceptionType]@ is %[EXC_BAD_INSTRUCTION]@" = "%1$[Exception Type]@ is %2$[EXC_BAD_INSTRUCTION]@"; -"%[exceptionType]@ is %[EXC_BREAKPOINT]@" = "%1$[Exception Type]@ is %2$[EXC_BREAKPOINT]@"; -"%[exceptionType]@ is %[EXC_CORPSE_NOTIFY]@" = "%1$[Exception Type]@ is %2$[EXC_CORPSE_NOTIFY]@"; -"%[exceptionType]@ is %[EXC_CRASH]@" = "%1$[Exception Type]@ is %2$[EXC_CRASH]@"; -"%[exceptionType]@ is %[EXC_EMULATION]@" = "%1$[Exception Type]@ is %2$[EXC_EMULATION]@"; -"%[exceptionType]@ is %[EXC_GUARD]@" = "%1$[Exception Type]@ is %2$[EXC_GUARD]@"; -"%[exceptionType]@ is %[EXC_MACH_SYSCALL]@" = "%1$[Exception Type]@ is %2$[EXC_MACH_SYSCALL]@"; -"%[exceptionType]@ is %[EXC_RESOURCE]@" = "%1$[Exception Type]@ is %2$[EXC_RESOURCE]@"; -"%[exceptionType]@ is %[EXC_RPC_ALERT]@" = "%1$[Exception Type]@ is %2$[EXC_RPC_ALERT]@"; -"%[exceptionType]@ is %[EXC_SOFTWARE]@" = "%1$[Exception Type]@ is %2$[EXC_SOFTWARE]@"; -"%[exceptionType]@ is %[EXC_SYSCALL]@" = "%1$[Exception Type]@ is %2$[EXC_SYSCALL]@"; +"%[exceptionType]@ is %[EXC_ARITHMETIC]@" = "%1$[Exception Type]@ が %2$[EXC_ARITHMETIC]@"; +"%[exceptionType]@ is %[EXC_BAD_ACCESS]@" = "%1$[Exception Type]@ が %2$[EXC_BAD_ACCESS]@"; +"%[exceptionType]@ is %[EXC_BAD_INSTRUCTION]@" = "%1$[Exception Type]@ が %2$[EXC_BAD_INSTRUCTION]@"; +"%[exceptionType]@ is %[EXC_BREAKPOINT]@" = "%1$[Exception Type]@ が %2$[EXC_BREAKPOINT]@"; +"%[exceptionType]@ is %[EXC_CORPSE_NOTIFY]@" = "%1$[Exception Type]@ が %2$[EXC_CORPSE_NOTIFY]@"; +"%[exceptionType]@ is %[EXC_CRASH]@" = "%1$[Exception Type]@ が %2$[EXC_CRASH]@"; +"%[exceptionType]@ is %[EXC_EMULATION]@" = "%1$[Exception Type]@ が %2$[EXC_EMULATION]@"; +"%[exceptionType]@ is %[EXC_GUARD]@" = "%1$[Exception Type]@ が %2$[EXC_GUARD]@"; +"%[exceptionType]@ is %[EXC_MACH_SYSCALL]@" = "%1$[Exception Type]@ が %2$[EXC_MACH_SYSCALL]@"; +"%[exceptionType]@ is %[EXC_RESOURCE]@" = "%1$[Exception Type]@ が %2$[EXC_RESOURCE]@"; +"%[exceptionType]@ is %[EXC_RPC_ALERT]@" = "%1$[Exception Type]@ が %2$[EXC_RPC_ALERT]@"; +"%[exceptionType]@ is %[EXC_SOFTWARE]@" = "%1$[Exception Type]@ が %2$[EXC_SOFTWARE]@"; +"%[exceptionType]@ is %[EXC_SYSCALL]@" = "%1$[Exception Type]@ が %2$[EXC_SYSCALL]@"; -"%[exceptionSignal]@ is %[SIGABRT]@" = "%1$[Exception Signal]@ is %2$[SIGABRT]@"; -"%[exceptionSignal]@ is %[SIGBUS]@" = "%1$[Exception Signal]@ is %2$[SIGBUS]@"; -"%[exceptionSignal]@ is %[SIGILL]@" = "%1$[Exception Signal]@ is %2$[SIGILL]@"; -"%[exceptionSignal]@ is %[SIGKILL]@" = "%1$[Exception Signal]@ is %2$[SIGKILL]@"; -"%[exceptionSignal]@ is %[SIGQUIT]@" = "%1$[Exception Signal]@ is %2$[SIGQUIT]@"; -"%[exceptionSignal]@ is %[SIGSEGV]@" = "%1$[Exception Signal]@ is %2$[SIGSEGV]@"; -"%[exceptionSignal]@ is %[SIGTRAP]@" = "%1$[Exception Signal]@ is %2$[SIGTRAP]@"; -"%[exceptionSignal]@ is %[Code Signature Invalid]@" = "%1$[Exception Signal]@ is %2$[Code Signature Invalid]@"; +"%[exceptionSignal]@ is %[SIGABRT]@" = "%1$[Exception Signal]@ が %2$[SIGABRT]@"; +"%[exceptionSignal]@ is %[SIGBUS]@" = "%1$[Exception Signal]@ が %2$[SIGBUS]@"; +"%[exceptionSignal]@ is %[SIGILL]@" = "%1$[Exception Signal]@ が %2$[SIGILL]@"; +"%[exceptionSignal]@ is %[SIGKILL]@" = "%1$[Exception Signal]@ が %2$[SIGKILL]@"; +"%[exceptionSignal]@ is %[SIGQUIT]@" = "%1$[Exception Signal]@ が %2$[SIGQUIT]@"; +"%[exceptionSignal]@ is %[SIGSEGV]@" = "%1$[Exception Signal]@ が %2$[SIGSEGV]@"; +"%[exceptionSignal]@ is %[SIGTRAP]@" = "%1$[Exception Signal]@ が %2$[SIGTRAP]@"; +"%[exceptionSignal]@ is %[Code Signature Invalid]@" = "%1$[Exception Signal]@ が %2$[Code Signature Invalid]@"; -"%[crashLogFileName]@ %[is]@ %@" = "%1$[Report File Name]@ %2$[is]@ %3$@"; +"%[crashLogFileName]@ %[is]@ %@" = "%1$[Report File Name]@ %2$[が]@ %3$@"; "%[crashLogFileName]@ %[is not]@ %@" = "%1$[Report File Name]@ %2$[is not]@ %3$@"; "%[crashLogFileName]@ %[begins with]@ %@" = "%1$[Report File Name]@ %2$[begins with]@ %3$@"; "%[crashLogFileName]@ %[ends with]@ %@" = "%1$[Report File Name]@ %2$[ends with]@ %3$@"; "%[crashLogFileName]@ %[contains]@ %@" = "%1$[Report File Name]@ %2$[含む]@ %3$@"; -"%[reportSourceTypeNumber]@ is %[0]@" = "%1$[Source]@ is %2$[System Reports]@"; -"%[reportSourceTypeNumber]@ is %[1]@" = "%1$[Source]@ is %2$[User Reports]@"; -"%[reportSourceTypeNumber]@ is %[2]@" = "%1$[Source]@ is %2$[Another Source]@"; +"%[reportSourceTypeNumber]@ is %[0]@" = "%1$[ソース]@ は %2$[システムレポート]@"; +"%[reportSourceTypeNumber]@ is %[1]@" = "%1$[ソース]@ は %2$[ユーザレポート]@"; +"%[reportSourceTypeNumber]@ is %[2]@" = "%1$[ソース]@ は %2$[Another Source]@"; From 4813159a515c29aa9a1afc61278040b39b65a215 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Thu, 20 Jan 2022 23:11:48 +0100 Subject: [PATCH 041/214] Japanese localization progress --- .../Help/ja.lproj/EXC_BAD_ACCESS_SIGBUS.html | 4 ++-- .../Help/ja.lproj/EXC_BAD_ACCESS_SIGSEGV.html | 4 ++-- .../ja.lproj/EXC_BAD_INSTRUCTION_SIGILL.html | 4 ++-- .../Help/ja.lproj/EXC_BREAKPOINT_SIGTRAP.html | 4 ++-- .../EXC_CRASH_Code Signature Invalid.html | 4 ++-- .../Help/ja.lproj/EXC_CRASH_SIGABRT.html | 4 ++-- .../Help/ja.lproj/EXC_CRASH_SIGKILL.html | 4 ++-- .../Help/ja.lproj/EXC_CRASH_SIGQUIT.html | 4 ++-- .../Help/ja.lproj/EXC_CRASH_SIGSEGV.html | 4 ++-- .../Help/ja.lproj/unknown_exception_type.html | 2 +- ...ePanePresentationOutlineViewController.xib | 7 ++++--- ...encePanePresentationTextViewController.xib | 6 +++--- .../ja.lproj/Localizable.strings | Bin 7166 -> 7092 bytes .../app_unexpectedly/ja.lproj/MainMenu.xib | 4 ++-- 14 files changed, 28 insertions(+), 27 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BAD_ACCESS_SIGBUS.html b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BAD_ACCESS_SIGBUS.html index 9c36cc7..7c88950 100644 --- a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BAD_ACCESS_SIGBUS.html +++ b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BAD_ACCESS_SIGBUS.html @@ -7,11 +7,11 @@ 要旨

      The EXC_BAD_ACCESS (SIGBUS) type indicates a process uses memory in an unexpected way.

      -Discussion +討論

      The exception can happen when the process tries to access unmapped memory (KERN_INVALID_ADDRESS), misaligned memory (EXC_ARM_DA_ALIGN) or unavailable memory (KERN_MEMORY_ERROR). This can also happen when the process tries to write on read-only or protected memory (KERN_PROTECTION_FAILURE).

      diff --git a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BAD_ACCESS_SIGSEGV.html b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BAD_ACCESS_SIGSEGV.html index d6d20bd..ed146a4 100644 --- a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BAD_ACCESS_SIGSEGV.html +++ b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BAD_ACCESS_SIGSEGV.html @@ -7,11 +7,11 @@ 要旨

      The EXC_BAD_ACCESS (SIGSEGV) type indicates a process uses memory in an unexpected way.

      -Discussion +討論

      The exception can happen when the process tries to access unmapped memory (KERN_INVALID_ADDRESS), misaligned memory (EXC_ARM_DA_ALIGN) or unavailable memory (KERN_MEMORY_ERROR). This can also happen when the process tries to write on read-only or protected memory (KERN_PROTECTION_FAILURE).

      diff --git a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BAD_INSTRUCTION_SIGILL.html b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BAD_INSTRUCTION_SIGILL.html index ee7bd4b..7e32898 100644 --- a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BAD_INSTRUCTION_SIGILL.html +++ b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BAD_INSTRUCTION_SIGILL.html @@ -7,11 +7,11 @@ 要旨

      The EXC_BAD_INSTRUCTION (SIGILL) type indicates the process executed an illegal instruction (usually inserted by the compiler).

      -Discussion +討論

      The execution of this illegal instruction usually means that one of the compiler’s safety checks failed (e.g. when your code unwraps a nil optional in Swift).

      diff --git a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BREAKPOINT_SIGTRAP.html b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BREAKPOINT_SIGTRAP.html index ce411d7..7e6cc54 100644 --- a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BREAKPOINT_SIGTRAP.html +++ b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_BREAKPOINT_SIGTRAP.html @@ -7,11 +7,11 @@ 要旨

      The EXC_BREAKPOINT (SIGTRAP) type indicates the process executed an illegal instruction (usually inserted by the compiler).

      -Discussion +討論

      The execution of this illegal instruction usually means that one of the compiler’s safety checks failed (e.g. when your code unwraps a nil optional in Swift).

      diff --git a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_Code Signature Invalid.html b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_Code Signature Invalid.html index 1f617f4..18d4e64 100644 --- a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_Code Signature Invalid.html +++ b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_Code Signature Invalid.html @@ -7,11 +7,11 @@ 要旨

      EXC_CRASH (Code Signature Invalid) indicates the operating system terminated the process because of problems related to code signing.

      -Discussion +討論

      The crash could have occurred because the application is using invalid entitlements or the code signing identity is incompatible with the running environment.

      diff --git a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGABRT.html b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGABRT.html index 1141358..edefef2 100644 --- a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGABRT.html +++ b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGABRT.html @@ -7,11 +7,11 @@ 要旨

      EXC_CRASH (SIGABRT) indicates the process terminated because it received the SIGABRT signal.

      -Discussion +討論

      Typically, this signal is sent because a function in the process called abort(), such as when an app encounters an uncaught Objective-C or C++ exception.

      diff --git a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGKILL.html b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGKILL.html index 7a07b63..d6519c2 100644 --- a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGKILL.html +++ b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGKILL.html @@ -7,11 +7,11 @@ 要旨

      EXC_CRASH (SIGKILL) indicates the operating system terminated the process.

      -Discussion +討論

      The crash report contains a Termination Reason field with a code that explains the reason for the crash.

      diff --git a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGQUIT.html b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGQUIT.html index a9c377a..fae3bc6 100644 --- a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGQUIT.html +++ b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGQUIT.html @@ -7,11 +7,11 @@ 要旨

      EXC_CRASH (SIGQUIT) indicates the process terminated at the request of another process with privileges to manage its lifetime.

      -Discussion +討論

      This does not mean that the process crashed, but it likely misbehaved in a detectable manner.

      diff --git a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGSEGV.html b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGSEGV.html index 424e855..c45955b 100644 --- a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGSEGV.html +++ b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/EXC_CRASH_SIGSEGV.html @@ -7,11 +7,11 @@ 要旨

      The EXC_CRASH (SIGSEGV) type indicates a process uses memory in an unexpected way.

      -Discussion +討論

      The exception can happen when the process tries to access unmapped memory, misaligned memory or unavailable memory. This can also happen when the process tries to write on read-only or protected memory.

      diff --git a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/unknown_exception_type.html b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/unknown_exception_type.html index 536aa01..fcc3d42 100644 --- a/app_unexpectedly/app_unexpectedly/Help/ja.lproj/unknown_exception_type.html +++ b/app_unexpectedly/app_unexpectedly/Help/ja.lproj/unknown_exception_type.html @@ -90,7 +90,7 @@

      No Quick Help


      -
      Search Documentation
      +
      ドキュメントを検索する

      diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationOutlineViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationOutlineViewController.xib index 9013744..4c4ba58 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationOutlineViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationOutlineViewController.xib @@ -41,11 +41,11 @@
      + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationTextViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationTextViewController.xib index 1949fc1..a4667f6 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationTextViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationTextViewController.xib @@ -115,11 +115,11 @@
      - + - + From 76c1bb1a081d58aca02d03b2117191f8455b5b47 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Sat, 22 Jan 2022 00:22:12 +0100 Subject: [PATCH 042/214] Japanese localization progress --- .../ja.lproj/CUIAboutBoxWindowController.xib | 6 +-- .../CUICollectionViewRegisterItem.xib | 4 +- ...shLogPresentationOutlineViewController.xib | 10 ++--- ...hLogsSourceSmartEditorWindowController.xib | 10 ++--- .../CUIExportAccessoryViewController.xib | 28 ++++++------ .../CUIInspectorExecutableViewController.xib | 12 +++--- .../CUIInspectorGeneralViewController.xib | 12 +++--- .../CUIInspectorProcessesViewController.xib | 16 +++---- .../CUIInspectorUserViewController.xib | 8 ++-- .../ja.lproj/CUIMainWindowController.xib | 4 +- ...ferencePaneCrashreporterViewController.xib | 40 +++++++++--------- ...referencePaneFontscolorsViewController.xib | 20 ++++----- ...ePanePresentationOutlineViewController.xib | 2 +- ...encePanePresentationTextViewController.xib | 26 ++++++------ ...eferencePanePresentationViewController.xib | 4 +- ...ferencePaneSymbolicationViewController.xib | 6 +-- .../ja.lproj/Localizable.strings | Bin 7092 -> 7064 bytes 17 files changed, 104 insertions(+), 104 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIAboutBoxWindowController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIAboutBoxWindowController.xib index af768e3..53825f6 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIAboutBoxWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIAboutBoxWindowController.xib @@ -45,7 +45,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -79,7 +79,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICollectionViewRegisterItem.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICollectionViewRegisterItem.xib index 6aa74cf..6cd90c3 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICollectionViewRegisterItem.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICollectionViewRegisterItem.xib @@ -48,9 +48,9 @@ - + - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationOutlineViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationOutlineViewController.xib index 600446a..376d889 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationOutlineViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationOutlineViewController.xib @@ -34,10 +34,10 @@ - + - + @@ -60,7 +60,7 @@ - + @@ -98,10 +98,10 @@ - + - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogsSourceSmartEditorWindowController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogsSourceSmartEditorWindowController.xib index 607e82b..af07d43 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogsSourceSmartEditorWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogsSourceSmartEditorWindowController.xib @@ -54,10 +54,10 @@ - + - + @@ -75,10 +75,10 @@ - + - + @@ -123,7 +123,7 @@ DQ - + Gw diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIExportAccessoryViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIExportAccessoryViewController.xib index fff3882..88bfd0b 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIExportAccessoryViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIExportAccessoryViewController.xib @@ -1,5 +1,5 @@ - + @@ -20,7 +20,7 @@ - + @@ -38,8 +38,8 @@ - - + + @@ -47,33 +47,33 @@ - - - - + + - - + + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorExecutableViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorExecutableViewController.xib index a9056a5..3dd311b 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorExecutableViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorExecutableViewController.xib @@ -33,19 +33,19 @@ - + - + - + - + @@ -94,10 +94,10 @@ - + - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorGeneralViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorGeneralViewController.xib index 4d02ac0..bff9728 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorGeneralViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorGeneralViewController.xib @@ -22,10 +22,10 @@ - + - + @@ -52,7 +52,7 @@ - + @@ -61,7 +61,7 @@ - + @@ -70,10 +70,10 @@ - + - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorProcessesViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorProcessesViewController.xib index b0a094d..ecd9844 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorProcessesViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorProcessesViewController.xib @@ -21,10 +21,10 @@ - + - + @@ -39,19 +39,19 @@ - + - + - + - + @@ -66,10 +66,10 @@ - + - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorUserViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorUserViewController.xib index 3dca633..2136902 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorUserViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIInspectorUserViewController.xib @@ -19,10 +19,10 @@ - + - + @@ -37,10 +37,10 @@ - + - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIMainWindowController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIMainWindowController.xib index efcaeb6..c9bec14 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIMainWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIMainWindowController.xib @@ -86,9 +86,9 @@ - + - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneCrashreporterViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneCrashreporterViewController.xib index d2ac3d3..eb4786e 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneCrashreporterViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneCrashreporterViewController.xib @@ -1,5 +1,5 @@ - + @@ -20,7 +20,7 @@ - + @@ -29,25 +29,25 @@ - + - - - - + - - - - + @@ -116,7 +116,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneFontscolorsViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneFontscolorsViewController.xib index 3be7792..9a172e6 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneFontscolorsViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneFontscolorsViewController.xib @@ -45,7 +45,7 @@ - + @@ -73,19 +73,19 @@ - + - + - + - + @@ -204,10 +204,10 @@ - + - + @@ -301,7 +301,7 @@ - + @@ -319,11 +319,11 @@ - + - + @@ -157,10 +157,10 @@ - + - + @@ -170,17 +170,17 @@ - + - + - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationViewController.xib index aae5f94..23b520f 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationViewController.xib @@ -35,7 +35,7 @@ - + @@ -46,7 +46,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneSymbolicationViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneSymbolicationViewController.xib index 6a2d1d2..1abad06 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneSymbolicationViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneSymbolicationViewController.xib @@ -21,10 +21,10 @@ - + - + @@ -58,7 +58,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/Localizable.strings b/app_unexpectedly/app_unexpectedly/ja.lproj/Localizable.strings index cde6ef9361d41476dcb91829a6ee03f6c7bc728f..015c0a7cfb63c1d28dc6786ebdc6c9baf48d480f 100755 GIT binary patch delta 61 zcmdmDKEr%NACF3;L8U>OL7u^0gFgm44ZICHfoz!A8-u$*(Gv!nkMSH}W6L(k=&-8X JJVjW60|3;#7bgG! delta 36 scmbPXzQue)AJ1eT9;?k;c=oaJ1v6wY Date: Sun, 23 Jan 2022 21:09:33 +0100 Subject: [PATCH 043/214] Japanese localization progress --- .../CUICrashLogDianosticMessages.m | 28 ++++++++++++++++++- .../CUIThreadsListViewController.m | 15 +++++++++- .../CUICollectionViewRegisterItem.xib | 12 ++++---- .../CUICrashLogsListViewController.xib | 2 +- ...UIPreferencePaneAdvancedViewController.xib | 12 ++++---- ...ferencePaneCrashreporterViewController.xib | 10 +++---- .../app_unexpectedly/ja.lproj/MainMenu.xib | 12 ++++---- 7 files changed, 65 insertions(+), 26 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m b/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m index 440455d..84d1aa3 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m @@ -61,7 +61,33 @@ - (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **) { IPSIncidentDiagnosticMessage * tDiagnosticMessage=inIncident.diagnosticMessage; - //_messages=; + if (tDiagnosticMessage!=nil) + { + NSMutableString * tMessages=[NSMutableString string]; + + if (tDiagnosticMessage.vmregioninfo!=nil) + { + [tMessages appendFormat:@"VM Region Info: %@\n",tDiagnosticMessage.vmregioninfo]; + } + + if (tDiagnosticMessage.asi!=nil) + { + [tMessages appendString:@"Application Specific Information:\n"]; + + [tDiagnosticMessage.asi.applicationsInformation enumerateKeysAndObjectsUsingBlock:^(NSString * bProcess, NSArray * bInformation, BOOL * bOutStop) { + + [bInformation enumerateObjectsUsingBlock:^(NSString * bInformation, NSUInteger bIndex, BOOL * bOutStop2) { + + [tMessages appendFormat:@"%@\n",bInformation]; + }]; + + }]; + + [tMessages appendString:@"\n"]; + } + + _messages=[tMessages copy]; + } } return self; diff --git a/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m b/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m index 725674b..b215e84 100644 --- a/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m @@ -316,7 +316,20 @@ - (void)setVisibleStackFrameComponents:(CUIStackFrameComponents)inVisibleStackFr - (NSUInteger)numberOfSelectedStackFrames { - return [_outlineView WB_selectedOrClickedRowIndexes].count; + NSIndexSet * tSelectedRows=[_outlineView WB_selectedOrClickedRowIndexes]; + + __block BOOL tContainsThreadRows=NO; + + [tSelectedRows enumerateIndexesUsingBlock:^(NSUInteger bIndex, BOOL * bOutStop) { + + if ([[self->_outlineView itemAtRow:bIndex] class]==[CUIThread class]) + { + tContainsThreadRows=YES; + *bOutStop=YES; + } + }]; + + return (tContainsThreadRows==NO) ? [_outlineView WB_selectedOrClickedRowIndexes].count : 0; } - (NSArray *)selectedStackFrames diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICollectionViewRegisterItem.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICollectionViewRegisterItem.xib index 6cd90c3..a30416b 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICollectionViewRegisterItem.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICollectionViewRegisterItem.xib @@ -38,20 +38,20 @@ - + - diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogsListViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogsListViewController.xib index 9afd172..4df2f57 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogsListViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogsListViewController.xib @@ -196,7 +196,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneAdvancedViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneAdvancedViewController.xib index 5e65e93..6801482 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneAdvancedViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneAdvancedViewController.xib @@ -20,9 +20,9 @@ - + - + @@ -44,9 +44,9 @@
      From 113ed6cd4c03d87e4d8c477d530c026a5639eb9c Mon Sep 17 00:00:00 2001 From: packagesdev Date: Sun, 23 Jan 2022 21:11:29 +0100 Subject: [PATCH 044/214] Fix bugs - contextual menu items should not be enabled for thread rows. - Convert ASI from .ips so that it is visible in Outline view mode. --- .../CUICrashLogDianosticMessages.m | 28 ++++++++++++++++++- .../CUIThreadsListViewController.m | 15 +++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m b/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m index 440455d..84d1aa3 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m @@ -61,7 +61,33 @@ - (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **) { IPSIncidentDiagnosticMessage * tDiagnosticMessage=inIncident.diagnosticMessage; - //_messages=; + if (tDiagnosticMessage!=nil) + { + NSMutableString * tMessages=[NSMutableString string]; + + if (tDiagnosticMessage.vmregioninfo!=nil) + { + [tMessages appendFormat:@"VM Region Info: %@\n",tDiagnosticMessage.vmregioninfo]; + } + + if (tDiagnosticMessage.asi!=nil) + { + [tMessages appendString:@"Application Specific Information:\n"]; + + [tDiagnosticMessage.asi.applicationsInformation enumerateKeysAndObjectsUsingBlock:^(NSString * bProcess, NSArray * bInformation, BOOL * bOutStop) { + + [bInformation enumerateObjectsUsingBlock:^(NSString * bInformation, NSUInteger bIndex, BOOL * bOutStop2) { + + [tMessages appendFormat:@"%@\n",bInformation]; + }]; + + }]; + + [tMessages appendString:@"\n"]; + } + + _messages=[tMessages copy]; + } } return self; diff --git a/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m b/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m index 725674b..b215e84 100644 --- a/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m @@ -316,7 +316,20 @@ - (void)setVisibleStackFrameComponents:(CUIStackFrameComponents)inVisibleStackFr - (NSUInteger)numberOfSelectedStackFrames { - return [_outlineView WB_selectedOrClickedRowIndexes].count; + NSIndexSet * tSelectedRows=[_outlineView WB_selectedOrClickedRowIndexes]; + + __block BOOL tContainsThreadRows=NO; + + [tSelectedRows enumerateIndexesUsingBlock:^(NSUInteger bIndex, BOOL * bOutStop) { + + if ([[self->_outlineView itemAtRow:bIndex] class]==[CUIThread class]) + { + tContainsThreadRows=YES; + *bOutStop=YES; + } + }]; + + return (tContainsThreadRows==NO) ? [_outlineView WB_selectedOrClickedRowIndexes].count : 0; } - (NSArray *)selectedStackFrames From 59f420a2ce708549e428962351714046cfe1b301 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Mon, 24 Jan 2022 13:59:20 +0100 Subject: [PATCH 045/214] Pulled down update to ip2scrash --- submodules/ips2crash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/ips2crash b/submodules/ips2crash index f7c9cee..f0032b5 160000 --- a/submodules/ips2crash +++ b/submodules/ips2crash @@ -1 +1 @@ -Subproject commit f7c9ceed9c7e7cdaf5158f4bc0c423a4701f969b +Subproject commit f0032b534760aa82c6ba71d6c36dfefea950558f From dfe384b461359aabd55da8118a504790250fa1e8 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Mon, 24 Jan 2022 23:27:36 +0100 Subject: [PATCH 046/214] Start supporting asi backtraces and signatures. --- .../CUICrashLogDianosticMessages.m | 30 ++++++++++-- .../app_unexpectedly/CUIIPSTransform.m | 48 +++++++++++++++---- 2 files changed, 66 insertions(+), 12 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m b/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m index 84d1aa3..10e0ce5 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogDianosticMessages.m @@ -70,11 +70,13 @@ - (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **) [tMessages appendFormat:@"VM Region Info: %@\n",tDiagnosticMessage.vmregioninfo]; } - if (tDiagnosticMessage.asi!=nil) + IPSApplicationSpecificInformation * tApplicationSpecificInformation=tDiagnosticMessage.asi; + + if (tApplicationSpecificInformation!=nil) { [tMessages appendString:@"Application Specific Information:\n"]; - [tDiagnosticMessage.asi.applicationsInformation enumerateKeysAndObjectsUsingBlock:^(NSString * bProcess, NSArray * bInformation, BOOL * bOutStop) { + [tApplicationSpecificInformation.applicationsInformation enumerateKeysAndObjectsUsingBlock:^(NSString * bProcess, NSArray * bInformation, BOOL * bOutStop) { [bInformation enumerateObjectsUsingBlock:^(NSString * bInformation, NSUInteger bIndex, BOOL * bOutStop2) { @@ -83,7 +85,29 @@ - (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **) }]; - [tMessages appendString:@"\n"]; + if (tApplicationSpecificInformation.signatures!=nil) + { + [tMessages appendString:@"\n"]; + + [tMessages appendString:@"Application Specific Signatures:\n"]; + + [tApplicationSpecificInformation.signatures enumerateObjectsUsingBlock:^(NSString * bSignature, NSUInteger bIndex, BOOL * bOutStop) { + + [tMessages appendFormat:@"%@\n",bSignature]; + }]; + } + + if (tApplicationSpecificInformation.backtraces!=nil) + { + [tMessages appendString:@"\n"]; + + [tApplicationSpecificInformation.backtraces enumerateObjectsUsingBlock:^(NSString * bBacktrace, NSUInteger bIndex, BOOL * bOutStop) { + + [tMessages appendFormat:@"Application Specific Backtrace %lu:\n",bIndex+1]; + + [tMessages appendFormat:@"%@\n",bBacktrace]; + }]; + } } _messages=[tMessages copy]; diff --git a/app_unexpectedly/app_unexpectedly/CUIIPSTransform.m b/app_unexpectedly/app_unexpectedly/CUIIPSTransform.m index c933695..418cafd 100644 --- a/app_unexpectedly/app_unexpectedly/CUIIPSTransform.m +++ b/app_unexpectedly/app_unexpectedly/CUIIPSTransform.m @@ -680,23 +680,53 @@ - (NSArray *)attributedLinesForDiagnosticMessageOfIncident:(IPSIncident *)inInci [tMutableArray addObject:@""]; } - if (tDiagnosticMessage.asi!=nil) + IPSApplicationSpecificInformation * tApplicationSpecificInformation=tDiagnosticMessage.asi; + + if (tApplicationSpecificInformation!=nil) { - NSMutableAttributedString * tMutableAttributedString=[[self attributedStringForKey:@"Application Specific Information:"] mutableCopy]; + NSDictionary * tApplicationsInformation=tApplicationSpecificInformation.applicationsInformation; - [tMutableArray addObject:tMutableAttributedString]; + if (tApplicationsInformation!=nil) + { + NSMutableAttributedString * tMutableAttributedString=[[self attributedStringForKey:@"Application Specific Information:"] mutableCopy]; + + [tMutableArray addObject:tMutableAttributedString]; + + + [tApplicationsInformation enumerateKeysAndObjectsUsingBlock:^(NSString * bProcess, NSArray * bInformation, BOOL * bOutStop) { + + [bInformation enumerateObjectsUsingBlock:^(NSString * bInformation, NSUInteger bIndex, BOOL * bOutStop2) { + + [tMutableArray addObject:[self attributedStringForPlainText:bInformation]]; + }]; + + }]; + + [tMutableArray addObject:@""]; + } - - [tDiagnosticMessage.asi.applicationsInformation enumerateKeysAndObjectsUsingBlock:^(NSString * bProcess, NSArray * bInformation, BOOL * bOutStop) { + NSArray * tSignatures=tApplicationSpecificInformation.signatures; + + if (tSignatures!=nil) + { + NSMutableAttributedString * tMutableAttributedString=[[self attributedStringForKey:@"Application Specific Signatures:"] mutableCopy]; + + [tMutableArray addObject:tMutableAttributedString]; - [bInformation enumerateObjectsUsingBlock:^(NSString * bInformation, NSUInteger bIndex, BOOL * bOutStop2) { + [tSignatures enumerateObjectsUsingBlock:^(NSString * bSignature, NSUInteger bIndex, BOOL * bOutStop) { - [tMutableArray addObject:[self attributedStringForPlainText:bInformation]]; + [tMutableArray addObject:[self attributedStringForPlainText:bSignature]]; }]; - }]; + [tMutableArray addObject:@""]; + } - [tMutableArray addObject:@""]; + NSArray * tBacktraces=tApplicationSpecificInformation.backtraces; + + if (tBacktraces!=nil) + { + // A COMPLETER + } } NSMutableAttributedString * tMutableAttributedString=tMutableArray.firstObject; From bce1b8481cab7dd79728fbd5f811e39a9c3be9e9 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Tue, 25 Jan 2022 00:06:35 +0100 Subject: [PATCH 047/214] Japanese localization progress --- .../CUIPreferencePaneGeneralViewController.xib | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneGeneralViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneGeneralViewController.xib index 2715ec2..ba86035 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneGeneralViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneGeneralViewController.xib @@ -21,18 +21,18 @@ - + - + - - - - - + - - + + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationOutlineViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationOutlineViewController.xib index 6f37b30..0940db0 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationOutlineViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationOutlineViewController.xib @@ -30,9 +30,9 @@ + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/es.lproj/MainMenu.xib b/app_unexpectedly/app_unexpectedly/es.lproj/MainMenu.xib index 7350331..5150328 100644 --- a/app_unexpectedly/app_unexpectedly/es.lproj/MainMenu.xib +++ b/app_unexpectedly/app_unexpectedly/es.lproj/MainMenu.xib @@ -505,7 +505,7 @@ CA
      - + diff --git a/app_unexpectedly/app_unexpectedly/fr.lproj/CUILineJumperWindowController.xib b/app_unexpectedly/app_unexpectedly/fr.lproj/CUILineJumperWindowController.xib new file mode 100644 index 0000000..7c3da8d --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/fr.lproj/CUILineJumperWindowController.xib @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/fr.lproj/Localizable.strings b/app_unexpectedly/app_unexpectedly/fr.lproj/Localizable.strings index a036c6c599cc8f02d135c723ec70cad4d2e7d5ee..325a8a4ea63fe569ee1b0770ec392800ba332f3b 100755 GIT binary patch delta 24 ecmez8{LgtqoDlbFh6N0&3=TkY_vTEYsr&$UnFxyj delta 24 ecmez8{LgtqoDg>mgA#)(g98JQ-kd2kl^+0R4+h}? diff --git a/app_unexpectedly/app_unexpectedly/fr.lproj/MainMenu.xib b/app_unexpectedly/app_unexpectedly/fr.lproj/MainMenu.xib index e29b28f..109a6c5 100644 --- a/app_unexpectedly/app_unexpectedly/fr.lproj/MainMenu.xib +++ b/app_unexpectedly/app_unexpectedly/fr.lproj/MainMenu.xib @@ -505,7 +505,7 @@ CA - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIBinaryImagesViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIBinaryImagesViewController.xib index b2838ac..c3314d3 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIBinaryImagesViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIBinaryImagesViewController.xib @@ -47,7 +47,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationOutlineViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationOutlineViewController.xib index 8ab61af..33b13a1 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationOutlineViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUICrashLogPresentationOutlineViewController.xib @@ -112,7 +112,7 @@ - - - - - - - - - + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIMainWindowController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIMainWindowController.xib index 103a688..b260707 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIMainWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIMainWindowController.xib @@ -87,7 +87,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneGeneralViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneGeneralViewController.xib index ba86035..6fabd8f 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneGeneralViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePaneGeneralViewController.xib @@ -86,9 +86,9 @@ - + - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationOutlineViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationOutlineViewController.xib index 0940db0..eac7a20 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationOutlineViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIPreferencePanePresentationOutlineViewController.xib @@ -21,18 +21,18 @@ - + - + - + - + - - - - - + @@ -78,8 +81,28 @@ + + + + + + + + + + - + diff --git a/app_unexpectedly/app_unexpectedly/es.lproj/CUIExportAccessoryViewController.xib b/app_unexpectedly/app_unexpectedly/es.lproj/CUIExportAccessoryViewController.xib index 2c24262..69e353f 100644 --- a/app_unexpectedly/app_unexpectedly/es.lproj/CUIExportAccessoryViewController.xib +++ b/app_unexpectedly/app_unexpectedly/es.lproj/CUIExportAccessoryViewController.xib @@ -10,6 +10,7 @@ + @@ -17,11 +18,11 @@ - + - + @@ -39,7 +40,7 @@ - + @@ -48,7 +49,7 @@ - + @@ -78,8 +79,28 @@ + + + + + + + + + + - + diff --git a/app_unexpectedly/app_unexpectedly/fr.lproj/CUIExportAccessoryViewController.xib b/app_unexpectedly/app_unexpectedly/fr.lproj/CUIExportAccessoryViewController.xib index 5e46ec9..95307c4 100644 --- a/app_unexpectedly/app_unexpectedly/fr.lproj/CUIExportAccessoryViewController.xib +++ b/app_unexpectedly/app_unexpectedly/fr.lproj/CUIExportAccessoryViewController.xib @@ -10,6 +10,7 @@ + @@ -17,11 +18,11 @@ - + - + @@ -39,7 +40,7 @@ - + @@ -48,7 +49,7 @@ - + @@ -78,8 +79,28 @@ + + + + + + + + + + - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIExportAccessoryViewController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIExportAccessoryViewController.xib index 88bfd0b..1ef2a33 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIExportAccessoryViewController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIExportAccessoryViewController.xib @@ -17,11 +17,11 @@ - + - + @@ -39,7 +39,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -78,8 +78,25 @@ + + + + + + + + + + - + From 204e15cfb8cd5887a2627520adc19b81a7588c89 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Thu, 11 Aug 2022 09:30:23 +0200 Subject: [PATCH 092/214] Fix full contents radio button state Full contents radio button should be disabled when obfuscating --- .../app_unexpectedly/CUIExportAccessoryViewController.m | 1 + 1 file changed, 1 insertion(+) diff --git a/app_unexpectedly/app_unexpectedly/CUIExportAccessoryViewController.m b/app_unexpectedly/app_unexpectedly/CUIExportAccessoryViewController.m index f3227f9..be58c11 100644 --- a/app_unexpectedly/app_unexpectedly/CUIExportAccessoryViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUIExportAccessoryViewController.m @@ -189,6 +189,7 @@ - (IBAction)switchObfuscateContents:(NSButton *)sender if (self.canSelectExportedContents==YES) { _selectionOnlyRadioButton.enabled=(_obfuscateContents==NO); + _allContentsRadioButton.enabled=(_obfuscateContents==NO); if (_obfuscateContents==YES) _allContentsRadioButton.state=NSOnState; From 38a889964e54b58e6e7a12b67cb8fd95689c63c1 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Thu, 11 Aug 2022 09:31:49 +0200 Subject: [PATCH 093/214] Add recents side bar recents icon asset Add custom recents side bar recents icon asset because the OS icon is wrong in macOS Monterey and later. --- .../Contents.json | 22 ++++++++++++++++++ .../recents.png | Bin 0 -> 344 bytes .../recents@2x.png | Bin 0 -> 1454 bytes .../app_unexpectedly/images/recents.png | Bin 0 -> 344 bytes .../app_unexpectedly/images/recents.psd | Bin 0 -> 24408 bytes .../app_unexpectedly/images/recents@2x.png | Bin 0 -> 1454 bytes .../app_unexpectedly/images/recents@2x.psd | Bin 0 -> 25341 bytes 7 files changed, 22 insertions(+) create mode 100644 app_unexpectedly/app_unexpectedly/Images.xcassets/sidebar_recents_Template.imageset/Contents.json create mode 100644 app_unexpectedly/app_unexpectedly/Images.xcassets/sidebar_recents_Template.imageset/recents.png create mode 100644 app_unexpectedly/app_unexpectedly/Images.xcassets/sidebar_recents_Template.imageset/recents@2x.png create mode 100644 app_unexpectedly/app_unexpectedly/images/recents.png create mode 100644 app_unexpectedly/app_unexpectedly/images/recents.psd create mode 100644 app_unexpectedly/app_unexpectedly/images/recents@2x.png create mode 100644 app_unexpectedly/app_unexpectedly/images/recents@2x.psd diff --git a/app_unexpectedly/app_unexpectedly/Images.xcassets/sidebar_recents_Template.imageset/Contents.json b/app_unexpectedly/app_unexpectedly/Images.xcassets/sidebar_recents_Template.imageset/Contents.json new file mode 100644 index 0000000..15d3bb3 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/Images.xcassets/sidebar_recents_Template.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "recents.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "recents@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/app_unexpectedly/app_unexpectedly/Images.xcassets/sidebar_recents_Template.imageset/recents.png b/app_unexpectedly/app_unexpectedly/Images.xcassets/sidebar_recents_Template.imageset/recents.png new file mode 100644 index 0000000000000000000000000000000000000000..297423dff82f6ed38834e275b712b46fe5e026e4 GIT binary patch literal 344 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 F{{tVr0HOc@ literal 0 HcmV?d00001 From a87b97a97e35d44cb8de9cdb6dd2144a8c49649f Mon Sep 17 00:00:00 2001 From: packagesdev Date: Thu, 11 Aug 2022 09:33:03 +0200 Subject: [PATCH 094/214] Use custom icon for Recents source item --- .../app_unexpectedly/CUICrashLogsSourceToday+UI.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogsSourceToday+UI.m b/app_unexpectedly/app_unexpectedly/CUICrashLogsSourceToday+UI.m index db17309..5dfc40a 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogsSourceToday+UI.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogsSourceToday+UI.m @@ -1,5 +1,5 @@ /* - Copyright (c) 2020-2021, Stephane Sudre + Copyright (c) 2020-2022, Stephane Sudre All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -21,7 +21,7 @@ - (NSImage *)icon static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - sIcon=[[NSImage alloc] initWithContentsOfFile:@"/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/SidebarRecents.icns"]; + sIcon=[NSImage imageNamed:@"sidebar_recents_Template"]; sIcon.template=YES; }); From 1a2b212b8af5b28d3deb38a2975f579fea6fecba Mon Sep 17 00:00:00 2001 From: packagesdev Date: Sat, 15 Oct 2022 18:51:33 +0200 Subject: [PATCH 095/214] Fix the computing of binaryImageOffset --- .../app_unexpectedly/CUIBinaryImage.h | 4 +- .../app_unexpectedly/CUIBinaryImage.m | 65 +++++++++++++++++-- .../CUICrashLogBinaryImages.m | 6 -- .../CUIInspectorExecutableViewController.m | 5 ++ .../CUIReportThemedTransform.m | 11 +--- .../CUIThreadsColumnViewController.m | 11 +--- .../CUIThreadsListViewController.m | 11 +--- .../ips + Extensions/IPSImage+Offset.m | 7 +- 8 files changed, 77 insertions(+), 43 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/CUIBinaryImage.h b/app_unexpectedly/app_unexpectedly/CUIBinaryImage.h index 6302983..43e107f 100644 --- a/app_unexpectedly/app_unexpectedly/CUIBinaryImage.h +++ b/app_unexpectedly/app_unexpectedly/CUIBinaryImage.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2020-2021, Stephane Sudre + Copyright (c) 2020-2022, Stephane Sudre All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -32,8 +32,6 @@ @interface CUIBinaryImage : NSObject - @property (getter=isMainImage) BOOL mainImage; - @property (readonly,getter=isUserCode) BOOL userCode; @property (readonly,copy) NSString * identifier; diff --git a/app_unexpectedly/app_unexpectedly/CUIBinaryImage.m b/app_unexpectedly/app_unexpectedly/CUIBinaryImage.m index b267bb4..b8b082b 100644 --- a/app_unexpectedly/app_unexpectedly/CUIBinaryImage.m +++ b/app_unexpectedly/app_unexpectedly/CUIBinaryImage.m @@ -101,6 +101,8 @@ @interface CUIBinaryImage () @property CUIAddressesRange * addressesRange; +- (BOOL)_isUserCode; + @end // Line example: @@ -168,8 +170,6 @@ - (instancetype)initWithString:(NSString *)inString reportVersion:(NSUInteger)in } } - - if (inReportVersion==6) { // Remove the version @@ -192,7 +192,7 @@ - (instancetype)initWithString:(NSString *)inString reportVersion:(NSUInteger)in tString=tOriginalString; } - if ([tString hasPrefix:@"+"]==YES && tString.length>1) + if ([tString hasPrefix:@"+"]==YES && tString.length>1) // Cheap way to find that a binary image is user code. { _userCode=YES; @@ -273,6 +273,10 @@ - (instancetype)initWithString:(NSString *)inString reportVersion:(NSUInteger)in return nil; _path=[[inString substringFromIndex:tScanner.scanLocation] stringByTrimmingCharactersInSet:tWhitespaceCharacterSet]; + + // User Code + + _userCode = (_userCode == YES) ? YES : [self _isUserCode]; } return self; @@ -320,10 +324,61 @@ - (NSUInteger)binaryImageOffset { NSUInteger tLoadAddress=self.addressesRange.loadAddress; - if (tLoadAddress>0x7fff00000000 || self.mainImage==NO) + if (tLoadAddress>0x7fff00000000) // Won't happen with ARM-64. return tLoadAddress; - return (tLoadAddress-0x100000000); + if (tLoadAddress>=0x100000000) + return (tLoadAddress-0x100000000); + + return tLoadAddress; // 32-bit +} + +- (BOOL)_isUserCode +{ + NSString * tIdentifier=self.identifier; + + if (tIdentifier!=nil) + { + if ([tIdentifier hasPrefix:@"com.apple."]==YES) + return NO; + } + + NSString * tPath=self.path; + + if (tPath!=nil) + { + if ([tPath hasPrefix:@"/System/"]==YES) + return NO; + + if ([tPath hasPrefix:@"/usr/"]==YES) + { + if ([tPath hasPrefix:@"/usr/bin"]==YES) + return NO; + + if ([tPath hasPrefix:@"/usr/sbin"]==YES) + return NO; + + if ([tPath hasPrefix:@"/usr/lib"]==YES) + return NO; + + if ([tPath hasPrefix:@"/usr/libexec"]==YES) + return NO; + + if ([tPath hasPrefix:@"/usr/share"]==YES) + return NO; + } + + if ([tPath hasPrefix:@"/bin/"]==YES) + return NO; + + if ([tPath hasPrefix:@"/sbin/"]==YES) + return NO; + + if ([tPath hasPrefix:@"/Library/Apple"]==YES) + return NO; + } + + return YES; } @end diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogBinaryImages.m b/app_unexpectedly/app_unexpectedly/CUICrashLogBinaryImages.m index 820ba81..6a94c89 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogBinaryImages.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogBinaryImages.m @@ -99,9 +99,6 @@ - (instancetype)initWithIPSIncident:(IPSIncident *)inIncident error:(NSError **) } else { - if (bIndex==0 && tBinaryImage.isUserCode==YES) - tBinaryImage.mainImage=YES; - tBinaryImagesRegistry[tBinaryImage.identifier]=tBinaryImage; NSString * tBinartName=tBinaryImage.path.lastPathComponent; @@ -160,9 +157,6 @@ - (BOOL)parseTextualRepresentation:(NSArray *)inLines reportVersion:(NSUInteger) return; } - if (bLineNumber==0 && tBinaryImage.isUserCode==YES) - tBinaryImage.mainImage=YES; - [tBinaryImages addObject:tBinaryImage]; self->_binaryImagesRegistry[tBinaryImage.identifier]=tBinaryImage; diff --git a/app_unexpectedly/app_unexpectedly/CUIInspectorExecutableViewController.m b/app_unexpectedly/app_unexpectedly/CUIInspectorExecutableViewController.m index c7f8603..98734d8 100644 --- a/app_unexpectedly/app_unexpectedly/CUIInspectorExecutableViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUIInspectorExecutableViewController.m @@ -72,6 +72,11 @@ - (void)refreshUI switch(tHeader.codeType) { + case CUICodeTypeX86: + + tArchitectureValue=@"i386"; + break; + case CUICodeTypeX86_64: tArchitectureValue=@"x86-64"; diff --git a/app_unexpectedly/app_unexpectedly/CUIReportThemedTransform.m b/app_unexpectedly/app_unexpectedly/CUIReportThemedTransform.m index b7bb3cd..61d7f78 100644 --- a/app_unexpectedly/app_unexpectedly/CUIReportThemedTransform.m +++ b/app_unexpectedly/app_unexpectedly/CUIReportThemedTransform.m @@ -210,17 +210,10 @@ - (id)processedStackFrameLine:(NSString *)inLine stackFrame:(CUIStackFrame *)inS if (tBinaryImage!=nil) { - NSString * tPath=tBinaryImage.path; + tIsUserCode = tBinaryImage.isUserCode; - if (tBinaryImage.isMainImage==YES) - { + if (tIsUserCode==NO && [tBinaryImage.path isEqualToString:self.processPath]==YES) tIsUserCode=YES; - } - else - { - if ([tPath isEqualToString:self.processPath]==YES) - tIsUserCode=YES; - } } if (tIsUserCode==NO) diff --git a/app_unexpectedly/app_unexpectedly/CUIThreadsColumnViewController.m b/app_unexpectedly/app_unexpectedly/CUIThreadsColumnViewController.m index c187257..3fb2974 100644 --- a/app_unexpectedly/app_unexpectedly/CUIThreadsColumnViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUIThreadsColumnViewController.m @@ -483,17 +483,10 @@ - (NSView *)tableView:(NSTableView *)inTableView viewForTableColumn:(NSTableColu if (tBinaryImage!=nil) { - NSString * tPath=tBinaryImage.path; + tIsUserCode = tBinaryImage.isUserCode; - if (tBinaryImage.isMainImage==YES) - { + if (tIsUserCode==NO && [tBinaryImage.path isEqualToString:self.crashLog.header.executablePath]==YES) tIsUserCode=YES; - } - else - { - if ([tPath isEqualToString:self.crashLog.header.executablePath]==YES) - tIsUserCode=YES; - } } if (tIsUserCode==NO) diff --git a/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m b/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m index b215e84..33421cb 100644 --- a/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m @@ -667,17 +667,10 @@ - (NSView *)outlineView:(NSOutlineView *)inOutlineView viewForTableColumn:(NSTab if (tBinaryImage!=nil) { - NSString * tPath=tBinaryImage.path; + tIsUserCode = tBinaryImage.isUserCode; - if (tBinaryImage.isMainImage==YES) - { + if (tIsUserCode==NO && [tBinaryImage.path isEqualToString:self.crashLog.header.executablePath]==YES) tIsUserCode=YES; - } - else - { - if ([tPath isEqualToString:self.crashLog.header.executablePath]==YES) - tIsUserCode=YES; - } } if (tIsUserCode==NO) diff --git a/app_unexpectedly/app_unexpectedly/ips + Extensions/IPSImage+Offset.m b/app_unexpectedly/app_unexpectedly/ips + Extensions/IPSImage+Offset.m index cd8710b..2b0e1fe 100644 --- a/app_unexpectedly/app_unexpectedly/ips + Extensions/IPSImage+Offset.m +++ b/app_unexpectedly/app_unexpectedly/ips + Extensions/IPSImage+Offset.m @@ -14,10 +14,13 @@ - (NSUInteger)binaryImageOffset { NSUInteger tLoadAddress=self.loadAddress; - if (tLoadAddress>0x7fff00000000/* || self.mainImage==NO*/) + if (tLoadAddress>0x7fff00000000) // Won't happen on ARM-64 return tLoadAddress; - return (tLoadAddress-0x100000000); + if (tLoadAddress>=0x100000000) + return (tLoadAddress-0x100000000); + + return tLoadAddress; // 32-bit } @end From 66c89b48cf53f672795ab768f122c96d6d348b6c Mon Sep 17 00:00:00 2001 From: packagesdev Date: Sun, 11 Dec 2022 16:33:58 +0100 Subject: [PATCH 096/214] Fix missing returned value A return was missing and Xcode 10.1 was OK with that. --- app_unexpectedly/app_unexpectedly/CUIRawCrashLog.m | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.m b/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.m index 0e95ca2..af68c3b 100644 --- a/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.m +++ b/app_unexpectedly/app_unexpectedly/CUIRawCrashLog.m @@ -1,5 +1,5 @@ /* - Copyright (c) 2020-2021, Stephane Sudre + Copyright (c) 2020-2022, Stephane Sudre All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -282,6 +282,8 @@ - (id)valueForKeyPath:(NSString *)inKeyPath { tValue=@""; } + + return tValue; } - (NSString *)processName @@ -372,7 +374,6 @@ - (BOOL)finalizeParsing // Try to parse at least the header - tRange=[CUICrashLogSectionsDetector detectHeaderSectionRangeInTextualRepresentation:tLines atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(tFirstLine,tLines.count-tFirstLine)]]; if (tRange.location==NSNotFound) From 8796341c97b1126ed686c5a707c167c7ae351b4e Mon Sep 17 00:00:00 2001 From: packagesdev Date: Sun, 8 Jan 2023 13:38:48 +0100 Subject: [PATCH 097/214] Update ips2crash --- submodules/ips2crash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/ips2crash b/submodules/ips2crash index fc8804c..369971d 160000 --- a/submodules/ips2crash +++ b/submodules/ips2crash @@ -1 +1 @@ -Subproject commit fc8804c87a4fcc5fa1fb6f796b1a76f165b87c40 +Subproject commit 369971d3ece340a2f4f91ae2362f07c1e884e497 From fbed7c30d263a95a3dd825f0c6bf2a845937a1ba Mon Sep 17 00:00:00 2001 From: packagesdev Date: Sun, 8 Jan 2023 13:44:52 +0100 Subject: [PATCH 098/214] Take into account optional signal field Take into account optional signal field in macOS Ventura .ips files. --- app_unexpectedly/app_unexpectedly/CUIIPSTransform.m | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app_unexpectedly/app_unexpectedly/CUIIPSTransform.m b/app_unexpectedly/app_unexpectedly/CUIIPSTransform.m index 055f990..79b8143 100644 --- a/app_unexpectedly/app_unexpectedly/CUIIPSTransform.m +++ b/app_unexpectedly/app_unexpectedly/CUIIPSTransform.m @@ -462,7 +462,14 @@ - (NSArray *)attributedLinesForExceptionInformationOfIncident:(IPSIncident *)inI tMutableAttributedString=[[self attributedStringForKey:@"Exception Type:"] mutableCopy]; [tMutableAttributedString appendAttributedString:[self attributedStringForPlainText:@" "]]; - NSMutableAttributedString * tValueAttributedString=[[self attributedStringForPlainTextWithFormat:@"%@ (%@)",tException.type,tException.signal] mutableCopy]; + NSAttributedString * tAttributedString; + + if (tException.signal!=nil) + tAttributedString=[self attributedStringForPlainTextWithFormat:@"%@ (%@)",tException.type,tException.signal]; + else + tAttributedString=[self attributedStringForPlainTextWithFormat:@"%@",tException.type]; + + NSMutableAttributedString * tValueAttributedString=[tAttributedString mutableCopy]; switch(self.hyperlinksStyle) { From 5d06759f85f5baa6891fdf28d06bf238ae6f155f Mon Sep 17 00:00:00 2001 From: packagesdev Date: Fri, 13 Jan 2023 22:21:44 +0100 Subject: [PATCH 099/214] Bump dates. --- README.md | 2 +- app_unexpectedly/app_unexpectedly/Info.plist | 4 ++-- .../app_unexpectedly/en.lproj/CUIAboutBoxWindowController.xib | 2 +- .../app_unexpectedly/es.lproj/CUIAboutBoxWindowController.xib | 2 +- .../app_unexpectedly/fr.lproj/CUIAboutBoxWindowController.xib | 2 +- .../app_unexpectedly/ja.lproj/CUIAboutBoxWindowController.xib | 2 +- distribution/Documents/ReadMe.rtf | 4 ++-- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 30768d7..515978e 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Minimum OS requirement is macOS 10.13 at this time. ## License - Copyright (c) 2020-2022, Stephane Sudre + Copyright (c) 2020-2023, Stephane Sudre All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/app_unexpectedly/app_unexpectedly/Info.plist b/app_unexpectedly/app_unexpectedly/Info.plist index be95fba..3c41cd3 100644 --- a/app_unexpectedly/app_unexpectedly/Info.plist +++ b/app_unexpectedly/app_unexpectedly/Info.plist @@ -159,13 +159,13 @@ CFBundleVersion - 69 + 75 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) NSHumanReadableCopyright - Copyright © 2020-2022 Stéphane Sudre. All rights reserved. + Copyright © 2020-2023 Stéphane Sudre. All rights reserved. NSMainNibFile MainMenu NSPrincipalClass diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/CUIAboutBoxWindowController.xib b/app_unexpectedly/app_unexpectedly/en.lproj/CUIAboutBoxWindowController.xib index e5c2140..bce93df 100644 --- a/app_unexpectedly/app_unexpectedly/en.lproj/CUIAboutBoxWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/en.lproj/CUIAboutBoxWindowController.xib @@ -53,7 +53,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/es.lproj/CUIAboutBoxWindowController.xib b/app_unexpectedly/app_unexpectedly/es.lproj/CUIAboutBoxWindowController.xib index eba6be8..a7f772c 100644 --- a/app_unexpectedly/app_unexpectedly/es.lproj/CUIAboutBoxWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/es.lproj/CUIAboutBoxWindowController.xib @@ -53,7 +53,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/fr.lproj/CUIAboutBoxWindowController.xib b/app_unexpectedly/app_unexpectedly/fr.lproj/CUIAboutBoxWindowController.xib index db3f9fa..0780f6f 100644 --- a/app_unexpectedly/app_unexpectedly/fr.lproj/CUIAboutBoxWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/fr.lproj/CUIAboutBoxWindowController.xib @@ -53,7 +53,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIAboutBoxWindowController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIAboutBoxWindowController.xib index 53825f6..618a9c4 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIAboutBoxWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIAboutBoxWindowController.xib @@ -53,7 +53,7 @@ - + diff --git a/distribution/Documents/ReadMe.rtf b/distribution/Documents/ReadMe.rtf index 6d63e99..1804653 100644 --- a/distribution/Documents/ReadMe.rtf +++ b/distribution/Documents/ReadMe.rtf @@ -11,7 +11,7 @@ \f0\fs24 \cf0 \ \fs72 Unexpectedly 1.0 ( -\fs54 beta 3 +\fs54 beta 4 \fs72 ) \fs24 \ \ @@ -64,7 +64,7 @@ System Requirements \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li139\fi-4\pardirnatural\partightenfactor0 \cf0 \ -\f1 Copyright \'a9 2021-2022, St\'e9phane Sudre. All rights reserved.\ +\f1 Copyright \'a9 2021-2023, St\'e9phane Sudre. All rights reserved.\ \ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ \ From f942729de0140a637cff30e37b581285f898aef6 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Fri, 19 May 2023 14:52:45 +0200 Subject: [PATCH 100/214] Start adding support for Right to Left layout direction --- .../project.pbxproj | 85 +++ .../xcschemes/xcschememanagement.plist | 14 + .../CUICrashLogsMainViewController.m | 287 ++++++--- .../CUICrashLogsMainViewController.xib | 4 +- .../CUICrashLogsSourcesViewController.m | 23 +- ...PresentationTextNavigationViewController.m | 8 +- .../CUISidebarViewController.m | 6 +- .../Help/he.lproj/ENDPOINTSECURITY_2.html | 14 + .../Help/he.lproj/EXC_BAD_ACCESS_SIGBUS.html | 17 + .../Help/he.lproj/EXC_BAD_ACCESS_SIGSEGV.html | 17 + .../he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html | 17 + .../Help/he.lproj/EXC_BREAKPOINT_SIGTRAP.html | 17 + .../EXC_CRASH_Code Signature Invalid.html | 17 + .../Help/he.lproj/EXC_CRASH_SIGABRT.html | 17 + .../Help/he.lproj/EXC_CRASH_SIGKILL.html | 17 + .../Help/he.lproj/EXC_CRASH_SIGQUIT.html | 17 + .../Help/he.lproj/EXC_CRASH_SIGSEGV.html | 17 + .../Help/he.lproj/unknown_exception_type.html | 96 +++ .../he.lproj/unknown_termination_reason.html | 95 +++ .../en.lproj/CUIMainWindowController.xib | 2 +- ...ePanePresentationOutlineViewController.xib | 6 +- .../en.lproj/Localizable.strings | Bin 7774 -> 7866 bytes .../es.lproj/Localizable.strings | Bin 8422 -> 8514 bytes .../fr.lproj/Localizable.strings | Bin 8702 -> 8794 bytes .../he.lproj/CUIAboutBoxWindowController.xib | 104 ++++ .../CUIBinaryImagesViewController.xib | 237 +++++++ .../CUICollectionViewRegisterItem.xib | 80 +++ ...shLogPresentationOutlineViewController.xib | 237 +++++++ ...CrashLogPresentationTextViewController.xib | 150 +++++ .../CUICrashLogsListViewController.xib | 225 +++++++ ...hLogsSourceSmartEditorWindowController.xib | 140 +++++ .../CUICrashLogsSourcesViewController.xib | 222 +++++++ .../CUIExportAccessoryViewController.xib | 108 ++++ .../CUIInspectorExecutableViewController.xib | 112 ++++ .../CUIInspectorGeneralViewController.xib | 95 +++ .../CUIInspectorProcessesViewController.xib | 90 +++ .../CUIInspectorUserViewController.xib | 52 ++ .../CUILineJumperWindowController.xib | 74 +++ .../he.lproj/CUIMainWindowController.xib | 127 ++++ ...UIPreferencePaneAdvancedViewController.xib | 61 ++ ...ferencePaneCrashreporterViewController.xib | 132 ++++ ...referencePaneFontscolorsViewController.xib | 378 ++++++++++++ ...CUIPreferencePaneGeneralViewController.xib | 101 +++ ...ePanePresentationOutlineViewController.xib | 68 ++ ...encePanePresentationTextViewController.xib | 192 ++++++ ...eferencePanePresentationViewController.xib | 69 +++ ...ferencePaneSymbolicationViewController.xib | 75 +++ .../CUIPreferencesWindowController.xib | 89 +++ .../CUISymbolsFilesLibraryViewController.xib | 228 +++++++ .../he.lproj/InfoPlist.strings | Bin 0 -> 252 bytes .../he.lproj/Localizable.strings | Bin 0 -> 7808 bytes .../app_unexpectedly/he.lproj/MainMenu.xib | 579 ++++++++++++++++++ .../he.lproj/Predicates.strings | 77 +++ .../he.lproj/RemoteCheck.strings | Bin 0 -> 680 bytes .../xcschemes/xcschememanagement.plist | 14 + 55 files changed, 4812 insertions(+), 97 deletions(-) create mode 100644 app_unexpectedly/app_unexpectedly.xcodeproj/xcuserdata/stephane.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 app_unexpectedly/app_unexpectedly/Help/he.lproj/ENDPOINTSECURITY_2.html create mode 100644 app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGBUS.html create mode 100644 app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGSEGV.html create mode 100644 app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html create mode 100644 app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BREAKPOINT_SIGTRAP.html create mode 100644 app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_Code Signature Invalid.html create mode 100644 app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGABRT.html create mode 100644 app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGKILL.html create mode 100644 app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGQUIT.html create mode 100644 app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGSEGV.html create mode 100644 app_unexpectedly/app_unexpectedly/Help/he.lproj/unknown_exception_type.html create mode 100644 app_unexpectedly/app_unexpectedly/Help/he.lproj/unknown_termination_reason.html create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIAboutBoxWindowController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIBinaryImagesViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUICollectionViewRegisterItem.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationOutlineViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationTextViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsListViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsSourceSmartEditorWindowController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsSourcesViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIExportAccessoryViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorExecutableViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorGeneralViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorProcessesViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorUserViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUILineJumperWindowController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIMainWindowController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneAdvancedViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneCrashreporterViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneFontscolorsViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneGeneralViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationOutlineViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationTextViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneSymbolicationViewController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencesWindowController.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/CUISymbolsFilesLibraryViewController.xib create mode 100755 app_unexpectedly/app_unexpectedly/he.lproj/InfoPlist.strings create mode 100755 app_unexpectedly/app_unexpectedly/he.lproj/Localizable.strings create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/MainMenu.xib create mode 100644 app_unexpectedly/app_unexpectedly/he.lproj/Predicates.strings create mode 100755 app_unexpectedly/app_unexpectedly/he.lproj/RemoteCheck.strings create mode 100644 plugin_quicklook/crashreport.xcodeproj/xcuserdata/stephane.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj b/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj index bb11e69..a1a39b8 100644 --- a/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj +++ b/app_unexpectedly/app_unexpectedly.xcodeproj/project.pbxproj @@ -547,6 +547,48 @@ F42E50002724B7550092181A /* CUICrashDataTransform.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CUICrashDataTransform.m; sourceTree = ""; }; F4301A6925EF0DE000ACDA3F /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/CUIPreferencePanePresentationViewController.xib; sourceTree = ""; }; F4301A6B25EF0DE200ACDA3F /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = fr.lproj/CUIPreferencePanePresentationViewController.xib; sourceTree = ""; }; + F43066C52A12EDE4002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/RemoteCheck.strings; sourceTree = ""; }; + F43066C62A12EDE4002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIAboutBoxWindowController.xib; sourceTree = ""; }; + F43066C72A12EDE5002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIPreferencePaneGeneralViewController.xib; sourceTree = ""; }; + F43066C82A12EDE5002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIPreferencePanePresentationTextViewController.xib; sourceTree = ""; }; + F43066C92A12EDE5002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIPreferencePanePresentationOutlineViewController.xib; sourceTree = ""; }; + F43066CA2A12EDE5002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIPreferencePanePresentationViewController.xib; sourceTree = ""; }; + F43066CB2A12EDE5002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIPreferencePaneFontscolorsViewController.xib; sourceTree = ""; }; + F43066CC2A12EDE5002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUISymbolsFilesLibraryViewController.xib; sourceTree = ""; }; + F43066CD2A12EDE6002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIPreferencePaneSymbolicationViewController.xib; sourceTree = ""; }; + F43066CE2A12EDE6002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIPreferencePaneCrashreporterViewController.xib; sourceTree = ""; }; + F43066CF2A12EDE6002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIPreferencePaneAdvancedViewController.xib; sourceTree = ""; }; + F43066D02A12EDE6002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIPreferencesWindowController.xib; sourceTree = ""; }; + F43066D12A12EDE6002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUICrashLogsSourceSmartEditorWindowController.xib; sourceTree = ""; }; + F43066D22A12EDE6002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUICrashLogsSourcesViewController.xib; sourceTree = ""; }; + F43066D32A12EDE6002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUICrashLogsListViewController.xib; sourceTree = ""; }; + F43066D42A12EDE6002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIInspectorGeneralViewController.xib; sourceTree = ""; }; + F43066D52A12EDE6002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIInspectorUserViewController.xib; sourceTree = ""; }; + F43066D62A12EDE6002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIInspectorExecutableViewController.xib; sourceTree = ""; }; + F43066D72A12EDE6002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIInspectorProcessesViewController.xib; sourceTree = ""; }; + F43066D82A12EDE7002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = he; path = he.lproj/unknown_exception_type.html; sourceTree = ""; }; + F43066D92A12EDE7002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = he; path = he.lproj/EXC_BAD_ACCESS_SIGBUS.html; sourceTree = ""; }; + F43066DA2A12EDE7002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = he; path = he.lproj/EXC_BAD_ACCESS_SIGSEGV.html; sourceTree = ""; }; + F43066DB2A12EDE7002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = he; path = he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html; sourceTree = ""; }; + F43066DC2A12EDE7002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = he; path = he.lproj/EXC_BREAKPOINT_SIGTRAP.html; sourceTree = ""; }; + F43066DD2A12EDE7002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = he; path = he.lproj/EXC_CRASH_SIGABRT.html; sourceTree = ""; }; + F43066DE2A12EDE7002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = he; path = he.lproj/EXC_CRASH_SIGKILL.html; sourceTree = ""; }; + F43066DF2A12EDE7002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = he; path = he.lproj/EXC_CRASH_SIGQUIT.html; sourceTree = ""; }; + F43066E02A12EDE7002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = he; path = he.lproj/EXC_CRASH_SIGSEGV.html; sourceTree = ""; }; + F43066E12A12EDE7002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = he; path = "he.lproj/EXC_CRASH_Code Signature Invalid.html"; sourceTree = ""; }; + F43066E22A12EDE7002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = he; path = Help/he.lproj/unknown_termination_reason.html; sourceTree = ""; }; + F43066E32A12EDE8002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = he; path = Help/he.lproj/ENDPOINTSECURITY_2.html; sourceTree = ""; }; + F43066E42A12EDE8002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUILineJumperWindowController.xib; sourceTree = ""; }; + F43066E52A12EDE8002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIExportAccessoryViewController.xib; sourceTree = ""; }; + F43066E62A12EDE8002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUICrashLogPresentationTextViewController.xib; sourceTree = ""; }; + F43066E72A12EDE8002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUICrashLogPresentationOutlineViewController.xib; sourceTree = ""; }; + F43066E82A12EDE8002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUICollectionViewRegisterItem.xib; sourceTree = ""; }; + F43066E92A12EDE8002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIBinaryImagesViewController.xib; sourceTree = ""; }; + F43066EA2A12EDE8002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/CUIMainWindowController.xib; sourceTree = ""; }; + F43066EB2A12EDE8002AB430 /* he */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; + F43066EC2A12EDE9002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Predicates.strings; sourceTree = ""; }; + F43066ED2A12EDE9002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = he; path = he.lproj/MainMenu.xib; sourceTree = ""; }; + F43066EE2A12EDE9002AB430 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist.strings; sourceTree = ""; }; F4306D572577E168007E667F /* CUICrashLogThreadState+UI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CUICrashLogThreadState+UI.h"; sourceTree = ""; }; F4306D582577E168007E667F /* CUICrashLogThreadState+UI.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "CUICrashLogThreadState+UI.m"; sourceTree = ""; }; F432ACC524A95014000A3E7A /* CUIThreadsListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CUIThreadsListViewController.h; sourceTree = ""; }; @@ -2158,6 +2200,7 @@ fr, es, ja, + he, ); mainGroup = F4CC56F624A79EDA00150EC4; productRefGroup = F4CC570024A79EDA00150EC4 /* Products */; @@ -2552,6 +2595,7 @@ F4055C8425EEE37600DC6CCA /* fr */, F4111AE4265EE92600FD8950 /* es */, F4FC364B278F914500669B32 /* ja */, + F43066EA2A12EDE8002AB430 /* he */, ); name = CUIMainWindowController.xib; sourceTree = ""; @@ -2563,6 +2607,7 @@ F406B49C2687AB1800B90C7B /* fr */, F406B49D2687AC1900B90C7B /* es */, F4FC3633278F914300669B32 /* ja */, + F43066CF2A12EDE6002AB430 /* he */, ); name = CUIPreferencePaneAdvancedViewController.xib; sourceTree = ""; @@ -2574,6 +2619,7 @@ F40B832925FC0AEE0091D886 /* fr */, F4111ADD265EE92500FD8950 /* es */, F4FC3644278F914400669B32 /* ja */, + F43066E02A12EDE7002AB430 /* he */, ); name = EXC_CRASH_SIGSEGV.html; path = Help; @@ -2586,6 +2632,7 @@ F4301A6B25EF0DE200ACDA3F /* fr */, F4111AC8265EE92200FD8950 /* es */, F4FC362E278F914200669B32 /* ja */, + F43066CA2A12EDE5002AB430 /* he */, ); name = CUIPreferencePanePresentationViewController.xib; sourceTree = ""; @@ -2597,6 +2644,7 @@ F45015C925FABCAF000C4B8D /* fr */, F4111AD7265EE92400FD8950 /* es */, F4FC363E278F914400669B32 /* ja */, + F43066DA2A12EDE7002AB430 /* he */, ); name = EXC_BAD_ACCESS_SIGSEGV.html; path = Help; @@ -2609,6 +2657,7 @@ F45015CD25FABE02000C4B8D /* fr */, F4111AD8265EE92400FD8950 /* es */, F4FC363F278F914400669B32 /* ja */, + F43066DB2A12EDE7002AB430 /* he */, ); name = EXC_BAD_INSTRUCTION_SIGILL.html; path = Help; @@ -2621,6 +2670,7 @@ F45015D125FAD27B000C4B8D /* fr */, F4111ADC265EE92500FD8950 /* es */, F4FC3643278F914400669B32 /* ja */, + F43066DF2A12EDE7002AB430 /* he */, ); name = EXC_CRASH_SIGQUIT.html; path = Help; @@ -2633,6 +2683,7 @@ F453AE4C25EE707000B7BEF0 /* fr */, F4111ADF265EE92500FD8950 /* es */, F4FC3646278F914500669B32 /* ja */, + F43066E52A12EDE8002AB430 /* he */, ); name = CUIExportAccessoryViewController.xib; sourceTree = ""; @@ -2644,6 +2695,7 @@ F453AE5025EE70E900B7BEF0 /* fr */, F4111AE0265EE92500FD8950 /* es */, F4FC3647278F914500669B32 /* ja */, + F43066E62A12EDE8002AB430 /* he */, ); name = CUICrashLogPresentationTextViewController.xib; sourceTree = ""; @@ -2655,6 +2707,7 @@ F45A2D6025EC5CA30007D50E /* fr */, F4111ACD265EE92300FD8950 /* es */, F4FC3634278F914300669B32 /* ja */, + F43066D02A12EDE6002AB430 /* he */, ); name = CUIPreferencesWindowController.xib; sourceTree = ""; @@ -2666,6 +2719,7 @@ F45A2D6425EC5D140007D50E /* fr */, F4111AC9265EE92200FD8950 /* es */, F4FC362F278F914200669B32 /* ja */, + F43066CB2A12EDE5002AB430 /* he */, ); name = CUIPreferencePaneFontscolorsViewController.xib; sourceTree = ""; @@ -2677,6 +2731,7 @@ F45A2D6825EC5F870007D50E /* fr */, F4111AC4265EE92200FD8950 /* es */, F4FC362A278F914200669B32 /* ja */, + F43066C62A12EDE4002AB430 /* he */, ); name = CUIAboutBoxWindowController.xib; sourceTree = ""; @@ -2688,6 +2743,7 @@ F45A2D6C25EC60310007D50E /* fr */, F4111AE3265EE92600FD8950 /* es */, F4FC364A278F914500669B32 /* ja */, + F43066E92A12EDE8002AB430 /* he */, ); name = CUIBinaryImagesViewController.xib; sourceTree = ""; @@ -2699,6 +2755,7 @@ F45A2D7025EC60930007D50E /* fr */, F4111ACF265EE92300FD8950 /* es */, F4FC3636278F914300669B32 /* ja */, + F43066D22A12EDE6002AB430 /* he */, ); name = CUICrashLogsSourcesViewController.xib; sourceTree = ""; @@ -2710,6 +2767,7 @@ F45A2D7425EC60DB0007D50E /* fr */, F4111AD0265EE92300FD8950 /* es */, F4FC3637278F914300669B32 /* ja */, + F43066D32A12EDE6002AB430 /* he */, ); name = CUICrashLogsListViewController.xib; sourceTree = ""; @@ -2721,6 +2779,7 @@ F45A2D5625EC50960007D50E /* fr */, F4111AE6265EE92600FD8950 /* es */, F4FC364D278F914500669B32 /* ja */, + F43066EC2A12EDE9002AB430 /* he */, ); name = Predicates.strings; sourceTree = ""; @@ -2732,6 +2791,7 @@ F46D779E25ED8D1900039663 /* fr */, F4111AD1265EE92300FD8950 /* es */, F4FC3638278F914300669B32 /* ja */, + F43066D42A12EDE6002AB430 /* he */, ); name = CUIInspectorGeneralViewController.xib; sourceTree = ""; @@ -2743,6 +2803,7 @@ F46D77A225ED8D3900039663 /* fr */, F4111AD2265EE92300FD8950 /* es */, F4FC3639278F914300669B32 /* ja */, + F43066D52A12EDE6002AB430 /* he */, ); name = CUIInspectorUserViewController.xib; sourceTree = ""; @@ -2754,6 +2815,7 @@ F46D77A625ED8D5900039663 /* fr */, F4111AD3265EE92400FD8950 /* es */, F4FC363A278F914300669B32 /* ja */, + F43066D62A12EDE6002AB430 /* he */, ); name = CUIInspectorExecutableViewController.xib; sourceTree = ""; @@ -2765,6 +2827,7 @@ F46D77AA25ED8E3E00039663 /* fr */, F4111AD4265EE92400FD8950 /* es */, F4FC363B278F914300669B32 /* ja */, + F43066D72A12EDE6002AB430 /* he */, ); name = CUIInspectorProcessesViewController.xib; sourceTree = ""; @@ -2776,6 +2839,7 @@ F46D77AE25ED9EAF00039663 /* fr */, F4111AE2265EE92500FD8950 /* es */, F4FC3649278F914500669B32 /* ja */, + F43066E82A12EDE8002AB430 /* he */, ); name = CUICollectionViewRegisterItem.xib; sourceTree = ""; @@ -2787,6 +2851,7 @@ F4754D7425F5678A00B0D48F /* fr */, F4111AE1265EE92500FD8950 /* es */, F4FC3648278F914500669B32 /* ja */, + F43066E72A12EDE8002AB430 /* he */, ); name = CUICrashLogPresentationOutlineViewController.xib; sourceTree = ""; @@ -2798,6 +2863,7 @@ F4895F5A27A72D1300D75369 /* fr */, F4895F5B27A72D3300D75369 /* es */, F4895F5C27A72D6300D75369 /* ja */, + F43066E42A12EDE8002AB430 /* he */, ); name = CUILineJumperWindowController.xib; sourceTree = ""; @@ -2809,6 +2875,7 @@ F45A2D5525EC50960007D50E /* fr */, F4111AE5265EE92600FD8950 /* es */, F4FC364C278F914500669B32 /* ja */, + F43066EB2A12EDE8002AB430 /* he */, ); name = Localizable.strings; sourceTree = ""; @@ -2820,6 +2887,7 @@ F495AEBF25F029CD000D92E1 /* fr */, F4111AC6265EE92200FD8950 /* es */, F4FC362C278F914200669B32 /* ja */, + F43066C82A12EDE5002AB430 /* he */, ); name = CUIPreferencePanePresentationTextViewController.xib; sourceTree = ""; @@ -2831,6 +2899,7 @@ F495AEC325F02F76000D92E1 /* fr */, F4111AC7265EE92200FD8950 /* es */, F4FC362D278F914200669B32 /* ja */, + F43066C92A12EDE5002AB430 /* he */, ); name = CUIPreferencePanePresentationOutlineViewController.xib; sourceTree = ""; @@ -2842,6 +2911,7 @@ F495AEC725F0314A000D92E1 /* fr */, F4111AD5265EE92400FD8950 /* es */, F4FC363C278F914400669B32 /* ja */, + F43066D82A12EDE7002AB430 /* he */, ); name = unknown_exception_type.html; path = Help; @@ -2854,6 +2924,7 @@ F495AECB25F03213000D92E1 /* fr */, F4111ADA265EE92500FD8950 /* es */, F4FC3641278F914400669B32 /* ja */, + F43066DD2A12EDE7002AB430 /* he */, ); name = EXC_CRASH_SIGABRT.html; path = Help; @@ -2866,6 +2937,7 @@ F495AECF25F033D0000D92E1 /* fr */, F4111ADB265EE92500FD8950 /* es */, F4FC3642278F914400669B32 /* ja */, + F43066DE2A12EDE7002AB430 /* he */, ); name = EXC_CRASH_SIGKILL.html; path = Help; @@ -2878,6 +2950,7 @@ F495AED325F034C4000D92E1 /* fr */, F4111AD9265EE92400FD8950 /* es */, F4FC3640278F914400669B32 /* ja */, + F43066DC2A12EDE7002AB430 /* he */, ); name = EXC_BREAKPOINT_SIGTRAP.html; path = Help; @@ -2890,6 +2963,7 @@ F495AED725F03825000D92E1 /* fr */, F4111ADE265EE92500FD8950 /* es */, F4FC3645278F914400669B32 /* ja */, + F43066E12A12EDE7002AB430 /* he */, ); name = "EXC_CRASH_Code Signature Invalid.html"; path = Help; @@ -2902,6 +2976,7 @@ F497303F25F7F7A6001D01FE /* fr */, F4111AE8265EE92600FD8950 /* es */, F4FC364F278F914500669B32 /* ja */, + F43066EE2A12EDE9002AB430 /* he */, ); name = InfoPlist.strings; sourceTree = ""; @@ -2913,6 +2988,7 @@ F4A3A6E225ED7F460018053E /* fr */, F4111ACE265EE92300FD8950 /* es */, F4FC3635278F914300669B32 /* ja */, + F43066D12A12EDE6002AB430 /* he */, ); name = CUICrashLogsSourceSmartEditorWindowController.xib; sourceTree = ""; @@ -2924,6 +3000,7 @@ F4A3A6E625ED81290018053E /* fr */, F4111AC5265EE92200FD8950 /* es */, F4FC362B278F914200669B32 /* ja */, + F43066C72A12EDE5002AB430 /* he */, ); name = CUIPreferencePaneGeneralViewController.xib; sourceTree = ""; @@ -2935,6 +3012,7 @@ F4A3A6EA25ED81800018053E /* fr */, F4111ACC265EE92300FD8950 /* es */, F4FC3632278F914300669B32 /* ja */, + F43066CE2A12EDE6002AB430 /* he */, ); name = CUIPreferencePaneCrashreporterViewController.xib; sourceTree = ""; @@ -2946,6 +3024,7 @@ F4A3A6EE25ED82F20018053E /* fr */, F4111AD6265EE92400FD8950 /* es */, F4FC363D278F914400669B32 /* ja */, + F43066D92A12EDE7002AB430 /* he */, ); name = EXC_BAD_ACCESS_SIGBUS.html; path = Help; @@ -2958,6 +3037,7 @@ F45A2D5725EC50960007D50E /* fr */, F4111AE7265EE92600FD8950 /* es */, F4FC364E278F914500669B32 /* ja */, + F43066ED2A12EDE9002AB430 /* he */, ); name = MainMenu.xib; sourceTree = ""; @@ -2969,6 +3049,7 @@ F4D6C56E268002DE00B78B3D /* fr */, F4D6C56F2680031E00B78B3D /* es */, F4FC3629278F914200669B32 /* ja */, + F43066C52A12EDE4002AB430 /* he */, ); name = RemoteCheck.strings; sourceTree = ""; @@ -2980,6 +3061,7 @@ F4D7F15E25F04A630024E9A5 /* fr */, F4111ACA265EE92200FD8950 /* es */, F4FC3630278F914200669B32 /* ja */, + F43066CC2A12EDE5002AB430 /* he */, ); name = CUISymbolsFilesLibraryViewController.xib; sourceTree = ""; @@ -2991,6 +3073,7 @@ F4D7F16225F04A9E0024E9A5 /* fr */, F4111ACB265EE92300FD8950 /* es */, F4FC3631278F914200669B32 /* ja */, + F43066CD2A12EDE6002AB430 /* he */, ); name = CUIPreferencePaneSymbolicationViewController.xib; sourceTree = ""; @@ -3002,6 +3085,7 @@ F4E6ED9D2849696000766F9A /* es */, F4E6ED9E2849696600766F9A /* fr */, F4E6ED9F2849696C00766F9A /* ja */, + F43066E22A12EDE7002AB430 /* he */, ); name = unknown_termination_reason.html; sourceTree = ""; @@ -3011,6 +3095,7 @@ children = ( F4E6EDA3284969E500766F9A /* en */, F4E6EDA528496E2A00766F9A /* fr */, + F43066E32A12EDE8002AB430 /* he */, ); name = ENDPOINTSECURITY_2.html; sourceTree = ""; diff --git a/app_unexpectedly/app_unexpectedly.xcodeproj/xcuserdata/stephane.xcuserdatad/xcschemes/xcschememanagement.plist b/app_unexpectedly/app_unexpectedly.xcodeproj/xcuserdata/stephane.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..2586a3a --- /dev/null +++ b/app_unexpectedly/app_unexpectedly.xcodeproj/xcuserdata/stephane.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + app_unexpectedly.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogsMainViewController.m b/app_unexpectedly/app_unexpectedly/CUICrashLogsMainViewController.m index 85351f4..4bf67ff 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogsMainViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogsMainViewController.m @@ -29,9 +29,9 @@ typedef NS_ENUM(NSUInteger, CUISplitViewSubViewTag) { - CUISplitViewLeftViewTag=0, + CUISplitViewSidebarViewTag=0, CUISplitViewMiddleViewTag=1, - CUISplitViewRightViewTag=2, + CUISplitViewInspectorViewTag=2, }; @@ -40,9 +40,9 @@ typedef NS_ENUM(NSUInteger, CUISplitViewSubViewTag) NSString * const CUIDefaultsSidebarCollapsedKey=@"sidebar.collapsed"; -NSString * const CUIDefaultsRightViewWidthKey=@"rightView.width"; +NSString * const CUIDefaultsInspectorViewWidthKey=@"rightView.width"; -NSString * const CUIDefaultsRightViewCollapsedKey=@"rightView.collapsed"; +NSString * const CUIDefaultsInspectorViewCollapsedKey=@"rightView.collapsed"; @interface CUICrashLogsMainViewController () @@ -59,17 +59,17 @@ @interface CUICrashLogsMainViewController () CUIContentsViewController * _contentsViewController; - CUIRightViewController * _rightViewController; + CUIRightViewController * _inspectorViewController; } -- (void)updateNetKeyViews; +- (void)updateNextKeyViews; - (IBAction)showHideViews:(id)sender; //- (IBAction)switchPresentationMode:(NSMenuItem *)sender; -- (void)_splitView:(NSSplitView *)inSplitView resizeSubviewsWithSidebarWidth:(CGFloat)inSidebarWidth rightViewWidth:(CGFloat)inRightViewWidth; +- (void)_splitView:(NSSplitView *)inSplitView resizeSubviewsWithSidebarWidth:(CGFloat)inSidebarWidth inspectorViewWidth:(CGFloat)inInspectorViewWidth; @end @@ -85,13 +85,13 @@ - (instancetype)init _contentsViewController=[CUIContentsViewController new]; - _rightViewController=[CUIRightViewController new]; + _inspectorViewController=[CUIRightViewController new]; [self addChildViewController:_sidebarViewController]; [self addChildViewController:_contentsViewController]; - [self addChildViewController:_rightViewController]; + [self addChildViewController:_inspectorViewController]; } return self; @@ -150,19 +150,35 @@ - (void)viewDidLoad { [super viewDidLoad]; - _rightViewController.view.frame=_rightView.bounds; + BOOL tIsLeftToRightLayout=(_splitView.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight); - [_rightView addSubview:_rightViewController.view]; + NSView *tSidebarView; + NSView *tInspectorView; + + if (tIsLeftToRightLayout==YES) + { + tSidebarView=_leftView; + tInspectorView=_rightView; + } + else + { + tSidebarView=_rightView; + tInspectorView=_leftView; + } + + _inspectorViewController.view.frame=tInspectorView.bounds; + + [tInspectorView addSubview:_inspectorViewController.view]; _contentsViewController.view.frame=_middleView.bounds; [_middleView addSubview:_contentsViewController.view]; - _sidebarViewController.view.frame=_leftView.bounds; + _sidebarViewController.view.frame=tSidebarView.bounds; - [_leftView addSubview:_sidebarViewController.view]; + [tSidebarView addSubview:_sidebarViewController.view]; - [self updateNetKeyViews]; + [self updateNextKeyViews]; } - (void)viewDidAppear @@ -171,17 +187,28 @@ - (void)viewDidAppear // Restore SplitView divider position + BOOL tIsLeftToRightLayout=(_splitView.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight); NSUserDefaults * tUserDefaults=[NSUserDefaults standardUserDefaults]; NSNumber * tNumber=[tUserDefaults objectForKey:CUIDefaultsSidebarCollapsedKey]; if ([tNumber boolValue]==YES) - [_splitView setPosition:[_splitView minPossiblePositionOfDividerAtIndex:0] ofDividerAtIndex:0]; + { + if (tIsLeftToRightLayout==YES) + [_splitView setPosition:[_splitView minPossiblePositionOfDividerAtIndex:0] ofDividerAtIndex:0]; + else + [_splitView setPosition:[_splitView maxPossiblePositionOfDividerAtIndex:1] ofDividerAtIndex:1]; + } - tNumber=[tUserDefaults objectForKey:CUIDefaultsRightViewCollapsedKey]; + tNumber=[tUserDefaults objectForKey:CUIDefaultsInspectorViewCollapsedKey]; if ([tNumber boolValue]==YES) - [_splitView setPosition:[_splitView maxPossiblePositionOfDividerAtIndex:1] ofDividerAtIndex:1]; + { + if (tIsLeftToRightLayout==NO) + [_splitView setPosition:[_splitView minPossiblePositionOfDividerAtIndex:0] ofDividerAtIndex:0]; + else + [_splitView setPosition:[_splitView maxPossiblePositionOfDividerAtIndex:1] ofDividerAtIndex:1]; + } CGFloat tSidebarWidth=CUISidebarMinimumWidth; @@ -190,23 +217,33 @@ - (void)viewDidAppear if (tNumber!=nil) tSidebarWidth=[tNumber doubleValue]; - CGFloat tRightViewWidth=CUIInspectorMinimumWidth; + CGFloat tInspectorViewWidth=CUIInspectorMinimumWidth; - tNumber=[tUserDefaults objectForKey:CUIDefaultsRightViewWidthKey]; + tNumber=[tUserDefaults objectForKey:CUIDefaultsInspectorViewWidthKey]; if (tNumber!=nil) - tRightViewWidth=[tNumber doubleValue]; + tInspectorViewWidth=[tNumber doubleValue]; - [self _splitView:_splitView resizeSubviewsWithSidebarWidth:tSidebarWidth rightViewWidth:tRightViewWidth]; + [self _splitView:_splitView resizeSubviewsWithSidebarWidth:tSidebarWidth inspectorViewWidth:tInspectorViewWidth]; } - (void)viewWillDisappear { // Save SplitView divider position - NSArray * tSubviews=_splitView.subviews; + NSView * tSidebarView=nil; + NSView * tInspectorView=nil; - NSView * tSidebarView=tSubviews[0]; + if (_splitView.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight) + { + tSidebarView=_leftView; + tInspectorView=_rightView; + } + else + { + tSidebarView=_rightView; + tInspectorView=_leftView; + } NSUserDefaults * tUserDefaults=[NSUserDefaults standardUserDefaults]; @@ -214,16 +251,14 @@ - (void)viewWillDisappear [tUserDefaults setBool:[_splitView isSubviewCollapsed:tSidebarView] forKey:CUIDefaultsSidebarCollapsedKey]; - NSView * tRightView=tSubviews[2]; - - [tUserDefaults setObject:@(NSWidth(tRightView.frame)) forKey:CUIDefaultsRightViewWidthKey]; + [tUserDefaults setObject:@(NSWidth(tInspectorView.frame)) forKey:CUIDefaultsInspectorViewWidthKey]; - [tUserDefaults setBool:[_splitView isSubviewCollapsed:tRightView] forKey:CUIDefaultsRightViewCollapsedKey]; + [tUserDefaults setBool:[_splitView isSubviewCollapsed:tInspectorView] forKey:CUIDefaultsInspectorViewCollapsedKey]; } #pragma mark - -- (void)updateNetKeyViews +- (void)updateNextKeyViews { NSView * tContentsFirstKeyView=_contentsViewController.firstKeyView; @@ -263,11 +298,25 @@ - (BOOL)validateMenuItem:(NSMenuItem *)inMenuItem if (tAction==@selector(showHideViews:)==YES) { + NSView * sidebarView=nil; + NSView * inspectorView=nil; + + if (_splitView.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight) + { + sidebarView=_leftView; + inspectorView=_rightView; + } + else + { + sidebarView=_rightView; + inspectorView=_leftView; + } + switch(inMenuItem.tag) { - case CUISplitViewLeftViewTag: + case CUISplitViewSidebarViewTag: - inMenuItem.title=([_splitView isSubviewCollapsed:_leftView]==YES) ? NSLocalizedString(@"Show Sidebar", @"") : NSLocalizedString(@"Hide Sidebar", @""); + inMenuItem.title=([_splitView isSubviewCollapsed:sidebarView]==YES) ? NSLocalizedString(@"Show Sidebar", @"") : NSLocalizedString(@"Hide Sidebar", @""); break; @@ -283,9 +332,9 @@ - (BOOL)validateMenuItem:(NSMenuItem *)inMenuItem break; - case CUISplitViewRightViewTag: + case CUISplitViewInspectorViewTag: - inMenuItem.title=([_splitView isSubviewCollapsed:_rightView]==YES) ? NSLocalizedString(@"Show Inspector", @"") : NSLocalizedString(@"Hide Inspector", @""); + inMenuItem.title=([_splitView isSubviewCollapsed:inspectorView]==YES) ? NSLocalizedString(@"Show Inspector", @"") : NSLocalizedString(@"Hide Inspector", @""); break; } @@ -303,15 +352,15 @@ - (IBAction)showHideViews:(id)sender if ([sender isKindOfClass:[NSSegmentedControl class]]==YES) { - tSwitchTag=CUISplitViewMiddleViewTag; + tSwitchTag=1; NSSegmentedControl * tSegmentedControl=(NSSegmentedControl *)sender; - if ([tSegmentedControl isSelectedForSegment:CUISplitViewLeftViewTag]==tIsLeftViewCollapsed) - tSwitchTag=CUISplitViewLeftViewTag; + if ([tSegmentedControl isSelectedForSegment:0]==tIsLeftViewCollapsed) + tSwitchTag=0; - if ([tSegmentedControl isSelectedForSegment:CUISplitViewRightViewTag]==tIsRightViewCollapsed) - tSwitchTag=CUISplitViewRightViewTag; + if ([tSegmentedControl isSelectedForSegment:2]==tIsRightViewCollapsed) + tSwitchTag=2; } else if ([sender isKindOfClass:[NSMenuItem class]]==YES) { @@ -322,7 +371,7 @@ - (IBAction)showHideViews:(id)sender switch(tSwitchTag) { - case CUISplitViewLeftViewTag: + case 0: if (tIsLeftViewCollapsed==NO) { @@ -342,13 +391,13 @@ - (IBAction)showHideViews:(id)sender break; - case CUISplitViewMiddleViewTag: + case 1: [_contentsViewController showHideBottomView:self]; break; - case CUISplitViewRightViewTag: + case 2: if (tIsRightViewCollapsed==NO) { @@ -379,61 +428,109 @@ - (IBAction)showHideViews:(id)sender #pragma mark - NSSplitViewDelegate -- (void)_splitView:(NSSplitView *)inSplitView resizeSubviewsWithSidebarWidth:(CGFloat)inSidebarWidth rightViewWidth:(CGFloat)inRightViewWidth +- (void)_splitView:(NSSplitView *)inSplitView resizeSubviewsWithSidebarWidth:(CGFloat)inSidebarWidth inspectorViewWidth:(CGFloat)inInspectorViewWidth { + BOOL tIsLeftToRightLayout=(_splitView.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight); + + NSView * tSidebarView=nil; + NSView * tInspectorView=nil; + + if (tIsLeftToRightLayout==YES) + { + tSidebarView=_leftView; + tInspectorView=_rightView; + } + else + { + tSidebarView=_rightView; + tInspectorView=_leftView; + } + NSRect tSplitViewFrame=inSplitView.frame; - NSRect tLeftFrame=_leftView.frame; + NSRect tSidebarFrame=tSidebarView.frame; + + tSidebarFrame.size.width=inSidebarWidth; - tLeftFrame.size.width=inSidebarWidth; + NSRect tContentsFrame=_middleView.frame; + NSRect tInspectorFrame=tInspectorView.frame; - NSRect tMiddleFrame=_middleView.frame; - NSRect tRightFrame=_rightView.frame; + tInspectorFrame.size.width=inInspectorViewWidth; - tRightFrame.size.width=inRightViewWidth; - CGFloat tLeftWidth=([inSplitView isSubviewCollapsed:_leftView]==NO) ? NSWidth(tLeftFrame) : 0.0; - CGFloat tRightWidth=([inSplitView isSubviewCollapsed:_rightView]==NO) ? NSWidth(tRightFrame) : 0.0; + CGFloat tSidebarWidth=([inSplitView isSubviewCollapsed:tSidebarView]==NO) ? NSWidth(tSidebarFrame) : 0.0; + CGFloat tInspectorWidth=([inSplitView isSubviewCollapsed:tInspectorView]==NO) ? NSWidth(tInspectorFrame) : 0.0; - tMiddleFrame.size.width=NSWidth(tSplitViewFrame)-tLeftWidth-tRightWidth-2*inSplitView.dividerThickness; + tContentsFrame.size.width=NSWidth(tSplitViewFrame)-tSidebarWidth-tInspectorWidth-2*inSplitView.dividerThickness; - if (tMiddleFrame.size.width - + @@ -57,7 +57,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m b/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m index a7a9db4..145ab5d 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogsSourcesViewController.m @@ -146,11 +146,13 @@ - (void)viewDidLoad [tNotificationCenter addObserver:self selector:@selector(sourceDidUpdateSource:) name:CUICrashLogsSourceDidUpdateSourceNotification object:nil]; [tNotificationCenter addObserver:self selector:@selector(sourcesSelectionDidChange:) name:CUICrashLogsSourcesSelectionDidChangeNotification object:_sourcesSelection]; + + [self tableViewSelectionDidChange:[NSNotification notificationWithName:NSTableViewSelectionDidChangeNotification object:_tableView userInfo:nil]]; } - (void)viewDidAppear { - [self tableViewSelectionDidChange:[NSNotification notificationWithName:NSTableViewSelectionDidChangeNotification object:_tableView userInfo:nil]]; + [super viewDidAppear]; } #pragma mark - @@ -159,11 +161,22 @@ - (NSRect)effectiveBottonBarRect { NSRect tEffectiveRect; - tEffectiveRect.origin.x=NSMaxX(_removeButton.frame); - tEffectiveRect.size.width=NSMinX(_actionPopUpButton.frame)-tEffectiveRect.origin.x; + if (self.view.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight) + { + tEffectiveRect.origin.x=NSMaxX(_removeButton.frame); + tEffectiveRect.size.width=NSMinX(_actionPopUpButton.frame)-tEffectiveRect.origin.x; - tEffectiveRect.origin.y=NSHeight(_tableView.enclosingScrollView.frame); - tEffectiveRect.size.height=NSMinY(_tableView.enclosingScrollView.frame); + tEffectiveRect.origin.y=NSHeight(_tableView.enclosingScrollView.frame); + tEffectiveRect.size.height=NSMinY(_tableView.enclosingScrollView.frame); + } + else + { + tEffectiveRect.origin.x=NSMaxX(_actionPopUpButton.frame); + tEffectiveRect.size.width=NSMinX(_removeButton.frame)-tEffectiveRect.origin.x; + + tEffectiveRect.origin.y=NSHeight(_tableView.enclosingScrollView.frame); + tEffectiveRect.size.height=NSMinY(_tableView.enclosingScrollView.frame); + } return tEffectiveRect; } diff --git a/app_unexpectedly/app_unexpectedly/CUIPresentationTextNavigationViewController.m b/app_unexpectedly/app_unexpectedly/CUIPresentationTextNavigationViewController.m index 12f9aa0..1dc5e94 100644 --- a/app_unexpectedly/app_unexpectedly/CUIPresentationTextNavigationViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUIPresentationTextNavigationViewController.m @@ -193,6 +193,8 @@ - (void)setPresentationViewController:(CUICrashLogPresentationViewController *)i - (void)refreshSourcesMenu { + NSString * tTitleFormatString=NSLocalizedString(@"%@ - %@", @""); + [_sourcesPopUpButton removeAllItems]; _sourcesPopUpButton.action=@selector(switchSourceCrashLog:); @@ -261,7 +263,7 @@ - (void)refreshSourcesMenu for(CUIRawCrashLog * tCrashLog in tMutableCrashLogs) { - NSString * tTitle=[NSString stringWithFormat:@"%@ - %@",tCrashLog.processName,[self->_crashLogDateFormatter stringFromDate:tCrashLog.dateTime]]; + NSString * tTitle=[NSString stringWithFormat:tTitleFormatString,[self->_crashLogDateFormatter stringFromDate:tCrashLog.dateTime],tCrashLog.processName]; NSMenuItem * tSubMenuItem=[[NSMenuItem alloc] initWithTitle:tTitle action:@selector(switchSourceCrashLog:) keyEquivalent:@""]; @@ -297,6 +299,8 @@ - (void)refreshSourcesMenu - (void)refreshCrashLogsMenu { + NSString * tTitleFormatString=NSLocalizedString(@"%@ - %@", @""); + [_crashLogsPopUpButton removeAllItems]; NSMutableArray * tMutableCrashLogs=[_sourcesSelection.crashLogs mutableCopy]; @@ -334,7 +338,7 @@ - (void)refreshCrashLogsMenu for(CUIRawCrashLog * tCrashLog in tMutableCrashLogs) { - NSString * tTitle=[NSString stringWithFormat:@"%@ - %@",tCrashLog.processName,[_crashLogDateFormatter stringFromDate:tCrashLog.dateTime]]; + NSString * tTitle=[NSString localizedStringWithFormat:tTitleFormatString,[_crashLogDateFormatter stringFromDate:tCrashLog.dateTime],tCrashLog.processName]; NSMenuItem * tSubMenuItem=[[NSMenuItem alloc] initWithTitle:tTitle action:@selector(switchCrashLog:) keyEquivalent:@""]; diff --git a/app_unexpectedly/app_unexpectedly/CUISidebarViewController.m b/app_unexpectedly/app_unexpectedly/CUISidebarViewController.m index 9b5be37..946c9fd 100644 --- a/app_unexpectedly/app_unexpectedly/CUISidebarViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUISidebarViewController.m @@ -1,5 +1,5 @@ /* - Copyright (c) 2020-2021, Stephane Sudre + Copyright (c) 2020-2023, Stephane Sudre All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -147,9 +147,7 @@ - (void)viewWillDisappear { // Save SplitView divider position - NSArray * tSubviews=_splitView.subviews; - - NSView * tViewTop=tSubviews[0]; + NSView * tViewTop=_splitView.subviews.firstObject; NSUserDefaults * tUserDefaults=[NSUserDefaults standardUserDefaults]; diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/ENDPOINTSECURITY_2.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/ENDPOINTSECURITY_2.html new file mode 100644 index 0000000..8543905 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/ENDPOINTSECURITY_2.html @@ -0,0 +1,14 @@ + + + + + + +Summary +

      An ENDPOINTSECURITY termination reason with code 2 indicates that an Endpoint Security client took too long to respond to an event.

      + +Discussion +

      An Endpoint Security client can be killed if it fails to respond to an authorization event before the deadline defined in the message for that event.

      + + + diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGBUS.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGBUS.html new file mode 100644 index 0000000..651f270 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGBUS.html @@ -0,0 +1,17 @@ + + + + + + +Summary +

      The EXC_BAD_ACCESS (SIGBUS) type indicates a process uses memory in an unexpected way.

      + +Discussion +

      The exception can happen when the process tries to access unmapped memory (KERN_INVALID_ADDRESS), misaligned memory (EXC_ARM_DA_ALIGN) or unavailable memory (KERN_MEMORY_ERROR). This can also happen when the process tries to write on read-only or protected memory (KERN_PROTECTION_FAILURE).

      + + + + diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGSEGV.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGSEGV.html new file mode 100644 index 0000000..c32a33d --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGSEGV.html @@ -0,0 +1,17 @@ + + + + + + +Summary +

      The EXC_BAD_ACCESS (SIGSEGV) type indicates a process uses memory in an unexpected way.

      + +Discussion +

      The exception can happen when the process tries to access unmapped memory (KERN_INVALID_ADDRESS), misaligned memory (EXC_ARM_DA_ALIGN) or unavailable memory (KERN_MEMORY_ERROR). This can also happen when the process tries to write on read-only or protected memory (KERN_PROTECTION_FAILURE).

      + + + + diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html new file mode 100644 index 0000000..29de96e --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html @@ -0,0 +1,17 @@ + + + + + + +Summary +

      The EXC_BAD_INSTRUCTION (SIGILL) type indicates the process executed an illegal instruction (usually inserted by the compiler).

      + +Discussion +

      The execution of this illegal instruction usually means that one of the compiler’s safety checks failed (e.g. when your code unwraps a nil optional in Swift).

      + + + + diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BREAKPOINT_SIGTRAP.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BREAKPOINT_SIGTRAP.html new file mode 100644 index 0000000..0093dad --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BREAKPOINT_SIGTRAP.html @@ -0,0 +1,17 @@ + + + + + + +Summary +

      The EXC_BREAKPOINT (SIGTRAP) type indicates the process executed an illegal instruction (usually inserted by the compiler).

      + +Discussion +

      The execution of this illegal instruction usually means that one of the compiler’s safety checks failed (e.g. when your code unwraps a nil optional in Swift).

      + + + + diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_Code Signature Invalid.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_Code Signature Invalid.html new file mode 100644 index 0000000..c7e5dcd --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_Code Signature Invalid.html @@ -0,0 +1,17 @@ + + + + + + +Summary +

      EXC_CRASH (Code Signature Invalid) indicates the operating system terminated the process because of problems related to code signing.

      + +Discussion +

      The crash could have occurred because the application is using invalid entitlements or the code signing identity is incompatible with the running environment.

      + + + + diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGABRT.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGABRT.html new file mode 100644 index 0000000..8edb6be --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGABRT.html @@ -0,0 +1,17 @@ + + + + + + +Summary +

      EXC_CRASH (SIGABRT) indicates the process terminated because it received the SIGABRT signal.

      + +Discussion +

      Typically, this signal is sent because a function in the process called abort(), such as when an app encounters an uncaught Objective-C or C++ exception.

      + + + + diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGKILL.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGKILL.html new file mode 100644 index 0000000..95bdb56 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGKILL.html @@ -0,0 +1,17 @@ + + + + + + +Summary +

      EXC_CRASH (SIGKILL) indicates the operating system terminated the process.

      + +Discussion +

      The crash report contains a Termination Reason field with a code that explains the reason for the crash.

      + + + + diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGQUIT.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGQUIT.html new file mode 100644 index 0000000..e7c33b8 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGQUIT.html @@ -0,0 +1,17 @@ + + + + + + +Summary +

      EXC_CRASH (SIGQUIT) indicates the process terminated at the request of another process with privileges to manage its lifetime.

      + +Discussion +

      This does not mean that the process crashed, but it likely misbehaved in a detectable manner.

      + + + + diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGSEGV.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGSEGV.html new file mode 100644 index 0000000..284fc5e --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGSEGV.html @@ -0,0 +1,17 @@ + + + + + + +Summary +

      The EXC_CRASH (SIGSEGV) type indicates a process uses memory in an unexpected way.

      + +Discussion +

      The exception can happen when the process tries to access unmapped memory, misaligned memory or unavailable memory. This can also happen when the process tries to write on read-only or protected memory.

      + + + + diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/unknown_exception_type.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/unknown_exception_type.html new file mode 100644 index 0000000..536aa01 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/unknown_exception_type.html @@ -0,0 +1,96 @@ + + + + + + +

      No Quick Help

      +
      +
      Search Documentation
      +
      + + diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/unknown_termination_reason.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/unknown_termination_reason.html new file mode 100644 index 0000000..e0190d2 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/unknown_termination_reason.html @@ -0,0 +1,95 @@ + + + + + + +

      No Quick Help

      +
      +
      + + diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/CUIMainWindowController.xib b/app_unexpectedly/app_unexpectedly/en.lproj/CUIMainWindowController.xib index e98d0a5..8998988 100644 --- a/app_unexpectedly/app_unexpectedly/en.lproj/CUIMainWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/en.lproj/CUIMainWindowController.xib @@ -88,7 +88,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/CUIPreferencePanePresentationOutlineViewController.xib b/app_unexpectedly/app_unexpectedly/en.lproj/CUIPreferencePanePresentationOutlineViewController.xib index 9013744..d88f23b 100644 --- a/app_unexpectedly/app_unexpectedly/en.lproj/CUIPreferencePanePresentationOutlineViewController.xib +++ b/app_unexpectedly/app_unexpectedly/en.lproj/CUIPreferencePanePresentationOutlineViewController.xib @@ -32,7 +32,7 @@ + +
      + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIBinaryImagesViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIBinaryImagesViewController.xib new file mode 100644 index 0000000..82cdbcc --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIBinaryImagesViewController.xib @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUICollectionViewRegisterItem.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUICollectionViewRegisterItem.xib new file mode 100644 index 0000000..dae3f07 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUICollectionViewRegisterItem.xib @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationOutlineViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationOutlineViewController.xib new file mode 100644 index 0000000..950a6c0 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationOutlineViewController.xib @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationTextViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationTextViewController.xib new file mode 100644 index 0000000..710829e --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationTextViewController.xib @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsListViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsListViewController.xib new file mode 100644 index 0000000..94f2bd4 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsListViewController.xib @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsSourceSmartEditorWindowController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsSourceSmartEditorWindowController.xib new file mode 100644 index 0000000..d08538f --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsSourceSmartEditorWindowController.xib @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsSourcesViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsSourcesViewController.xib new file mode 100644 index 0000000..7b5280e --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsSourcesViewController.xib @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIExportAccessoryViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIExportAccessoryViewController.xib new file mode 100644 index 0000000..3076961 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIExportAccessoryViewController.xib @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorExecutableViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorExecutableViewController.xib new file mode 100644 index 0000000..abf00bb --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorExecutableViewController.xib @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorGeneralViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorGeneralViewController.xib new file mode 100644 index 0000000..5517328 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorGeneralViewController.xib @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorProcessesViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorProcessesViewController.xib new file mode 100644 index 0000000..0b60e8b --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorProcessesViewController.xib @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorUserViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorUserViewController.xib new file mode 100644 index 0000000..2d07af2 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorUserViewController.xib @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUILineJumperWindowController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUILineJumperWindowController.xib new file mode 100644 index 0000000..a787049 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUILineJumperWindowController.xib @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIMainWindowController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIMainWindowController.xib new file mode 100644 index 0000000..c30ac9e --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIMainWindowController.xib @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneAdvancedViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneAdvancedViewController.xib new file mode 100644 index 0000000..5e65e93 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneAdvancedViewController.xib @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneCrashreporterViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneCrashreporterViewController.xib new file mode 100644 index 0000000..e9b226c --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneCrashreporterViewController.xib @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneFontscolorsViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneFontscolorsViewController.xib new file mode 100644 index 0000000..5d39df7 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneFontscolorsViewController.xib @@ -0,0 +1,378 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneGeneralViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneGeneralViewController.xib new file mode 100644 index 0000000..2715ec2 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneGeneralViewController.xib @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationOutlineViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationOutlineViewController.xib new file mode 100644 index 0000000..9013744 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationOutlineViewController.xib @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationTextViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationTextViewController.xib new file mode 100644 index 0000000..a2a0217 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationTextViewController.xib @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationViewController.xib new file mode 100644 index 0000000..cf76e4a --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationViewController.xib @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneSymbolicationViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneSymbolicationViewController.xib new file mode 100644 index 0000000..dc77ae9 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneSymbolicationViewController.xib @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencesWindowController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencesWindowController.xib new file mode 100644 index 0000000..1160b05 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencesWindowController.xib @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUISymbolsFilesLibraryViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUISymbolsFilesLibraryViewController.xib new file mode 100644 index 0000000..36ad143 --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUISymbolsFilesLibraryViewController.xib @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/InfoPlist.strings b/app_unexpectedly/app_unexpectedly/he.lproj/InfoPlist.strings new file mode 100755 index 0000000000000000000000000000000000000000..22582c5b5c017d2617bba0c4579b581bbf8298c1 GIT binary patch literal 252 zcmZ{fO$q`r429p?QAq9b3SQ_d@5nLcv<{i926glO8B-e7odEdQMSTn*l|?7;%)J< z_{-5$!wN2w*aMHF;!j8M6C`bfR(OhEPj{4|BGo1k)e3Pxz1FP*%z%~D&<0{JGmwIRVU<)cb_EBtm$8$%TcZ@4+-Ps`?- z96v|bk84a_sB07YZ=`>}VDxJEA@Dc$twYaf<7o}{*uiKQ|DNE!nc1ZW>;6&1@K5n5 zT*r3|uZlgaObj23cWEtEawR+fNAl|=nae=Y!Xlwvy77=V*aYbnjPSw|Cd{^j7qgLRAp3}(MMAWFNv5cVxfh6D7mqP z?BweNvoTSwgQkfm%pNg(mVQ5XtG|yJ`2ZXC;PZntUYg`2W+P_iTPYXF%6O^F*@HF3 zkEtzgf-1r%i9Z4-vrYpS^Vl~2OKu^5d8+k=Sx$0eo)Kk~=)QNlO)kaw#*}+42UE^@ zwV@BO<}k;rKFmvN(0mJ4;ELV`1+749e}c~p?i*O1g?%;rpFK zR7%#&cd3_r;i?if@cp6QE8j)vE77|GZSEZ-H(bLhl*bG>u;*Z0lgscKnj^=bp)%NM zv6e7f(z@((B&O(BhW0c%)2W z26Xe9jHXgvw^LNo77xH9_ujH+I`1K5S#>cDteRMMTnbBJHr#Z2+KBSImwb~r=Ag$$ z@_*mu9il?LOMRK_c6!G?DiO4hBBG5ImilB-Q-x*xK1lCXvfN9R(VYM@>>BiI0ZB}@ zW!~y!GEC?5b5IOR;7xnRz*RF8CgT};oagwk$L$r|F?~$mX5|IMsq`kqJT9NNu<0xC zGCoVG>a4>T7$b~FueTvOjZSqV60VBWGMm4f_6FPym`uJkMYLvUDyWpbP574Ir!_{v`XRQPK4^BU&7??9e(Pd=aKqiQo& zKgQ~&^D6qo8f?%`dq?#))BP-SRL)IUf%{N;2_tzOQso4I_3-2lbzFMouf0$=MWWOM zLtOq;=jPU406NB)U+v)(%43|J@hBSMBWpXKdX@%k#1k(ciDg#lV3*QNAJg|VIz=rJ z!z{us)7y?UaJ2XHbZ*>vDvw<+PanDRocs7#N6A4%u!V8;Ic8y=MYdswyl@3q;Z*;xW{JWESR_@T5%Y0R~ zbksy_70e|McEH{f@=@;x%)Z($deqEO%oeNJbH*F{OplLe4yQ{OQTlcqU9-t$Z@FV{{^oK!>lpuAnWI34r%L89d_sTZlM$Q5n%?UB4c zQ*HH)5zipl+wElDMWo}<=k}zpT35(eT!T%!LwT__v4>z5^GUAUNVc(ablKx^_r*TGOk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +CA + + + + + + + +CA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/Predicates.strings b/app_unexpectedly/app_unexpectedly/he.lproj/Predicates.strings new file mode 100644 index 0000000..48e0c1d --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/he.lproj/Predicates.strings @@ -0,0 +1,77 @@ +/* Predicate Editor */ + +"%[All]@ of the following are true" = "%1$[All]@ of the following are true"; +"%[Any]@ of the following are true" = "%1$[Any]@ of the following are true"; + +"%[processName]@ %[is]@ %@" = "%1$[Process Name]@ %2$[is]@ %3$@"; +"%[processName]@ %[is not]@ %@" = "%1$[Process Name]@ %2$[is not]@ %3$@"; +"%[processName]@ %[begins with]@ %@" = "%1$[Process Name]@ %2$[begins with]@ %3$@"; +"%[processName]@ %[ends with]@ %@" = "%1$[Process Name]@ %2$[ends with]@ %3$@"; +"%[processName]@ %[contains]@ %@" = "%1$[Process Name]@ %2$[contains]@ %3$@"; + +"%[header.bundleIdentifier]@ %[is]@ %@" = "%1$[Identifier]@ %2$[is]@ %3$@"; +"%[header.bundleIdentifier]@ %[is not]@ %@" = "%1$[Identifier]@ %2$[is not]@ %3$@"; +"%[header.bundleIdentifier]@ %[begins with]@ %@" = "%1$[Identifier]@ %2$[begins with]@ %3$@"; +"%[header.bundleIdentifier]@ %[ends with]@ %@" = "%1$[Identifier]@ %2$[ends with]@ %3$@"; +"%[header.bundleIdentifier]@ %[contains]@ %@" = "%1$[Identifier]@ %2$[contains]@ %3$@"; + +"%[header.executablePath]@ %[is]@ %@" = "%1$[Executable Path]@ %2$[is]@ %3$@"; +"%[header.executablePath]@ %[is not]@ %@" = "%1$[Executable Path]@ %2$[is not]@ %3$@"; +"%[header.executablePath]@ %[begins with]@ %@" = "%1$[Executable Path]@ %2$[begins with]@ %3$@"; +"%[header.executablePath]@ %[ends with]@ %@" = "%1$[Executable Path]@ %2$[ends with]@ %3$@"; +"%[header.executablePath]@ %[contains]@ %@" = "%1$[Executable Path]@ %2$[contains]@ %3$@"; + +"%[header.executableVersion]@ %[is]@ %@" = "%1$[Executable Version]@ %2$[is]@ %3$@"; +"%[header.executableVersion]@ %[is not]@ %@" = "%1$[Executable Version]@ %2$[is not]@ %3$@"; +"%[header.executableVersion]@ %[begins with]@ %@" = "%1$[Executable Version]@ %2$[begins with]@ %3$@"; +"%[header.executableVersion]@ %[ends with]@ %@" = "%1$[Executable Version]@ %2$[ends with]@ %3$@"; +"%[header.executableVersion]@ %[contains]@ %@" = "%1$[Executable Version]@ %2$[contains]@ %3$@"; + +"%[exceptionInformation.crashedThreadName]@ %[is]@ %@" = "%1$[Crashed Thread Name]@ %2$[is]@ %3$@"; +"%[exceptionInformation.crashedThreadName]@ %[is not]@ %@" = "%1$[Crashed Thread Name]@ %2$[is not]@ %3$@"; +"%[exceptionInformation.crashedThreadName]@ %[begins with]@ %@" = "%1$[Crashed Thread Name]@ %2$[begins with]@ %3$@"; +"%[exceptionInformation.crashedThreadName]@ %[ends with]@ %@" = "%1$[Crashed Thread Name]@ %2$[ends with]@ %3$@"; +"%[exceptionInformation.crashedThreadName]@ %[contains]@ %@" = "%1$[Crashed Thread Name]@ %2$[contains]@ %3$@"; + +"%[header.operatingSystemVersion.stringValue]@ %[is]@ %@" = "%1$[Operating System Version]@ %2$[is]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[is not]@ %@" = "%1$[Operating System Version]@ %2$[is not]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[begins with]@ %@" = "%1$[Operating System Version]@ %2$[begins with]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[ends with]@ %@" = "%1$[Operating System Version]@ %2$[ends with]@ %3$@"; +"%[header.operatingSystemVersion.stringValue]@ %[contains]@ %@" = "%1$[Operating System Version]@ %2$[contains]@ %3$@"; + +"%[dateTime]@ %[is less than or equal to]@ %@" = "%1$[Date]@ %2$[is earlier than or equal to]@ %3$@"; +"%[dateTime]@ %[is greater than or equal to]@ %@" = "%1$[Date]@ %2$[is later than or equal to]@ %3$@"; + +"%[exceptionType]@ is %[EXC_ARITHMETIC]@" = "%1$[Exception Type]@ is %2$[EXC_ARITHMETIC]@"; +"%[exceptionType]@ is %[EXC_BAD_ACCESS]@" = "%1$[Exception Type]@ is %2$[EXC_BAD_ACCESS]@"; +"%[exceptionType]@ is %[EXC_BAD_INSTRUCTION]@" = "%1$[Exception Type]@ is %2$[EXC_BAD_INSTRUCTION]@"; +"%[exceptionType]@ is %[EXC_BREAKPOINT]@" = "%1$[Exception Type]@ is %2$[EXC_BREAKPOINT]@"; +"%[exceptionType]@ is %[EXC_CORPSE_NOTIFY]@" = "%1$[Exception Type]@ is %2$[EXC_CORPSE_NOTIFY]@"; +"%[exceptionType]@ is %[EXC_CRASH]@" = "%1$[Exception Type]@ is %2$[EXC_CRASH]@"; +"%[exceptionType]@ is %[EXC_EMULATION]@" = "%1$[Exception Type]@ is %2$[EXC_EMULATION]@"; +"%[exceptionType]@ is %[EXC_GUARD]@" = "%1$[Exception Type]@ is %2$[EXC_GUARD]@"; +"%[exceptionType]@ is %[EXC_MACH_SYSCALL]@" = "%1$[Exception Type]@ is %2$[EXC_MACH_SYSCALL]@"; +"%[exceptionType]@ is %[EXC_RESOURCE]@" = "%1$[Exception Type]@ is %2$[EXC_RESOURCE]@"; +"%[exceptionType]@ is %[EXC_RPC_ALERT]@" = "%1$[Exception Type]@ is %2$[EXC_RPC_ALERT]@"; +"%[exceptionType]@ is %[EXC_SOFTWARE]@" = "%1$[Exception Type]@ is %2$[EXC_SOFTWARE]@"; +"%[exceptionType]@ is %[EXC_SYSCALL]@" = "%1$[Exception Type]@ is %2$[EXC_SYSCALL]@"; + +"%[exceptionSignal]@ is %[SIGABRT]@" = "%1$[Exception Signal]@ is %2$[SIGABRT]@"; +"%[exceptionSignal]@ is %[SIGBUS]@" = "%1$[Exception Signal]@ is %2$[SIGBUS]@"; +"%[exceptionSignal]@ is %[SIGILL]@" = "%1$[Exception Signal]@ is %2$[SIGILL]@"; +"%[exceptionSignal]@ is %[SIGKILL]@" = "%1$[Exception Signal]@ is %2$[SIGKILL]@"; +"%[exceptionSignal]@ is %[SIGQUIT]@" = "%1$[Exception Signal]@ is %2$[SIGQUIT]@"; +"%[exceptionSignal]@ is %[SIGSEGV]@" = "%1$[Exception Signal]@ is %2$[SIGSEGV]@"; +"%[exceptionSignal]@ is %[SIGTRAP]@" = "%1$[Exception Signal]@ is %2$[SIGTRAP]@"; +"%[exceptionSignal]@ is %[Code Signature Invalid]@" = "%1$[Exception Signal]@ is %2$[Code Signature Invalid]@"; + +"%[crashLogFileName]@ %[is]@ %@" = "%1$[Report File Name]@ %2$[is]@ %3$@"; +"%[crashLogFileName]@ %[is not]@ %@" = "%1$[Report File Name]@ %2$[is not]@ %3$@"; +"%[crashLogFileName]@ %[begins with]@ %@" = "%1$[Report File Name]@ %2$[begins with]@ %3$@"; +"%[crashLogFileName]@ %[ends with]@ %@" = "%1$[Report File Name]@ %2$[ends with]@ %3$@"; +"%[crashLogFileName]@ %[contains]@ %@" = "%1$[Report File Name]@ %2$[contains]@ %3$@"; + +"%[reportSourceTypeNumber]@ is %[0]@" = "%1$[Source]@ is %2$[System Reports]@"; +"%[reportSourceTypeNumber]@ is %[1]@" = "%1$[Source]@ is %2$[User Reports]@"; +"%[reportSourceTypeNumber]@ is %[2]@" = "%1$[Source]@ is %2$[Another Source]@"; + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/RemoteCheck.strings b/app_unexpectedly/app_unexpectedly/he.lproj/RemoteCheck.strings new file mode 100755 index 0000000000000000000000000000000000000000..c8a5ffedc9353a8b79977058cfbf4228f9721241 GIT binary patch literal 680 zcmd6lK@Y(|5QX2_uh=wkKIkZ`l$s%~iB0v1mby_0CS)BGm&8bI1=PFzzv1er!52JFt)88r$EmDq zFltf1(m#N!b~aq9n#Wq-ne?NGG(smpOh7z z4c}%cZ>HWU_DpfXYR{xIoXc-{{_+k=mT#~H?*xt=e2MpR?42IrZ05O3&QCbU_W+AU BY?uH5 literal 0 HcmV?d00001 diff --git a/plugin_quicklook/crashreport.xcodeproj/xcuserdata/stephane.xcuserdatad/xcschemes/xcschememanagement.plist b/plugin_quicklook/crashreport.xcodeproj/xcuserdata/stephane.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..dbf705f --- /dev/null +++ b/plugin_quicklook/crashreport.xcodeproj/xcuserdata/stephane.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + crashreport.xcscheme_^#shared#^_ + + orderHint + 1 + + + + From 99a6106ab9ef42d614b49ef31242b07c6e42d7aa Mon Sep 17 00:00:00 2001 From: packagesdev Date: Fri, 26 May 2023 10:00:48 +0200 Subject: [PATCH 101/214] Localization progress --- .../app_unexpectedly/AppDelegate.m | 3 +- .../CUICrashLogContentsViewController.m | 2 +- .../CUIInspectorProcessesViewController.m | 8 +- .../CUINavigationChevronView.m | 18 ++- ...PresentationTextNavigationViewController.m | 153 ++++++++++++++---- .../he.lproj/CUIAboutBoxWindowController.xib | 4 +- .../CUIBinaryImagesViewController.xib | 6 +- .../CUICollectionViewRegisterItem.xib | 6 +- .../CUICrashLogsListViewController.xib | 8 +- .../CUICrashLogsSourcesViewController.xib | 6 +- .../CUIInspectorExecutableViewController.xib | 38 ++--- .../CUIInspectorGeneralViewController.xib | 6 +- .../CUIInspectorProcessesViewController.xib | 38 ++--- .../CUIInspectorUserViewController.xib | 18 +-- .../CUILineJumperWindowController.xib | 2 +- .../he.lproj/CUIMainWindowController.xib | 4 +- ...UIPreferencePaneAdvancedViewController.xib | 16 +- ...ferencePaneCrashreporterViewController.xib | 36 ++--- ...referencePaneFontscolorsViewController.xib | 62 +++---- ...encePanePresentationTextViewController.xib | 34 ++-- ...eferencePanePresentationViewController.xib | 4 +- .../CUIPreferencesWindowController.xib | 2 +- .../CUISymbolsFilesLibraryViewController.xib | 4 +- .../he.lproj/Localizable.strings | Bin 7808 -> 7840 bytes .../app_unexpectedly/he.lproj/MainMenu.xib | 54 +++---- .../he.lproj/RemoteCheck.strings | Bin 680 -> 658 bytes 26 files changed, 322 insertions(+), 210 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/AppDelegate.m b/app_unexpectedly/app_unexpectedly/AppDelegate.m index ef8e065..ce7d972 100644 --- a/app_unexpectedly/app_unexpectedly/AppDelegate.m +++ b/app_unexpectedly/app_unexpectedly/AppDelegate.m @@ -90,7 +90,8 @@ @implementation AppDelegate + (void)initialize { [[NSUserDefaults standardUserDefaults] registerDefaults:@{ - CUIApplicationShowDebugMenuKey:@(NO) + CUIApplicationShowDebugMenuKey:@(NO), + @"NSScrollViewShouldFlipRulerForRTL":@(NO) }]; } diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogContentsViewController.m b/app_unexpectedly/app_unexpectedly/CUICrashLogContentsViewController.m index c687a11..e211ace 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogContentsViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogContentsViewController.m @@ -195,7 +195,7 @@ - (IBAction)CUI_MENUACTION_switchPresentationMode:(id)sender { NSSegmentedControl * tSegmentedControl=(NSSegmentedControl *)sender; - tPresentationMode=tSegmentedControl.selectedSegment; + tPresentationMode=[tSegmentedControl tagForSegment:tSegmentedControl.selectedSegment]; } else { diff --git a/app_unexpectedly/app_unexpectedly/CUIInspectorProcessesViewController.m b/app_unexpectedly/app_unexpectedly/CUIInspectorProcessesViewController.m index 6d009b6..daaa5aa 100644 --- a/app_unexpectedly/app_unexpectedly/CUIInspectorProcessesViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUIInspectorProcessesViewController.m @@ -35,19 +35,21 @@ - (void)refreshUI // Processes - _processNameValue.stringValue=[NSString stringWithFormat:@"%@ (%u)",tHeader.processName,tHeader.processIdentifier]; + NSString * tProcessFormatString=NSLocalizedString(@"%@ (%u)", @""); + + _processNameValue.stringValue=[NSString stringWithFormat:tProcessFormatString,tHeader.processName,tHeader.processIdentifier]; NSString * tParentProcessName=tHeader.parentProcessName; if ([tParentProcessName isEqualToString:@"???"]==YES && tHeader.parentProcessIdentifier==1) tParentProcessName=@"launchd"; - _parentProcessNameValue.stringValue=[NSString stringWithFormat:@"%@ (%u)",tParentProcessName,tHeader.parentProcessIdentifier]; + _parentProcessNameValue.stringValue=[NSString stringWithFormat:tProcessFormatString,tParentProcessName,tHeader.parentProcessIdentifier]; if (tHeader.responsibleProcessName==nil && tHeader.responsibleProcessIdentifier==0) _responsibleProcessNameValue.stringValue=@"-"; else - _responsibleProcessNameValue.stringValue=[NSString stringWithFormat:@"%@ (%u)",tHeader.responsibleProcessName,tHeader.responsibleProcessIdentifier]; + _responsibleProcessNameValue.stringValue=[NSString stringWithFormat:tProcessFormatString,tHeader.responsibleProcessName,tHeader.responsibleProcessIdentifier]; } @end diff --git a/app_unexpectedly/app_unexpectedly/CUINavigationChevronView.m b/app_unexpectedly/app_unexpectedly/CUINavigationChevronView.m index 2de7918..2c40082 100644 --- a/app_unexpectedly/app_unexpectedly/CUINavigationChevronView.m +++ b/app_unexpectedly/app_unexpectedly/CUINavigationChevronView.m @@ -1,5 +1,5 @@ /* - Copyright (c) 2020-2021, Stephane Sudre + Copyright (c) 2020-2023, Stephane Sudre All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -24,9 +24,19 @@ - (void)drawRect:(NSRect)dirtyRect CGFloat tMidY=round(NSMidY(tBounds)); NSBezierPath * tBezierPath=[NSBezierPath bezierPath]; - [tBezierPath moveToPoint:NSMakePoint(NSMaxX(tBounds)-5,NSMaxY(tBounds))]; - [tBezierPath lineToPoint:NSMakePoint(NSMaxX(tBounds)-1,tMidY)]; - [tBezierPath lineToPoint:NSMakePoint(NSMaxX(tBounds)-5,NSMinY(tBounds))]; + + if (self.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight) + { + [tBezierPath moveToPoint:NSMakePoint(NSMaxX(tBounds)-5,NSMaxY(tBounds))]; + [tBezierPath lineToPoint:NSMakePoint(NSMaxX(tBounds)-1,tMidY)]; + [tBezierPath lineToPoint:NSMakePoint(NSMaxX(tBounds)-5,NSMinY(tBounds))]; + } + else + { + [tBezierPath moveToPoint:NSMakePoint(NSMaxX(tBounds)-5,NSMaxY(tBounds))]; + [tBezierPath lineToPoint:NSMakePoint(NSMaxX(tBounds)-9,tMidY)]; + [tBezierPath lineToPoint:NSMakePoint(NSMaxX(tBounds)-5,NSMinY(tBounds))]; + } [tBezierPath stroke]; } diff --git a/app_unexpectedly/app_unexpectedly/CUIPresentationTextNavigationViewController.m b/app_unexpectedly/app_unexpectedly/CUIPresentationTextNavigationViewController.m index 1dc5e94..62e0a3c 100644 --- a/app_unexpectedly/app_unexpectedly/CUIPresentationTextNavigationViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUIPresentationTextNavigationViewController.m @@ -1,5 +1,5 @@ /* - Copyright (c) 2020-2021, Stephane Sudre + Copyright (c) 2020-2023, Stephane Sudre All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -127,6 +127,39 @@ - (void)viewDidLoad { [super viewDidLoad]; + // Set the autoresizing masks based on the layout direction + + if (self.view.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight) + { + _sourcesPopUpButton.autoresizingMask=NSViewMaxXMargin|NSViewMinYMargin; + _sourcesPopUpButton.imagePosition=NSImageLeading; + + _sourcesChevronView.autoresizingMask=NSViewMaxXMargin|NSViewMinYMargin; + + _crashLogsPopUpButton.autoresizingMask=NSViewMaxXMargin|NSViewMinYMargin; + _crashLogsPopUpButton.imagePosition=NSImageLeading; + + _crashLogsChevronView.autoresizingMask=NSViewMaxXMargin|NSViewMinYMargin; + + _sectionsPopUpButton.autoresizingMask=NSViewMaxXMargin|NSViewMinYMargin; + _sectionsPopUpButton.imagePosition=NSImageLeading; + } + else + { + _sourcesPopUpButton.autoresizingMask=NSViewMinXMargin|NSViewMinYMargin; + _sourcesPopUpButton.imagePosition=NSImageTrailing; + + _sourcesChevronView.autoresizingMask=NSViewMinXMargin|NSViewMinYMargin; + + _crashLogsPopUpButton.autoresizingMask=NSViewMinXMargin|NSViewMinYMargin; + _crashLogsPopUpButton.imagePosition=NSImageTrailing; + + _crashLogsChevronView.autoresizingMask=NSViewMinXMargin|NSViewMinYMargin; + + _sectionsPopUpButton.autoresizingMask=NSViewMinXMargin|NSViewMinYMargin; + _sectionsPopUpButton.imagePosition=NSImageTrailing; + } + } - (void)viewDidAppear @@ -263,7 +296,7 @@ - (void)refreshSourcesMenu for(CUIRawCrashLog * tCrashLog in tMutableCrashLogs) { - NSString * tTitle=[NSString stringWithFormat:tTitleFormatString,[self->_crashLogDateFormatter stringFromDate:tCrashLog.dateTime],tCrashLog.processName]; + NSString * tTitle=[NSString localizedStringWithFormat:tTitleFormatString,tCrashLog.processName,[self->_crashLogDateFormatter stringFromDate:tCrashLog.dateTime]]; NSMenuItem * tSubMenuItem=[[NSMenuItem alloc] initWithTitle:tTitle action:@selector(switchSourceCrashLog:) keyEquivalent:@""]; @@ -338,7 +371,7 @@ - (void)refreshCrashLogsMenu for(CUIRawCrashLog * tCrashLog in tMutableCrashLogs) { - NSString * tTitle=[NSString localizedStringWithFormat:tTitleFormatString,[_crashLogDateFormatter stringFromDate:tCrashLog.dateTime],tCrashLog.processName]; + NSString * tTitle=[NSString localizedStringWithFormat:tTitleFormatString,tCrashLog.processName,[_crashLogDateFormatter stringFromDate:tCrashLog.dateTime]]; NSMenuItem * tSubMenuItem=[[NSMenuItem alloc] initWithTitle:tTitle action:@selector(switchCrashLog:) keyEquivalent:@""]; @@ -616,7 +649,9 @@ - (void)updateLayout #define MARGIN 0.0 -#define RIGHT_PADDING 10.0 +#define BEGIN_PADDING 3.0 + +#define END_PADDING 10.0 NSRect tBounds=self.view.bounds; @@ -671,7 +706,8 @@ - (void)updateLayout NSRect tChevronFrame=_sourcesChevronView.frame; - tTotalWidth+=NSMinX(_sourcesPopUpButton.frame)+(tMutableArray.count-1)*(NSWidth(tChevronFrame)+2.0*MARGIN)+RIGHT_PADDING; + + tTotalWidth+=BEGIN_PADDING+(tMutableArray.count-1)*(NSWidth(tChevronFrame)+2.0*MARGIN)+END_PADDING; CGFloat tDifference=tTotalWidth-NSWidth(tBounds); @@ -700,6 +736,11 @@ - (void)updateLayout tRect.size.width=tSize.width; + if (self.view.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionRightToLeft) + { + tRect.origin.x=NSMaxX(tBounds)-NSWidth(tRect)-BEGIN_PADDING; + } + _sourcesPopUpButton.frame=tRect; return; @@ -727,20 +768,30 @@ - (void)updateLayout tRect.size.width=tSize.width; + if (self.view.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionRightToLeft) + { + tRect.origin.x=NSMaxX(tBounds)-NSWidth(tRect)-BEGIN_PADDING; + } + _sourcesPopUpButton.frame=tRect; NSRect tFrame=_sourcesChevronView.frame; - tFrame.origin.x=NSMaxX(tRect)+MARGIN; + if (self.view.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight) + { + tFrame.origin.x=NSMaxX(tRect)+MARGIN; + } + else + { + tFrame.origin.x=NSMinX(tRect)-MARGIN-NSWidth(tFrame); + } _sourcesChevronView.frame=tFrame; tRect=_crashLogsPopUpButton.frame; - tRect.origin.x=NSMaxX(_sourcesChevronView.frame)+MARGIN; - tSize=[_crashLogsPopUpButton sizeThatFits:tRect.size]; if (NSAppKitVersionNumber>GROSSE_CHIURE_APPKIT_VERSION_NUMBER) @@ -748,9 +799,25 @@ - (void)updateLayout tSize.width+=GROSSE_CHIURE_EXTRA_WIDTH; } - if (tDifference>0.0) + if (self.view.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight) { - tSize.width=NSMaxX(tBounds)-NSMinX(tRect); + tRect.origin.x=NSMaxX(_sourcesChevronView.frame)+MARGIN; + + if (tDifference>0.0) + { + tSize.width=NSMaxX(tBounds)-NSMinX(tRect); + } + } + else + { + tRect.origin.x=NSMinX(_sourcesChevronView.frame)-MARGIN-tSize.width; + + if (tDifference>0.0) + { + tSize.width=NSMaxX(tRect)-NSMinX(tBounds); + + tRect.origin.x=NSMinX(tBounds); + } } tRect.size.width=tSize.width; @@ -780,12 +847,24 @@ - (void)updateLayout tRect.size.width=tSize.width; + if (self.view.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionRightToLeft) + { + tRect.origin.x=NSMaxX(tBounds)-NSWidth(tRect)-BEGIN_PADDING; + } + _sourcesPopUpButton.frame=tRect; NSRect tFrame=_sourcesChevronView.frame; - tFrame.origin.x=NSMaxX(tRect)+MARGIN; + if (self.view.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight) + { + tFrame.origin.x=NSMaxX(tRect)+MARGIN; + } + else + { + tFrame.origin.x=NSMinX(tRect)-MARGIN-NSWidth(tFrame); + } _sourcesChevronView.frame=tFrame; @@ -801,38 +880,49 @@ - (void)updateLayout tSize.width+=GROSSE_CHIURE_EXTRA_WIDTH; } - if (tDifference>0.0) + if (tDifference>(tSize.width-MIN_WIDTH)) { - if (tDifference>(tSize.width-MIN_WIDTH)) - { - tDifference-=(tSize.width-MIN_WIDTH); - - tSize.width=MIN_WIDTH; - } - else - { - tSize.width-=tDifference; - - tDifference=0.0; - } + tDifference-=(tSize.width-MIN_WIDTH); + + tSize.width=MIN_WIDTH; + } + else + { + tSize.width-=tDifference; + + tDifference=0.0; } tRect.size.width=tSize.width; + if (self.view.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight) + { + tRect.origin.x=NSMaxX(_sourcesChevronView.frame)+MARGIN; + } + else + { + tRect.origin.x=NSMinX(_sourcesChevronView.frame)-MARGIN-tSize.width; + } + _crashLogsPopUpButton.frame=tRect; tFrame=_crashLogsChevronView.frame; - tFrame.origin.x=NSMaxX(tRect)+MARGIN; + if (self.view.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight) + { + tFrame.origin.x=NSMaxX(tRect)+MARGIN; + } + else + { + tFrame.origin.x=NSMinX(tRect)-MARGIN-NSWidth(tFrame); + } _crashLogsChevronView.frame=tFrame; tRect=_sectionsPopUpButton.frame; - tRect.origin.x=NSMaxX(_crashLogsChevronView.frame)+MARGIN; - tSize=[_sectionsPopUpButton sizeThatFits:tRect.size]; if (NSAppKitVersionNumber>GROSSE_CHIURE_APPKIT_VERSION_NUMBER) @@ -845,6 +935,15 @@ - (void)updateLayout tSize.width=NSMaxX(tBounds)-NSMinX(tRect); } + if (self.view.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight) + { + tRect.origin.x=NSMaxX(_crashLogsChevronView.frame)+MARGIN; + } + else + { + tRect.origin.x=NSMinX(_crashLogsChevronView.frame)-MARGIN-tSize.width; + } + tRect.size.width=tSize.width; _sectionsPopUpButton.frame=tRect; diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIAboutBoxWindowController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIAboutBoxWindowController.xib index aab3ae5..17548e3 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIAboutBoxWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIAboutBoxWindowController.xib @@ -68,7 +68,7 @@ - + @@ -79,7 +79,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIBinaryImagesViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIBinaryImagesViewController.xib index 82cdbcc..22eb6ab 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIBinaryImagesViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIBinaryImagesViewController.xib @@ -23,7 +23,7 @@ - + @@ -221,9 +221,9 @@ - + - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUICollectionViewRegisterItem.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUICollectionViewRegisterItem.xib index dae3f07..f5e3700 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUICollectionViewRegisterItem.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUICollectionViewRegisterItem.xib @@ -46,10 +46,10 @@ - - + + - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsListViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsListViewController.xib index 94f2bd4..c6bacf9 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsListViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsListViewController.xib @@ -126,13 +126,13 @@ - + - + @@ -170,7 +170,7 @@ - + @@ -181,7 +181,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsSourcesViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsSourcesViewController.xib index 7b5280e..51a29eb 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsSourcesViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogsSourcesViewController.xib @@ -137,7 +137,7 @@ - + @@ -183,14 +183,14 @@ - + - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorExecutableViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorExecutableViewController.xib index abf00bb..eb2d525 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorExecutableViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorExecutableViewController.xib @@ -24,34 +24,34 @@ - + - + - - - + + + - - - + + + - + @@ -60,22 +60,22 @@ - + - + - - + + - + - + - - + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorGeneralViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorGeneralViewController.xib index 5517328..f85e090 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorGeneralViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorGeneralViewController.xib @@ -22,10 +22,10 @@ - + - + @@ -70,7 +70,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorProcessesViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorProcessesViewController.xib index 0b60e8b..45d4449 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorProcessesViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorProcessesViewController.xib @@ -21,63 +21,63 @@ - - - + + + - + - + - - - + + + - - - + + + - + - + - - - - + + + + - + - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorUserViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorUserViewController.xib index 2d07af2..89f2f78 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorUserViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIInspectorUserViewController.xib @@ -19,27 +19,27 @@ - - - - + + + + - - - + + + - + - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUILineJumperWindowController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUILineJumperWindowController.xib index a787049..ff9963f 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUILineJumperWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUILineJumperWindowController.xib @@ -29,7 +29,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIMainWindowController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIMainWindowController.xib index c30ac9e..75cf789 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIMainWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIMainWindowController.xib @@ -69,8 +69,8 @@ - - + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneAdvancedViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneAdvancedViewController.xib index 5e65e93..4efbee3 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneAdvancedViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneAdvancedViewController.xib @@ -20,8 +20,8 @@ - - - + + + @@ -44,9 +44,9 @@ - + - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneFontscolorsViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneFontscolorsViewController.xib index 5d39df7..7e439cd 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneFontscolorsViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePaneFontscolorsViewController.xib @@ -43,7 +43,7 @@ - - + - + + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationViewController.xib index cf76e4a..f296b81 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationViewController.xib @@ -33,9 +33,9 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m b/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m index 33421cb..8bd7541 100644 --- a/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m +++ b/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController.m @@ -88,11 +88,15 @@ - (void)delayedReloadSymbols; @implementation CUIThreadsListViewController -- (NSString *)nibName +- (instancetype)initWithUserInterfaceLayoutDirection:(NSUserInterfaceLayoutDirection)inUserInterfaceLayoutDirection { - return @"CUIThreadsListViewController"; + NSString *nibName=(inUserInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionLeftToRight) ? @"CUIThreadsListViewController" : @"CUIThreadsListViewController_RTL"; + + return [super initWithNibName:nibName bundle:nil]; } +#pragma mark - + - (void)viewDidLoad { [super viewDidLoad]; @@ -655,6 +659,7 @@ - (NSView *)outlineView:(NSOutlineView *)inOutlineView viewForTableColumn:(NSTab if ([inItem isKindOfClass:[CUIStackFrame class]]==YES) { + BOOL isRightToLeft=(inOutlineView.userInterfaceLayoutDirection==NSUserInterfaceLayoutDirectionRightToLeft); CUIStackFrame * tCall=(CUIStackFrame *)inItem; NSString * tBinaryImageIdentifier=tCall.binaryImageIdentifier; @@ -724,13 +729,24 @@ - (NSView *)outlineView:(NSOutlineView *)inOutlineView viewForTableColumn:(NSTab } + + tCallTableCellView.binaryImageLabel.hidden=NO; NSRect tFrame=tCallTableCellView.binaryImageLabel.frame; - tFrame.origin.x=NSMaxX(tLeftFrame)+8; tFrame.size.width=_optimizedBinaryImageTextFieldWidth; + if (isRightToLeft==NO) + { + tFrame.origin.x=NSMaxX(tLeftFrame)+8; + + } + else + { + tFrame.origin.x=NSMinX(tLeftFrame)-8-NSWidth(tFrame); + } + tCallTableCellView.binaryImageLabel.frame=tFrame; tLeftFrame=tFrame; @@ -759,7 +775,14 @@ - (NSView *)outlineView:(NSOutlineView *)inOutlineView viewForTableColumn:(NSTab NSRect tFrame=tCallTableCellView.addressLabel.frame; - tFrame.origin.x=NSMaxX(tLeftFrame)+8; + if (isRightToLeft==NO) + { + tFrame.origin.x=NSMaxX(tLeftFrame)+8; + } + else + { + tFrame.origin.x=NSMinX(tLeftFrame)-8-NSWidth(tFrame); + } tCallTableCellView.addressLabel.frame=tFrame; @@ -783,11 +806,22 @@ - (NSView *)outlineView:(NSOutlineView *)inOutlineView viewForTableColumn:(NSTab NSRect tFrame=tCallTableCellView.textField.frame; - CGFloat tMaxX=NSMaxX(tFrame); + if (isRightToLeft==NO) + { + CGFloat tMaxX=NSMaxX(tFrame); - tFrame.origin.x=NSMaxX(tLeftFrame)+8; + tFrame.origin.x=NSMaxX(tLeftFrame)+8; - tFrame.size.width=tMaxX-tFrame.origin.x; + tFrame.size.width=tMaxX-tFrame.origin.x; + } + else + { + CGFloat tMinX=NSMinX(tFrame); + + tFrame.origin.x=tMinX; + + tFrame.size.width=(NSMinX(tLeftFrame)-8-tMinX); + } tCallTableCellView.textField.frame=tFrame; diff --git a/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController_RTL.xib b/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController_RTL.xib new file mode 100644 index 0000000..998ca2f --- /dev/null +++ b/app_unexpectedly/app_unexpectedly/CUIThreadsListViewController_RTL.xib @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGBUS.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGBUS.html index 651f270..e04dc6d 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGBUS.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGBUS.html @@ -4,7 +4,7 @@ -Summary +תַקצִיר

      The EXC_BAD_ACCESS (SIGBUS) type indicates a process uses memory in an unexpected way.

      Discussion diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGSEGV.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGSEGV.html index c32a33d..c766717 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGSEGV.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGSEGV.html @@ -4,7 +4,7 @@ -Summary +תַקצִיר

      The EXC_BAD_ACCESS (SIGSEGV) type indicates a process uses memory in an unexpected way.

      Discussion diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html index 29de96e..f38af8e 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html @@ -4,7 +4,7 @@ -Summary +תַקצִיר

      The EXC_BAD_INSTRUCTION (SIGILL) type indicates the process executed an illegal instruction (usually inserted by the compiler).

      Discussion diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BREAKPOINT_SIGTRAP.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BREAKPOINT_SIGTRAP.html index 0093dad..d18a93c 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BREAKPOINT_SIGTRAP.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BREAKPOINT_SIGTRAP.html @@ -4,7 +4,7 @@ -Summary +תַקצִיר

      The EXC_BREAKPOINT (SIGTRAP) type indicates the process executed an illegal instruction (usually inserted by the compiler).

      Discussion diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_Code Signature Invalid.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_Code Signature Invalid.html index c7e5dcd..a6a0e84 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_Code Signature Invalid.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_Code Signature Invalid.html @@ -4,7 +4,7 @@ -Summary +תַקצִיר

      EXC_CRASH (Code Signature Invalid) indicates the operating system terminated the process because of problems related to code signing.

      Discussion diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGABRT.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGABRT.html index 8edb6be..e49e753 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGABRT.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGABRT.html @@ -4,7 +4,7 @@ -Summary +תַקצִיר

      EXC_CRASH (SIGABRT) indicates the process terminated because it received the SIGABRT signal.

      Discussion diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGKILL.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGKILL.html index 95bdb56..7956c7e 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGKILL.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGKILL.html @@ -4,7 +4,7 @@ -Summary +תַקצִיר

      EXC_CRASH (SIGKILL) indicates the operating system terminated the process.

      Discussion diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGQUIT.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGQUIT.html index e7c33b8..f3774ea 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGQUIT.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGQUIT.html @@ -4,7 +4,7 @@ -Summary +תַקצִיר

      EXC_CRASH (SIGQUIT) indicates the process terminated at the request of another process with privileges to manage its lifetime.

      Discussion diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGSEGV.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGSEGV.html index 284fc5e..2f6279c 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGSEGV.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGSEGV.html @@ -4,7 +4,7 @@ -Summary +תַקצִיר

      The EXC_CRASH (SIGSEGV) type indicates a process uses memory in an unexpected way.

      Discussion diff --git a/app_unexpectedly/app_unexpectedly/dSYM/CUIdSYMBundle.m b/app_unexpectedly/app_unexpectedly/dSYM/CUIdSYMBundle.m index 18a91a2..9cb4a09 100644 --- a/app_unexpectedly/app_unexpectedly/dSYM/CUIdSYMBundle.m +++ b/app_unexpectedly/app_unexpectedly/dSYM/CUIdSYMBundle.m @@ -65,17 +65,16 @@ - (NSString *)displayVersion { if (_displayVersion==nil) { - NSMutableString * tMutableString=[NSMutableString string]; + NSString * tBundleShortVersionString=[self objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; - NSString * tString=[self objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; + if (tBundleShortVersionString==nil) + tBundleShortVersionString=@"-"; - [tMutableString appendString:(tString!=nil) ? tString : @"-"]; + NSString * tBundleVersionString=[self objectForInfoDictionaryKey:@"CFBundleVersion"]; + if (tBundleVersionString==nil) + tBundleVersionString=@"-"; - tString=[self objectForInfoDictionaryKey:@"CFBundleVersion"]; - - [tMutableString appendFormat:@" (%@)",(tString!=nil) ? tString : @"-"]; - - _displayVersion=[tMutableString copy]; + _displayVersion=[NSString stringWithFormat:NSLocalizedString(@"%@ (%@)",@""), tBundleShortVersionString, tBundleVersionString ]; } return _displayVersion; diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIBinaryImagesViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIBinaryImagesViewController.xib index 22eb6ab..75424e3 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIBinaryImagesViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIBinaryImagesViewController.xib @@ -47,7 +47,7 @@ - + @@ -107,7 +107,7 @@ - + @@ -120,8 +120,8 @@ - - + + @@ -135,11 +135,11 @@ - + - + @@ -169,7 +169,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUICollectionViewRegisterItem.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUICollectionViewRegisterItem.xib index f5e3700..290a0d6 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUICollectionViewRegisterItem.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUICollectionViewRegisterItem.xib @@ -38,17 +38,17 @@ - + - From 635d4f350c2f4ecee8bde0e13dc3cdde0cf6a5ae Mon Sep 17 00:00:00 2001 From: packagesdev Date: Wed, 30 Aug 2023 23:00:48 +0200 Subject: [PATCH 114/214] Localization progress --- .../Help/he.lproj/EXC_BAD_ACCESS_SIGBUS.html | 2 +- .../Help/he.lproj/EXC_BAD_ACCESS_SIGSEGV.html | 2 +- .../he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html | 2 +- .../Help/he.lproj/EXC_BREAKPOINT_SIGTRAP.html | 2 +- .../EXC_CRASH_Code Signature Invalid.html | 2 +- .../Help/he.lproj/EXC_CRASH_SIGABRT.html | 2 +- .../Help/he.lproj/EXC_CRASH_SIGKILL.html | 2 +- .../Help/he.lproj/EXC_CRASH_SIGQUIT.html | 2 +- .../Help/he.lproj/EXC_CRASH_SIGSEGV.html | 2 +- ...shLogPresentationOutlineViewController.xib | 10 +++++----- ...CrashLogPresentationTextViewController.xib | 8 ++++---- ...CUIPreferencePaneGeneralViewController.xib | 8 ++++---- ...encePanePresentationTextViewController.xib | 10 +++++----- .../he.lproj/Localizable.strings | Bin 7896 -> 7704 bytes .../app_unexpectedly/he.lproj/MainMenu.xib | 8 ++++---- 15 files changed, 31 insertions(+), 31 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGBUS.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGBUS.html index 72d6a2c..60b39d2 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGBUS.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGBUS.html @@ -11,7 +11,7 @@

      The exception can happen when the process tries to access unmapped memory (KERN_INVALID_ADDRESS), misaligned memory (EXC_ARM_DA_ALIGN) or unavailable memory (KERN_MEMORY_ERROR). This can also happen when the process tries to write on read-only or protected memory (KERN_PROTECTION_FAILURE).

      diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGSEGV.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGSEGV.html index 1c77607..d6ca795 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGSEGV.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_ACCESS_SIGSEGV.html @@ -11,7 +11,7 @@

      The exception can happen when the process tries to access unmapped memory (KERN_INVALID_ADDRESS), misaligned memory (EXC_ARM_DA_ALIGN) or unavailable memory (KERN_MEMORY_ERROR). This can also happen when the process tries to write on read-only or protected memory (KERN_PROTECTION_FAILURE).

      diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html index a6dc903..b4e7f67 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BAD_INSTRUCTION_SIGILL.html @@ -11,7 +11,7 @@

      The execution of this illegal instruction usually means that one of the compiler’s safety checks failed (e.g. when your code unwraps a nil optional in Swift).

      diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BREAKPOINT_SIGTRAP.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BREAKPOINT_SIGTRAP.html index a37ad81..f2f3091 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BREAKPOINT_SIGTRAP.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_BREAKPOINT_SIGTRAP.html @@ -11,7 +11,7 @@

      The execution of this illegal instruction usually means that one of the compiler’s safety checks failed (e.g. when your code unwraps a nil optional in Swift).

      diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_Code Signature Invalid.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_Code Signature Invalid.html index 65c483a..e5db985 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_Code Signature Invalid.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_Code Signature Invalid.html @@ -11,7 +11,7 @@

      The crash could have occurred because the application is using invalid entitlements or the code signing identity is incompatible with the running environment.

      diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGABRT.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGABRT.html index 41fbdaf..4209041 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGABRT.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGABRT.html @@ -11,7 +11,7 @@

      Typically, this signal is sent because a function in the process called abort(), such as when an app encounters an uncaught Objective-C or C++ exception.

      diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGKILL.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGKILL.html index f65bb3d..41a913e 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGKILL.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGKILL.html @@ -11,7 +11,7 @@

      The crash report contains a Termination Reason field with a code that explains the reason for the crash.

      diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGQUIT.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGQUIT.html index 2a48f79..e9e3e85 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGQUIT.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGQUIT.html @@ -11,7 +11,7 @@

      This does not mean that the process crashed, but it likely misbehaved in a detectable manner.

      diff --git a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGSEGV.html b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGSEGV.html index 43f0f23..23ea6ae 100644 --- a/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGSEGV.html +++ b/app_unexpectedly/app_unexpectedly/Help/he.lproj/EXC_CRASH_SIGSEGV.html @@ -11,7 +11,7 @@

      The exception can happen when the process tries to access unmapped memory, misaligned memory or unavailable memory. This can also happen when the process tries to write on read-only or protected memory.

      diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationOutlineViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationOutlineViewController.xib index 9f0a53a..20d5a71 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationOutlineViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationOutlineViewController.xib @@ -38,7 +38,7 @@ - + @@ -114,7 +114,7 @@
      -
      -
      - + - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/RemoteCheck.strings b/app_unexpectedly/app_unexpectedly/he.lproj/RemoteCheck.strings index 25f3bcbd15abaae4fae9f3a592318ad9f56ce706..26601876b26eb12359cd0a9fa80cf9e87447ac96 100755 GIT binary patch delta 100 zcmeBTy~46Vfic2?L6t#)0YYA5y~lc!^**Zt!)?|_tgnEy2E$F(mq7Xs>n$J&Ql-hD i2ULHN^#$uQ)~l=!z~XmUuK?LEfO;>(^-f;Lcn1Jq!X9`4 delta 14 Vcmcb@(#5(#fpKEnq{%gmHvlOh1 Date: Thu, 19 Oct 2023 23:20:56 +0200 Subject: [PATCH 116/214] Provide license info in source and header Provide license info in source and header --- .../app_unexpectedly/Mach-o/MCHLoadCommand.h | 12 +++++++++++ .../app_unexpectedly/Mach-o/MCHLoadCommand.m | 12 +++++++++++ .../app_unexpectedly/Mach-o/MCHMachBinary.h | 2 +- .../app_unexpectedly/Mach-o/MCHMachBinary.m | 2 +- .../Mach-o/MCHMemoryBufferWrapper.h | 2 +- .../Mach-o/MCHMemoryBufferWrapper.m | 2 +- .../app_unexpectedly/Mach-o/MCHObjectFile.h | 19 +++++++++++------- .../app_unexpectedly/Mach-o/MCHObjectFile.m | 12 +++++++++++ .../app_unexpectedly/Mach-o/MCHSection.h | 19 +++++++++++------- .../app_unexpectedly/Mach-o/MCHSection.m | 12 +++++++++++ .../app_unexpectedly/Mach-o/MCHSegment.h | 12 +++++++++++ .../app_unexpectedly/Mach-o/MCHSegment.m | 19 +++++++++++------- .../Mach-o/MCHSegmentLoadCommand.h | 12 +++++++++++ .../Mach-o/MCHSegmentLoadCommand.m | 20 +++++++++++-------- .../Mach-o/MCHUUIDLoadCommand.h | 12 +++++++++++ .../Mach-o/MCHUUIDLoadCommand.m | 12 +++++++++++ 16 files changed, 148 insertions(+), 33 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHLoadCommand.h b/app_unexpectedly/app_unexpectedly/Mach-o/MCHLoadCommand.h index 901aba3..5aa541d 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHLoadCommand.h +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHLoadCommand.h @@ -1,3 +1,15 @@ +/* + Copyright (c) 2020-2023, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #import "MCHMemoryBufferWrapper.h" diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHLoadCommand.m b/app_unexpectedly/app_unexpectedly/Mach-o/MCHLoadCommand.m index 2c7f59a..f84ab39 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHLoadCommand.m +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHLoadCommand.m @@ -1,3 +1,15 @@ +/* + Copyright (c) 2020-2023, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #import "MCHLoadCommand.h" diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHMachBinary.h b/app_unexpectedly/app_unexpectedly/Mach-o/MCHMachBinary.h index acb9017..8fc0cea 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHMachBinary.h +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHMachBinary.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2020-2021, Stephane Sudre + Copyright (c) 2020-2023, Stephane Sudre All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHMachBinary.m b/app_unexpectedly/app_unexpectedly/Mach-o/MCHMachBinary.m index fd106da..c850bd7 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHMachBinary.m +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHMachBinary.m @@ -1,5 +1,5 @@ /* - Copyright (c) 2020-2022, Stephane Sudre + Copyright (c) 2020-2023, Stephane Sudre All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHMemoryBufferWrapper.h b/app_unexpectedly/app_unexpectedly/Mach-o/MCHMemoryBufferWrapper.h index afb96af..f0152de 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHMemoryBufferWrapper.h +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHMemoryBufferWrapper.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2020-2021, Stephane Sudre + Copyright (c) 2020-2023, Stephane Sudre All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHMemoryBufferWrapper.m b/app_unexpectedly/app_unexpectedly/Mach-o/MCHMemoryBufferWrapper.m index c6fd6d1..5211bd7 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHMemoryBufferWrapper.m +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHMemoryBufferWrapper.m @@ -1,5 +1,5 @@ /* - Copyright (c) 2020-2021, Stephane Sudre + Copyright (c) 2020-2023, Stephane Sudre All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHObjectFile.h b/app_unexpectedly/app_unexpectedly/Mach-o/MCHObjectFile.h index 9f8201d..beb2159 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHObjectFile.h +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHObjectFile.h @@ -1,10 +1,15 @@ -// -// MTBCArchitectureObjectFile.h -// Mach-in-Truc -// -// Created by stephane on 5/28/15. -// Copyright (c) 2015 stephane. All rights reserved. -// +/* + Copyright (c) 2020-2023, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #import "MCHMemoryBufferWrapper.h" diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHObjectFile.m b/app_unexpectedly/app_unexpectedly/Mach-o/MCHObjectFile.m index be31803..e8ede92 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHObjectFile.m +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHObjectFile.m @@ -1,3 +1,15 @@ +/* + Copyright (c) 2020-2023, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #import "MCHObjectFile.h" diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHSection.h b/app_unexpectedly/app_unexpectedly/Mach-o/MCHSection.h index b1fd2a3..33607e7 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHSection.h +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHSection.h @@ -1,10 +1,15 @@ -// -// MTBCSection.h -// Mach-in-Truc -// -// Created by stephane on 5/28/15. -// Copyright (c) 2015 stephane. All rights reserved. -// +/* + Copyright (c) 2020-2023, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #import "MCHMemoryBufferWrapper.h" diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHSection.m b/app_unexpectedly/app_unexpectedly/Mach-o/MCHSection.m index 86e7e1e..ce07d74 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHSection.m +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHSection.m @@ -1,3 +1,15 @@ +/* + Copyright (c) 2020-2023, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #import "MCHSection.h" diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegment.h b/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegment.h index 7f7a844..5c092a8 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegment.h +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegment.h @@ -1,3 +1,15 @@ +/* + Copyright (c) 2020-2023, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #import "MCHMemoryBufferWrapper.h" diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegment.m b/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegment.m index 4d9bad0..ffd2e33 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegment.m +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegment.m @@ -1,10 +1,15 @@ -// -// MTBCSegment.m -// Mach-in-Truc -// -// Created by stephane on 6/6/15. -// Copyright (c) 2015 stephane. All rights reserved. -// +/* + Copyright (c) 2020-2023, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #import "MCHSegment.h" diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegmentLoadCommand.h b/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegmentLoadCommand.h index ed07ff1..f639993 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegmentLoadCommand.h +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegmentLoadCommand.h @@ -1,3 +1,15 @@ +/* + Copyright (c) 2020-2023, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #import "MCHLoadCommand.h" diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegmentLoadCommand.m b/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegmentLoadCommand.m index a12f684..6799e17 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegmentLoadCommand.m +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHSegmentLoadCommand.m @@ -1,11 +1,15 @@ -// -// MTBCSegmentLoadCommand.m -// Mach-in-Truc -// -// Created by stephane on 6/2/15. -// Copyright (c) 2015 stephane. All rights reserved. -// - +/* + Copyright (c) 2020-2023, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #import "MCHSegmentLoadCommand.h" #include diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHUUIDLoadCommand.h b/app_unexpectedly/app_unexpectedly/Mach-o/MCHUUIDLoadCommand.h index 2bdc496..56cfd81 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHUUIDLoadCommand.h +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHUUIDLoadCommand.h @@ -1,3 +1,15 @@ +/* + Copyright (c) 2020-2023, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #import "MCHLoadCommand.h" diff --git a/app_unexpectedly/app_unexpectedly/Mach-o/MCHUUIDLoadCommand.m b/app_unexpectedly/app_unexpectedly/Mach-o/MCHUUIDLoadCommand.m index 590c30f..d3c4b45 100644 --- a/app_unexpectedly/app_unexpectedly/Mach-o/MCHUUIDLoadCommand.m +++ b/app_unexpectedly/app_unexpectedly/Mach-o/MCHUUIDLoadCommand.m @@ -1,3 +1,15 @@ +/* + Copyright (c) 2020-2023, Stephane Sudre + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + - Neither the name of the WhiteBox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #import "MCHUUIDLoadCommand.h" From 6902a195b69332b7a51a8f039dfbc02e1a03417f Mon Sep 17 00:00:00 2001 From: packagesdev Date: Thu, 19 Oct 2023 23:21:33 +0200 Subject: [PATCH 117/214] Add localization Add localization --- .../he.lproj/Localizable.strings | Bin 7692 -> 7686 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/Localizable.strings b/app_unexpectedly/app_unexpectedly/he.lproj/Localizable.strings index 9a05753ece8897bf34d93b3921f186f93d4721f0..e9c28d4e5d270c62c366b12b9f4e48da9d505972 100755 GIT binary patch delta 117 zcmeCNX|vf7z`=Wk^#bc%Rt1I&tgl$FOwMPQ4139Xo%I^)3#ga^!xh#`te1iOt3VYB z3>Sf{n?MX=UtzrmRC}5A4v_s4OkM)2dcyhur~+i>Rn}*$7g-;Hd7CeBScw7v3w|rk delta 16 XcmZp(>9N@mz%ls{d)wv<9A=^bIFJTQ From 33187743d4623e2ec92db28a9e641f2b50853c34 Mon Sep 17 00:00:00 2001 From: packagesdev Date: Sat, 21 Oct 2023 18:34:59 +0200 Subject: [PATCH 118/214] Localization progress Localization progress --- ...shLogPresentationOutlineViewController.xib | 2 +- ...CrashLogPresentationTextViewController.xib | 2 +- ...hLogsSourceSmartEditorWindowController.xib | 8 ++-- ...ePanePresentationOutlineViewController.xib | 2 +- ...encePanePresentationTextViewController.xib | 2 +- .../he.lproj/Predicates.strings | 46 +++++++++---------- 6 files changed, 31 insertions(+), 31 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationOutlineViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationOutlineViewController.xib index 20d5a71..d4209da 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationOutlineViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationOutlineViewController.xib @@ -147,7 +147,7 @@ - - - + - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationOutlineViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationOutlineViewController.xib index 433dae4..86a5939 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationOutlineViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIPreferencePanePresentationOutlineViewController.xib @@ -54,7 +54,7 @@ - + - + - @@ -166,9 +155,9 @@ - + - + @@ -185,6 +174,17 @@ + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/Predicates.strings b/app_unexpectedly/app_unexpectedly/he.lproj/Predicates.strings index 4975412..d4ead00 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/Predicates.strings +++ b/app_unexpectedly/app_unexpectedly/he.lproj/Predicates.strings @@ -9,23 +9,23 @@ "%[processName]@ %[ends with]@ %@" = "%1$[השם תהליך]@ %2$[מסתיים ב-]@ %3$@"; "%[processName]@ %[contains]@ %@" = "%1$[השם תהליך]@ %2$[מכיל]@ %3$@"; -"%[header.bundleIdentifier]@ %[is]@ %@" = "%1$[Identifier]@ %2$[is]@ %3$@"; -"%[header.bundleIdentifier]@ %[is not]@ %@" = "%1$[Identifier]@ %2$[is not]@ %3$@"; -"%[header.bundleIdentifier]@ %[begins with]@ %@" = "%1$[Identifier]@ %2$[begins with]@ %3$@"; -"%[header.bundleIdentifier]@ %[ends with]@ %@" = "%1$[Identifier]@ %2$[ends with]@ %3$@"; -"%[header.bundleIdentifier]@ %[contains]@ %@" = "%1$[Identifier]@ %2$[contains]@ %3$@"; +"%[header.bundleIdentifier]@ %[is]@ %@" = "%1$[המזהה]@ %2$[הוא]@ %3$@"; +"%[header.bundleIdentifier]@ %[is not]@ %@" = "%1$[המזהה]@ %2$[אינו שווה ל-]@ %3$@"; +"%[header.bundleIdentifier]@ %[begins with]@ %@" = "%1$[המזהה]@ %2$[מתחיל ב-]@ %3$@"; +"%[header.bundleIdentifier]@ %[ends with]@ %@" = "%1$[המזהה]@ %2$[מסתיים ב-]@ %3$@"; +"%[header.bundleIdentifier]@ %[contains]@ %@" = "%1$[המזהה]@ %2$[מכיל]@ %3$@"; -"%[header.executablePath]@ %[is]@ %@" = "%1$[Executable Path]@ %2$[is]@ %3$@"; -"%[header.executablePath]@ %[is not]@ %@" = "%1$[Executable Path]@ %2$[is not]@ %3$@"; -"%[header.executablePath]@ %[begins with]@ %@" = "%1$[Executable Path]@ %2$[begins with]@ %3$@"; -"%[header.executablePath]@ %[ends with]@ %@" = "%1$[Executable Path]@ %2$[ends with]@ %3$@"; -"%[header.executablePath]@ %[contains]@ %@" = "%1$[Executable Path]@ %2$[contains]@ %3$@"; +"%[header.executablePath]@ %[is]@ %@" = "%1$[הנתיב של קובץ הרצה]@ %2$[הוא]@ %3$@"; +"%[header.executablePath]@ %[is not]@ %@" = "%1$[הנתיב של קובץ הרצה]@ %2$[אינו שווה ל-]@ %3$@"; +"%[header.executablePath]@ %[begins with]@ %@" = "%1$[הנתיב של קובץ הרצה]@ %2$[מתחיל ב-]@ %3$@"; +"%[header.executablePath]@ %[ends with]@ %@" = "%1$[הנתיב של קובץ הרצה]@ %2$[מסתיים ב-]@ %3$@"; +"%[header.executablePath]@ %[contains]@ %@" = "%1$[הנתיב של קובץ הרצה]@ %2$[מכיל]@ %3$@"; -"%[header.executableVersion]@ %[is]@ %@" = "%1$[Executable Version]@ %2$[is]@ %3$@"; -"%[header.executableVersion]@ %[is not]@ %@" = "%1$[Executable Version]@ %2$[is not]@ %3$@"; -"%[header.executableVersion]@ %[begins with]@ %@" = "%1$[Executable Version]@ %2$[begins with]@ %3$@"; -"%[header.executableVersion]@ %[ends with]@ %@" = "%1$[Executable Version]@ %2$[ends with]@ %3$@"; -"%[header.executableVersion]@ %[contains]@ %@" = "%1$[Executable Version]@ %2$[contains]@ %3$@"; +"%[header.executableVersion]@ %[is]@ %@" = "%1$[גירסה של קובץ הרצה]@ %2$[הוא]@ %3$@"; +"%[header.executableVersion]@ %[is not]@ %@" = "%1$[גירסה של קובץ הרצה]@ %2$[אינו שווה ל-]@ %3$@"; +"%[header.executableVersion]@ %[begins with]@ %@" = "%1$[גירסה של קובץ הרצה]@ %2$[מתחיל ב-]@ %3$@"; +"%[header.executableVersion]@ %[ends with]@ %@" = "%1$[גירסה של קובץ הרצה]@ %2$[מסתיים ב-]@ %3$@"; +"%[header.executableVersion]@ %[contains]@ %@" = "%1$[גירסה של קובץ הרצה]@ %2$[מכיל]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[is]@ %@" = "%1$[Crashed Thread Name]@ %2$[is]@ %3$@"; "%[exceptionInformation.crashedThreadName]@ %[is not]@ %@" = "%1$[Crashed Thread Name]@ %2$[is not]@ %3$@"; @@ -65,11 +65,11 @@ "%[exceptionSignal]@ is %[SIGTRAP]@" = "%1$[Exception Signal]@ is %2$[SIGTRAP]@"; "%[exceptionSignal]@ is %[Code Signature Invalid]@" = "%1$[Exception Signal]@ is %2$[Code Signature Invalid]@"; -"%[crashLogFileName]@ %[is]@ %@" = "%1$[Report File Name]@ %2$[is]@ %3$@"; -"%[crashLogFileName]@ %[is not]@ %@" = "%1$[Report File Name]@ %2$[is not]@ %3$@"; -"%[crashLogFileName]@ %[begins with]@ %@" = "%1$[Report File Name]@ %2$[begins with]@ %3$@"; -"%[crashLogFileName]@ %[ends with]@ %@" = "%1$[Report File Name]@ %2$[ends with]@ %3$@"; -"%[crashLogFileName]@ %[contains]@ %@" = "%1$[Report File Name]@ %2$[contains]@ %3$@"; +"%[crashLogFileName]@ %[is]@ %@" = "%1$[שם קובץ הדוח]@ %2$[הוא]@ %3$@"; +"%[crashLogFileName]@ %[is not]@ %@" = "%1$[שם קובץ הדוח]@ %2$[אינו שווה ל-]@ %3$@"; +"%[crashLogFileName]@ %[begins with]@ %@" = "%1$[שם קובץ הדוח]@ %2$[מתחיל ב-]@ %3$@"; +"%[crashLogFileName]@ %[ends with]@ %@" = "%1$[שם קובץ הדוח]@ %2$[מסתיים ב-]@ %3$@"; +"%[crashLogFileName]@ %[contains]@ %@" = "%1$[שם קובץ הדוח]@ %2$[מכיל]@ %3$@"; "%[reportSourceTypeNumber]@ is %[0]@" = "‏%1$[מקור]@ הוא %2$[דוחות המשתמש]@"; "%[reportSourceTypeNumber]@ is %[1]@" = "%1$[מקור]@ הוא %2$[דוחות המשתמש]@"; From b4248b99019acdd955f3d0ff82199b2df308030d Mon Sep 17 00:00:00 2001 From: packagesdev Date: Thu, 7 Mar 2024 23:06:47 +0100 Subject: [PATCH 120/214] Update copyright and fix architecture display issue Update copyright and fix architecture display issue --- app_unexpectedly/Foundation + Extensions/NSString+CPU.m | 8 +++++--- .../app_unexpectedly/CUICrashLogThreadState+UI.m | 2 +- app_unexpectedly/app_unexpectedly/Info.plist | 2 +- .../en.lproj/CUIAboutBoxWindowController.xib | 2 +- .../es.lproj/CUIAboutBoxWindowController.xib | 2 +- .../fr.lproj/CUIAboutBoxWindowController.xib | 2 +- .../ja.lproj/CUIAboutBoxWindowController.xib | 2 +- 7 files changed, 11 insertions(+), 9 deletions(-) diff --git a/app_unexpectedly/Foundation + Extensions/NSString+CPU.m b/app_unexpectedly/Foundation + Extensions/NSString+CPU.m index 0e7b9a6..69b3b5a 100644 --- a/app_unexpectedly/Foundation + Extensions/NSString+CPU.m +++ b/app_unexpectedly/Foundation + Extensions/NSString+CPU.m @@ -1,5 +1,5 @@ /* - Copyright (c) 2021, Stephane Sudre + Copyright (c) 2021-2024, Stephane Sudre All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -23,8 +23,10 @@ - (cpu_type_t)CUI_CPUType dispatch_once(&onceToken, ^{ sCPUFamiliesRegistry=@{ - @"X86-64":@(CPU_TYPE_X86), - @"arm64":@(CPU_ARCH_ABI64) + @"X86-64":@(CPU_TYPE_X86_64), + @"x86_64":@(CPU_TYPE_X86_64), + @"ARM-64":@(CPU_TYPE_ARM64), + @"arm64":@(CPU_TYPE_ARM64), }; }); diff --git a/app_unexpectedly/app_unexpectedly/CUICrashLogThreadState+UI.m b/app_unexpectedly/app_unexpectedly/CUICrashLogThreadState+UI.m index 8eb76bb..ebf5e2d 100644 --- a/app_unexpectedly/app_unexpectedly/CUICrashLogThreadState+UI.m +++ b/app_unexpectedly/app_unexpectedly/CUICrashLogThreadState+UI.m @@ -33,7 +33,7 @@ - (NSString *)displayedCPUType case CPU_TYPE_ARM64: - return @"ARM64"; + return @"ARM-64"; case CPU_TYPE_POWERPC: diff --git a/app_unexpectedly/app_unexpectedly/Info.plist b/app_unexpectedly/app_unexpectedly/Info.plist index 3c41cd3..8bb02d0 100644 --- a/app_unexpectedly/app_unexpectedly/Info.plist +++ b/app_unexpectedly/app_unexpectedly/Info.plist @@ -165,7 +165,7 @@ LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) NSHumanReadableCopyright - Copyright © 2020-2023 Stéphane Sudre. All rights reserved. + Copyright © 2020-2024 Stéphane Sudre. All rights reserved. NSMainNibFile MainMenu NSPrincipalClass diff --git a/app_unexpectedly/app_unexpectedly/en.lproj/CUIAboutBoxWindowController.xib b/app_unexpectedly/app_unexpectedly/en.lproj/CUIAboutBoxWindowController.xib index bce93df..38a3cee 100644 --- a/app_unexpectedly/app_unexpectedly/en.lproj/CUIAboutBoxWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/en.lproj/CUIAboutBoxWindowController.xib @@ -53,7 +53,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/es.lproj/CUIAboutBoxWindowController.xib b/app_unexpectedly/app_unexpectedly/es.lproj/CUIAboutBoxWindowController.xib index a7f772c..3292ace 100644 --- a/app_unexpectedly/app_unexpectedly/es.lproj/CUIAboutBoxWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/es.lproj/CUIAboutBoxWindowController.xib @@ -53,7 +53,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/fr.lproj/CUIAboutBoxWindowController.xib b/app_unexpectedly/app_unexpectedly/fr.lproj/CUIAboutBoxWindowController.xib index 0780f6f..de4a61c 100644 --- a/app_unexpectedly/app_unexpectedly/fr.lproj/CUIAboutBoxWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/fr.lproj/CUIAboutBoxWindowController.xib @@ -53,7 +53,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIAboutBoxWindowController.xib b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIAboutBoxWindowController.xib index 618a9c4..d091b31 100644 --- a/app_unexpectedly/app_unexpectedly/ja.lproj/CUIAboutBoxWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/ja.lproj/CUIAboutBoxWindowController.xib @@ -53,7 +53,7 @@ - + From 24c6292d02f7064b37e85badcf74a9d457660f0e Mon Sep 17 00:00:00 2001 From: packagesdev Date: Thu, 7 Mar 2024 23:09:02 +0100 Subject: [PATCH 121/214] Localization progress Localization progress --- .../he.lproj/CUIAboutBoxWindowController.xib | 2 +- .../CUIExportAccessoryViewController.xib | 20 +++++++++---------- .../he.lproj/CUIMainWindowController.xib | 4 ++-- .../app_unexpectedly/he.lproj/MainMenu.xib | 2 +- .../he.lproj/Predicates.strings | 10 +++++----- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIAboutBoxWindowController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIAboutBoxWindowController.xib index 17548e3..a1bc5c5 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIAboutBoxWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIAboutBoxWindowController.xib @@ -53,7 +53,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIExportAccessoryViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIExportAccessoryViewController.xib index 55f0540..5c49c58 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIExportAccessoryViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIExportAccessoryViewController.xib @@ -19,11 +19,11 @@ - + - + @@ -42,7 +42,7 @@ - + @@ -51,7 +51,7 @@ - + @@ -82,7 +82,7 @@ - + - + - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUIMainWindowController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUIMainWindowController.xib index c31f37c..7194c5e 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUIMainWindowController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUIMainWindowController.xib @@ -28,11 +28,11 @@ - + - + - + - + @@ -83,27 +83,31 @@ + - - + + - - + + - + - - - - - - - - - + - + @@ -211,7 +215,7 @@ - + @@ -225,7 +229,7 @@ - + diff --git a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationTextViewController.xib b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationTextViewController.xib index fb88994..7c4d2d0 100644 --- a/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationTextViewController.xib +++ b/app_unexpectedly/app_unexpectedly/he.lproj/CUICrashLogPresentationTextViewController.xib @@ -1,8 +1,8 @@ - + - + @@ -23,12 +23,12 @@ - + - + - + @@ -70,7 +70,7 @@ - - - - - + @@ -132,7 +132,11 @@ -