Hi folks, For the last several weeks, Andrej from Mullvad has been working hard at modularizing the wireguard-apple repository, which contains the code we use to build WireGuard for macOS and WireGuard for iOS. The end result is WireGuardKit, an open source Swift PM package that anybody can use to easily build macOS and iOS applications that incorporate WireGuard tunnels. Instructions on usage are available here:
https://git.zx2c4.com/wireguard-apple/about/#wireguardkit-integration Users of WireGuardKit will be able to instantiate a WireGuardAdapter inside of their PacketTunnelProvider network extension. The one that ships with WireGuard for macOS and iOS should serve as a simple reference of ~125 lines of boiler plate code: https://git.zx2c4.com/wireguard-apple/tree/Sources/WireGuardNetworkExtension/PacketTunnelProvider.swift All of the heavy lifting has moved into the WireGuardKit, so that application writers do not need to concern themselves with low-level networking details. In general, the WireGuardKit project has been a great example of positive collaboration between the WireGuard open source project and an industry stakeholder. As Mullvad's mobile apps depend on WireGuard, putting the development time into improving our upstream code so that their downstream code can more easily consume it, as well as contributing fixes and improvements in their downstream code back upstream, not only makes things easier for Mullvad, but also brings shared improvements to everyone else across the WireGuard ecosystem. As more developers begin to use WireGuardKit, we're very interested to hear feedback, particularly about missing features or APIs that might be useful. Enjoy! Jason PS: Today we've also sent new versions of the WireGuard app up to the App Store approval process for iOS and macOS, with a bunch of performance improvements and also support for Apple Silicon. Who knows how long it will take for Apple to approve it -- we've experienced wait times between 1 day and over 1 month -- but keep your eyes peeled for the update.
