このアプリのマイナーなアップデートがリリースされました。このバージョンでは、アップルのサポートにより、アプリIDがユニークIDからチームIDに変更されました。iOS UILocalNotificationのアクションボタンがクラッシュして、アプリケーションデータが破損する
According to AppleチームIDの使用に変更すると、キーチェーンへのアクセスがリセットされるだけで、キーチェーンは使用されないため、アプリには影響しません。
しかし、更新がリリースされてから本物のユーザーのさんがアプリデータの破損を経験しています。これは、通知センターまたはロック画面からのアクションボタンを使用してローカル通知に応答する場合にのみ発生します。サポートされているすべてのiOSバージョンで発生する可能性があります。
これを経験しているユーザーには別の症状がありますが、1つではなく2つのローカル通知を受信しますが、通知は1つしか表示されません。さらに、これらの通知は、[[UIApplication sharedApplication] cancelAllLocalNotifications]
を使用して通知とキャンセルを無効にした後には消えません。
これらの重複した通知は、App Storeからアプリがアップデートされる前にスケジュールされていましたが、アップデート後に一部のユーザのコントロールが失われました。この問題は詳細in this questionで説明されています。最大の手掛かりは、クラッシュレポートに横たわっていたかもしれ
は、Appleから受け取った -
Incident Identifier: ED0E9C.............74B38C
CrashReporter Key: ae05b............dbc46
Hardware Model: iPhone4,1
Process: MY_APP [444]
Path: /private/var/mobile/Containers/Bundle/Application/65324..................8616/MY_APP.app/MY_APP
Identifier: com.mycompany.myapp
Version: X.X
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2015-10-27 21:45:24.24 -0500
Launch Time: 2015-10-27 21:45:20.20 -0500
OS Version: iOS 9.1 (13B143)
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 0
Last Exception Backtrace:
0 CoreFoundation 0x244b3676 __exceptionPreprocess + 122 (NSException.m:162)
1 libobjc.A.dylib 0x3582ee12 objc_exception_throw + 34 (objc-exception.mm:531)
2 CoreFoundation 0x244b354c +[NSException raise:format:arguments:] + 100 (NSException.m:131)
3 Foundation 0x25240bc4 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 88 (NSException.m:152)
4 UIKit 0x28840754 -[UIApplication _runWithMainScene:transitionContext:completion:] + 2928 (UIApplication.m:3299)
5 UIKit 0x28853a48 __84-[UIApplication _handleApplicationActivationWithScene:transitionContext:completion:]_block_invoke3218 + 32 (UIApplication.m:11920)
6 UIKit 0x2883d71e -[UIApplication workspaceDidEndTransaction:] + 130 (UIApplication.m:2648)
7 FrontBoardServices 0x2c52dca2 -[FBSSerialQueue _performNext] + 226 (FBSSerialQueue.m:157)
8 FrontBoardServices 0x2c52df94 -[FBSSerialQueue _performNextFromRunLoopSource] + 44 (FBSSerialQueue.m:204)
9 CoreFoundation 0x24476bfa __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 10 (CFRunLoop.c:1761)
10 CoreFoundation 0x244767e8 __CFRunLoopDoSources0 + 448 (CFRunLoop.c:1807)
11 CoreFoundation 0x24474b56 __CFRunLoopRun + 790 (CFRunLoop.c:2536)
12 CoreFoundation 0x243c8114 CFRunLoopRunSpecific + 516 (CFRunLoop.c:2814)
13 CoreFoundation 0x243c7f00 CFRunLoopRunInMode + 104 (CFRunLoop.c:2844)
14 UIKit 0x28610208 -[UIApplication _run] + 520 (UIApplication.m:2489)
15 UIKit 0x2860af10 UIApplicationMain + 140 (UIApplication.m:3665)
16 MY_APP 0xc4972 main + 22 (main.m:14)
17 libdyld.dylib 0x35f9d86e tlv_get_addr + 42 (threadLocalHelpers.s:310)
それは、ユーザーがプッシュ通知に応答するときに発生this questionと全く同じスタックトレースを、持っています。アプリの読み込み中にクラッシュすると、破損したアプリのデータが説明される可能性があります。
スタックトレースに見られるように、このクラッシュはコードによって引き起こされたものではなく、コード内で何も変更されていません.App IDが変更される前にうまく機能していました。このクラッシュの原因は何
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void (^)())completionHandler {
@try {
if (notification) {
NSDate *alarmTime = notification.userInfo ? [notification.userInfo objectForKey:@"time"] : nil;
[logic saveAlarmTime:alarmTime takenAt:[NSDate date]];
}
}
@catch (NSException *exception) {
NSLog(@"Exception: %@", [exception description]);
}
@finally {
completionHandler();
}
}
-
ここでは、通知のアクションボタンを処理するコードですか?
(私はそれが-[UIApplication _runWithMainScene:transitionContext:completion:] + 2928 (UIApplication.m:3299)
でスローだことを知って、問題はこれがクラッシュする原因となるそこには何がある。)
よい[この質問](http://stackoverflow.com/questions/30884896/application-windows-are-expected-to-have-a-root -view-controller-a-the-end-of-a)は役に立ちますか?あなたの質問と同じクラッシュのスタックトレースがあります。プッシュ通知によってアプリを開いた後、あなたのアプリがいくつかのView Controllerにユーザを転送する可能性はありますか?このコントローラを開くには、 '[window setRootViewController:viewController]の代わりに' [window addSubview:viewController.view] ; '?これは2つの通知の問題を解決するものではありませんが、Xcode 7のバグ/アップデートの両方である可能性があります。 – medvedNick
ちょっとした提案です。すべてのObserverに通知をチェックします。これらのObserverオブジェクトの 'dealloc'で' removeObserver: 'を呼び出すために。そして、http://stackoverflow.com/questions/26371462/weird-crash-when-launching-app-from-notification-center – anhtu
@anhtuこれは通知のこの種類ではない、私たちはローカル通知について話している、オブザーバーは使用されていないそのことについては。 – Kof