I really could need some help...
I try to use a today extension to get some stuff and refresh a cell with data from a SOAP request. It works like a charm in simulator but on a actual device (iPhone 6 Plus) widget updates the cell and shortly afterwards switches to "Unable to Load".
The app shows > 20 MB in the profiler and I read the max size is only about 10 MB. But how can this be when I'm only showing - mostely - one single table view cell? The whole SOAP Framework has 2.6 MB... This is driving me crazy...
And... wouldn't there be some memory error in the log instead of "Feature not available in extensions of type com.apple.widget-extension"? I don't think my crash is related to the size, the screenshot below shows the crash with a widget size of 4 MB.
Does anyone have some experience with this kind of struggle?
What I can provide:
My TodayViewController:
import CoreData
import NotificationCenter
class TodayViewController: UITableViewController, NCWidgetProviding {
struct CellConstants {
static let parkingProcess = "ParkingProcessCell"
static let login = "LoginCell"
static let noTransactions = "NoTransactionsCell"
}
var loadedParkingProcesses: [MCParkingProcess] = []
var loggedInInternal = false
var noTransactions = false
var reload = true
var fetchingData = false
var loggedIn: Bool {
get {
let defaults = NSUserDefaults(suiteName: "group.not.relevant.here")
loggedInInternal = defaults?.stringForKey("username") != nil &&
defaults?.stringForKey("password") != nil
? true : false
return loggedInInternal
}
}
func resetTimer() {
print("timer reset")
reload = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
print("memory warning!")
}
func loadData(username: String, password: String) {
if fetchingData {
return
}
fetchingData = true
guard reload == true else {
let _ = NSTimer(timeInterval: 10, target: self, selector: #selector(TodayViewController.resetTimer), userInfo: nil, repeats: false)
return
}
reload = false
let locale = NSLocale.preferredLanguages()[ 0].componentsSeparatedByString("-")[0]
MCSoapClient.sharedInstance().loadRunningParkingProcessesForUsername (username, password: password, language: locale, completion: { statusCode, result in
guard let dict = result as? [String: AnyObject] else {
// no dict. something's wrong.
return
}
if Int(dict["statuscode"] as! String)! % 100 != 0 {
// some error from our backend
return
}
if let parkingProcess = dict["parkvorgang"] {
self.noTransactions = false
if let pp = parkingProcess as? [AnyObject] {
// more than one
self.loadedParkingProcesses = MCParkingProcess.parkingProcessesFromJSON(pp) as! [ MCParkingProcess]
} else {
// only one process
self.loadedParkingProcesses = [MCParkingProcess( fromJSON: parkingProcess as! [String: AnyObject])]
}
} else {
// no transactions
self.noTransactions = true
}
self.fetchingData = false
dispatch_async(dispatch_get_main_queue(), {
self.tableView.reloadData()
self.resetContentSize()
})
}, failed: { result, error in
print("failed with error: \(error)")
print("result: \(result)")
dispatch_async(dispatch_get_main_queue(), {
self.tableView.reloadData()
self.resetContentSize()
})
self.fetchingData = false
})
self.resetContentSize()
}
override func viewDidLoad() {
tableView.backgroundColor = UIColor.clearColor()
}
override func viewWillAppear(animated: Bool) {
performFetch()
}
override func tableView(tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
return !loggedIn || noTransactions
? 1
: loadedParkingProcesses.count
}
func RGBColor(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) -> UIColor {
return UIColor(red: (r / 255), green: (g / 255), blue: (b / 255), alpha: (a))
}
func loadDetailsForCell(cell: MCParkingProcessCell, withParkingProcess parkingProcess: MCParkingProcess) {
let locale = NSLocale.preferredLanguages()[ 0].componentsSeparatedByString("-")[0]
let defaults = NSUserDefaults(suiteName: "group.not.relevant.here")
if let username = defaults?.stringForKey("username")
, password = defaults?.stringForKey("password") {
// Load current parkingProcess costs
MCSoapClient.sharedInstance().loadCurrentCostsforParkingProc essesID(parkingProcess.ID, username: username, password: password, parkingProcessStartTimeStamp: "", language: locale, completion: { statusCode, result in
guard let dict = result as? [String: AnyObject] else {
// no dict. something's wrong.
return
}
if Int(dict["statuscode"] as! String)! % 100 != 0 {
// some error from our backend
return
}
var elapsedMinutes = Int(dict["dauer"] as! String)!
if parkingProcess.parkingZone.isAboZone {
let serverTime = Int(dict["serverzeit"] as! String)
let usedParkingTimeInSeconds = Double(serverTime!) - parkingProcess.startedAt.timeIntervalSince1970
elapsedMinutes = Int(usedParkingTimeInSeconds) / 60
}
// update currentCosts
parkingProcess.updateCurrentCostsFromJSON( dict["parkvorgang"] as? [String: AnyObject])
parkingProcess.updateCurrentParkingTime(elapsedMinutes)
// set label text
let someNumber = parkingProcess.currentCosts
let numberFormatter: NSNumberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
numberFormatter.minimumFractionDigits = 2
numberFormatter.maximumFractionDigits = 2
numberFormatter.decimalSeparator = ","
cell.costsLabel.text = "\( numberFormatter.stringFromNumber(someNumber)!) €"
cell.timeLabel.text = String.formatMinutesToCorrectTime( parkingProcess.currentParkingTime.intValue)
}, failed: { result, error in
print("failed with error: \(error)")
print("result: \(result)")
})
}
}
func configureRunningParkingProcessCell(cell: MCParkingProcessCell, withParkingProcess parkingProcess: MCParkingProcess) {
cell.backgroundView?.backgroundColor = UIColor.clearColor()
cell.addressLabel.textColor = UIColor.whiteColor()
cell.parkingZoneIDLabel.text = parkingProcess.parkingZone.number
cell.addressLabel.text = parkingProcess.parkingZone.parkingZoneID
cell.costsLabel.text = parkingProcess.parkingZone.costs
cell.carPlateLabel.text = parkingProcess.usedCarPlate
cell.maxDurationLabel.text = NSDateFormatter.localizedStringFromDate (parkingProcess.endedAt, dateStyle: NSDateFormatterStyle.MediumStyle, timeStyle: NSDateFormatterStyle.ShortStyle)
cell.dateLabel.text = NSDateFormatter.localizedStringFromDate( parkingProcess.startedAt, dateStyle: NSDateFormatterStyle.MediumStyle, timeStyle: NSDateFormatterStyle.ShortStyle)
// starts an async request to get current costs and time
self.loadDetailsForCell(cell, withParkingProcess: parkingProcess)
}
override func tableView(tableView: UITableView,
cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if !loggedInInternal {
let cell = tableView.dequeueReusableCellWithIdentifier( CellConstants.login) as! LoginCell
cell.extensionContext = extensionContext
return cell
}
if noTransactions {
return tableView.dequeueReusableCellWithIdentifier( CellConstants.noTransactions)!
}
let cell = tableView.dequeueReusableCellWithIdentifier( CellConstants.parkingProcess, forIndexPath: indexPath) as! MCParkingProcessCell
// empty here. will be filled with second request
cell.timeLabel.text = ""
cell.costsLabel.text = ""
cell.accessoryView = MSCellAccessory(type: MSCellAccessoryType.DISCLOSURE_INDICATOR, color: RGBColor(91, g: 181, b: 148, a: 1))
configureRunningParkingProcessCell(cell, withParkingProcess: self.loadedParkingProcesses[indexPath.row])
return cell
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return !loggedInInternal || noTransactions
? 50
: 120
}
func resetContentSize() {
dispatch_async(dispatch_get_main_queue(), {
self.preferredContentSize = self.tableView.contentSize
})
}
override func awakeFromNib() {
super.awakeFromNib()
resetContentSize()
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
resetContentSize()
}
func performFetch() {
let defaults = NSUserDefaults(suiteName: "group.not.relevant.here")
if let username = defaults?.stringForKey("username")
, password = defaults?.stringForKey("password") {
loadData(username, password: password)
} else {
// not updated in loaddata(), so it is here
dispatch_async(dispatch_get_main_queue(), {
self.tableView.reloadData()
self.resetContentSize()
})
}
}
func widgetMarginInsetsForProposedMarginInsets
(defaultMarginInsets: UIEdgeInsets) -> (UIEdgeInsets) {
return UIEdgeInsetsZero
}
func widgetPerformUpdateWithCompletionHandler(
completionHandler: ((NCUpdateResult) -> Void)) {
performFetch()
completionHandler(NCUpdateResult.NoData)
}
override func tableView(tableView: UITableView,
didSelectRowAtIndexPath indexPath: NSIndexPath) {
if !loggedInInternal || noTransactions {
return
}
let urlAsString = "mcsmartparking://parkingProcess=\( loadedParkingProcesses[indexPath.row].ID)"
let url = NSURL(string: urlAsString)
self.extensionContext!.openURL(url!, completionHandler: nil)
tableView.deselectRowAtIndexPath(indexPath, animated: false)
}
}
And my error:
2016-04-14 12:56:08.322 TodayExtension_Dev[11656:320804] *** Assertion failure in void _UIApplicationAssertForExtensionType(NSArray *__strong)(), /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.60.10/UIApplication.m:2521
* thread #1: tid = 0x4e524, 0x00000001801d7f48 libobjc.A.dylib`objc_exception_throw, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
* frame #0: 0x00000001801d7f48 libobjc.A.dylib`objc_exception_throw
frame #1: 0x0000000180b72d20 CoreFoundation`+[NSException raise:format:arguments:] + 108
frame #2: 0x00000001814f81c0 Foundation`-[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] + 88
frame #3: 0x0000000185f76ff0 UIKit`_UIApplicationAssertForExtensionType + 484
frame #4: 0x0000000186143818 UIKit`_UIAlertControllerCommonInit + 112
frame #5: 0x0000000186143aa8 UIKit`-[UIAlertController initWithNibName:bundle:] + 104
frame #6: 0x0000000186143b24 UIKit`+[UIAlertController alertControllerWithTitle:message:preferredStyle:] + 100
frame #7: 0x0000000100133518 TodayExtension_Dev`__20+[a5987398 a2489290]_block_invoke + 64
frame #8: 0x00000001805bd4bc libdispatch.dylib`_dispatch_call_block_and_release + 24
frame #9: 0x00000001805bd47c libdispatch.dylib`_dispatch_client_callout + 16
frame #10: 0x00000001805c2b84 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 1844
frame #11: 0x0000000180b28df0 CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
frame #12: 0x0000000180b26c58 CoreFoundation`__CFRunLoopRun + 1628
frame #13: 0x0000000180a50e80 CoreFoundation`CFRunLoopRunSpecific + 384
frame #14: 0x0000000182338088 GraphicsServices`GSEventRunModal + 180
frame #15: 0x0000000185d3a0c8 UIKit`UIApplicationMain + 204
frame #16: 0x0000000180814ce0 libxpc.dylib`_xpc_objc_main + 784
frame #17: 0x00000001808169dc libxpc.dylib`xpc_main + 200
frame #18: 0x0000000181633d60 Foundation`-[NSXPCListener resume] + 172
frame #19: 0x0000000187e72c48 PlugInKit`-[PKService run] + 544
frame #20: 0x0000000187e728dc PlugInKit`+[PKService main] + 56
frame #21: 0x0000000187e72c6c PlugInKit`+[PKService _defaultRun:arguments :] + 20
frame #22: 0x0000000181446058 libextension.dylib`NSExtensionMain + 64
frame #23: 0x00000001805ee8b8 libdyld.dylib`start + 4
* thread #1: tid = 0x4e524, 0x00000001801ca7d4 libc++abi.dylib`__cxa_throw, queue = 'com.apple.main-thread', stop reason = breakpoint 1.2
* frame #0: 0x00000001801ca7d4 libc++abi.dylib`__cxa_throw
frame #1: 0x00000001801d8094 libobjc.A.dylib`objc_exception_throw + 332
frame #2: 0x0000000180b72d20 CoreFoundation`+[NSException raise:format: arguments:] + 108
frame #3: 0x00000001814f81c0 Foundation`-[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] + 88
frame #4: 0x0000000185f76ff0 UIKit`_UIApplicationAssertForExtensionType + 484
frame #5: 0x0000000186143818 UIKit`_UIAlertControllerCommonInit + 112
frame #6: 0x0000000186143aa8 UIKit`-[UIAlertController initWithNibName: bundle:] + 104
frame #7: 0x0000000186143b24 UIKit`+[UIAlertController alertControllerWithTitle:message:preferredStyle:] + 100
frame #8: 0x0000000100133518 TodayExtension_Dev`__20+[a5987398 a2489290]_block_invoke + 64
frame #9: 0x00000001805bd4bc libdispatch. dylib`_dispatch_call_block_and_release + 24
frame #10: 0x00000001805bd47c libdispatch.dylib`_dispatch_client_callout + 16
frame #11: 0x00000001805c2b84 libdispatch. dylib`_dispatch_main_queue_callback_4CF + 1844
frame #12: 0x0000000180b28df0 CoreFoundation `__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
frame #13: 0x0000000180b26c58 CoreFoundation`__CFRunLoopRun + 1628
frame #14: 0x0000000180a50e80 CoreFoundation`CFRunLoopRunSpecific + 384
frame #15: 0x0000000182338088 GraphicsServices`GSEventRunModal + 180
frame #16: 0x0000000185d3a0c8 UIKit`UIApplicationMain + 204
frame #17: 0x0000000180814ce0 libxpc.dylib`_xpc_objc_main + 784
frame #18: 0x00000001808169dc libxpc.dylib`xpc_main + 200
frame #19: 0x0000000181633d60 Foundation`-[NSXPCListener resume] + 172
frame #20: 0x0000000187e72c48 PlugInKit`-[PKService run] + 544
frame #21: 0x0000000187e728dc PlugInKit`+[PKService main] + 56
frame #22: 0x0000000187e72c6c PlugInKit`+[PKService _defaultRun:arguments :] + 20
frame #23: 0x0000000181446058 libextension.dylib`NSExtensionMain + 64
frame #24: 0x00000001805ee8b8 libdyld.dylib`start + 4
2016-04-14 12:56:08.401 TodayExtension_Dev[11656:320804] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Feature not available in extensions of type com.apple.widget-extension'
*** First throw call stack:
(0x180b72e50 0x1801d7f80 0x180b72d20 0x1814f81c0 0x185f76ff0 0x186143818 0x186143aa8 0x186143b24 0x100133518 0x1805bd4bc 0x1805bd47c 0x1805c2b84 0x180b28df0 0x180b26c58 0x180a50e80 0x182338088 0x185d3a0c8 0x180814ce0 0x1808169dc 0x181633d60 0x187e72c48 0x187e728dc 0x187e72c6c 0x181446058 0x1805ee8b8)
libc++abi.dylib: terminating with uncaught exception of type NSException
And a screenshot of the crash:
And more:
dlopen(/System/Library/Frameworks/CoreText.framework/CoreText, 0x00000002)
dlopen(/System/Library/Frameworks/CoreText.framework/CoreText) ==> 0xffeeddcc00007000
dlsym(0xffeeddcc00007000, CTFontCreateWithGraphicsFont)
dlsym(0xffeeddcc00007000, CTFontCreateWithGraphicsFont) ==> 0x183a68cf4
dlsym(0xffeeddcc00007000, CTFontGetGlyphsAndAdvancesForCharacterRange)
dlsym(0xffeeddcc00007000, CTFontGetGlyphsAndAdvancesForCharacterRange) ==> 0x183a79754
dlsym(0xffeeddcc00007000, CTFontCopyAvailableTables)
dlsym(0xffeeddcc00007000, CTFontCopyAvailableTables) ==> 0x183abe2b8
dlsym(0xffeeddcc00007000, CTFontCopyCharacterSet)
dlsym(0xffeeddcc00007000, CTFontCopyCharacterSet) ==> 0x183a6c2dc
dlsym(0xffeeddcc00007000, CTFontCopyGraphicsFont)
dlsym(0xffeeddcc00007000, CTFontCopyGraphicsFont) ==> 0x183a67acc
dlsym(0xffeeddcc00007000, CTFontGetUnitsPerEm)
dlsym(0xffeeddcc00007000, CTFontGetUnitsPerEm) ==> 0x183a8fe20
dlsym(0xffeeddcc00007000, CTFontGetAscent)
dlsym(0xffeeddcc00007000, CTFontGetAscent) ==> 0x183a6a380
dlsym(0xffeeddcc00007000, CTFontGetDescent)
dlsym(0xffeeddcc00007000, CTFontGetDescent) ==> 0x183a6c020
dlsym(0xffeeddcc00007000, CTFontGetLeading)
dlsym(0xffeeddcc00007000, CTFontGetLeading) ==> 0x183a6c0bc
dlsym(0xffeeddcc00007000, CTFontIsLastResort)
dlsym(0xffeeddcc00007000, CTFontIsLastResort) ==> 0x183a6c274
dlsym(0xffeeddcc00007000, CTFontGetSymbolicTraits)
dlsym(0xffeeddcc00007000, CTFontGetSymbolicTraits) ==> 0x183a84a30
dlsym(0xffeeddcc00007000, CTFontGetSize)
dlsym(0xffeeddcc00007000, CTFontGetSize) ==> 0x183a65118
dlsym(0xffeeddcc00007000, CTFontCopyFamilyName)
dlsym(0xffeeddcc00007000, CTFontCopyFamilyName) ==> 0x183a6a088
dlsym(0xffeeddcc00007000, CTFontCopyFullName)
dlsym(0xffeeddcc00007000, CTFontCopyFullName) ==> 0x183a8febc
dlsym(0xffeeddcc00007000, CTFontSwapDefaultSize)
dlsym(0xffeeddcc00007000, CTFontSwapDefaultSize) ==> 0x183a65114
dlsym(0xffeeddcc00007000, CTFontGetClientObject)
dlsym(0xffeeddcc00007000, CTFontGetClientObject) ==> 0x183a651a0
dlsym(0xffeeddcc00007000, CTFontSetClientObject)
dlsym(0xffeeddcc00007000, CTFontSetClientObject) ==> 0x183a698a4
dlsym(0xffeeddcc00007000, CTFontDescriptorCreateForUIType)
dlsym(0xffeeddcc00007000, CTFontDescriptorCreateForUIType) ==> 0x183a77ac0
dlsym(0xffeeddcc00007000, CTFontDescriptorCreateCopyWithSymbolicTraits)
dlsym(0xffeeddcc00007000, CTFontDescriptorCreateCopyWithSymbolicTraits) ==> 0x183a828d0
dlsym(0xffeeddcc00007000, CTFontCreateWithFontDescriptorAndOptions)
dlsym(0xffeeddcc00007000, CTFontCreateWithFontDescriptorAndOptions) ==> 0x183abc2c8
dlsym(0xffeeddcc00007000, CTFontCopyFontDescriptor)
dlsym(0xffeeddcc00007000, CTFontCopyFontDescriptor) ==> 0x183a616f0
dlsym(0xffeeddcc00007000, CTFontDescriptorIsSystemUIFont)
dlsym(0xffeeddcc00007000, CTFontDescriptorIsSystemUIFont) ==> 0x183a6a06c
dlsym(0xffeeddcc00007000, CTFontManagerInstalledFontsChanged)
dlsym(0xffeeddcc00007000, CTFontManagerInstalledFontsChanged) ==> 0x183b35e04
dlsym(0xffeeddcc00007000, CTFontRemoveFromCaches)
dlsym(0xffeeddcc00007000, CTFontRemoveFromCaches) ==> 0x183abf878
dlopen(/System/Library/PrivateFrameworks/UIFoundation.framework/UIFoundation, 0x00000002)
dlopen(/System/Library/PrivateFrameworks/UIFoundation.framework/UIFoundation) ==> 0xffeeddcc00009000
dlsym(0xffeeddcc00009000, UINewFont)
dlsym(0xffeeddcc00009000, UINewFont) ==> 0x186506a24
dlopen(/System/Library/PrivateFrameworks/FontServices.framework/libGSFontCache.dylib, 0x00000002)
dyld: loaded: /System/Library/PrivateFrameworks/FontServices.framework/libGSFontCache.dylib
dyld_image_path_containing_address(0x1958cc000)
dlopen(/System/Library/PrivateFrameworks/FontServices.framework/libGSFontCache.dylib, 0x00000010)
dlopen(/System/Library/PrivateFrameworks/FontServices.framework/libGSFontCache.dylib) ==> 0xffeeddcc0002d400
dlopen(/System/Library/PrivateFrameworks/FontServices.framework/libGSFontCache.dylib) ==> 0xffeeddcc0002d400
dlsym(0xffeeddcc0002d400, GSFontCacheGetDictionary)
dlsym(0xffeeddcc0002d400, GSFontCacheGetDictionary) ==> 0x1958cd1f0
dlopen(/System/Library/Frameworks/UIKit.framework/UIKit, 0x00000002)
dlopen(/System/Library/Frameworks/UIKit.framework/UIKit) ==> 0xffeeddcc00009100
dlsym(0xffeeddcc00009100, _UIApplicationUsesAlternateUI)
dlsym(0xffeeddcc00009100, _UIApplicationUsesAlternateUI) ==> 0x186810224
dlsym(0xffeeddcc00009100, _UIApplicationLinkedOnOrAfter)
dlsym(0xffeeddcc00009100, _UIApplicationLinkedOnOrAfter) ==> 0x186563cc0
dlopen(/usr/lib/libAccessibility.dylib, 0x00000005)
dlopen(/usr/lib/libAccessibility.dylib) ==> 0xffeeddcc00008500
dlsym(0xffeeddcc00008500, _AXSEnhanceTextLegibilityEnabled)
dlsym(0xffeeddcc00008500, _AXSEnhanceTextLegibilityEnabled) ==> 0x184a709d8
dlopen(/System/Library/Frameworks/UIKit.framework/UIKit, 0x00000002)
dlopen(/System/Library/Frameworks/UIKit.framework/UIKit) ==> 0xffeeddcc00009100
dlopen(/System/Library/PrivateFrameworks/FontServices.framework/libFontParser.dylib, 0x00000005)
dlopen(/System/Library/PrivateFrameworks/FontServices.framework/libFontParser.dylib) ==> 0xffeeddcc00006d00
dlsym(0xffeeddcc00006d00, FPFontCreateFontsWithPath)
dlsym(0xffeeddcc00006d00, FPFontCreateFontsWithPath) ==> 0x1838f4b68
dlsym(0xffeeddcc00006d00, FPFontRetain)
dlsym(0xffeeddcc00006d00, FPFontRetain) ==> 0x1838f7f30
dlsym(0xffeeddcc00006d00, FPFontCopyTable)
dlsym(0xffeeddcc00006d00, FPFontCopyTable) ==> 0x1838f81e0
dlsym(0xffeeddcc00006d00, FPFontCopyTable)
dlsym(0xffeeddcc00006d00, FPFontCopyTable) ==> 0x1838f81e0
dlsym(0xffeeddcc00006d00, FPFontCopyNames)
dlsym(0xffeeddcc00006d00, FPFontCopyNames) ==> 0x1838f88ec
dlsym(0xffeeddcc00006d00, FPFontGetPostScriptName)
dlsym(0xffeeddcc00006d00, FPFontGetPostScriptName) ==> 0x1838f8bd4
dlsym(0xffeeddcc00006d00, FPFontGetNumberOfGlyphs)...
dlsym(0xffeeddcc00006d00, FPFontIsBitmapOnly)
dlsym(0xffeeddcc00006d00, FPFontIsBitmapOnly) ==> 0x1838fd100
dlsym(0xffeeddcc00006d00, FPFontGetGlyphIdealAdvanceWidth)
dlsym(0xffeeddcc00006d00, FPFontGetGlyphIdealAdvanceWidth) ==> 0x1838fd28c
dlsym(0xffeeddcc00006d00, FPFontGetUnitsPerEm)
dlsym(0xffeeddcc00006d00, FPFontGetUnitsPerEm) ==> 0x1838fa254
dlopen(/System/Library/Frameworks/UIKit.framework/UIKit, 0x00000002)
dlopen(/System/Library/Frameworks/UIKit.framework/UIKit) ==> 0xffeeddcc00009100
dlsym(0xffeeddcc00009100, UIGraphicsGetCurrentContext)
dlsym(0xffeeddcc00009100, UIGraphicsGetCurrentContext) ==> 0x1865718e8
dlsym(0xffeeddcc00006d00, FPFontIsBitmapOnly)
dlsym(0xffeeddcc00006d00, FPFontIsBitmapOnly) ==> 0x1838fd100
dlsym(0xffeeddcc00006d00, FPFontCopyGlyphPath)
dlsym(0xffeeddcc00006d00, FPFontCopyGlyphPath) ==> 0x1838fdbb0
dlopen(/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics, 0x00000009)
dlopen(/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics) ==> 0xffeeddcc00004000
dlsym(0xffeeddcc00004000, CGPathCreateMutable)
dlsym(0xffeeddcc00004000, CGPathCreateMutable) ==> 0x1829117fc
dlsym(0xffeeddcc00004000, CGPathRelease)
dlsym(0xffeeddcc00004000, CGPathRelease) ==> 0x182912294
dlsym(0xffeeddcc00004000, CGPathMoveToPoint)
dlsym(0xffeeddcc00004000, CGPathMoveToPoint) ==> 0x182912380
dlsym(0xffeeddcc00004000, CGPathAddLineToPoint)
dlsym(0xffeeddcc00004000, CGPathAddLineToPoint) ==> 0x182912440
dlsym(0xffeeddcc00004000, CGPathAddCurveToPoint)
dlsym(0xffeeddcc00004000, CGPathAddCurveToPoint) ==> 0x182912630
dlsym(0xffeeddcc00004000, CGPathAddQuadCurveToPoint)
dlsym(0xffeeddcc00004000, CGPathAddQuadCurveToPoint) ==> 0x18291252c
dlsym(0xffeeddcc00004000, CGPathCloseSubpath)
dlsym(0xffeeddcc00004000, CGPathCloseSubpath) ==> 0x18291274c
dlsym(0xffeeddcc00004000, CGFontIndexMapAddRange)
dlsym(0xffeeddcc00004000, CGFontIndexMapAddRange) ==> 0x1829c53a4
dlsym(0xffeeddcc00004000, CGPathCreateByNormalizingGlyphPath)
dlsym(0xffeeddcc00004000, CGPathCreateByNormalizingGlyphPath) ==> 0x182913c64
dlsym(0xffeeddcc00004000, CGPathCreateCopyByTransformingPath)
dlsym(0xffeeddcc00004000, CGPathCreateCopyByTransformingPath) ==> 0x182911cc4
dlsym(0xffeeddcc00004000, CGPathRetain)
dlsym(0xffeeddcc00004000, CGPathRetain) ==> 0x182912268
dlsym(0xffeeddcc00004000, CGPathIsEmpty)
dlsym(0xffeeddcc00004000, CGPathIsEmpty) ==> 0x18291353c
dlsym(0xffeeddcc00004000, CGPathGetBoundingBox)
dlsym(0xffeeddcc00004000, CGPathGetBoundingBox) ==> 0x1829139dc
dyld_image_header_containing_address(0x181f15cf4)
_dyld_get_image_slide(0x181ce8000)
_dyld_get_image_slide(0x181ce8000)
2016-06-13 15:22:33.862 TodayExtension_Dev[5335:67225] *** Assertion failure in void _UIApplicationAssertForExtensionType( NSArray *__strong)(), /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.60.12/UIApplication.m:2521
dyld_image_header_containing_address(0x181614e32)
_dyld_get_image_slide(0x1812dc000)
_dyld_get_image_slide(0x1812dc000)
2016-06-13 15:22:33.863 TodayExtension_Dev[5335:67225] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Feature not available in extensions of type com.apple.widget-extension'
*** First throw call stack:
(0x181406db0 0x180a6bf80 0x181406c80 0x181d8c1c0 0x18680afb0 0x1869d77d8 0x1869d7a68 0x1869d7ae4 0x1000b2f68 0x180e514bc 0x180e5147c 0x180e56b84 0x1813bcd50 0x1813babb8 0x1812e4c50 0x182bcc088 0x1865ce088 0x1810a8ce0 0x1810aa9dc 0x181ec7d60 0x188706c48 0x1887068dc 0x188706c6c 0x181cda058 0x180e828b8)
libc++abi.dylib: terminating with uncaught exception of type NSException
From your stack trace, it looks like you're trying to display a UIAlertController:
frame #6: 0x0000000186143b24 UIKit`+[UIAlertController alertControllerWithTitle:message:preferredStyle:] + 100
frame #7: 0x0000000100133518 TodayExtension_Dev`__20+[a5987398 a2489290]_block_invoke + 64
UIAlertController is presented modally over the entire screen, and your widget does not have access to the entire screen, so they are not allowed in Today Widgets.
I think you need to get to the bottom of why an alert is showing. Perhaps a side effect of your SOAP client?