ios – XCode崩溃报告(已经符号化)缺少行号
发布时间:2020-12-14 19:05:43 所属栏目:百科 来源:网络整理
导读:我有一个崩溃报告(它已经象征着至少我希望如此,因为我从XCode Organizer获取此日志) Incident Identifier: F4324555-0916-4E32-82EF-3272917367BBBeta Identifier: 80811904-A512-48A1-9593-D386703A62F0Hardware Model: iPhone7,2Process: SelfieSuperStarz
我有一个崩溃报告(它已经象征着至少我希望如此,因为我从XCode Organizer获取此日志)
Incident Identifier: F4324555-0916-4E32-82EF-3272917367BB Beta Identifier: 80811904-A512-48A1-9593-D386703A62F0 Hardware Model: iPhone7,2 Process: SelfieSuperStarz [596] Path: /private/var/containers/Bundle/Application/BFA0D82B-274B-400B-8F84-52A1D7369C51/SelfieSuperStarz.app/SelfieSuperStarz Identifier: com.PuckerUp.PuckerUp Version: 21 (1.31) Beta: YES Code Type: ARM-64 (Native) Role: Foreground Parent Process: launchd [1] Coalition: com.PuckerUp.PuckerUp [434] Date/Time: 2017-07-29 20:06:11.7394 -0400 Launch Time: 2017-07-29 19:34:39.7433 -0400 OS Version: iPhone OS 10.3.2 (14F89) Report Version: 104 Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000,0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Triggered by Thread: 0 Last Exception Backtrace: 0 CoreFoundation 0x18bebafe0 __exceptionPreprocess + 124 (NSException.m:165) 1 libobjc.A.dylib 0x18a91c538 objc_exception_throw + 56 (objc-exception.mm:521) 2 CoreFoundation 0x18be26eb4 -[__NSArray0 objectAtIndex:] + 108 (CFArray.c:69) 3 SelfieSuperStarz 0x10007b708 specialized _ArrayBuffer._getElementSlowPath(Int) -> AnyObject + 116 4 SelfieSuperStarz 0x10007ea40 specialized Merger.merge(completion : () -> (),assets : [Asset]) -> () + 1444 (Merger.swift:0) 5 SelfieSuperStarz 0x100071f3c specialized AssetView.finish(UIButton) -> () + 520 (Merger.swift:0) 6 SelfieSuperStarz 0x1000712d0 @objc AssetView.finish(UIButton) -> () + 40 (AssetView.swift:0) 7 UIKit 0x192021010 -[UIApplication sendAction:to:from:forEvent:] + 96 (UIApplication.m:4580) 8 UIKit 0x192020f90 -[UIControl sendAction:to:forEvent:] + 80 (UIControl.m:609) 9 UIKit 0x19200b504 -[UIControl _sendActionsForEvents:withEvent:] + 440 (UIControl.m:694) 10 UIKit 0x192020874 -[UIControl touchesEnded:withEvent:] + 576 (UIControl.m:446) 11 UIKit 0x192020390 -[UIWindow _sendTouchesForEvent:] + 2480 (UIWindow.m:2122) 12 UIKit 0x19201b728 -[UIWindow sendEvent:] + 3192 (UIWindow.m:2292) 13 UIKit 0x191fec33c -[UIApplication sendEvent:] + 340 (UIApplication.m:10778) 14 UIKit 0x1927e6014 __dispatchPreprocessedEventFromEventQueue + 2400 (UIEventDispatcher.m:1448) 15 UIKit 0x1927e0770 __handleEventQueue + 4268 (UIEventDispatcher.m:1671) 16 UIKit 0x1927e0b9c __handleHIDEventFetcherDrain + 148 (UIEventDispatcher.m:1706) 17 CoreFoundation 0x18be6942c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24 (CFRunLoop.c:1943) 18 CoreFoundation 0x18be68d9c __CFRunLoopDoSources0 + 540 (CFRunLoop.c:1989) 19 CoreFoundation 0x18be669a8 __CFRunLoopRun + 744 (CFRunLoop.c:2821) 20 CoreFoundation 0x18bd96da4 CFRunLoopRunSpecific + 424 (CFRunLoop.c:3113) 21 GraphicsServices 0x18d800074 GSEventRunModal + 100 (GSEvent.c:2245) 22 UIKit 0x192051058 UIApplicationMain + 208 (UIApplication.m:4089) 23 SelfieSuperStarz 0x10002e990 main + 56 (AppDelegate.swift:16) 24 libdyld.dylib 0x18ada559c start + 4 正如你所看到的那样,它在第0行的Class Merger中说.这是不可能的,你可以假设.我不知道如何解释什么是专门的手段或为什么@objc在那里. 3 SelfieSuperStarz 0x10007b708 specialized _ArrayBuffer._getElementSlowPath(Int) -> AnyObject + 116 4 SelfieSuperStarz 0x10007ea40 specialized Merger.merge(completion : () -> (),assets : [Asset]) -> () + 1444 (Merger.swift:0) 5 SelfieSuperStarz 0x100071f3c specialized AssetView.finish(UIButton) -> () + 520 (Merger.swift:0) 6 SelfieSuperStarz 0x1000712d0 @objc AssetView.finish(UIButton) -> () + 40 (AssetView.swift:0) 只是不确定错误发生在哪里,因为该行显示为Merger:0并且我不确定那些标题(special / objc)是什么意思,如果他们告诉我任何事情. 这是我在Merger中的合并功能.我使用各种循环和计算不透明度并确定事情,但我在位置检查nil. func merge(completion:@escaping () -> Void,assets:[Asset]) { self.setupAI() let assets = assets.sorted(by: { $0.layer.zPosition < $1.layer.zPosition }) if let firstAsset = controller.firstAsset { let mixComposition = AVMutableComposition() let firstTrack = mixComposition.addMutableTrack(withMediaType: AVMediaTypeVideo,preferredTrackID: Int32(kCMPersistentTrackID_Invalid)) do { try firstTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero,self.controller.realDuration),of: firstAsset.tracks(withMediaType: AVMediaTypeVideo)[0],at: kCMTimeZero) } catch _ { print("Failed to load first track") } let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask,true)[0] var myTracks:[AVMutableCompositionTrack] = [] var ranges:[ClosedRange<CMTime>] = [] for asset in assets { let secondTrack = mixComposition.addMutableTrack(withMediaType: AVMediaTypeVideo,preferredTrackID: Int32(kCMPersistentTrackID_Invalid)) secondTrack.preferredTransform = asset.asset.preferredTransform do { try secondTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero,asset.endTime-asset.beginTime),of: asset.asset.tracks(withMediaType: AVMediaTypeVideo)[0],at: CMTime(seconds: CMTimeGetSeconds(asset.beginTime),preferredTimescale: 600000)) } catch _ { print("Failed to load second track") } if(ranges.count == 0) { ranges.append(asset.beginTime...asset.endTime) } else { var none = true for range in ranges { let start = range.contains(asset.beginTime) let end = range.contains(asset.endTime) var connection = false var nothing = false //This range is completely encompassed (begin and end inside) if(start && end) { //Don't add to the rnge none = false nothing = true } //Begin is in range (right side) else if(start && !end) { connection = true none = false } //End is in range (left side) else if(!start && end) { connection = true none = false } var connected = false //It connects 2 different timess if(connection) { for range2 in ranges { if(range != range2) { if(start && range2.contains(asset.endTime)) { let index = ranges.index(of: range) if(index != nil) { ranges.remove(at: index!) ranges.append(range.lowerBound...range2.upperBound) connected = true break } } else if(end && range2.contains(asset.beginTime)) { let index = ranges.index(of: range) if(index != nil) { ranges.remove(at: index!) ranges.append(range.lowerBound...range2.upperBound) connected = true break } } } } } if(!connected && !none && !nothing) { if(start) { let index = ranges.index(of: range) if(index != nil) { ranges.remove(at: index!) ranges.append(range.lowerBound...asset.endTime) } } else if(end) { let index = ranges.index(of: range) if(index != nil) { ranges.remove(at: index!) ranges.append(asset.beginTime...asset.endTime) } } } } if(none) { ranges.append(asset.beginTime...asset.endTime) } } myTracks.append(secondTrack) } for range in ranges { print(CMTimeGetSeconds(range.lowerBound),CMTimeGetSeconds(range.upperBound)) } for assets in self.controller.assets { print(CMTimeGetSeconds(assets.beginTime),CMTimeGetSeconds(assets.endTime)) } if let loadedAudioAsset = self.controller.audioAsset { let audioTrack = mixComposition.addMutableTrack(withMediaType: AVMediaTypeAudio,preferredTrackID: 0) do { try audioTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero,of: loadedAudioAsset.tracks(withMediaType: AVMediaTypeAudio)[0],at: kCMTimeZero) } catch _ { print("Failed to load Audio track") } } let mainInstruction = AVMutableVideoCompositionInstruction() mainInstruction.timeRange = CMTimeRangeMake(kCMTimeZero,self.controller.realDuration) // 2.2 let firstInstruction = self.videoCompositionInstructionForTrack(firstTrack,firstAsset) var instructions:[AVMutableVideoCompositionLayerInstruction] = [] var counter:Int = 0 for tracks in myTracks { let secondInstruction = self.videoCompositionInstructionForTrack(tracks,assets[counter].asset,type:true) let index = myTracks.index(of: tracks) //This should never be nil,but if it is,it might cause opacity's to go out of whack for that specific track. Only reason I can think of why I am crashing in this method. if(index != nil) { if(index! < assets.count-1) { for i in (counter+1...assets.count-1) { if(assets[counter].endTime > assets[i].endTime) { secondInstruction.setOpacity(1.0,at: assets[i].endTime) secondInstruction.setOpacity(0.0,at: assets[counter].endTime) print("Bigger") break } } } if(index! > 0) { for i in (0...counter).reversed() { if(assets[counter].endTime < assets[i].endTime) { secondInstruction.setOpacity(0.0,at: assets[counter].endTime) print("Smaller") break } } } if(counter < myTracks.count-1) { if(assets[counter].layer.zPosition <= assets[counter+1].layer.zPosition) { secondInstruction.setOpacity(0.0,at: assets[counter+1].beginTime) } else { secondInstruction.setOpacity(0.0,at: assets[counter].endTime) } } instructions.append(secondInstruction) counter += 1 } } for range in ranges { firstInstruction.setOpacity(0.0,at: range.lowerBound) firstInstruction.setOpacity(1.0,at: range.upperBound) } // 2.3 mainInstruction.layerInstructions = [firstInstruction] + instructions let imageLayer = CALayer() let image = UIImage(named: "Watermark") imageLayer.contents = image!.cgImage let ratio = (firstAsset.tracks(withMediaType: AVMediaTypeVideo)[0].naturalSize.width/image!.size.width)/2 let rect = CGRect(x: image!.size.width*ratio,y: 0,width: image!.size.width*ratio,height: image!.size.height*ratio) imageLayer.frame = rect imageLayer.backgroundColor = UIColor.clear.cgColor imageLayer.opacity = 0.75 let videoLayer = CALayer() videoLayer.frame = CGRect(x: 0,width: firstAsset.tracks(withMediaType: AVMediaTypeVideo)[0].naturalSize.width,height: firstAsset.tracks(withMediaType: AVMediaTypeVideo)[0].naturalSize.height) let parentlayer = CALayer() parentlayer.frame = CGRect(x: 0,height: image!.size.height*ratio) parentlayer.addSublayer(videoLayer) parentlayer.addSublayer(imageLayer) let mainComposition = AVMutableVideoComposition() mainComposition.instructions = [mainInstruction] mainComposition.frameDuration = CMTimeMake(1,30) mainComposition.renderSize = self.controller.firstAsset!.tracks(withMediaType: AVMediaTypeVideo)[0].naturalSize mainComposition.animationTool = AVVideoCompositionCoreAnimationTool(postProcessingAsVideoLayer: videoLayer,in: parentlayer) 解决方法
很明显,方法“Merger.merge”访问一个不存在的元素.调试器将显示它的位置.
我猜有些线程正在修改你背后的一些数组,以便在某些时候有效的索引变得无效.当你稍后修改“范围”时,“范围内的范围2”就是要求麻烦. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |