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 小部件扩展在获取时间线后崩溃的主要内容,如果未能解决你的问题,请参考以下文章