Sequential iPhone app conflict while editing UITextField by clicking Globe icon on iPhone Keyboard, both hardware and Simulator
Environment
iPhone Simulator or hardware. Xcode 8.3.3 Deployment target 8.0, Swift
Unable to find keyplane that supports type 7 for iPhone-PortraitChoco-Emoji keyboard; using 2383677590_PortraitChoco_iPhone-Emoji-Keyboard_Letters
[NSTaggedPointerString count]: unrecognized selector sent to instance 0xa000000000073652
Application terminated due to uncaught "NSInvalidArgumentException", reason: '- [NSTaggedPointerString count]: unrecognized selector sent to instance 0xa000000000073652'
First call stack:
0 CoreFoundation 0x0000000110461b0b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x000000010f4e9141 objc_exception_throw + 48
2 CoreFoundation 0x00000001104d1134 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3 CoreFoundation 0x00000001103e8840 ___forwarding___ + 1024
4 CoreFoundation 0x00000001103e83b8 _CF_forwarding_prep_0 + 120
5 CoreFoundation 0x00000001103b403f CFLocaleCopyDisplayNameForPropertyValue + 863
6 CoreFoundation 0x00000001103b3ccf -[__NSCFLocale displayNameForKey:value:] + 15
7 EmojiFoundation 0x000000012419fdbf +[EMFEmojiCategory computeEmojiFlagsSortedByLanguage] + 712
8 EmojiFoundation 0x00000001241979a6 +[EMFEmojiPreferences _cachedFlagCategoryEmoji:] + 256
9 EmojiFoundation 0x000000012419f922 +[EMFEmojiCategory _emojiSetForIdentifier:] + 351
10 UIKit 0x00000001121763bc +[UIKeyboardEmojiCategory categoryForType:] + 159
11 UIKit 0x0000000111cf35fb -[UIKeyboardEmojiCollectionInputView collectionView:numberOfItemsInSection:] + 56
12 UIKit 0x000000011269697d -[UICollectionViewData _updateItemCounts] + 469
13 UIKit 0x0000000112699844 -[UICollectionViewData numberOfSections] + 22
14 UIKit 0x000000011267c0f8 -[UICollectionViewFlowLayout _getSizingInfosWithExistingSizingDictionary:] + 506
15 UIKit 0x000000011267e088 -[UICollectionViewFlowLayout _fetchItemsInfoForRect:] + 127
16 UIKit 0x0000000112676ff2 -[UICollectionViewFlowLayout prepareLayout] + 272
17 UIKit 0x000000011256e428 -[UIKeyboardEmojiLayout prepareLayout] + 50
18 UIKit 0x0000000112697189 -[UICollectionViewData _prepareToLoadData] + 174
19 UIKit 0x00000001126979fe -[UICollectionViewData validateLayoutInRect:] + 53
20 UIKit 0x000000011264033e -[UICollectionView layoutSubviews] + 233
21 UIKit 0x0000000111cf4fa5 __47-[UIKeyboardEmojiCollectionView layoutSubviews]_block_invoke + 42
22 UIKit 0x0000000111dbb08e +[UIView(Animation) performWithoutAnimation:] + 90
23 UIKit 0x0000000111cf4f74 -[UIKeyboardEmojiCollectionView layoutSubviews] + 104
24 UIKit 0x0000000111dc655b -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1268
25 QuartzCore 0x00000001119e1904 -[CALayer layoutSublayers] + 146
26 QuartzCore 0x00000001119d5526 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 370
27 UIKit 0x0000000111db4334 -[UIView(Hierarchy) layoutBelowIfNeeded] + 1108
28 UIKit 0x0000000111cf4428 -[UIKeyboardEmojiCollectionInputView didMoveToWindow] + 82
29 UIKit 0x0000000111dbff01 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 1737
30 UIKit 0x0000000111db2b96 __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 151
31 Foundation 0x000000010f00b82b -[NSISEngine withBehaviors:performModifications:] + 155
32 UIKit 0x0000000111db2a98 -[UIView(Hierarchy) _postMovedFromSuperview:] + 855
33 UIKit 0x0000000111dc2a0a -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1927
34 UIKit 0x0000000111db0cf8 -[UIView(Hierarchy) addSubview:] + 838
35 UIKit 0x0000000112572b75 -[UIKBKeyplaneView setState:forKey:] + 1979
36 UIKit 0x00000001121f06a7 -[UIKeyboardLayoutStar setKeyplaneName:] + 9044
37 UIKit 0x00000001121f6689 -[UIKeyboardLayoutStar showKeyboardWithInputTraits:screenTraits:splitTraits:] + 482
38 UIKit 0x0000000111fc76cb -[UIKeyboardImpl finishLayoutChangeWithArguments:] + 518
39 UIKit 0x0000000111fc7e32 -[UIKeyboardImpl updateLayout] + 1161
40 UIKit 0x0000000111fbf124 -[UIKeyboardImpl reinitializeAfterInputModeSwitch:] + 160
41 UIKit 0x0000000111fbe7ec -[UIKeyboardImpl setKeyboardInputMode:userInitiated:updateIndicator:executionContext:] + 975
42 UIKit 0x0000000111fc011e -[UIKeyboardImpl setInputModeToNextInPreferredListWithExecutionContext:] + 452
43 UIKit 0x00000001122095a1 -[UIKeyboardLayoutStar completeSendStringActionForTouchUp:withActions:timestamp:interval:didLongPress:prevActions:executionContext:] + 884
44 UIKit 0x00000001122088b1 -[UIKeyboardLayoutStar completeRetestForTouchUp:timestamp:interval:executionContext:] + 5227
45 UIKit 0x0000000111ff2bd2 __45-[UIKeyboardLayout touchUpTaskForTouchState:]_block_invoke + 232
46 UIKit 0x0000000112840782 -[UIKeyboardTaskQueue continueExecutionOnMainThread] + 374
47 UIKit 0x0000000111ff28ab -[UIKeyboardLayout _touchEndedProcessingForTouches:] + 341
48 UIKit 0x0000000111d727ea -[UIWindow _sendTouchesForEvent:] + 2707
49 UIKit 0x0000000111d73f00 -[UIWindow sendEvent:] + 4114
50 UIKit 0x0000000111d20a84 -[UIApplication sendEvent:] + 352
51 UIKit 0x00000001125045d4 __dispatchPreprocessedEventFromEventQueue + 2926
52 UIKit 0x00000001124fc532 __handleEventQueue + 1122
53 CoreFoundation 0x0000000110407c01 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
54 CoreFoundation 0x00000001103ed0cf __CFRunLoopDoSources0 + 527
55 CoreFoundation 0x00000001103ec5ff __CFRunLoopRun + 911
56 CoreFoundation 0x00000001103ec016 CFRunLoopRunSpecific + 406
57 GraphicsServices 0x00000001156e0a24 GSEventRunModal + 62
58 UIKit 0x0000000111d03134 UIApplicationMain + 159
Any hints on how to fix this issue would be great.
Here are more details, please find the following pictures:
I can create one scenario where the crash no longer occurs after removing the Emoji keyboard from the Settings → Keyboards menu using the following steps.
- Open the Settings app.
- Go to General> Keyboard, then click Keyboards at the top. (There will be a number next to it - the number of keyboards you've installed.)
- Click Edit, then click the red circle next to Emoji.
- Click Remove.
This solution is not acceptable, we cannot ask our customers to follow these steps, it is better to have a solution for the failure.
Before and after removing Emoji Keyboard:
source to share
In my case, it was due to the wrong property AppleLanguages
; it was fixed for NSObject
, but not for NSArray
.
Wrong:
NSUserDefaults.StandardUserDefaults["AppleLanguages"] = NSArray.FromObject(new NSString("en-US"));
Should be:
NSUserDefaults.StandardUserDefaults["AppleLanguages"] = NSArray.FromObjects(new NSString("en-US"));
source to share
Found a solution to this problem. This is perhaps very specific to our project history. Somehow, our project has a situation where Base.lproj has en.lproj and es.lproj, while the "Use basic internationalization" option is disabled, and hance caused a runtime crash. When we cleaned up the project, the accident was gone.
source to share