Unable to load Today Extension with table view

0

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:

enter image description here

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
ios8-today-widget
ios8-extension
ios9-today-widget
asked on Stack Overflow Apr 14, 2016 by RyuX51 • edited Jun 13, 2016 by RyuX51

1 Answer

1

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?

answered on Stack Overflow Apr 14, 2016 by Christopher Pickslay • edited Jun 13, 2016 by Christopher Pickslay

User contributions licensed under CC BY-SA 3.0