我的 AirPrint 代码会连接到仅支持 IPv6 的打印机吗?

Will my AirPrint Code connect to an IPv6-only Printer?

下面是我连接到 IPv4 打印机的代码。一切正常。

NSString *printerURL = @"ipp://192.168.1.3:631/ipp/print" //IPv4 : OK

UIPrinter *myPrint = [UIPrinter printerWithURL:[NSURL URLWithString:printerURL]];
    [myPrint contactPrinter:^(BOOL available) {
        if(!available){
            // Show error
        }
        [printInteraction printToPrinter:myPrint completionHandler:^(UIPrintInteractionController * _Nonnull printInteractionController, BOOL completed, NSError * _Nullable error) {
            // Print
        }];
    }];

因为我没有IpV6打印机,不知道下面的代码会怎么样:

NSString *printerURL = @"ipp://FE80::FE3F:DBFF:FE51:6BA:631/ipp/print" //IPv6 : ????

它会连接到 IPv6 打印机吗?

我既没有 IPv6 打印机,也没有支持 AirPrint 的设备。

但我有一个建议给你,你如何测试你的代码是否适用于 IPv6 连接:

  • 使用 Mac书籍伪造一个环境,使您 LAN/WLAN 中的 iOS 设备认为它们 "see" 并且可以连接到 AirPrint 设备。

详细步骤如下:

  1. 确保为您的Mac图书分配了 IPv6 地址。 (你如何做到这一点超出了这个答案的范围。)

  2. 通过在 cupsd.conf:

    中添加一行,确保您的 MacBook 的 CUPS 服务仅允许 IPv6 连接
     Listen [xxxx::xxxx:xxxx:xxxx:xxxx]:631
     Listen  /private/var/run/cupsd
     # Port 631
    
  3. 确保您的 cupsd.conf 也有此行:

     DefaultAuthType None
    

    这确保您无需在 IPv6 和 AirPrint 功能之上调试 AuthenticationAuthorization 问题。 (一旦您当前的问题得到解决,您可以稍后将其改回。)

  4. 在您的Mac图书上创建一个共享打印队列,并命名为abcd。队列不需要连接到 AirPrint 设备——任何其他打印机都将是 "good enough"。此外,打印机也可以是纯 IPv4、USB 或蓝牙——只要您的 MacBook 可以连接到它。 (你如何做到这一点超出了这个答案的范围。)

  5. 测试您的打印机:确保您的 Mac图书可以打印到它,并确保其他客户端能够打印到共享队列。

  6. 您的 Mac 客户现在可以 "see" 并使用您的 abcd 打印队列 -- 但您的 iOS 客户不能( yet) 查看 AirPrint 设备。

  7. 现在使用 dns-sd 实用程序向您的本地网络宣布一个虚假的 AirPrint 设备,指向名为 abcd 的真实打印队列。该命令的一般语法是这样的:

    dns-sd -P <Name> <Type> <Domain> <Port> <Hostname> <IP> [<TXT>...]
    

    现在 运行 真正的命令,打开 Terminal.app window 并输入:

     dns-sd                 \
       -P AirPrint-abcd     \
       _ipp._tcp,_universal \
       local.               \
       631                  \
       mymacbook.local.                     \
         xxxx::xxxx:xxxx:xxxx:xxxx          \
         pdl="application/pdf,image/urf"    \
         kind="document"                    \
         priority="1"                       \
         product="Model Name of my Printer" \
         rp="printers/abcd"                 \
         URF="DM3"                          \
         Duplex="T"                         \
         Color="T"                          \
         note="Testing AirPrint on MacBook" \
         txtvers="1"                        \
         qtotal="1"                         \
         printer-type="0x0480FFFC"          \
         printer-state="3"                  \
         air="none"                         \
         UUID="54321abc-1234-1234-abcd-ffa8e4bdcbf8"
    

    在这里,

    • xxxx::xxxx:xxxx:xxxx:xxxx 是您的 MacBook
    • 的 IPv6 地址
    • mymacbook 是您的 Mac图书
    • 的主机名
  8. 现在您的 iOS 客户端应该能够看到并使用名为 AirPrint-abcd 的 AirPrint 设备。服务公告还告诉他们,此 AirPrinter 的连接路径是您 MacBook 的 IPv6 地址,要使用的端口是 631。


补充说明:

-P dns-sd 实用程序的参数将向您的本地 LAN/WLAN 发送 Bonjour "proxy announcement"。有关此实用程序的详细信息,请参阅 man dns-sd。有关更多背景信息,请参阅 dns-sd.org and these other answers