iOS Keyboard extension: Not showing if no full access - ios

I am working on an iOS keyboard extension with a containing app. My problem is that I can not "start" the keyboard will not show up. The frame is empty, I can't get into my code. Why is that?
My setup is a quite standard keyboard extension with nothing fancy. I have a hosting application that shows some settings. I store this setting in a NSUserDefaults suite with my app group as the identifier. Do I need full access to access this suite?
Bests,
Philip
UPDATE:
To see if it crashes or exits in the line where I open the settingsSuite I added an NSLog(#"Hello") to the first line of viewDidLoad. It is never reached. I get the following error message:
Sep 29 12:02:16 iPhone-6 kernel[0] <Notice>: xpcproxy[16389] Container: /private/var/mobile/Containers/Data/PluginKitPlugin/6A7DF264-59B2-4F38-92CB-63875B6C1469 (sandbox)
Sep 29 12:02:16 iPhone-6 Fancy Keyboard[16389] <Error>: assertion failed: 12A405: libxpc.dylib + 71820 [4BC9CA3D-4DEE-314C-ADBF-53BDCEEFE45C]: 0x7d
Sep 29 12:02:16 iPhone-6 Unknown[16389] <Error>:
Sep 29 12:02:16 iPhone-6 com.apple.xpc.launchd[1] (com.apple.xpc.launchd.domain.system) <Error>: Caller not allowed to perform action: Fancy Keyboar.16389, action = pid-local registration, code = 1: Operation not permitted, uid = 501, euid = 501, gid = 501, egid = 501, asid = 0
Sep 29 12:02:16 iPhone-6 Fancy Keyboard[16389] <Error>: _GSRegisterPurpleNamedPortInPrivateNamespace Couldn't register com.apple.accessibility.gax.client with the bootstrap server. Error: unknown error code (1100).
This generally means that another instance of this process was already running or is hung in the debugger.
Sep 29 12:02:16 iPhone-6 com.apple.xpc.launchd[1] (com.apple.xpc.launchd.domain.system) <Error>: Caller not allowed to perform action: Fancy Keyboar.16389, action = pid-local registration, code = 1: Operation not permitted, uid = 501, euid = 501, gid = 501, egid = 501, asid = 0
Sep 29 12:02:17 iPhone-6 ReportCrash[16390] <Error>: task_set_exception_ports(B07, 400, D03, 0, 0) failed with error (4: (os/kern) invalid argument)
Any ideas what that means?

Related

Inability Sharing a file via iOS Share Extension

I've received the following log from a customer who claims to be sharing photos from the photos app via Share Extension. The customer is making an assumption that internet connection to the router is bad. The behavior as described by the customer is as follows:
Upload a file via share extension via a bad connection
Let device sleep, in our case the connection should get terminated and the file is not uploaded to our servers.
Attempt to re-upload the same file.
Expected Result:
The file should upload fine.
Actual Result:
Share Extension never loads, that means that user can infinitely click the app icon with no success of showing the view.
Adding to this, we have never been able to reproduce such a problem in house. However, the customer can do so every time while in the airport.
I took a peek in his device logs, and I can see the following with no clue what is going in. Starting from the out of bound exception which I can't explain due to the fact that the view never loaded.
Any idea or did anyone else encounter the same problem?
Apr 13 15:11:07 audi pkd[153] : assigning plug-in
(2.1.2) to plugin sandbox
Apr 13 15:11:07 audi pkd[153] : enabling pid=386 for plug-in
(2.1.2)
D89CEF37-B025-4C6F-A8B6-FBB6B4D94A84/private/var/containers/Bundle/Application/AF69E215-04AE-4929-A8C8-51BE8FADF397/.app/PlugIns/.appex
Apr 13 15:11:07 audi kernel[0] : xpcproxy[451] Container:
/private/var/mobile/Containers/Data/PluginKitPlugin/669C0F52-1C21-441D-9906-E2EFBD8A7D00(sandbox)
Apr 13 15:11:08 audi kernel[0] :
LwVM::_generateMappedExtentsList - failed to map unmap range to partition
Apr 13 15:11:08 audi backboardd[60] : Unable to
bootstrap_look_up port with name .gsEvents:
unknown error code (1102) Apr 13 15:11:08 audi[451] :
* Terminating app due to uncaught exception 'NSRangeException', reason: '* -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 ..
0]' First throw call stack: (0x18400ae38 0x18366ff80 0x183eeb158
0x1000e4a40 0x1000e4738 0x183a554bc 0x183a5547c 0x183a5ab84
0x183fc0dd8 0x183fbec40 0x183ee8d10 0x1857d0088 0x1891bdf70
0x183cacd74 0x183caea2c 0x184acbd30 0x18b2e2c48 0x18b2e28dc
0x18b2e2c6c 0x1848de058 0x183a868b8)
Apr 13 15:11:08 audi MobileSlideShow[386] : plugin
interrupted
Apr 13 15:11:08 audi MobileSlideShow[386] : plugin
invalidated
Apr 13 15:11:08 audi diagnosticd[84] : error evaluating process
info - pid: 451, puniqueid: 451
Apr 13 15:11:08 audi mediaserverd[28] : ''
(pid = 451) setting DiscoveryMode =
DiscoveryMode_None, currentDiscoveryMode = DiscoveryMode_None
Apr 13 15:11:08 audi MobileSlideShow[386] : 2016-04-13
15:11:08.629|MobileSlideShow|0x14ce07cd0: HOST: Failed to load remote
view controller with error: Error Domain=NSCocoaErrorDomain Code=4099
"The connection to service named
.viewservice was interrupted, but the
message was sent over an additional proxy and therefore this proxy has
become invalid." UserInfo= {NSDebugDescription=The connection to
service named .viewservice was interrupted,
but the message was sent over an additional proxy and therefore this
proxy has become invalid.}
Apr 13 15:11:08 audi MobileSlideShow[386] : 2016-04-13
15:11:08.633|MobileSlideShow|0x14ce07cd0: Sheet not being presented,
calling premature completion
Apr 13 15:11:08 audi com.apple.xpc.launchd[1]
([451]) : Service exited due to
signal: Abort trap: 6
Apr 13 15:11:08 audi ReportCrash[452] : Formulating report for
corpse[451]
Apr 13 15:11:08 audi ReportCrash[452] : Report of type
'109(109_)' not saved because the limit of 25 logs has been
reached
Apr 13 15:11:08 audi ReportCrash[452] : Notice: This report is
abbreviated for syslog inclusion because it could not be saved to
disk.
Symbolication may be possible by manually cleaning up and including
the Binary Image section of a full report from this same device – good
luck!
Apr 13 15:11:08 audi ReportCrash[452] : Process:
[451] Path:
/private/var/containers/Bundle/Application/AF69E215-04AE-4929-A8C8-51BE8FADF397/.app/PlugIns/.appex/
in many cases the file is large, and connection is being freed before finishing, or something in same vane is happing, if it is something in this vane, a possible way around, write your file to app document folder first, then upload via a URL link from your document folder in app like this: (example with an image)
let documentsDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let path = documentsDirectoryPath.appending("/outImage.jpg")
let outURL = URL(fileURLWithPath: path)
try? FileManager.default.removeItem(at: outURL)
if let data2c = self.newImage.jpegData(compressionQuality:1.0)
{
do
{
try data2c.write(to: outURL)
DispatchQueue.main.async
{
var filesToShare = [Any]()
filesToShare.append(outURL)
let activityVC = UIActivityViewController(activityItems: filesToShare, applicationActivities: nil)
activityVC.excludedActivityTypes = [.print,.assignToContact,.copyToPasteboard,.addToReadingList,.markupAsPDF,.postToTencentWeibo,.postToTencentWeibo]
activityVC.popoverPresentationController?.sourceView = self.view
activityVC.preferredContentSize = CGSize(width: self.view.frame.size.width, height: self.view.frame.size.height-60)
activityVC.modalPresentationCapturesStatusBarAppearance = true
self.present(activityVC, animated: true, completion: nil)
}
} catch {
print("Couldn't write file")
}
}

Crash iOS application

My application crash sometimes but I can't reproduce this, and I don't know the reason of crash. Below a link for what I found in crash file (ips):
http://we.tl/SRb84J750O
And in logs I found that
SpringBoard[197] <Warning>: HW kbd: Failed to set (null) as keyboard focus
Dec 6 15:56:16 DreamIt backboardd[55] <Warning>: |GAXGeneral|info| Did verify event: [Guided Access App Did go Invalid]. Outcome: [In Progress - Delayed].
Dec 6 15:56:16 DreamIt mediaserverd[190] <Notice>: '' com.parisinside(pid = 359) setting DiscoveryMode = DiscoveryMode_None, currentDiscoveryMode = DiscoveryMode_None
Dec 6 15:56:16 DreamIt mediaserverd[190] <Notice>: '' com.parisinside(pid = 359) setting DiscoveryMode = DiscoveryMode_None, currentDiscoveryMode = DiscoveryMode_None
Dec 6 15:56:17 DreamIt mediaserverd[190] <Notice>: 'FigPlayer - 389' (pid = 389) setting DiscoveryMode = DiscoveryMode_None, currentDiscoveryMode = DiscoveryMode_None
Dec 6 15:56:17 DreamIt UserEventAgent[23] <Notice>: jetsam: kernel termination snapshot being created
Dec 6 15:56:17 DreamIt ReportCrash[968] <Warning>: saved type '298' report (1 of max 25) as /var/mobile/Library/Logs/CrashReporter/JetsamEvent-2015-12-06-155617.ips
Dec 6 15:56:17 DreamIt SpringBoard[197] <Warning>: Application 'UIKitApplication:com.parisinside[0xa877]' was killed by jetsam.
Dec 6 15:56:17 DreamIt UserEventAgent[23] <Warning>: 375564219023: id=com.parisinside pid=359, state=0
Dec 6 15:56:17 DreamIt SpringBoard[197] <Warning>: [MPUSystemMediaControls] Updating supported commands for now playing application.
Dec 6 15:56:17 DreamIt backboardd[55] <Warning>: |GAXGeneral|info| Did verify event: [Guided Access App Did go Invalid]. Outcome: [Success - Session App is Frontmost].
Dec 6 15:56:17 DreamIt searchd[969] <Alert>: (Error) IndexGeneral in si_playBackMobileRecords:2313: played back 1 records
Dec 6 15:56:18 DreamIt searchd[969] <Alert>: (Error) IndexGeneral in si_playBackMobileRecords:2313: played back 1 records
Dec 6 15:56:18 DreamIt searchd[969] <Alert>: (Error) IndexGeneral in si_playBackMobileRecords:2313: played back 2 records
Dec 6 15:56:18 DreamIt searchd[969] <Warning>: ====^^^^ DuetExpert missing data, count -> people:0 applicationDeepLinks:0 applications:8 requests:1 missingAllDataRequests:0
Dec 6 15:56:18 DreamIt SpringBoard[197] <Warning>: Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x15f039b90 V:[UIView:0x15f029410]-(-1)-| (Names: '|':UITableViewCellContentView:0x15f7ab4c0 )>",
"<NSLayoutConstraint:0x15f6dbae0 V:[UIView:0x15e4abc40]-(0)-| (Names: '|':UIView:0x15f029410 )>",
"<NSLayoutConstraint:0x15e3cae20 UIView:0x15e4abc40.top == UITableViewCellContentView:0x15f7ab4c0.top>",
"<NSLayoutConstraint:0x15f7387c0 V:[UIView:0x15e4abc40(119)]>",
"<NSLayoutConstraint:0x15e327a20 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x15f7ab4c0(117.5)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x15f7387c0 V:[UIView:0x15e4abc40(119)]>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
Dec 6 15:56:18 DreamIt tccd[192] <Notice>: Refusing client without bundle identifier (/usr/libexec/duetexpertd)

Segmentation Fault when calling NSRegularExpression:matchesInString

I have a crash in my (deployed) iOS-App while starting. It looks like it happens in some lib-functions and I'm not sure how this could be. The console output says
Oct 15 17:05:42 iPadMiniR MyApp[260] <Warning>: INFO: downloading package data 5 of 5...
Oct 15 17:05:42 iPadMiniR ReportCrash[261] <Error>: task_set_exception_ports(B07, 400, D03, 0, 0) failed with error (4: (os/kern) invalid argument)
Oct 15 17:05:42 iPadMiniR ReportCrash[261] <Notice>: ReportCrash acting against PID 260
Oct 15 17:05:42 iPadMiniR diagnosticd[150] <Error>: error evaluating process info - pid: 260, punique: 260
Oct 15 17:05:42 iPadMiniR ReportCrash[261] <Notice>: Formulating crash report for process myApp[260]
so I analyzed the Crash Report:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000058
Triggered by Thread: 4
[...]
Thread 4 name: Dispatch queue: com.apple.root.default-qos
Thread 4 Crashed:
0 libobjc.A.dylib 0x00000001946d3bd0 objc_msgSend + 16
1 Foundation 0x0000000184ac884c -[NSSimpleRegularExpressionCheckingResult initWithRanges:count:regularExpression:] + 176
2 Foundation 0x0000000184aaf2a4 -[NSRegularExpression(NSMatching) enumerateMatchesInString:options:range:usingBlock:] + 1340
3 Foundation 0x0000000184ac8720 -[NSRegularExpression(NSMatching) matchesInString:options:range:] + 152
4 myApp [...]
I know what a Segfault is but I don't understand, why it can happen in a Library function. I already searched in Apple's developer documentation of NSRegularExpression (under enumerateMatchesInString:options:range:usingBlock: and matchesInString:options:range:) and googled for NSSimpleRegularExpressionCheckingResult, but I didn't find a thing that helps. In similar questions here on StackOverflow, the SIGSEGV occurs not in library functions but in the user's code.
My question is: How could a Segfault in this context occur? Doesn't the objective-C-Library-Functions check pointers? Or could it be that a pointer become dangled between the check and the usage (weak pointers, but I don't have any of them)?
I'm pretty new to iOS development, so thanks for any help :)
I use XCode 6.0.1 and iOS 8.0.2.

MFMessageComposeViewController messages disappear and fail to send after send button is pressed (iOS 7)

I have an app in which the user can select an image and send it to a friend by attaching the image to an instance of MFMessageComposeViewController. After pressing send in the MFMCVC view, things work as expected some of the time--the message with the image is successfully sent to the recipient or a "message failed" label shows up along side the message in the native iMessage client (but in both cases, the image is visible in the native client). However, there's a bug that occurs ~half the time after pressing send (on an iPhone 4 running iOS 7). The message--attachment and all--vanishes, never to be seen again. The recipient never receives the message and it does not appear in the sender's message channel in iMessage.
I'm fairly certain that this is a bug in Apple's MFMessageComposeViewController itself because the API is dead simple and I was able to reliably reproduce the bug in a separate demo app https://github.com/timcour/mf-message-compose-fail-demo.git.
- (void)displaySMSComposerSheet
{
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = self;
NSData *data = [_imageDataCache objectForKey:[_imageURLs objectAtIndex:_currentIndex]];
[picker addAttachmentData:data
typeIdentifier:(NSString *)kUTTypeGIF
filename:#"share.gif"];
if (![self.recipientTextField.text isEqualToString:#""]) {
picker.recipients = [NSArray arrayWithObject:self.recipientTextField.text];
}
picker.body = [NSString stringWithFormat:#"image: %i", _currentIndex];
[self presentViewController:picker animated:YES completion:NULL];
}
After observing the UI during quite a few success and failure cases, it appears to be a race condition in the compose view exacerbated by the OS being stressed--not sure if it's memory or CPU stress (or both?). In any case, when sending is successful, the contents of the message channel are populated with its the contents of its respective conversation immediately after selecting a contact, visibly appending the new message to the end. But when the bug surfaces and the message disappears, the conversation's previous messages typically only appear after the send button is pressed without the new message appearing. If this is indeed a race condition, one guess is that it's a race between the composer VC's message fetching mechanism and -viewDidLoad.
Has anyone run across this before and/or know of a workaround? I will be submitting a bug report to apple, but I'd like to find a solution that does not include waiting for a fix from Apple.
Notes:
Messages vanish most frequently on iPhone 4 and iPhone 5s, but rarely on the iPod touch 5th generation (all running iOS 7.0.2).
The bug can be reproduced most easily using the https://github.com/timcour/mf-message-compose-fail-demo.git app on the iPhone 4 by sending the 20 images to the same person as fast as you can.
There is a separate (but probably related) bug. After selecting entering an email address of a contact in the MFMCVC view, the vc determines whether it should send an iMessage or MMS. Some of the time during testing, it made the wrong determination and attempted to send the message as an MMS despite the recipient iMessage account not having a phone number associated with it. This resulted in a message that looked to the sender like it was sent successfully, but which actually failed to reach its destination.
This does not seem to be the "iMessage fails to send messages" bug that many users have complained to Apple about.
UPDATE:
Here is the stacktrace that is logged when a message disappears and fails to send:
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] ****** Failed to complete all history queries in a blocking request: (
"********-****-****-****-************"
)
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 1 IMFoundation 0x0000000193acb948 IMLogBacktraceToDepth + 80
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 2 IMCore 0x00000001939d1df8 _NSStringFromIMMessageError + 22604
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 3 IMCore 0x00000001939c7670 IMPersonStatusComparator + 261116
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 4 ChatKit 0x00000001923c96b8 <redacted> + 240
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 5 ChatKit 0x00000001923933b0 <redacted> + 88
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 6 ChatKit 0x000000019237cb70 <redacted> + 996
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 7 ChatKit 0x0000000192414cdc <redacted> + 76
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 8 Foundation 0x000000018e8c0834 __NSFireDelayedPerform + 392
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 9 CoreFoundation 0x000000018dd1768c <redacted> + 28
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 10 CoreFoundation 0x000000018dd172fc <redacted> + 804
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 11 CoreFoundation 0x000000018dd15024 <redacted> + 1324
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 12 CoreFoundation 0x000000018dc55b78 CFRunLoopRunSpecific + 452
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 13 GraphicsServices 0x0000000193677830 GSEventRunModal + 168
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 14 UIKit 0x0000000190c9305c UIApplicationMain + 1156
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 15 MessagesViewService 0x000000010009bd80 MessagesViewService + 15744
Oct 21 12:09:17 Davids-iPhone MessagesViewService[2680] <Warning>: [Warning] 16 libdyld.dylib 0x000000019a25baa0 <redacted> + 4
Oct 21 12:09:20 Davids-iPhone SpringBoard[16] <Warning>: LICreateIconForImage passed NULL CGImageRef image
Your problem is that you do not have a strong reference to picker. Make that an ivar, and nil it when the picker has totally completed its work.
Try to make sure your time and date is set correctly. I altered mine to download an emulator and forgot to change it back after. My messages then started to disappear. After I fixed the time the problem was corrected. Cheers

NSAssert works in debugger but the message is missing from console when run directly on device

NSAssert works fine in Xcode 4 (up to 4.6 inclusive) when running debugger. Assertion fires, you breakpoint it, then it outputs the assertion message.
But when running outside the debugger (debug build on device), assertions fire - but with no message.
This makes assertions useless: you can see the line number which asserted, but the detailed message from the programmer has been wiped.
Is this an Xcode problem? A clang/LLVM problem? Is it a setting with the wrong value? Or is there a workaround?
Example code:
NSAssert(FALSE, #"X was invalid: %i", x );
Example output (console):
<Warning>: *** Assertion failure in -[myClass method:], myClass.m:124
<Notice>: Formulating crash report for process MyApp[82]
Expected output (console):
<Warning>: *** Assertion failure in -[myClass method:], myClass.m:124
<Warning>: *** "X was invalid: -435"
<Notice>: Formulating crash report for process MyApp[82]
NB: I'm only guessing how Apple would format the assertion message.
UPDATE: Found the problem. I was wrong with my original description:
The message was not being output to console while running in the debugger
Two observations:
The NSAssert is intended for debugging purposes only. When you build a release version of your app, NSAssert does nothing.
When you use NSAssert in a debug build of an app running on a device (not through the debugger), the message is in the device's console, not Xcode's. If you go to the "Organizer" in Xcode, choose "Devices", select your device and look at the "Console", you'll see your assertion there.
For example, I put in a line of code in a "Assertion Test" app:
NSAssert(FALSE, #"Assertion performed here");
When I look at the device's "Console" through Xcode's Organizer, I see:
Aug 6 09:10:53 Rob-iPod amfid[200] : Aug 6 09:10:53 SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Aug 6 09:10:53 Rob-iPod Assertion Test[199] : *** Assertion failure in -[ViewController viewDidLoad], /Users/rryan/Documents/Development/Xcode/Assertion Test/Assertion Test/ViewController.m:21
Aug 6 09:10:53 Rob-iPod kernel[0] : launchd[199] Builtin profile: container (sandbox)
Aug 6 09:10:53 Rob-iPod kernel[0] : launchd[199] Container: /private/var/mobile/Applications/7A7A62EF-8CEC-4388-932D-5C02DE77B841 (sandbox)
Aug 6 09:10:53 Rob-iPod Assertion Test[199] : *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Assertion performed here'
*** First throw call stack:
(0x315592a3 0x391d797f 0x3155915d 0x31e2eab7 0x843f7 0x33380595 0x333c0d79 0x333bcaed 0x333fe1e9 0x333c183f 0x333b984b 0x33361c39 0x333616cd 0x3336111b 0x350535a3 0x350531d3 0x3152e173 0x3152e117 0x3152cf99 0x3149febd 0x3149fd49 0x333b8485 0x333b5301 0x84149 0x3960eb20)
Aug 6 09:10:54 Rob-iPod ReportCrash[201] : Formulating crash report for process Assertion Test[199]
Aug 6 09:10:54 Rob-iPod com.apple.launchd[1] (UIKitApplication:com.robertmryan.Assertion-Test[0x7be0][199]) : (UIKitApplication:com.robertmryan.Assertion-Test[0x7be0]) Job appears to have crashed: Abort trap: 6
Aug 6 09:10:54 Rob-iPod backboardd[26] : Application 'UIKitApplication:com.robertmryan.Assertion-Test[0x7be0]' exited abnormally with signal 6: Abort trap: 6
Aug 6 09:10:54 Rob-iPod ReportCrash[201] : libMobileGestalt copySystemVersionDictionaryValue: Could not lookup ReleaseType from system version dictionary
Aug 6 09:10:54 Rob-iPod ReportCrash[201] : Saved crashreport to /var/mobile/Library/Logs/CrashReporter/Assertion Test_2013-08-06-091053_Rob-iPod.plist using uid: 0 gid: 0, synthetic_euid: 501 egid: 0
If you look at that fifth line, you'll see the assertion message there.
This is very situation specific ... I hadn't realised, but we had HockeyApp / QuincyKit embedded in the app.
Hockey appears to have a nasty bug where it:
captures NSAssertions
Allows them to crash
Deletes the message
Deletes the logging
... does not upload anything to the Hockey website
So ... the messages were visible in the debugger, but only in the debugger variables - I was a fool, and not paying attention: they weren't appearing in the console.
To be clear: some assertions sometimes appear in Hockey (looking at the Hockey console), but most assertions are silently missing. 100% of App crashes appear, but only about 10% of assertion crashes.

Resources