iOS 14 小部件扩展在获取时间线后崩溃

Posted

技术标签:

【中文标题】iOS 14 小部件扩展在获取时间线后崩溃【英文标题】:iOS 14 widget extension crashes after fetching timeline 【发布时间】:2020-09-14 10:09:52 【问题描述】:

我正在实现一个小部件扩展,它在调用完成句柄时随机崩溃。抛出异常 "-[NSConcreteFileHandle fileDescriptor]: Invalid argument"

这是我的实现:

func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) 

    let countArticles = self.countArticles(dependingOn: context.family)

    self.backendService.fetchArticles(countArticles: countArticles)  [weak self] (result) in

        let secondsUntilNextRefresh = TimeInterval(10 * 60)
        let dateToInvokeNextRefresh = Date().addingTimeInterval(secondsUntilNextRefresh)
        let timelineEntries = TimelineMapper().mapArticlesResultToTimelineEntry(result)
        let timeline = Timeline(entries: timelineEntries,
                                policy: .after(dateToInvokeNextRefresh))

        DispatchQueue.main.async 

            completion(timeline)
        
    

和堆栈跟踪

#0  0x00007fff20177f48 in objc_exception_throw ()
#1  0x00007fff2078b731 in _NSFileHandleRaiseOperationExceptionWhileReading ()
#2  0x00007fff2078adb1 in _NSFileHandleRaiseOperationException ()
#3  0x00007fff2078ada6 in -[NSConcreteFileHandle fileDescriptor] ()
#4  0x00007fff55c32ad4 in FileArchiveWriter.appendBytes(_:size:) ()
#5  0x00007fff55c32d06 in FileArchiveWriter.append<A>(_:) ()
#6  0x00007fff55c3222f in ArchiveWriter.addAttachment(data:) ()
#7  0x00007fff55c34086 in Encoder.encodeAttachedValue<A>(key:data:) ()
#8  0x00007fff55ff0a96 in CodableCGImage.encode(to:) ()
#9  0x00007fff55ff0eed in protocol witness for Encodable.encode(to:) in conformance CodableCGImage ()
#10 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#11 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#12 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#13 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#14 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#15 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#16 0x00007fff55a81c02 in GraphicsImage.encode(to:) ()
#17 0x00007fff55a826e9 in protocol witness for Encodable.encode(to:) in conformance GraphicsImage ()
#18 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#19 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#20 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#21 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#22 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#23 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#24 0x00007fff560b0669 in DisplayList.Content.Value.encode(to:) ()
#25 0x00007fff56005d6d in protocol witness for Encodable.encode(to:) in conformance DisplayList.Content.Value ()
#26 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#27 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#28 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#29 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#30 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#31 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#32 0x00007fff56006159 in DisplayList.Content.encode(to:) ()
#33 0x00007fff56006341 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Content ()
#34 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#35 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#36 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#37 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#38 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#39 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#40 0x00007fff560af5d8 in DisplayList.Item.Value.encode(to:) ()
#41 0x00007fff56005ce9 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item.Value ()
#42 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#43 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#44 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#45 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#46 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#47 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#48 0x00007fff560afaef in DisplayList.Item.encode(to:) ()
#49 0x00007fff56005d39 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item ()
#50 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#51 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#52 0x00007fff536a39b7 in _PlistUnkeyedEncodingContainer.encode<A>(_:) ()
#53 0x00007fff536a4b49 in protocol witness for UnkeyedEncodingContainer.encode<A>(_:) in conformance _PlistUnkeyedEncodingContainer ()
#54 0x00007fff2f0ecf88 in Array<A>.encode(to:) ()
#55 0x00007fff2f0ed0e8 in protocol witness for Encodable.encode(to:) in conformance <A> [A] ()
#56 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#57 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#58 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#59 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#60 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#61 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#62 0x00007fff560af15e in DisplayList.encode(to:) ()
#63 0x00007fff56005cc1 in protocol witness for Encodable.encode(to:) in conformance DisplayList ()
#64 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#65 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#66 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#67 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#68 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#69 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#70 0x00007fff560af5d8 in DisplayList.Item.Value.encode(to:) ()
#71 0x00007fff56005ce9 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item.Value ()
#72 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#73 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#74 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#75 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#76 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#77 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#78 0x00007fff560afaef in DisplayList.Item.encode(to:) ()
#79 0x00007fff56005d39 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item ()
#80 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#81 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#82 0x00007fff536a39b7 in _PlistUnkeyedEncodingContainer.encode<A>(_:) ()
#83 0x00007fff536a4b49 in protocol witness for UnkeyedEncodingContainer.encode<A>(_:) in conformance _PlistUnkeyedEncodingContainer ()
#84 0x00007fff2f0ecf88 in Array<A>.encode(to:) ()
#85 0x00007fff2f0ed0e8 in protocol witness for Encodable.encode(to:) in conformance <A> [A] ()
#86 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#87 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#88 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#89 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#90 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#91 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#92 0x00007fff560af15e in DisplayList.encode(to:) ()
#93 0x00007fff56005cc1 in protocol witness for Encodable.encode(to:) in conformance DisplayList ()
#94 0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#95 0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#96 0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#97 0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#98 0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#99 0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#100    0x00007fff560af5d8 in DisplayList.Item.Value.encode(to:) ()
#101    0x00007fff56005ce9 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item.Value ()
#102    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#103    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#104    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#105    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#106    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#107    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#108    0x00007fff560afaef in DisplayList.Item.encode(to:) ()
#109    0x00007fff56005d39 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item ()
#110    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#111    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#112    0x00007fff536a39b7 in _PlistUnkeyedEncodingContainer.encode<A>(_:) ()
#113    0x00007fff536a4b49 in protocol witness for UnkeyedEncodingContainer.encode<A>(_:) in conformance _PlistUnkeyedEncodingContainer ()
#114    0x00007fff2f0ecf88 in Array<A>.encode(to:) ()
#115    0x00007fff2f0ed0e8 in protocol witness for Encodable.encode(to:) in conformance <A> [A] ()
#116    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#117    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#118    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#119    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#120    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#121    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#122    0x00007fff560af15e in DisplayList.encode(to:) ()
#123    0x00007fff56005cc1 in protocol witness for Encodable.encode(to:) in conformance DisplayList ()
#124    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#125    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#126    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#127    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#128    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#129    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#130    0x00007fff560af5d8 in DisplayList.Item.Value.encode(to:) ()
#131    0x00007fff56005ce9 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item.Value ()
#132    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#133    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#134    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#135    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#136    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#137    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#138    0x00007fff560afaef in DisplayList.Item.encode(to:) ()
#139    0x00007fff56005d39 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item ()
#140    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#141    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#142    0x00007fff536a39b7 in _PlistUnkeyedEncodingContainer.encode<A>(_:) ()
#143    0x00007fff536a4b49 in protocol witness for UnkeyedEncodingContainer.encode<A>(_:) in conformance _PlistUnkeyedEncodingContainer ()
#144    0x00007fff2f0ecf88 in Array<A>.encode(to:) ()
#145    0x00007fff2f0ed0e8 in protocol witness for Encodable.encode(to:) in conformance <A> [A] ()
#146    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#147    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#148    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#149    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#150    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#151    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#152    0x00007fff560af15e in DisplayList.encode(to:) ()
#153    0x00007fff56005cc1 in protocol witness for Encodable.encode(to:) in conformance DisplayList ()
#154    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#155    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#156    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#157    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#158    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#159    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#160    0x00007fff560af5d8 in DisplayList.Item.Value.encode(to:) ()
#161    0x00007fff56005ce9 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item.Value ()
#162    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#163    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#164    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#165    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#166    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#167    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#168    0x00007fff560afaef in DisplayList.Item.encode(to:) ()
#169    0x00007fff56005d39 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item ()
#170    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#171    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#172    0x00007fff536a39b7 in _PlistUnkeyedEncodingContainer.encode<A>(_:) ()
#173    0x00007fff536a4b49 in protocol witness for UnkeyedEncodingContainer.encode<A>(_:) in conformance _PlistUnkeyedEncodingContainer ()
#174    0x00007fff2f0ecf88 in Array<A>.encode(to:) ()
#175    0x00007fff2f0ed0e8 in protocol witness for Encodable.encode(to:) in conformance <A> [A] ()
#176    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#177    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#178    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#179    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#180    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#181    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#182    0x00007fff560af15e in DisplayList.encode(to:) ()
#183    0x00007fff56005cc1 in protocol witness for Encodable.encode(to:) in conformance DisplayList ()
#184    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#185    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#186    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#187    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#188    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#189    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#190    0x00007fff560af5d8 in DisplayList.Item.Value.encode(to:) ()
#191    0x00007fff56005ce9 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item.Value ()
#192    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#193    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#194    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#195    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#196    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#197    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#198    0x00007fff560afaef in DisplayList.Item.encode(to:) ()
#199    0x00007fff56005d39 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item ()
#200    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#201    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#202    0x00007fff536a39b7 in _PlistUnkeyedEncodingContainer.encode<A>(_:) ()
#203    0x00007fff536a4b49 in protocol witness for UnkeyedEncodingContainer.encode<A>(_:) in conformance _PlistUnkeyedEncodingContainer ()
#204    0x00007fff2f0ecf88 in Array<A>.encode(to:) ()
#205    0x00007fff2f0ed0e8 in protocol witness for Encodable.encode(to:) in conformance <A> [A] ()
#206    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#207    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#208    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#209    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#210    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#211    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#212    0x00007fff560af15e in DisplayList.encode(to:) ()
#213    0x00007fff56005cc1 in protocol witness for Encodable.encode(to:) in conformance DisplayList ()
#214    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#215    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#216    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#217    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#218    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#219    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#220    0x00007fff560af5d8 in DisplayList.Item.Value.encode(to:) ()
#221    0x00007fff56005ce9 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item.Value ()
#222    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#223    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#224    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#225    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#226    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#227    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#228    0x00007fff560afaef in DisplayList.Item.encode(to:) ()
#229    0x00007fff56005d39 in protocol witness for Encodable.encode(to:) in conformance DisplayList.Item ()
#230    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#231    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#232    0x00007fff536a39b7 in _PlistUnkeyedEncodingContainer.encode<A>(_:) ()
#233    0x00007fff536a4b49 in protocol witness for UnkeyedEncodingContainer.encode<A>(_:) in conformance _PlistUnkeyedEncodingContainer ()
#234    0x00007fff2f0ecf88 in Array<A>.encode(to:) ()
#235    0x00007fff2f0ed0e8 in protocol witness for Encodable.encode(to:) in conformance <A> [A] ()
#236    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#237    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#238    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#239    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#240    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#241    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#242    0x00007fff560af15e in DisplayList.encode(to:) ()
#243    0x00007fff56005cc1 in protocol witness for Encodable.encode(to:) in conformance DisplayList ()
#244    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#245    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#246    0x00007fff536a22c9 in _PlistKeyedEncodingContainer.encode<A>(_:forKey:) ()
#247    0x00007fff536a33e5 in protocol witness for KeyedEncodingContainerProtocol.encode<A>(_:forKey:) in conformance _PlistKeyedEncodingContainer<A> ()
#248    0x00007fff2f0ddae7 in _KeyedEncodingContainerBox.encode<A, B>(_:forKey:) ()
#249    0x00007fff2f0d4a74 in KeyedEncodingContainer.encode<A>(_:forKey:) ()
#250    0x00007fff55884a07 in _ArchivedViewStates.State.encode(to:) ()
#251    0x00007fff55884c0d in protocol witness for Encodable.encode(to:) in conformance _ArchivedViewStates.State ()
#252    0x00007fff2f381907 in dispatch thunk of Encodable.encode(to:) ()
#253    0x00007fff536a0f98 in __PlistEncoder.box_<A>(_:) ()
#254    0x00007fff536a0661 in PropertyListEncoder.encode<A>(_:) ()
#255    0x00007fff536b7a2e in dispatch thunk of PropertyListEncoder.encode<A>(_:) ()
#256    0x00007fff55bcbd3b in closure #1 in _ArchivedViewHost.archiveStates(to:count:body:) ()
#257    0x00007fff55bcb694 in _ArchivedViewHost.archiveStates(to:count:body:) ()
#258    0x00007fff55bcbf2d in _ArchivedViewHost.archiveStates(to:count:body:) ()
#259    0x00007fff56d053f0 in ___lldb_unnamed_symbol1790$$WidgetKit ()
#260    0x00007fff56d29189 in ___lldb_unnamed_symbol2908$$WidgetKit ()
#261    0x00007fff56d31189 in ___lldb_unnamed_symbol2990$$WidgetKit ()
#262    0x00007fff56d311c1 in ___lldb_unnamed_symbol2992$$WidgetKit ()
#263    0x00007fff56cee869 in ___lldb_unnamed_symbol918$$WidgetKit ()
#264    0x00007fff56cee148 in ___lldb_unnamed_symbol915$$WidgetKit ()
#265    0x00007fff56cee669 in ___lldb_unnamed_symbol917$$WidgetKit ()
#266    0x000000010eec48ab in closure #2 in closure #1 in ArticleTimelineProvider.getTimeline(in:completion:) at /Users/raimar/Xcode/faz-.net-ios/FAZ_NET/WidgetExtension/Models/ArticleTimelineProvider.swift:76
#267    0x000000010eec48f0 in thunk for @escaping @callee_guaranteed () -> () ()
#268    0x00007fff2010535b in _dispatch_call_block_and_release ()
#269    0x00007fff20106534 in _dispatch_client_callout ()
#270    0x00007fff20113011 in _dispatch_main_queue_callback_4CF ()
#271    0x00007fff203a8276 in __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ ()
#272    0x00007fff203a2b06 in __CFRunLoopRun ()
#273    0x00007fff203a1b9e in CFRunLoopRunSpecific ()
#274    0x00007fff20846e61 in -[NSRunLoop(NSRunLoop) runMode:beforeDate:] ()
#275    0x00007fff20847075 in -[NSRunLoop(NSRunLoop) run] ()
#276    0x00007fff2005d506 in _xpc_objc_main ()
#277    0x00007fff2005f4aa in xpc_main ()
#278    0x00007fff2094ecc6 in -[NSXPCListener resume] ()
#279    0x00007fff2f07aaaf in ___lldb_unnamed_symbol402$$PlugInKit ()
#280    0x00007fff2f07a747 in ___lldb_unnamed_symbol398$$PlugInKit ()
#281    0x00007fff2f07ae75 in ___lldb_unnamed_symbol406$$PlugInKit ()
#282    0x00007fff5818b8f3 in EXExtensionMain ()
#283    0x00007fff2088c079 in NSExtensionMain ()
#284    0x00007fff20257415 in start ()

【问题讨论】:

您解决了这个崩溃问题吗?我遇到了类似的崩溃。 【参考方案1】:

会不会,你调用完成函数两次?

我遇到了同样的问题,堆栈跟踪非常相似。

我在您的代码中看到的一个可能问题是调用self?.updateTimeline(with: timeline)completion(timeline)

【讨论】:

self?.updateTimeline(with: timeline) 在这里不相关。它只是出于调试目的而插入的,在将代码粘贴到此处之前,我忘了删除此行。对困惑感到抱歉。我编辑了我的代码示例并删除了该行。【参考方案2】:

我的问题是completion 被调用了两次。在您调用completion 的位置放置一个断点,以检查它是否被多次调用。

【讨论】:

【参考方案3】:

我在BackendService 实现中发现了一个问题。为了确保对getTimeline() 的两个或多个后续调用仅调用一个请求,我将完成处理程序排队。这确保在请求完成后调用所有完成处理程序。我从来没有注意到任何问题,因为在调试时对getTimeline() 的调用次数总是与completion 处理程序调用的次数相匹配。在dateToInvokeNextRefresh 传递后重新加载时间线时一定发生了崩溃,因为在这种情况下,实际的completion 处理程序传递给getTimeline()之前排队的完成处理程序已被调用。确保在请求完成后释放所有完成处理程序为我解决了问题并且崩溃现在消失了。

另外需要提及的是,崩溃也可能与自定义字体有关。我发现这篇帖子 iOS 14 Widget is flickering or frozen, chronod crashing 描述了一个与我的类似的崩溃堆栈跟踪。

【讨论】:

您能解释一下您是如何完成对完成处理程序进行排队的吗?我假设您使用了 DispatchQueue?我只是一个 swift 的菜鸟,但我在 XCode 12.3 上遇到了完全相同的问题,因为我意识到这是一个错误并且尚未修复。我还注意到时间线调用会随着您拥有的小部件实例的数量而变化。这就像我在推送到应用商店之前需要清理的最后一件事!

以上是关于iOS 14 小部件扩展在获取时间线后崩溃的主要内容,如果未能解决你的问题,请参考以下文章

带有 UICollectionView 的 iOS 8 小部件(今天的扩展)

iOS14 小部件可以请求主应用程序更新其数据吗?

iOS 14 小部件没有要启动的 main()

Android小部件onReceive崩溃

无法在模拟器中运行 Today 扩展小部件(iOS 8)

App Store Connect 是不是会跟踪小部件在 iOS 14 上的安装情况?