Hello and Good day!
We are conducting Bonjour Conformance Test (BCT) for Printer device.
BCT result is PASSED but with warning in Multicast DNS, specifically,
WARNING: SHARED REPLY TIMING - UNIFORM RANDOM REPLY TIME DISTRIBUTION
Other Shared Reply Timing is passed:
PASSED: MULTIPLE QUESTIONS - SHARED REPLY TIMING - UNIFORM RANDOM REPLY TIME DISTRIBUTION
Environment:
BCT Tool Version: 1.5.4 (15400)
MacOS Sequioa 15.5
DUT Firmware : Linux Debian 9
Apple mDNSResponder 1790.80.10
Service types: _ipps._tcp, _uscans._tcp, _ipp._tcp, _uscan._tcp
Router : NEC AtermWR8370N
Setup: 1-to-1 [Mac->Router<-DUT connection]
Based on debug.log, this is where WARNING occurs:
NOTICE 2026-03-04 10:51:06.870187+0900 _shared_reply_timing 04103: Shared reply response times: min = 26ms, max = 114ms, avg = 65.50ms
WARNING 2026-03-04 10:51:06.870361+0900 _shared_reply_timing 04136: 50 percent of the replies within the correct range fell in the interval 20ms and 46ms (should be close to 25%).
PASSED (SHARED REPLY TIMING)
In the same debug.log for MULTIPLE QUESTIONS - SHARED REPLY TIMING is PASSED:
NOTICE 2026-03-04 10:52:29.912334+0900 _shared_reply_timing 04103: Shared reply response times: min = 22ms, max = 112ms, avg = 78.00ms
DEBUG_2 2026-03-04 10:52:29.912849+0900 recv_packet 01997: received packet (558 bytes)
PASSED (MULTIPLE QUESTIONS - SHARED REPLY TIMING)
[Details]
Looking at Bonjour_Conformance_Guideline.pdf
https://download.developer.apple.com/Documentation/Bonjour_Conformance_Test_Guideline/Bonjour_Conformance_Guideline.pdf
there were some differences:
In 1.6.2 Expected Result: Test Result File of Test that All Tests Passed, this is not displayed:
PASSED: SHARED REPLY TIMING - UNIFORM RANDOM REPLY TIME DISTRIBUTION
And in II.8 Shared Reply Timing:
(Ideally, 25% of the answers should fall in each 21ms quadrant of the range 20ms - 125ms.)
and comparing to the debug.log, there was a discrepancy of the interval, because 20ms and 46ms is 26ms interval.
From RFC6762 6. Responding, Ideal range is from 20ms-120ms
Because of this, please advise on the questions below:
I would like to know on the possible cause and resolution for these WARNINGS.
And since in current BCT result, (Test result integrity signature is generated), I would like to know if this is acceptable for BCT certification.
Thank you.
AirPrint
RSS for tagAirPrint allows photo and document printing in your iOS apps and macOS apps without the need to download or install drivers.
Posts under AirPrint tag
5 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
When printing image/photo files via AirPrint, selected finishing options (e.g., Punch) are not applied unless a preset is chosen.
reproduction steps:
Select an image on iOS
Tap Print → choose printer/server
Set Finishing Options → Punch
Print
Observed:
Finishing options not applied
IPP trace shows no finisher attributes in the request
working scenario:
Select any Preset (e.g., Color) before printing
Finishing options are then included in IPP and applied
Note:
Issue does not occur when printing PDFs from iOS; finisher attributes are sent correctly.
Is this expected AirPrint behavior for image jobs, or could this be a bug in how iOS constructs the IPP request for photos?
Issue
After upgrading to Tahoe 26.2, print queues monitored by PaperCut no longer work. The print queue gets paused, and the jobs fail to print.
This issue was discovered during our internal testing prior to the Tahoe 26.2 public release, and a growing number of our mutual customers have also reported it since then.
Root cause
This appears to be due to changes in the behavior of CUPS Sandbox restrictions, which prevent the backend (and filter) from reading/writing to the PaperCut install folder.
Error messages
From syslog.
2025-12-22 16:41:59.283761+1100 0x1daf61 Error 0x0 0 0 kernel: (Sandbox) Sandbox: papercut(5783) deny(1) file-write-data /Library/Printers/PaperCut/Print Provider/print-provider.log
When trying to create a TCP socket from the PaperCut filter.
2025-12-15 19:50:08,403 ERROR: os_tcp_socket_create: getaddrinfo failed: nodename nor servname provided, or not known
Technical details
PaperCut implements print queue monitoring using a CUPS backend (and filter).
CUPS backends and filters run in a security 'sandbox' which limits what they can do (such as file/folder access, create network sockets, and execute sub-processes, etc.).
The PaperCut backend (and filter) relies on some of these operations, so to function correctly, our code updates /etc/cups/cups-files.conf with "Sandboxing relaxed".
Until 26.2, this relaxed mode allowed us to read/write to PaperCut folders, create TCP sockets to communicate with the local PaperCut Application Server, and execute/kill sub-processes.
As an alternative to the relaxed mode, we also tried "Sandboxing off", but that doesn't help either (from CUPS scheduler/conf.h).
typedef enum
{
CUPSD_SANDBOXING_OFF, /* No sandboxing */
CUPSD_SANDBOXING_RELAXED, /* Relaxed sandboxing */
CUPSD_SANDBOXING_STRICT /* Strict sandboxing */
} cupsd_sandboxing_t;
Test code
We can provide a simplified version of our backend that demonstrates the issue if required
Questions
Has the CUPS sandbox relaxing changed? According to the CUPS man pages (cups-files.conf(5)), "Sandboxing relaxed" should still work as before.
If this is the new intended behavior, what are the other options/directives we can use to relax the limitations on CUPS backends and filters?
Description:
1. When initiating the print flow via UIPrintInteractionController, and no printer is initially connected, iOS displays all possible paper sizes in the paper selection UI. However, if a printer connects in the background after this view is shown, the list of paper sizes does not automatically refresh to reflect only the options supported by the connected printer.
2. If the user selects an incompatible paper size (one not supported by the printer that has just connected), the app crashes due to an invalid configuration.
Steps to Reproduce:
Launch the app and navigate to the print functionality.
Tap the Print button to invoke UIPrintInteractionController.
At this point, no printer is yet connected. iOS displays all available paper sizes.
While the paper selection UI is visible, the AirPrint-compatible printer connects in the background.
Without dismissing the controller, the user selects a paper size (e.g., one that is not supported by the printer).
The app crashes.
Expected Result: App should not crash
Once the printer becomes available (connected in the background), the paper size options should refresh automatically.
The list should be filtered to only include sizes that are compatible with the connected printer.
This prevents the user from selecting an invalid option, avoiding crashes.
Actual Result: App crashes
The paper size list remains unfiltered.
The user can still select unsupported paper sizes.
Selecting an incompatible option causes the app to crash, due to a mismatch between UI selection and printer capability.
Demo App Crash : https://drive.google.com/file/d/19PV02wzOJhc2DYI6kAe-uxHuR1Qg15Bu/view?usp=sharing
Apple Files App Crash: https://drive.google.com/file/d/1flHKuU_xaxHSzRun1dYlh8w7nBPJZeRb/view?usp=sharing
Summary:
When running our iPad app on macOS (“Designed for iPad”), invoking
UIPrintInteractionController intermittently fails to show a working print sheet. The same code works reliably on iPad or iOS devices and also on macOS pre 26.
This regression started after updating to macOS Tahoe Version 26.0 (25A354)
Steps to Reproduce:
Launch the attached minimal sample on macOS (Designed for iPad).
Tap “Print plain text”
Expected Results:
The print panel should appear and discover AirPrint printers reliably, as on iPad/iOS or previous mac versions.
Actual Results:
On macOS, the panel fails to appear.
Mac version:
macOS Tahoe 26.0 (25A354)
xCode version:
26.0 (17A324)
Sample Reproduction Code:
struct ContentView: View {
var body: some View {
Button("Print plain text") {
printPlainText()
}
.buttonStyle(.borderedProminent)
.padding()
}
func printPlainText() {
let text = "This is just a sample print"
guard UIPrintInteractionController.isPrintingAvailable else {
NSLog("Printing not available on this device")
return
}
let info = UIPrintInfo(dictionary: nil)
info.outputType = .general
info.jobName = "Plain Text"
let formatter = UISimpleTextPrintFormatter(text: text)
formatter.perPageContentInsets = UIEdgeInsets(top: 36, left: 36, bottom: 36, right: 36)
let ctrl = UIPrintInteractionController.shared
ctrl.printInfo = info
ctrl.printFormatter = formatter
DispatchQueue.main.async {
ctrl.present(animated: true) { _, completed, error in
if let error { NSLog("Print error: \(error.localizedDescription)") }
else { NSLog(completed ? "Print completed" : "Print cancelled") }
}
}
}
}
Also I have added the following values to info.plist:
<key>NSLocalNetworkUsageDescription</key>
<string>This app needs local network access to discover AirPrint printers.</string>
<key>NSBonjourServices</key>
<array>
<string>_ipp._tcp.</string>
<string>_ipps._tcp.</string>
<string>_printer._tcp.</string>
</array>