|
1788 | 1788 | "startRunning] and -[AVCaptureSession stopRunning] lines, whose Process Image " |
1789 | 1789 | "Path is the client process itself. The state lines that carry ClientStartedSession " |
1790 | 1790 | "are kept only when ClientStartedSession is 1 or a micStolen or cameraStolen flag " |
1791 | | - "is 1; the many state lines with all three at 0 are collected but not listed. " |
| 1791 | + "is 1; the state lines with all three at 0 are collected but not listed. " |
1792 | 1792 | "Client App ID and Client PID are read from the tag the daemon writes before the " |
1793 | 1793 | "message, in the form <object address[pid][app id]>, and from the 'Creating session " |
1794 | | - "for PID' line; in the pairs found in the two logs tested the two PIDs were the same. " |
| 1794 | + "for PID' line; in the logs read (iOS 26.6 and 27.0 privately, and ai16_ios26_sysdiag) the " |
| 1795 | + "two PIDs agreed. " |
1795 | 1796 | "Session Object is that address as logged: it groups the lines of one session, but an " |
1796 | 1797 | "address can be reused, so compare the times as well. Cam/Audio, Background, Mic Stolen, " |
1797 | 1798 | "Camera Stolen, Runtime Error, Interruption Error and Session Status are copied as " |
1798 | | - "logged; this artifact assigns no meaning to the numbers. Runtime Error and Session " |
1799 | | - "Status are read from the iOS 27.0 state lines; the iOS 26.6 state line read " |
1800 | | - "(captureSession_updateRunningCondition) carried neither and they stay blank for it. " |
1801 | | - "In the iOS 27.0 log tested Background, Mic Stolen, Camera Stolen, Runtime Error and " |
| 1799 | + "logged; this artifact assigns no meaning to the numbers. Runtime Error, Interruption " |
| 1800 | + "Error and Session Status are read from the iOS 27.0 state lines; the " |
| 1801 | + "captureSession_updateRunningCondition state line on iOS 26.5.2 (ai16_ios26_sysdiag) " |
| 1802 | + "and on the iOS 26.6 log read carried none of the three, so they stay blank there. " |
| 1803 | + "In the iOS 27.0 log read Background, Mic Stolen, Camera Stolen, Runtime Error and " |
1802 | 1804 | "Interruption Error were identical on every row that carried them, all 0, and every " |
1803 | 1805 | "listed state line had Client Started Session 1 and Cam/Audio 1/0, so those columns " |
1804 | 1806 | "were uniform there. They stay because a different value is what this artifact " |
1805 | | - "exists to surface, and only the synthetic test fixture has exercised one. " |
| 1807 | + "exists to surface: Camera Stolen read 1 on ai16_ios26_sysdiag (below), and the " |
| 1808 | + "other flags have read 1 only in the synthetic test fixture. " |
1806 | 1809 | "Timestamp is the time of the log record as stored, shown in UTC; no time inside a " |
1807 | 1810 | "message is used. " |
1808 | 1811 | "What a row does not establish: a client start line is the daemon's record of the " |
1809 | 1812 | "client's request, not of frames being recorded, and nothing here says whether anything " |
1810 | 1813 | "was saved. A system component can start a session on its own account: in the iOS 27.0 " |
1811 | | - "log tested, every state line with ClientStartedSession at 1 carried the app id of an " |
| 1814 | + "log read, every state line with ClientStartedSession at 1 carried the app id of an " |
1812 | 1815 | "Apple system daemon (com.apple.biometrickitd), while the Camera app's state lines all " |
1813 | 1816 | "read 0 although its sessions were created. An empty result is not evidence that nothing was captured: the log " |
1814 | 1817 | "has a limited window and this artifact reads one daemon's lines. " |
1815 | 1818 | "Not covered: microphone capture that does not go through this daemon (audio sessions, " |
1816 | | - "calls, voice recording) is not collected, and in neither log tested did the audio " |
1817 | | - "flag or a stolen flag read 1, so those columns have been exercised only by the " |
1818 | | - "synthetic test fixture. The camera hardware daemon (appleh*camerad, subsystem " |
1819 | | - "com.apple.isp) is not collected: the lines inspected were connection, light-meter, " |
1820 | | - "flicker-detector and audio-converter bookkeeping with the client PID redacted. " |
1821 | | - "FigFlashlightLocal (torch) lines are written by the same daemon and subsystem, " |
1822 | | - "outnumber the session lines by a wide margin, and are neither collected nor shown " |
1823 | | - "here, so a count of lines from that daemon is not a count of camera use; the " |
| 1819 | + "calls, voice recording) is not collected, and in no log read did the audio " |
| 1820 | + "flag or Mic Stolen read 1, so those two have been exercised only by the synthetic " |
| 1821 | + "test fixture. On ai16_ios26_sysdiag (iOS 26.5.2, read from tracev3 data) Camera " |
| 1822 | + "Stolen read 1 on 6 rows, all captureSession_updateRunningCondition lines for " |
| 1823 | + "com.apple.biometrickitd. On that image every row that carried a Client App ID (78 " |
| 1824 | + "of 102) named com.apple.biometrickitd; the other 24 were 'Creating session for " |
| 1825 | + "PID' lines with the same PID and client-side lines written by biometrickitd. No " |
| 1826 | + "row there came from a third-party app or the Camera app, although the import held " |
| 1827 | + "com.apple.cameracapture lines tagged with the Camera app id and lines written by a " |
| 1828 | + "third-party app, in client state and device selection shapes this artifact does not " |
| 1829 | + "collect. On hc_ios26_sysdiag " |
| 1830 | + "(iOS 26.6) the import held 1,140 com.apple.cameracapture lines and none in the " |
| 1831 | + "session or power-log shapes above. The com.apple.isp subsystem, written by the " |
| 1832 | + "camera hardware daemon (appleh*camerad) and by cameracaptured, is not collected: the " |
| 1833 | + "lines inspected were connection, ISP command, flicker-detector and similar " |
| 1834 | + "bookkeeping with the client PID redacted. " |
| 1835 | + "In the iOS 27.0 log read, FigFlashlightLocal (torch) lines from the same daemon and " |
| 1836 | + "subsystem outnumbered the session lines by a wide margin; neither corpus image held " |
| 1837 | + "that shape. They are not collected here, so a count of lines from that daemon is not a count of camera use; the " |
1824 | 1838 | "device-vendor lines (ClientIsActive, device usage counts, close timers) are also left " |
1825 | 1839 | "out because what they count is not established. Message shapes were read on " |
1826 | 1840 | "iOS 26.6 and iOS 27.0 sysdiagnose logs; those images are not in the public corpus and " |
|
1829 | 1843 | "paths": None, |
1830 | 1844 | "output_types": "standard", |
1831 | 1845 | "artifact_icon": "camera", |
| 1846 | + "sample_data": { |
| 1847 | + "ai16_ios26_sysdiag": "iOS 26.5.2 | 102 rows", |
| 1848 | + "hc_ios26_sysdiag": "iOS 26.6 | 0 rows", |
| 1849 | + }, |
1832 | 1850 | }, |
1833 | 1851 | "logarchive_capture_streaming": { |
1834 | 1852 | "name": "logarchive camera streaming power events", |
1835 | | - "description": "Unified log lines from the camera capture daemon's power logger " |
1836 | | - "(FigCaptureLogCameraStreamingPowerEvent) with the PID, application ID, " |
| 1853 | + "description": "Unified log lines from the camera capture daemon's " |
| 1854 | + "FigCaptureLogCameraStreamingPowerEvent function with the PID, application ID, " |
1837 | 1855 | "device type, streaming flag and port type as logged. Each row is one log " |
1838 | 1856 | "line.", |
1839 | 1857 | "author": "@danjethh, Claude", |
|
1842 | 1860 | "requirements": "logarchive module must be executed first", |
1843 | 1861 | "category": "Unified Logs", |
1844 | 1862 | "notes": "Fields are copied as logged and no meaning is assigned to the numbers. In the logs " |
1845 | | - "tested the streaming flag was logged as 1 and 0 and the application ID as <private>, " |
| 1863 | + "read the streaming flag was logged as 1 and 0 and the application ID as <private>, " |
1846 | 1864 | "so the client has to be taken from the PID, for example by matching it with Client PID " |
1847 | 1865 | "in the capture sessions artifact; that match was not validated against a known capture. " |
1848 | | - "In the iOS 27.0 log tested the lines came in 1/0 pairs for a single device type and port " |
1849 | | - "type, written for an Apple system daemon's session. A line records the power logger's " |
1850 | | - "report, not a saved recording. The related cpls_logCameraStreamingPowerEvents lines, " |
| 1866 | + "In the iOS 27.0 log read the lines came in 1/0 pairs for a single device type and port " |
| 1867 | + "type, written for an Apple system daemon's session. A line records the daemon's power " |
| 1868 | + "event, not a saved recording. The related cpls_logCameraStreamingPowerEvents lines, " |
1851 | 1869 | "which carry a time inside the message, are not collected. Timestamp is the log record " |
1852 | 1870 | "time as stored, in UTC. An empty result is not evidence that the camera was not " |
1853 | | - "streaming. In the iOS 27.0 log tested Application ID (as logged) read <private>, Device Type " |
| 1871 | + "streaming. In the iOS 27.0 log read Application ID (as logged) read <private>, Device Type " |
1854 | 1872 | "(as logged) 20 and Port Type (as logged) PortTypeFrontInfrared on every row, and Process " |
1855 | | - "Image Path and Process ID held one value each. The test fixture is synthetic.", |
| 1873 | + "Image Path and Process ID held one value each. On ai16_ios26_sysdiag (iOS 26.5.2) " |
| 1874 | + "the 12 rows had the same shape: 6 with Streaming 1 and 6 with 0, all <private>, " |
| 1875 | + "20 and PortTypeFrontInfrared, and their PID matched the Client PID of that " |
| 1876 | + "image's com.apple.biometrickitd session lines. The test fixture is synthetic.", |
1856 | 1877 | "paths": None, |
1857 | 1878 | "output_types": "standard", |
1858 | 1879 | "artifact_icon": "video", |
| 1880 | + "sample_data": { |
| 1881 | + "ai16_ios26_sysdiag": "iOS 26.5.2 | 12 rows", |
| 1882 | + "hc_ios26_sysdiag": "iOS 26.6 | 0 rows", |
| 1883 | + }, |
1859 | 1884 | }, |
1860 | 1885 | "logarchive_recording_indicator": { |
1861 | 1886 | "name": "logarchive recording indicator lines", |
|
1867 | 1892 | "last_update_date": "2026-10-19", |
1868 | 1893 | "requirements": "logarchive module must be executed first", |
1869 | 1894 | "category": "Unified Logs", |
1870 | | - "notes": "The text after '[Recording Indicator]' is in the Event Message column as logged. " |
1871 | | - "In the logs tested the activity-changed line carried an empty set, so a row does not " |
| 1895 | + "notes": "The whole message, prefix included, is in the Event Message column as logged. " |
| 1896 | + "In the logs read the activity-changed line carried an empty set, so a row does not " |
1872 | 1897 | "say which sensor was active; a set with entries was not seen, and the synthetic " |
1873 | 1898 | "fixture's entry is invented to exercise the pass-through. Whether the on-screen " |
1874 | 1899 | "indicator was visible at a time is not established by these lines. The same prefix is " |
|
1878 | 1903 | "sessions and streaming events, not as proof of recording. Timestamp is the log " |
1879 | 1904 | "record time as stored, in UTC. An empty result is not evidence that the indicator " |
1880 | 1905 | "was not shown. Process Image Path held one value (SpringBoard) on every row in the " |
1881 | | - "logs tested.", |
| 1906 | + "logs read. On hc_ios26_sysdiag (iOS 26.6) the one row was an activity-changed " |
| 1907 | + "line with an empty set. On ai16_ios26_sysdiag (iOS 26.5.2) all 51 '[Recording " |
| 1908 | + "Indicator]' lines were opacity or 'Should force high level layer' lines, so the " |
| 1909 | + "artifact gave no row. The layer creation and rendering assertion shapes were seen " |
| 1910 | + "only in the synthetic fixture.", |
1882 | 1911 | "paths": None, |
1883 | 1912 | "output_types": "standard", |
1884 | 1913 | "artifact_icon": "eye", |
| 1914 | + "sample_data": { |
| 1915 | + "ai16_ios26_sysdiag": "iOS 26.5.2 | 0 rows", |
| 1916 | + "hc_ios26_sysdiag": "iOS 26.6 | 1 row", |
| 1917 | + }, |
1885 | 1918 | }, |
1886 | 1919 | } |
1887 | 1920 |
|
@@ -2542,8 +2575,9 @@ def logarchive_artifacts(context): |
2542 | 2575 | -- logarchive_capture_sessions and logarchive_capture_streaming. Collected here as |
2543 | 2576 | -- well as filtered in the dependent artifacts, or the rows never reach the table |
2544 | 2577 | -- they read. The subsystem condition keeps this to the capture daemon's session |
2545 | | - -- and power-log lines: the same subsystem carries tens of thousands of torch |
2546 | | - -- (FigFlashlightLocal) and device-vendor lines that no marker below matches. The |
| 2578 | + -- and power-log lines: in the iOS 27.0 log read, the same subsystem carried tens of |
| 2579 | + -- thousands of torch (FigFlashlightLocal) and device-vendor lines that no marker below |
| 2580 | + -- matches. The |
2547 | 2581 | -- ClientStartedSession state lines are collected whole; the dependent artifact |
2548 | 2582 | -- lists only those with a start or a stolen flag set. |
2549 | 2583 | OR (subsystem = 'com.apple.cameracapture' |
|
0 commit comments