I've got an iOS app with lots of extensions, some of them complex and doing a lot of stuff. After a bug I'd like to be able to use OSLogStore to get a holistic picture of logging for the app and its extensions and send that to a debugging server to retrospectively view logs for the app and its extensions.
The constructor is OSLogStore.init(scope: OSLogStore.Scope), however scope only has one value .currentProcessIdentifier.
Implying if that is called from within the app it can only get access to logging for its process only. I tried it out to confirm this is the case - if I log something in an extension (using Logger), then run the app with code like this:
let logStore = try! OSLogStore(scope: .currentProcessIdentifier)
let oneHourAgo = logStore.position(date: Date().addingTimeInterval(-3600))
let allEntries = try! logStore.getEntries(at: oneHourAgo)
for entry in allEntries {
look at the content of the entry
Then none of the entries are from the extension.
Is there anyway from within the app I can access logging made within an extension?
.currentProcessIdentifier
means what it says: It gives you log entries for the current process. It doesn’t include log entries for any other process [1], and the fact that app extensions are related to the current process doesn’t change that.
On iOS and it’s child platforms, that’s the end of the story. On macOS, you have other ways to construct OSLogStore
instances and those can be helpful.
For lots of info about the system log, see Your Friend the System Log.
As always, if you’d like to see things change in the future, I encourage you to file an enhancement request describing your requirements.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"
[1] It doesn’t even give you log entries for previously instances of the current program )-: