私は本当に助けが必要かもしれません...
今日の拡張機能を使用して、何かを取得し、SOAP 要求からのデータでセルを更新しようとしています。シミュレーターでは魅力のように機能しますが、実際のデバイス (iPhone 6 Plus) ではウィジェットがセルを更新し、その後すぐに「ロードできません」に切り替わります。
アプリはプロファイラーで > 20 MB を示しており、最大サイズは約 10 MB しかありません。しかし、ほとんどの場合、1 つのテーブル ビュー セルしか表示していない場合、これはどのようになるのでしょうか。SOAP フレームワーク全体で 2.6 MB あります...これは私を夢中にさせます...
そして...「タイプcom.apple.widget-extensionの拡張機能では利用できない機能」の代わりに、ログにメモリエラーはありませんか? クラッシュがサイズに関係しているとは思いません。下のスクリーンショットは、ウィジェット サイズが 4 MB の場合のクラッシュを示しています。
この種の闘争の経験がある人はいますか?
私が提供できるもの:
私の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)
}
}
そして私のエラー:
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
クラッシュのスクリーンショット:
もっと:
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