Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/build_uxplay-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ jobs:
# remove unnecessary DLLs so we get a smaller installer
- name: Prune compilation artifact directory
run: |
$artifactDir = "D:\a\uxplay-windows\uxplay-windows\UxPlay\build\artifact"
$keepListFile = "D:\a\uxplay-windows\uxplay-windows\dll-libs-list.txt"
$artifactDir = "$env:GITHUB_WORKSPACE\UxPlay\build\artifact"
$keepListFile = "$env:GITHUB_WORKSPACE\dll-libs-list.txt"

# Read patterns from the keep list (can include wildcards)
$keepPatterns = @()
Expand Down Expand Up @@ -131,8 +131,8 @@ jobs:

pyinstaller --noconsole --onedir --clean --name uxplay-windows --icon=icon.ico tray.py

cp -r D:\a\uxplay-windows\uxplay-windows\UxPlay\build\artifact\* D:\a\uxplay-windows\uxplay-windows\dist\uxplay-windows\_internal
cp D:\a\uxplay-windows\uxplay-windows\icon.ico D:\a\uxplay-windows\uxplay-windows\dist\uxplay-windows\_internal
cp -r $env:GITHUB_WORKSPACE\UxPlay\build\artifact\* $env:GITHUB_WORKSPACE\dist\uxplay-windows\_internal
cp $env:GITHUB_WORKSPACE\icon.ico $env:GITHUB_WORKSPACE\dist\uxplay-windows\_internal

- name: compile the installer with inno setup
run: .$(Join-Path -Path ${env:PROGRAMFILES(X86)} -ChildPath 'Inno Setup 6\\ISCC.exe') $(Join-Path -Path $(Get-Location) -ChildPath "script.iss")
Expand Down
854 changes: 427 additions & 427 deletions dll-libs-list.txt

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions script.iss
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ DisableProgramGroupPage=yes
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputBaseFilename=uxplay-windows
SetupIconFile=D:\a\uxplay-windows\uxplay-windows\icon.ico
SetupIconFile={#SourcePath}\icon.ico
Compression=lzma
SolidCompression=yes
WizardStyle=modern
Expand All @@ -29,8 +29,8 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "D:\a\uxplay-windows\uxplay-windows\dist\uxplay-windows\uxplay-windows.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\a\uxplay-windows\uxplay-windows\dist\uxplay-windows\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "{#SourcePath}\dist\uxplay-windows\uxplay-windows.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#SourcePath}\dist\uxplay-windows\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Expand Down
94 changes: 94 additions & 0 deletions uxplay-windows/.github/workflows/build_uxplay-windows.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: build uxplay-windows
on:
push:
branches:
- main
- master # masterブランチでも動くように追加
workflow_dispatch:

jobs:
build:
name: build uxplay
runs-on: windows-latest
permissions:
contents: write

steps:
- name: checkout
uses: actions/checkout@v4

- name: inno setup
run: |
Invoke-WebRequest https://jrsoftware.org/download.php/is.exe -OutFile is.exe
$hash = (Get-FileHash is.exe -Algorithm SHA256).Hash
if ($hash -ne "160A4418648356E2BA0051B83842C021204DB7F68878B3F4B61168B46C381734") { exit 1 }
start (Join-Path -Path $(Get-Location) -ChildPath "is.exe") /VERYSILENT

- name: mdns
run: |
git clone -b rel/mDNSResponder-214 https://github.com/apple-oss-distributions/mDNSResponder.git --depth 1 mdns214
cp dnssd.vcxproj mdns214\mDNSWindows\DLL\dnssd.vcxproj
& 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\MSBuild.exe' mdns214\mDNSWindows\DLL\dnssd.vcxproj /p:Configuration=Release /p:Platform=x64
mkdir "C:\Program Files\Bonjour SDK\Include" -Force
mkdir "C:\Program Files\Bonjour SDK\Lib\x64" -Force
cp mdns214\mDNSShared\dns_sd.h "C:\Program Files\Bonjour SDK\Include\dns_sd.h"
cp mdns214\mDNSWindows\DLL\x64\Release\dnssd.lib "C:\Program Files\Bonjour SDK\Lib\x64\dnssd.lib"
continue-on-error: true

- name: msys2
uses: msys2/setup-msys2@v2
with:
update: true
install: >-
git zip mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc mingw-w64-x86_64-libplist mingw-w64-x86_64-json-glib
mingw-w64-x86_64-gstreamer mingw-w64-x86_64-gst-plugins-base mingw-w64-x86_64-gst-libav
mingw-w64-x86_64-gst-plugins-good mingw-w64-x86_64-gst-plugins-bad ninja

- name: compile uxplay
shell: msys2 {0}
run: |
git clone https://github.com/FDH2/UxPlay && cd UxPlay
git checkout v1.73
mkdir build && cd build
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release
ninja
mkdir -p artifact/bin artifact/lib
cp -r /mingw64/lib/gstreamer-1.0 artifact/lib/
cp -r /mingw64/bin/*.dll artifact/bin/
cp uxplay.exe artifact/bin/

- name: prune
shell: powershell
run: |
$artifactDir = "UxPlay\build\artifact"
$keepListFile = "dll-libs-list.txt"
$keepPatterns = Get-Content $keepListFile | Where-Object { $_.Trim() }
$allFilesInTarget = Get-ChildItem -Path $artifactDir -Recurse -File
foreach ($currentFile in $allFilesInTarget) {
$shouldKeep = $false
foreach ($pattern in $keepPatterns) {
if ($currentFile.FullName -like "*$pattern*") { $shouldKeep = $true; break }
}
if (-not $shouldKeep) { Remove-Item $currentFile.FullName -Force }
}

- name: pyinstaller
run: |
python -m venv ./venv
.\venv\Scripts\Activate.ps1
pip install --upgrade pip
pip install pyinstaller pystray pillow
pyinstaller --noconsole --onedir --clean --name uxplay-windows --icon=icon.ico tray.py
xcopy /E /I /Y UxPlay\build\artifact\* dist\uxplay-windows\_internal\
copy icon.ico dist\uxplay-windows\_internal\

- name: iscc
run: |
$iscc = Join-Path ${env:PROGRAMFILES(X86)} "Inno Setup 6\ISCC.exe"
& $iscc script.iss

- name: upload
uses: actions/upload-artifact@v4
with:
name: uxplay-windows
path: Output\*.exe
7 changes: 7 additions & 0 deletions uxplay-windows/BUILDING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
## Building from Source
This project also provides GitHub Actions to let you compile the software yourself easily. Follow these steps:

1. [Fork the repo.](https://github.com/leapbtw/uxplay-windows/fork)
2. In the `Actions` tab of your fork, select `build uxplay-windows` and run it

The resulting uxplay-windows installer will be provided as an artifact from the GitHub Action.
56 changes: 56 additions & 0 deletions uxplay-windows/LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Project License Information

This software (uxplay-windows) is licensed under the [GNU General Public License v3.0 (GPLv3)](https://www.gnu.org/licenses/gpl-3.0.html).

uxplay-windows makes use of various software components and libraries, each under their own licenses.

### 1. UxPlay
- License: [GNU General Public License v3.0 (GPLv3)](https://github.com/FDH2/UxPlay/blob/master/LICENSE)
- Source: https://github.com/FDH2/UxPlay

### 2. mDNSResponder
- uxplay-windows is compiled with both parts of mDNSShared and mDNSCore
- Licenses: [Three-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) / [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)
- Sources:
- https://github.com/apple-oss-distributions/mDNSResponder/blob/rel/mDNSResponder-214/LICENSE
- https://github.com/apple-oss-distributions/mDNSResponder/blob/rel/mDNSResponder-214/mDNSShared/dns_sd.h
- https://github.com/apple-oss-distributions/mDNSResponder/blob/rel/mDNSResponder-214/mDNSCore/mDNS.c

### 3. GStreamer
- uxplay-windows redistributes parts of GStreamer and its plugins.
- License: [Lesser General Public License (LGPL)](https://www.gnu.org/licenses/lgpl-3.0.html)
- Users must comply with LGPL terms when redistributing the software.
- Sources:
- https://gstreamer.freedesktop.org/
- https://github.com/GStreamer/gst-plugins-base
- https://github.com/GStreamer/gst-plugins-bad
- https://github.com/GStreamer/gst-plugins-good
- https://github.com/GStreamer/gst-libav

### 4. Inno Setup
- License: [Inno Setup License](https://jrsoftware.org/isinfo.php#license)
- Source: https://jrsoftware.org/isinfo.php

### 5. Material Design Icon File
- uxplay-windows uses a slightly modified icon from Material Design Icons
- License: [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)
- Source: https://pictogrammers.com/docs/general/license/

---

### Build Tools

uxplay-windows uses **MSYS2** and **PyInstaller** during the build process but **does not redistribute these tools**.

- PyInstaller is licensed under GPL 2.0 with a special exception allowing bundling of commercial applications without imposing GPL on the final app. Since uxplay-windows does not modify or redistribute PyInstaller, no additional licensing obligations arise.

- MSYS2 is a collection of software packages, each with its own license. Since uxplay-windows does not redistribute MSYS2 components, you only need to comply with the licenses of any third-party libraries (Gstreamer) included in uxplay-windows.

---

## Disclaimer

The license information provided here is based on my best understanding of the licenses of the respective components at the time of this writing.
I make no guarantee that it is accurate or complete. Users of this project are responsible for ensuring compliance with the licenses of all included components.

If there's any problem or question regarding licensing, please contact me and I will respond as soon as possible to address your concerns.
56 changes: 56 additions & 0 deletions uxplay-windows/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
> [!NOTE]
> (16 mar 2026) i am actively working on an update for uxplay-windows on other branches
> the goal is to make a better and less buggy software, and hopefully drop the Bonjour dependency

# FREE AirPlay to your Windows PC
Free as both in "freedom" and "free beer"!

## Installation
Download the latest version of uxplay-windows from [**releases**](https://github.com/leapbtw/uxplay-windows/releases/latest).

After installing, control uxplay-windows from it's [tray icon](https://www.odu.edu/sites/default/files/documents/win10-system-tray.pdf)! Right-click it to start or stop AirPlay. You can also set it to run automatically when your PC starts

## FAQ — Please Read!
> [!NOTE]
> *What is uxplay-windows?*
>
> [UxPlay](https://github.com/FDH2/UxPlay/) allows you to screen share from your Apple devices to non-Apple ones using AirPlay.
>
> [uxplay-windows](.) (this project) wraps binaries of UxPlay into a fully featured App for Windows 10/11 users, making it easier for those who may find compiling UxPlay challenging. Most other software achieving the same functionality as `uxplay-windows` is usually paid and non-free.


> [!TIP]
> *My \<apple device\> can't connect to my PC!!!*
> 1. Check if the `uxplay.exe` is running: right-click the tray icon and restart it.
> 2. Toggle Wi-Fi OFF on your iPhone/iPad/Mac, wait a couple of seconds and reconnect. It might take a few attempts.
> 3. As last resort, close uxplay-windows, open Task Manager and restart `Bonjour Service` from the Services tab. Then reopen uxplay-windows and try again

> [!IMPORTANT]
> *Why is Windows Defender complaining during installation?*
>
> ![alt text](https://raw.githubusercontent.com/leapbtw/uxplay-windows/refs/heads/main/stuff/defender.png "defender")
>
> Just click on `More info` and it will let you install. It complains because the executable is not signed. If you don't trust this software you can always build it yourself! See below.
>
> If prompted by Windows Firewall, please **allow** uxplay-windows to ensure it functions properly.


> [!NOTE]
> *How do I build this software myself?*
>
> Please see [BUILDING.md](./BUILDING.md)
<br>

## TODO
- make colored icon to show if uxplay is running or not
- make an update checker

## Known Issues
- uxplay bugs out when waking PC from Sleep
- you can fix this by killing uxplay.exe and restarting Bonjour Service, and restarting uxplay.exe. Also restarting your PC might fix this.

## Reporting Issues
Please report issues related to the build system created with GitHub Actions in this repository. For issues related to other parts of this software, report them in their respective repositories.

## License
Please take a look at the [LICENSE](./LICENSE).
62 changes: 62 additions & 0 deletions uxplay-windows/dll-libs-list.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# --- Executable ---
*uxplay.exe

# --- GStreamer Core ---
*libgstreamer-1.0*
*libgstbase-1.0*
*libgstapp-1.0*
*libgstaudio-1.0*
*libgstvideo-1.0*
*libgstpbutils-1.0*
*libgstrtp-1.0*
*libgstrtsp-1.0*
*libgstsdp-1.0*
*libgsttag-1.0*
*libgstnet-1.0*
*libgstcontroller-1.0*
*libgstfft-1.0*
*libgstriff-1.0*

# --- GLib / Essential Dependencies ---
*libglib-2.0*
*libgobject-2.0*
*libgmodule-2.0*
*libgio-2.0*
*libintl*
*libiconv*
*libwinpthread*
*libgcc_s_seh*
*libstdc++*
*zlib1.dll*
*libffi*
*libpcre2-8*

# --- Codecs & Multimedia (Essential for AirPlay) ---
*avcodec*
*avformat*
*avutil*
*swresample*
*swscale*
*libplist-2.0.dll*
*libcrypto-3-x64.dll*
*libssl-3-x64.dll*
*SDL2.dll*
*libopus*
*libvorbis*
*libogg*
*libx264*

# --- GStreamer Plugins (DLLs inside lib/gstreamer-1.0) ---
# コア機能に必要なプラグインのみを維持
*libgstcoreelements.dll
*libgstplayback.dll
*libgstapp.dll
*libgstvideoconvert.dll
*libgstaudioconvert.dll
*libgstaudioresample.dll
*libgsttypefindfunctions.dll
*libgstisomp4.dll
*libgstlibav.dll
*libgstvideotestsrc.dll
*libgstaudiotestsrc.dll
*libgstautodetect.dll
Loading