Compare commits

...

108 commits

Author SHA1 Message Date
aric3435 (INACTIVE)
35e97ea8dd
Updated a lot of uYouEnhanced Code. (v19.40.4-3.0.4)
This release also includes all of the new changes from qnblackcat/uYouPlus.
and the App Version Spoofer has finally been updated again!
2024-10-10 00:40:33 -05:00
aric3435 (INACTIVE)
ae5558784e
v19.40.4-3.0.4 2024-10-10 00:38:36 -05:00
aric3435 (INACTIVE)
8bcf7610bd
Fix uYouEnhanced Injection (Makefile)
for macOS-13 and higher.
2024-10-10 00:24:29 -05:00
aric3435 (INACTIVE)
957577b4d3
Update buildapp.yml dependencies 🔧 2024-10-09 21:24:24 -05:00
GitHub Actions
0001c86396 updated submodules 2024-10-10 00:56:30 +00:00
aric3435 (INACTIVE)
25542b329e
Update Makefile 2024-10-08 21:15:09 -05:00
aric3435 (INACTIVE)
be9fd299c5
Fix compiling errors (Makefile) 2024-10-08 21:12:42 -05:00
aric3435 (INACTIVE)
83acb4f914
Update buildapp.yml (MACOS-13 BUILDING)
Updated to macos-13. macos-12 is deprecated and will be fully supported in December 2024.
2024-10-08 21:12:03 -05:00
aric3435 (INACTIVE)
073bd7f1d4
Update update-submodules.yml 2024-10-08 20:39:47 -05:00
GitHub Actions
1c4b4db76e Added YouLoop bundle 2024-10-09 01:38:51 +00:00
GitHub Actions
8bc8aa4e01 added YouLoop tweak 2024-10-09 01:38:51 +00:00
aric3435 (INACTIVE)
fc485eba7f
Update update-submodules.yml 2024-10-08 20:38:31 -05:00
GitHub Actions
eac8ea2be0 updated submodules 2024-10-09 00:56:31 +00:00
GitHub Actions
44e5da4a78 updated submodules 2024-10-08 00:56:41 +00:00
GitHub Actions
72acee9568 updated submodules 2024-10-07 00:58:56 +00:00
GitHub Actions
c3b8987f7c updated submodules 2024-10-06 01:01:07 +00:00
GitHub Actions
d3cae074fb updated submodules 2024-10-05 00:56:18 +00:00
GitHub Actions
fa4d0cc1b8 updated submodules 2024-10-04 00:57:08 +00:00
GitHub Actions
7366c7b4ae updated submodules 2024-10-03 00:56:56 +00:00
GitHub Actions
2a859c745f updated submodules 2024-10-02 00:56:49 +00:00
aric3435
138f82c7fa
Modernize bug.yaml
Not exactly modernized. I was only referring to updating the Device Info, iOS/iPadOS version to the newer versions and models & added 2 new build configuration options for users.
2024-10-01 17:00:02 -05:00
aric3435
7cb2c7e13f
Update Makefile 2024-10-01 16:44:19 -05:00
aric3435
d2cce0ef0d
Update ES Localizable.strings
Localization by:
d0nh3art
2024-10-01 16:42:49 -05:00
GitHub Actions
02da0f60dd updated submodules 2024-10-01 01:02:21 +00:00
GitHub Actions
9ceb7d1a90 updated submodules 2024-09-30 00:58:51 +00:00
aric3435 (INACTIVE)
0518345af3
v19.33.2-3.0.4 2024-09-29 18:29:47 -05:00
GitHub Actions
77f76566a7 updated submodules 2024-09-28 00:56:14 +00:00
GitHub Actions
00abd27934 updated submodules 2024-09-27 00:56:49 +00:00
GitHub Actions
beaba4a878 updated submodules 2024-09-26 00:56:29 +00:00
GitHub Actions
9e92fe61b1 updated submodules 2024-09-25 04:05:47 +00:00
aric3435 (OLD ACCOUNT)
43de3bff02
Update uYouPlusPatches.h 2024-09-23 02:07:44 -05:00
aric3435 (OLD ACCOUNT)
185a7a0f2b
Update update-submodules.yml 2024-09-22 19:09:32 -05:00
aric3435 (OLD ACCOUNT)
14ea4aaae4
Update uYouPlusPatches.h 2024-09-21 22:48:59 -05:00
aric3435 (OLD ACCOUNT)
b05ef4e76d
Update uYouPlusPatches.xm 2024-09-21 21:30:48 -05:00
aric3435 (OLD ACCOUNT)
ad68078f4f
Fix YouTube Native Share
Fixed by jkhsjdhjs
2024-09-21 19:50:56 -05:00
arichornlover
3fce150969
Update uYouPlusPatches.h 2024-09-12 17:57:28 -05:00
arichornlover
ba125c3c33
Update uYouPlusPatches.xm 2024-09-12 17:56:26 -05:00
arichornlover
88f821d348
Update LowContrastMode Option (uYouPlusSettings.xm) 2024-09-11 20:33:25 -05:00
arichornlover
f787877e2f
Remove YTLitePlus alternative
I suggest no longer using YTLitePlus, the tweak isn’t bad in any way but it’s just not compatible with YTLite v5.0x+. I’m not disrespecting anyone. I’m just removing it.
2024-09-02 13:24:34 -05:00
arichornlover
d283156d2c
Update uYouPlus.h 2024-09-01 03:54:50 -05:00
arichornlover
3af0464d13
Revamp uYouPlusSettings.xm
Has changed a lot, thanks to bhackel for helping!
2024-08-25 13:41:06 -05:00
arichornlover
41b50a2591
Create SettingsKeys.h 2024-08-25 13:36:09 -05:00
arichornlover
df32a653f7
Update YouTube-X again (uYouPlus.xm) 2024-08-16 20:05:33 -05:00
arichornlover
064774b911
Added new option “YouTube Sign-In Patch” 2024-08-01 00:54:03 -05:00
arichornlover
c08e2fcfd5
Update YouTube-X (uYouPlus.xm) 2024-07-30 15:27:56 -05:00
arichornlover
e91b64b248
Re-add missing youtube-native-share 0.2.3
I accidentally reverted this. It should still work as intended.
2024-07-30 11:35:59 -05:00
arichornlover
d16a0ec73d
Update YouTube-native-share to 0.2.3 & re-added Google Sign In Fix 2024-07-30 11:33:02 -05:00
arichornlover
6300fd4cac
Update .gitmodules 2024-07-23 10:59:21 -05:00
arichornlover
b681d2140c
Update uYouPlus.h 2024-07-19 14:37:05 -05:00
arichornlover
602b7b76a8
Update uYouPlus.xm 2024-07-19 14:35:54 -05:00
arichornlover
08c51e5e5f
Revamp uYouPlus.xm 2024-07-19 14:34:47 -05:00
arichornlover
f37c53b3fb
Update uYouPlus.h 2024-07-19 11:30:16 -05:00
arichornlover
1eb035594b
Improved update-submodules-template.txt 2024-07-18 12:30:29 -05:00
arichornlover
755dde6cd1
New uYouPlusPatches.h Headers
Fixes compiling errors.

These changes were ported from arichornloverALT/uYouEnhanced
2024-07-15 14:49:40 -05:00
arichornlover
2ecb12f80c
Update buildapp.yml compiling 2024-07-15 14:45:07 -05:00
arichornlover
3c4441030f
Update Makefile 2024-07-15 14:42:13 -05:00
arichornlover
1b3a422a61
Update uYouPlusPatches.xm 2024-07-14 08:50:48 -05:00
arichornlover
829b0c7d6b
Update uYouPlusPatches.xm 2024-07-12 15:02:22 -05:00
arichornlover
6433ce1826
Remove deprecated code (uYouPlusSettings.xm) 2024-07-12 08:20:30 -05:00
arichornlover
36fa89e688
Update uYouPlusPatches.xm 2024-07-12 08:06:30 -05:00
arichornlover
5c2f444978
Update youtube-native-share to v0.2.0
YouTube Native Share v0.2.0 Release was helped and contributed by: @arichornloverALT (formerly known as @arichornlover)

Additional changes:
Fixed Icons being invisible in the App.
2024-07-11 18:33:04 -05:00
arichornlover
958bc196ce
Fix uYouPlus.xm 2024-07-10 11:25:21 -05:00
arichornlover
4e8aeb5bae
Update uYouPlus.h 2024-07-10 01:29:11 -05:00
arichornlover
3682d9a960
Fix uYouPlus.h
Fixed almost every compiling error that had occurred from YouTubeHeader.
2024-07-10 01:26:23 -05:00
arichornlover
ff6d17c88a
Update uYouPlus.h 2024-07-08 23:28:36 -05:00
arichornlover
9638e454a8
Update uYouPlus.h 2024-07-08 23:25:55 -05:00
arichornlover
1e932bb00d
Add a workaround to compiling error (README.md) 2024-07-08 20:17:00 -05:00
arichornlover
22974cecb0
Added New Header (uYouPlusPatches.h) 2024-07-08 19:46:34 -05:00
arichornlover
af5b399e55
Update uYouPlus.h 2024-07-08 04:20:51 -05:00
arichornlover
796e88ec46
Improve uYouPlus.h
New Headers & Organized the imports better.
2024-07-08 09:20:24 +00:00
arichornlover
e8ba831fa2
Update uYouPlus.h 2024-07-08 04:06:07 -05:00
arichornlover
25f6d144c1
Remove Duplicates (uYouPlus.h)
PoomSmart’s YouTubeHeader has been updated which broke uYouPlus.h. Should be resolved now!
2024-07-08 04:03:54 -05:00
arichornlover
4214d03d3b
Improved Copy Settings & Paste Settings
This also fixes crashing when interacting with the buttons when having “replaceCopyandPasteButtons_enabled” enabled.
2024-07-05 04:57:16 -05:00
arichornlover
3978100972
Updated Hide Fullscreen Button
This is a replacement since the previous implementation breaks PoomSmart’s 1.2.0+ YouQuality tweak.
2024-07-04 06:42:42 -05:00
arichornlover
7f5a231f46
Updated Disable Modern Flags Option (19.23.3+)
Support has been added for newer YouTube versions so it will remove App Modernization better.
2024-07-04 06:13:56 -05:00
arichornlover
661b7ddc52
Update uYouPlusPatches.xm
Also let me remind y’all that uYouEnhanced isn’t discontinued. Saying this as of July 4th 2024.
2024-07-04 05:50:00 -05:00
arichornlover
ef338016e8
Added Legacy uYouEnhanced AltSource Repo - supports iOS 14
For Reddit post: https://www.reddit.com/r/sideloaded/s/oYCQnRpONG

and mainly for Trollstore members!
2024-07-04 05:39:37 -05:00
arichornlover
754e3e9c98
Fix “YTShareRequestViewController“ 2024-07-03 15:47:53 -05:00
arichornlover
45ec2505b3
Don't hide "Play next in queue" for premium users
Merged changes from c32054d116
2024-07-03 15:26:07 -05:00
arichornlover
042069dfaa
Remove undeclared stuff (uYouPlus.xm) 2024-07-03 02:34:07 -05:00
arichornlover
34c7ec5155
Fix compiling error (.gitmodules) 2024-07-03 02:16:58 -05:00
arichornlover
5b383a36df
Sync .gitmodules
.gitmodules has been synced to be a lot like the one from qnblackcat/uYouPlus repository.
2024-07-03 01:34:25 -05:00
arichornlover
7fd5903bb9
Improve spelling (README.md) 2024-07-03 01:21:55 -05:00
arichornlover
0e3e6475ac
Updated New Hide Fullscreen Button Stuff
New version of the Hide Fullscreen Button option is still unfinished, it will remain disabled and I’ll test it whenever my GitHub account comes back.
2024-07-03 01:11:25 -05:00
arichornlover
063940ee5b
Fix YTLitePlus url (README.md) 2024-06-30 02:49:50 -05:00
arichornlover
cb09ffa6cb
fix Fullscreen to the Right headers
Fixes crashing in the fullscreen video player
2024-06-27 17:17:06 -05:00
arichornlover
37972ceca7
Update update-submodules.yml 2024-06-27 05:10:41 -05:00
arichornlover
4041d31773
Update update-submodules.yml
It now only triggers automatically every 24 hours.
But please “Update Submodules” to fix the compiling issues.
2024-06-26 22:49:04 -05:00
arichornlover
dc29c56a2e
Update .gitmodules 2024-06-26 16:04:23 -05:00
arichornlover
0ec3eba402
Update update-submodules.yml (workaround fix)
I am not able to manually trigger the action so it will run every 30 minutes.
2024-06-26 15:52:05 -05:00
arichornlover
b3d1d983c7
Update .gitmodules 2024-06-26 15:47:14 -05:00
arichornlover
3fd6ce5d79
Update .gitmodules
Attempting to fix Checkout compiling errors
2024-06-26 13:48:40 -05:00
arichornlover
bab17bbed4
Fix Makefile 2024-06-26 13:03:54 -05:00
arichornlover
34ac03a47e
Fix compiling (buildapp.yml) 2024-06-26 13:01:27 -05:00
arichornlover
36bf653b3d
Disable “YTShareRequestViewController“ 2024-06-26 12:54:24 -05:00
GitHub Actions
309d426b57 updated submodules 2024-06-26 15:35:52 +00:00
arichornlover
9a08fe7b43
add settings icon to Bundle 2024-06-25 12:24:17 -05:00
arichornlover
aac2d4a06d
Added YouTube UI Icons (uYouPlus.bundle) 2024-06-25 05:27:58 -05:00
arichornlover
0b20859bef
Update uYouPlus.xm 2024-06-24 23:01:09 -05:00
arichornlover
ebcdeb4c18
Update AdBlock Workaround Option
ALT: Updated YouTube-X submodule
2024-06-24 22:39:50 -05:00
arichornlover
9eefece9d1
Updated Hide Heatwaves Bar Option 2024-06-22 20:57:27 -05:00
GitHub Actions
c8ebf37cd6 updated submodules 2024-06-22 22:35:09 +00:00
arichornlover
cbbf0bde7e
Update uYouPlus.xm 2024-06-22 16:40:26 -05:00
arichornlover
0ed5addc25
Added 2 New Options
Floating Miniplayer & Floating Miniplayer (Repositioning Support)
2024-06-22 21:22:43 +00:00
arichornlover
7df0e0ab2d
Merge pull request #742 from arichornlover/imgbot
[ImgBot] Optimize images
2024-06-22 15:45:23 -05:00
ImgBotApp
5f0f49863b
[ImgBot] Optimize images
*Total -- 202.65kb -> 174.16kb (14.06%)

/Localizations/uYouPlus.bundle/AppIcons/Shorts.png -- 25.62kb -> 13.34kb (47.91%)
/Bundles/uYouPlus.bundle/AppIcons/Shorts.png -- 25.62kb -> 13.34kb (47.91%)
/Localizations/uYouPlus.bundle/AppIcons/Gold.png -- 36.20kb -> 35.04kb (3.2%)
/Bundles/uYouPlus.bundle/AppIcons/Gold.png -- 36.20kb -> 35.04kb (3.2%)
/Localizations/uYouPlus.bundle/AppIcons/Blue.png -- 39.51kb -> 38.69kb (2.05%)
/Bundles/uYouPlus.bundle/AppIcons/Blue.png -- 39.51kb -> 38.69kb (2.05%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
2024-06-22 04:30:25 +00:00
arichornlover
09279bf0d2
Update uYouPlus.xm 2024-06-21 22:30:07 -05:00
arichornlover
a7e5106427
Updated PoomSmart’s YouTube-X
additional changes:
Updated “AdBlock Workaround” & “AdBlock Workaround (Lite)”
2024-06-21 22:20:41 -05:00
56 changed files with 2253 additions and 1464 deletions

View file

@ -26,14 +26,14 @@ body:
- type: input
attributes:
label: iOS/iPadOS version
placeholder: iOS 17.5.1
placeholder: iOS 18.0.0
validations:
required: true
- type: input
attributes:
label: Device model
placeholder: iPhone 15 Pro Max
placeholder: iPhone 16 Pro Max
validations:
required: true
@ -111,10 +111,12 @@ body:
- type: checkboxes
attributes:
label: Select the configuration used for building the uYouEnhanced ipa. (Optional)
label: Select the configuration used for building or obtaining the uYouEnhanced ipa. (Optional)
options:
- label: "buildapp.yml (GitHub Actions — build method as suggested by [Wiki - Building](https://github.com/arichornlover/uYouEnhanced/wiki/Building))"
- label: "build.sh (Shell script)"
- label: "AltStore Source (obtained from https://raw.githubusercontent.com/arichornlover/arichornlover.github.io/main/apps.json)"
- label: "Other (obtained from untrusted or potentially unsafe sources such as phishing sites, unknown individuals, or unofficial channels.)"
- type: textarea
attributes:

View file

@ -8,7 +8,7 @@ on:
inputs:
sdk_version:
description: "iOS SDK Version"
default: "16.4"
default: "16.5"
required: true
type: string
uyou_version:
@ -54,13 +54,13 @@ concurrency:
jobs:
build:
name: Build uYouEnhanced
runs-on: macos-12
runs-on: macos-13
permissions:
contents: write
steps:
- name: Checkout Main
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.2.1
with:
path: main
ref: ${{ github.event.inputs.commit_id || github.ref }}
@ -73,7 +73,7 @@ jobs:
run: echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH
- name: Setup Theos
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.2.1
with:
repository: theos/theos
ref: 5bfdc3cb7133ec1cab43182115d902e2b57c9eac
@ -82,7 +82,7 @@ jobs:
- name: SDK Caching
id: SDK
uses: actions/cache@v4.0.2
uses: actions/cache@v4.1.1
env:
cache-name: iOS-${{ inputs.sdk_version }}-SDK
with:
@ -93,7 +93,7 @@ jobs:
- name: Download iOS SDK
if: steps.SDK.outputs.cache-hit != 'true'
run: |
git clone --quiet -n --depth=1 --filter=tree:0 https://github.com/arichornlover/sdks/
git clone --quiet -n --depth=1 --filter=tree:0 https://github.com/theos/sdks/
cd sdks
git sparse-checkout set --no-cone iPhoneOS${{ inputs.sdk_version }}.sdk
git checkout
@ -102,7 +102,7 @@ jobs:
THEOS: ${{ github.workspace }}/theos
- name: Setup Theos Jailed
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.2.1
with:
repository: qnblackcat/theos-jailed
ref: master
@ -151,7 +151,7 @@ jobs:
- name: Upload Artifact
if: ${{ inputs.upload_artifact }}
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.4.3
env:
UYOU_VERSION: ${{ inputs.uyou_version }}
YOUTUBE_VERSION: ${{ steps.prepare_youtube.outputs.youtube_version }}
@ -163,7 +163,7 @@ jobs:
- name: Create Release
if: ${{ inputs.create_release }}
id: create_release
uses: softprops/action-gh-release@v2.0.5
uses: softprops/action-gh-release@v2.0.8
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
UYOU_VERSION: ${{ inputs.uyou_version }}

View file

@ -1,6 +1,8 @@
name: Update Submodules
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
jobs:
@ -9,7 +11,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.2.1
- name: Set up Git
run: |
@ -22,14 +24,10 @@ jobs:
git add .
git submodule update --init --recursive --remote Tweaks/DontEatMyContent
git add .
git submodule update --init --recursive --remote Tweaks/IAmYouTube
git add .
git submodule update --init --recursive --remote Tweaks/YTHoldForSpeed
git add .
git submodule update --init --recursive --remote Tweaks/YTSpeed
git add .
git submodule update --init --recursive --remote Tweaks/MrBeastify
git add .
git submodule update --init --recursive --remote Tweaks/Return-YouTube-Dislikes
git add .
git submodule update --init --recursive --remote Tweaks/uYouLocalization
@ -56,6 +54,8 @@ jobs:
git add .
git submodule update --init --recursive --remote Tweaks/iSponsorBlock
git add .
git submodule update --init --recursive --remote Tweaks/protobuf
git add .
git submodule update --init --recursive
git commit -m "updated submodules"
git push

46
.gitmodules vendored
View file

@ -8,7 +8,7 @@
branch = main
[submodule "Tweaks/YouMute"]
path = Tweaks/YouMute
url = https://github.com/arichornlover/YouMute.git
url = https://github.com/PoomSmart/YouMute.git
branch = main
[submodule "Tweaks/YouQuality"]
path = Tweaks/YouQuality
@ -20,11 +20,10 @@
branch = main
[submodule "Tweaks/Return-YouTube-Dislikes"]
path = Tweaks/Return-YouTube-Dislikes
url = https://github.com/arichornloverALT/Return-YouTube-Dislikes.git
branch = uYouEnhanced
url = https://github.com/PoomSmart/Return-YouTube-Dislikes.git
[submodule "Tweaks/YouTubeHeader"]
path = Tweaks/YouTubeHeader
url = https://github.com/arichornlover/YouTubeHeader.git
url = https://github.com/arichornloverALT/YouTubeHeader.git
branch = main
[submodule "Extensions"]
path = Extensions
@ -32,8 +31,12 @@
branch = main
[submodule "Tweaks/YTABConfig"]
path = Tweaks/YTABConfig
url = https://github.com/arichornlover/YTABConfig2.git
url = https://github.com/PoomSmart/YTABConfig.git
branch = main
[submodule "Tweaks/FLEXing"]
path = Tweaks/FLEXing
url = https://github.com/PoomSmart/FLEXing
branch = rootless
[submodule "Tweaks/Alderis"]
path = Tweaks/Alderis
url = https://github.com/hbang/Alderis.git
@ -42,14 +45,11 @@
url = https://github.com/Muirey03/RemoteLog
[submodule "Tweaks/DontEatMyContent"]
path = Tweaks/DontEatMyContent
url = https://github.com/therealFoxster/DontEatMyContent
url = https://github.com/arichornloverALT/DontEatMyContent
[submodule "Tweaks/iSponsorBlock"]
path = Tweaks/iSponsorBlock
url = https://github.com/Galactic-Dev/iSponsorBlock.git
branch = master
[submodule "Tweaks/IAmYouTube"]
path = Tweaks/IAmYouTube
url = https://github.com/PoomSmart/IAmYouTube.git
[submodule "Tweaks/YTClassicVideoQuality"]
path = Tweaks/YTClassicVideoQuality
url = https://github.com/PoomSmart/YTClassicVideoQuality.git
@ -58,26 +58,32 @@
url = https://github.com/PoomSmart/NoYTPremium.git
[submodule "Tweaks/YTSpeed"]
path = Tweaks/YTSpeed
url = https://github.com/arichornlover/YTSpeed.git
[submodule "Tweaks/MrBeastify"]
path = Tweaks/MrBeastify
url = https://github.com/arichornlover/MrBeastify.git
branch = main
[submodule "Tweaks/FLEXing"]
path = Tweaks/FLEXing
url = https://github.com/PoomSmart/FLEXing
url = https://github.com/arichornloverALT/YTSpeed.git
[submodule "Tweaks/YouTube-X"]
path = Tweaks/YouTube-X
url = https://github.com/PoomSmart/YouTube-X/
[submodule "Tweaks/IAmYouTube"]
path = Tweaks/IAmYouTube
url = https://github.com/PoomSmart/IAmYouTube.git
[submodule "Tweaks/YTHoldForSpeed"]
path = Tweaks/YTHoldForSpeed
url = https://github.com/arichornlover/YTHoldForSpeed.git
url = https://github.com/arichornloverALT/YTHoldForSpeed.git
[submodule "Tweaks/MrBeastify"]
path = Tweaks/MrBeastify
url = https://github.com/arichornloverALT/MrBeastify.git
branch = main
[submodule "Tweaks/uYouLocalization"]
path = Tweaks/uYouLocalization
url = https://github.com/dayanch96/uYouLocalization.git
[submodule "Tweaks/YouGroupSettings"]
path = Tweaks/YouGroupSettings
url = https://github.com/arichornlover/YouGroupSettings.git
url = https://github.com/arichornloverALT/YouGroupSettings.git
[submodule "Tweaks/YouTimeStamp"]
path = Tweaks/YouTimeStamp
url = https://github.com/arichornlover/YouTimeStamp.git
url = https://github.com/arichornloverALT/YouTimeStamp.git
[submodule "Tweaks/protobuf"]
path = Tweaks/protobuf
url = https://github.com/protocolbuffers/protobuf.git
[submodule "Tweaks/YouLoop"]
path = Tweaks/YouLoop
url = https://github.com/bhackel/YouLoop.git

1
Bundles/YouLoop.bundle Symbolic link
View file

@ -0,0 +1 @@
../Tweaks/YouLoop/layout/Library/Application Support/YouLoop.bundle

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 891 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 688 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 928 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 683 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 661 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -66,8 +66,8 @@
"HIDE_AUTOPLAY_SWITCH" = "Ocultar interruptor de Reproducir automáticamente";
"HIDE_AUTOPLAY_SWITCH_DESC" = "Ocultar el interruptor de Reproducir automáticamente en los botones superpuestos.";
"HIDE_YTMUSIC_BUTTON" = "Hide Youtube Music button";
"HIDE_YTMUSIC_BUTTON_DESC" = "Hides Youtube Music button that appears with Premium";
"HIDE_YTMUSIC_BUTTON" = "Ocultar botón de Youtube Music";
"HIDE_YTMUSIC_BUTTON_DESC" = "Oculta el botón de Youtube Music que aparece con Premium.";
"HIDE_SUBTITLES_BUTTON" = "Ocultar botón de Subtítulos";
"HIDE_SUBTITLES_BUTTON_DESC" = "Ocultar el botón de Subtítulos en los botones superpuestos.";
@ -76,22 +76,22 @@
"HIDE_HUD_MESSAGES_DESC" = "Ejemplo: CC está activado/desactivado, Vídeo en bucle está activado,...";
"HIDE_PAID_PROMOTION_CARDS" = "Ocultar banner de contenido promocional";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Ocultar el banner de 'Incluye contenido promocional' en algunos vídeos.";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "Oculta el banner de 'Incluye contenido promocional' en algunos vídeos.";
"HIDE_CHANNEL_WATERMARK" = "Ocultar marca de agua del canal";
"HIDE_CHANNEL_WATERMARK_DESC" = "Ocultar la marca de agua del canal en la superposición de controles de vídeo. Es necesario reiniciar la aplicación.";
"HIDE_CHANNEL_WATERMARK_DESC" = "Oculta la marca de agua del canal en la superposición de controles de vídeo. Es necesario reiniciar la aplicación.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "Ocultar el botón de Anterior y Siguiente";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Ocultar el botón de Anterior y Siguiente en los botones superpuestos.";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "Oculta el botón de Anterior y Siguiente en los botones superpuestos.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Reemplazar botón anterior y siguiente";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Reemplace el botón Anterior y Siguiente con el botón Avance rápido y Rebobinado. Es necesario reiniciar la aplicación.";
"REPLACE_PREVIOUS_NEXT_BUTTON" = "Remplazar botón anterior y siguiente";
"REPLACE_PREVIOUS_NEXT_BUTTON_DESC" = "Remplaza el botón Anterior y Siguiente con el botón Avance rápido y Rebobinado. Es necesario reiniciar la aplicación.";
"RED_PROGRESS_BAR" = "Barra de progreso roja";
"RED_PROGRESS_BAR_DESC" = "Recupera la barra de progreso roja. Es necesario reiniciar la aplicación.";
"HIDE_HOVER_CARD" = "Ocultar tarjetas flotantes en las pantallas finales (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "Ocultar tarjetas flotantes del creador (miniaturas) al final de los vídeos.";
"HIDE_HOVER_CARD_DESC" = "Oculta las tarjetas flotantes del creador (miniaturas) al final de los vídeos.";
"HIDE_RIGHT_PANEL" = "Ocultar el panel derecho en modo pantalla completa";
"HIDE_RIGHT_PANEL_DESC" = "Es necesario reiniciar la aplicación.";
@ -100,10 +100,10 @@
"SHORTS_CONTROLS_OVERLAY_OPTIONS" = "💥 Configurar superposición de Shorts";
"HIDE_SUPER_THANKS" = "Ocultar banner 'Comprar Supergracias";
"HIDE_SUPER_THANKS_DESC" = "Ocultar el banner 'Comprar Supergracias' en Shorts.";
"HIDE_SUPER_THANKS_DESC" = "Oculta el banner 'Comprar Supergracias' en Shorts.";
"HIDE_SUBCRIPTIONS" = "Ocultar el botón de suscripción";
"HIDE_SUBCRIPTIONS_DESC" = "";
"HIDE_SUBCRIPTIONS_DESC" = "Oculta el botón de suscripción del Reproductor.";
"DISABLE_RESUME_TO_SHORTS" = "Desactivar reanudación a Shorts";
"DISABLE_RESUME_TO_SHORTS_DESC" = "Si cierras YouTube mientras ves Shorts, éstos no se reproducirán automáticamente la próxima vez que inicies YouTube.";
@ -115,7 +115,7 @@
"HIDE_ISPONSORBLOCK" = "Ocultar botón iSponsorBlock";
"CAST_CONFIRM" = "Alerta de confirmación antes de Enviar contenido (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "Mostrar una alerta de confirmación antes de Enviar contenido para prevenir el secuestro accidental del TV.";
"CAST_CONFIRM_DESC" = "Muestra una alerta de confirmación antes de Enviar contenido para prevenir el secuestro accidental del TV.";
"CASTING" = "Enviar contenido";
"MSG_ARE_YOU_SURE" = "¿Estás seguro de que deseas Enviar contenido?";
"MSG_YES" = "Sí";
@ -124,11 +124,11 @@
"DISABLE_HINTS" = "Desactivar sugerencias";
"DISABLE_HINTS_DESC" = "Desactiva las sugerencias de YouTube que suelen aparecer cuando la aplicación está recién instalada.";
"ENABLE_YT_STARTUP_ANIMATION" = "Activar la animación de inicio de YouTube";
"ENABLE_YT_STARTUP_ANIMATION_DESC" = "";
"ENABLE_YT_STARTUP_ANIMATION" = "Activar animación de inicio de YouTube";
"ENABLE_YT_STARTUP_ANIMATION_DESC" = "Activa la animación al iniciar Youtube";
"HIDE_CHIP_BAR" = "Ocultar la barra superior";
"HIDE_CHIP_BAR_DESC" = "Ocultar la barra superior de las fuentes de inicio (Tendencias, Música, Juegos...) y de suscripción (Todos los vídeos, Seguir viendo...). Es necesario reiniciar la aplicación.";
"HIDE_CHIP_BAR" = "Ocultar barra superiorm";
"HIDE_CHIP_BAR_DESC" = "Oculta la barra superior de las fuentes de inicio (Tendencias, Música, Juegos...) y de suscripción (Todos los vídeos, Seguir viendo...). Es necesario reiniciar la aplicación.";
"HIDE_PLAY_NEXT_IN_QUEUE" = "Ocultar \"Reproducir siguiente en cola\"";
"HIDE_PLAY_NEXT_IN_QUEUE_DESC" = "";
@ -149,105 +149,105 @@
"FIX_GOOGLE_SIGNIN_DESC" = "Active esta opción solo cuando no pueda iniciar sesión con su cuenta de Google y la aplicación se instaló a través de TrollStore. Si puede iniciar sesión normalmente, manténgala desactivada. Es necesario reiniciar la aplicación.";
// uYouEnhanced Localization
"SUPPORT_THE_DEVELOPERS" = "Support the Developers";
"COPY_SETTINGS" = "Copy Settings";
"COPY_SETTINGS_DESC" = "Copy all current settings to the clipboard";
"PASTE_SETTINGS" = "Paste Settings";
"PASTE_SETTINGS_DESC" = "Paste settings from clipboard and apply";
"EXPORT_SETTINGS" = "Export Settings";
"EXPORT_SETTINGS_DESC" = "Exports all current settings into a .txt file";
"IMPORT_SETTINGS" = "Import Settings";
"IMPORT_SETTINGS_DESC" = "Press to import settings (.txt)";
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Replace 'Copy Settings' & 'Paste Settings' Buttons";
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Replaces the Buttons to 'Export Settings' and 'Import Settings'";
"SUPPORT_THE_DEVELOPERS" = "Apoya a los desarrolladores";
"COPY_SETTINGS" = "Copiar Ajustes";
"COPY_SETTINGS_DESC" = "Copiar Ajustes actuales al Portapapeles";
"PASTE_SETTINGS" = "Pegar Ajustes";
"PASTE_SETTINGS_DESC" = "Pegar Ajustes desde el Portapapeles y aplicar";
"EXPORT_SETTINGS" = "Exportar Ajustes";
"EXPORT_SETTINGS_DESC" = "Exporta todos los Ajustes actuales en un archivo .txt";
"IMPORT_SETTINGS" = "Importar Ajustes";
"IMPORT_SETTINGS_DESC" = "Pulsa para importar Ajustes (.txt)";
"REPLACE_COPY_AND_PASTE_BUTTONS" = "Remplaza los botones 'Copiar Ajustes' y 'Pegar Ajustes'";
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Remplaza los botones a 'Exportar Ajustes' e 'Importar Ajustes'";
"UYOUENHANCED_ESSENTIAL_MENU" = "uYouEnhanced Essential Menu";
"CHANGE_APP_ICON" = "Change App Icon";
"CLEAR_NOTIFICATIONS" = "Clear Notifications";
"CLEAR_NOTIFICATIONS_DESC" = "Force clear all app notifications (Recommended when Sideloaded)";
"UYOUENHANCED_ESSENTIAL_MENU" = "Menú Esencial de uYouEnhanced";
"CHANGE_APP_ICON" = "Cambiar Icono de Aplicación";
"CLEAR_NOTIFICATIONS" = "Borrar Notificaciones";
"CLEAR_NOTIFICATIONS_DESC" = "Forzar borrado de todas las notificaciones de la app (Recomendado para Sideload)";
"CUSTOM_DARK_THEME" = "Custom Dark Theme";
"CUSTOM_DARK_THEME" = "Tema Oscuro Personalizado";
"ENABLE_PORTRAIT_FULLSCREEN" = "Enable Portrait Fullscreen";
"ENABLE_PORTRAIT_FULLSCREEN_DESC" = "Enables Portrait Fullscreen on the YouTube App. App restart is required.";
"ENABLE_TAP_TO_SEEK" = "Enable Tap To Seek";
"ENABLE_TAP_TO_SEEK_DESC" = "Jump to anywhere in a video by single-tapping the seek bar";
"DISABLE_PULL_TO_FULLSCREEN_GESTURE" = "Disable pull-to-fullscreen gesture";
"DISABLE_PULL_TO_FULLSCREEN_GESTURE_DESC" = "Disable the drag gesture to enter vertical fullscreen. Only applies to landscape videos.";
"DISABLE_DOUBLE_TAP_TO_SKIP_CHAPTER" = "Disable Double tap to skip chapter";
"DISABLE_DOUBLE_TAP_TO_SKIP_CHAPTER_DESC" = "Disable the 2-finger double tap gesture that skips forward/backward by a chapter.";
"ALWAYS_USE_REMAINING_TIME" = "Always use remaining time";
"ALWAYS_USE_REMAINING_TIME_DESC" = "Change the default to show time remaining in the player bar.";
"DISABLE_TOGGLE_TIME_REMAINING" = "Disable toggle time remaining";
"DISABLE_TOGGLE_TIME_REMAINING_DESC" = "Disables changing time elapsed to time remaining. Use with other setting to always show remaining time.";
"ENABLE_PORTRAIT_FULLSCREEN" = "Habilitar Modo Retrato a Pantalla Completa";
"ENABLE_PORTRAIT_FULLSCREEN_DESC" = "Habilita Modo Retrato a Pantalla Completa en la aplicación de YouTube. Se requiere el reicio de la app.";
"ENABLE_TAP_TO_SEEK" = "Habilitar toque para buscar";
"ENABLE_TAP_TO_SEEK_DESC" = "Salta a cualquier parte de un vídeo con un simple toque en la barra de búsqueda";
"DISABLE_PULL_TO_FULLSCREEN_GESTURE" = "Deshabilitar gesto arrastrar para Pantalla Completa";
"DISABLE_PULL_TO_FULLSCREEN_GESTURE_DESC" = "Deshabilita el gesto de arrastrar para entrar en Pantalla Completa vertical. Sólo se aplica a vídeos en modo apaisado.";
"DISABLE_DOUBLE_TAP_TO_SKIP_CHAPTER" = "Deshabilitar Doble toque para saltar capítulo";
"DISABLE_DOUBLE_TAP_TO_SKIP_CHAPTER_DESC" = "Deshabilita el gesto de doble toque con 2 dedos para saltar adelante/atrás en un capítulo.";
"ALWAYS_USE_REMAINING_TIME" = "Usar siempre tiempo restante";
"ALWAYS_USE_REMAINING_TIME_DESC" = "Cambiar el tiempo restante por defecto en la barra del reproductor.";
"DISABLE_TOGGLE_TIME_REMAINING" = "Deshabilitar el selector de tiempo restante";
"DISABLE_TOGGLE_TIME_REMAINING_DESC" = "Deshabilita el cambio de tiempo transcurrido a tiempo restante. Usar junto con otros ajustes para mostrar siempre el tiempo restante.";
"ENABLE_SHARE_BUTTON" = "Enable Share Button";
"ENABLE_SHARE_BUTTON_DESC" = "Enable the Share Button in video controls overlay.";
"ENABLE_SAVE_TO_PLAYLIST_BUTTON" = "Enable Save To Playlist Button";
"ENABLE_SAVE_TO_PLAYLIST_BUTTON_DESC" = "Enable the Save To Playlist Button in video controls overlay.";
"HIDE_YTMUSIC_BUTTON" = "Hide Youtube Music button";
"HIDE_YTMUSIC_BUTTON_DESC" = "Hides Youtube Music button that appears with Premium";
"HIDE_VIDEO_TITLE_IN_FULLSCREEN" = "Hide Video Title in Fullscreen";
"HIDE_VIDEO_TITLE_IN_FULLSCREEN_DESC" = "Hides the Video Title along with the functionality in the Top Left of the Fullscreen Video Player.";
"HIDE_COLLAPSE_BUTTON" = "Hide Collapse Button";
"HIDE_COLLAPSE_BUTTON_DESC" = "Hides the Arrow Collapse Button that was shown in the Top Left of the Video Player.";
"HIDE_FULLSCREEN_BUTTON" = "Hide Fullscreen Button";
"HIDE_FULLSCREEN_BUTTON_DESC" = "Hides the Fullscreen Button that was shown at the Bottom Right of the Video Player.";
"HIDE_SHADOW_OVERLAY_BUTTONS" = "Hide Shadow Overlay Buttons";
"HIDE_SHADOW_OVERLAY_BUTTONS_DESC" = "Hide the Shadow Overlay on the Play/Pause, Previous, Next, Forward & Rewind Buttons.";
"HIDE_FULLSCREEN_ACTION_BUTTONS" = "Hide Fullscreen Action Buttons";
"HIDE_FULLSCREEN_ACTION_BUTTONS_DESC" = "Hides the buttons at the bottom of the screen when in landscape.";
"HIDE_SUGGESTED_VIDEO" = "Hide Suggested Video";
"HIDE_SUGGESTED_VIDEO_DESC" = "Remove the suggested video popup when finishing a video. Note that this will prevent autoplay from working.";
"HIDE_HEATWAVES_BAR" = "Hide Heatwaves Bar";
"HIDE_HEATWAVES_BAR_DESC" = "Hides the Heatwaves Bar that is originally shown in the Progress Bar by Default in the video player. App restart is required.";
"HIDE_DOUBLE_TAP_TO_SEEK_OVERLAY" = "Hide Double Tap to Seek Overlay";
"HIDE_DOUBLE_TAP_TO_SEEK_OVERLAY_DESC" = "This hides the animated double tap to seek overlay in the video player. App restart is required.";
"HIDE_DARK_OVERLAY_BACKGROUND" = "Hide Dark Overlay Background";
"HIDE_DARK_OVERLAY_BACKGROUND_DESC" = "Hide the Dark Overlay Background in the video player. App restart is required.";
"HIDE_AMBIENT_MODE_IN_FULLSCREEN" = "Hide Ambient Mode in Fullscreen";
"HIDE_AMBIENT_MODE_IN_FULLSCREEN_DESC" = "Hides and Prevents Ambient Mode from being used in the Video Player when in Fullscreen. App restart is required.";
"HIDE_SUGGESTED_VIDEOS_IN_FULLSCREEN" = "Hide Suggested Videos in Fullscreen";
"HIDE_SUGGESTED_VIDEOS_IN_FULLSCREEN_DESC" = "Hide the suggested videos whenever in the Fullscreen Video Player. App restart is required.";
"HIDE_ALL_VIDEOS_UNDER_PLAYER" = "Hide all videos under player";
"HIDE_ALL_VIDEOS_UNDER_PLAYER_DESC" = "Remove all videos under the video player. Depends on which Device Orientation.";
"ENABLE_SHARE_BUTTON" = "Habilitar Botón de Compartir";
"ENABLE_SHARE_BUTTON_DESC" = "Habilita el Botón de Compartir en los controles de vídeo superpuestos.";
"ENABLE_SAVE_TO_PLAYLIST_BUTTON" = "Habilitar Botón Guardar en Lista de Reproducción";
"ENABLE_SAVE_TO_PLAYLIST_BUTTON_DESC" = "Habilita el Botón de Guardar en la Lista de Reproducción en los controles de vídeo superpuestos.";
"HIDE_YTMUSIC_BUTTON" = "Ocultar botón de Youtube Music";
"HIDE_YTMUSIC_BUTTON_DESC" = "Oculta el botón de Youtube Music que aparece con Premium";
"HIDE_VIDEO_TITLE_IN_FULLSCREEN" = "Ocultar Título de Vídeo en Pantalla Completa";
"HIDE_VIDEO_TITLE_IN_FULLSCREEN_DESC" = "Oculta el Título del Vídeo que aparece funcionalmente en la esquina superior izquierda del reproductor a Pantalla Completa.";
"HIDE_COLLAPSE_BUTTON" = "Ocultar Botón de Colapso";
"HIDE_COLLAPSE_BUTTON_DESC" = "Oculta el Botón de Colapso en Flecha que se encuentra en la parte superior izquierda del Reproductor de Vídeo.";
"HIDE_FULLSCREEN_BUTTON" = "Ocultar Botón de Pantalla Completa";
"HIDE_FULLSCREEN_BUTTON_DESC" = "Oculta el Botón de Pantalla Completa que se encuentra en la parte inferior derecha del Reproductor de Vídeo.";
"HIDE_SHADOW_OVERLAY_BUTTONS" = "Ocultar Botones de Superposición de Sombra";
"HIDE_SHADOW_OVERLAY_BUTTONS_DESC" = "Oculta la Superposición de Sombra en los Botones Reproducir/Pausa, Anterior, Siguiente, Adelatar y Retrasar.";
"HIDE_FULLSCREEN_ACTION_BUTTONS" = "Ocultar Botones de Acción en Pantalla Completa";
"HIDE_FULLSCREEN_ACTION_BUTTONS_DESC" = "Oculta los botones de la pantalla en modo apaisado.";
"HIDE_SUGGESTED_VIDEO" = "Ocultar Vídeos Sugeridos";
"HIDE_SUGGESTED_VIDEO_DESC" = "Elimina la ventana emergente de vídeos sugeridos al final de un vídeo. Esto impide que la reproducción automática fucione.";
"HIDE_HEATWAVES_BAR" = "Ocultar Barra de Momentos Destacados";
"HIDE_HEATWAVES_BAR_DESC" = "Oculta la Barra de Momentos Destacados que se muestra originalmente por defecto en la Barra de Progreso del Reproductor. Se requiere reiniciar la App.";
"HIDE_DOUBLE_TAP_TO_SEEK_OVERLAY" = "Ocultar Doble Toque para Superposición de Búsqueda";
"HIDE_DOUBLE_TAP_TO_SEEK_OVERLAY_DESC" = "Esto oculta el doble toque animado para la superposición de búsqueda del reproductor de vídeo. Se requiere reiniciar la App.";
"HIDE_DARK_OVERLAY_BACKGROUND" = "Ocultar Superposición de Fondo Oscuro";
"HIDE_DARK_OVERLAY_BACKGROUND_DESC" = "Oculta la Superposición de Fondo Oscuro en el reproductor de vídeo. Se requiere reiniciar la App.";
"HIDE_AMBIENT_MODE_IN_FULLSCREEN" = "Ocultar Modo Ambiente en Pantalla Completa";
"HIDE_AMBIENT_MODE_IN_FULLSCREEN_DESC" = "Oculta y Previene el uso del Modo Ambiente del Reproductor de Vídeo en Pantalla Completa. Se requiere reiniciar la App.";
"HIDE_SUGGESTED_VIDEOS_IN_FULLSCREEN" = "Ocultar Vídeos Sugeridos en Pantalla Completa";
"HIDE_SUGGESTED_VIDEOS_IN_FULLSCREEN_DESC" = "Oculta los vídeos sugeridos cuando el Reproductor de Vídeo está en Pantalla Completa. Se requiere reiniciar la App.";
"HIDE_ALL_VIDEOS_UNDER_PLAYER" = "Ocutar todos los vídeos bajo el reproductor";
"HIDE_ALL_VIDEOS_UNDER_PLAYER_DESC" = "Elimina todos los vídeos bajo el Reproductor de Vídeo. Depende de la Orientación de Dispositivo.";
"SHORTS_QUALITY_PICKER" = "Shorts Quality Picker";
"SHORTS_QUALITY_PICKER_DESC" = "Enables the YouTube Shorts Quality Picker";
"SHORTS_QUALITY_PICKER" = "Selector de Calidad en Shorts";
"SHORTS_QUALITY_PICKER_DESC" = "Habilita el Selector de Calidad en los Shorts YouTube.";
"VIDEO_PLAYER_BUTTON_OPTIONS" = "Video Player Button Options";
"VIDEO_PLAYER_BUTTON_OPTIONS" = "Opciones del Reproductor de Vídeo";
"RED_SUBSCRIBE_BUTTON" = "Red Subscribe Button";
"RED_SUBSCRIBE_BUTTON_DESC" = "Restores the Subscribe Button Color to be Red.";
"HIDE_BUTTON_CONTAINERS_UNDER_PLAYER" = "Hide Button Containers under player";
"HIDE_BUTTON_CONTAINERS_UNDER_PLAYER_DESC" = "Hides the Button Containers under the video player.";
"HIDE_CONNECT_BUTTON" = "Hide the Connect Button under player";
"HIDE_CONNECT_BUTTON_DESC" = "Hides the Connect Button under the video player.";
"HIDE_SHARE_BUTTON" = "Hide the Share Button under player";
"HIDE_SHARE_BUTTON_DESC" = "Hides the Share Button under the video player.";
"HIDE_THANKS_BUTTON" = "Hide the Thanks Button under player";
"HIDE_THANKS_BUTTON_DESC" = "Hides the Thanks Button under the video player.";
"HIDE_SAVE_BUTTON" = "Hide the Save Button under player";
"HIDE_SAVE_BUTTON_DESC" = "Hides the Save Button under the video player.";
"HIDE_REPORT_BUTTON" = "Hide the Report Button under player";
"HIDE_REPORT_BUTTON_DESC" = "Hides the Report Button under the video player.";
"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER" = "Hide Comment previews under player";
"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER_DESC" = "Hides the comment previews under the video player.";
"HIDE_COMMENT_SECTION_BUTTON" = "Hide the comment section under player";
"HIDE_COMMENT_SECTION_BUTTON_DESC" = "Hides the Comment Section under the video player.";
"RED_SUBSCRIBE_BUTTON" = "Botón de Suscripción Rojo";
"RED_SUBSCRIBE_BUTTON_DESC" = "Restaura el color Rojo al Botón de Suscripción.";
"HIDE_BUTTON_CONTAINERS_UNDER_PLAYER" = "Ocultar Contenedor de Botones bajo Reproductor";
"HIDE_BUTTON_CONTAINERS_UNDER_PLAYER_DESC" = "Oculta el Cuerpo de los Botones bajo el reproductor de vídeo.";
"HIDE_CONNECT_BUTTON" = "Ocultar Botón Conectar bajo el reproductor";
"HIDE_CONNECT_BUTTON_DESC" = "Oculta el Botón de Conectar bajo el reproductor de vídeo.";
"HIDE_SHARE_BUTTON" = "Ocultar Botón Compartir bajo el reproductor";
"HIDE_SHARE_BUTTON_DESC" = "Oculta el Botón de Compartir bajo el reproductor de vídeo.";
"HIDE_THANKS_BUTTON" = "Ocultar Botón Gracias bajo el reproductor";
"HIDE_THANKS_BUTTON_DESC" = "Oculta el Botón de Gracias bajo el reproductor de vídeo.";
"HIDE_SAVE_BUTTON" = "Ocultar Botón Guardar bajo el reproductor";
"HIDE_SAVE_BUTTON_DESC" = "Oculta el Botón de Guardar bajo el reproductor de vídeo.";
"HIDE_REPORT_BUTTON" = "Ocultar Boton Reportar bajo el reproductor";
"HIDE_REPORT_BUTTON_DESC" = "Oculta el Botón de Reportarbajo el reproductor de vídeo.";
"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER" = "Ocultar Previsualización de Comentarios bajo el reproductor";
"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER_DESC" = "Oculta la Previsualización de Comentariosbajo el reproductor de vídeo.";
"HIDE_COMMENT_SECTION_BUTTON" = "Ocultar Sección Comentarios bajo el reproductor";
"HIDE_COMMENT_SECTION_BUTTON_DESC" = "Oculta la Sección de Comentarios bajo el reproductor de vídeo.";
"APP_SETTINGS_OVERLAY_OPTIONS" = "App Settings Overlay Options";
"APP_SETTINGS_OVERLAY_OPTIONS" = "Opciones de Superposición de Ajustes";
"HIDE_ACCOUNT_SECTION" = "Hide `Account` Section";
"HIDE_AUTOPLAY_SECTION" = "Hide `Autoplay` Section";
"HIDE_TRY_NEW_FEATURES_SECTION" = "Hide `Try New Features` Section";
"HIDE_VIDEO_QUALITY_PREFERENCES_SECTION" = "Hide `Video quality preferences` Section";
"HIDE_NOTIFICATIONS_SECTION" = "Hide `Notifications` Section";
"HIDE_MANAGE_ALL_HISTORY_SECTION" = "Hide `Manage all history` Section";
"HIDE_YOUR_DATA_IN_YOUTUBE_SECTION" = "Hide `Your data in YouTube` Section";
"HIDE_PRIVACY_SECTION" = "Hide `Privacy` Section";
"HIDE_LIVE_CHAT_SECTION" = "Hide `Live Chat` Section";
"HIDE_GET_YOUTUBE_PREMIUM_SECTION" = "Hide `Get Youtube Premium` Section";
"HIDE_ACCOUNT_SECTION" = "Ocultar Sección `Cuenta`";
"HIDE_AUTOPLAY_SECTION" = "Ocultar Sección `Autoplay`";
"HIDE_TRY_NEW_FEATURES_SECTION" = "Ocultar Sección `Prueba las nuevas funciones experimentales`";
"HIDE_VIDEO_QUALITY_PREFERENCES_SECTION" = "Ocultar Sección `Preferencias de calidad de vídeo`";
"HIDE_NOTIFICATIONS_SECTION" = "Ocultar Sección `Notificaciones`";
"HIDE_MANAGE_ALL_HISTORY_SECTION" = "Ocultar Sección `Gestionar todo el historial`";
"HIDE_YOUR_DATA_IN_YOUTUBE_SECTION" = "Ocultar Sección `Tus datos en YouTube`";
"HIDE_PRIVACY_SECTION" = "Ocultar Sección `Privacidad`";
"HIDE_LIVE_CHAT_SECTION" = "Ocultar Sección `Chat en directo`";
"HIDE_GET_YOUTUBE_PREMIUM_SECTION" = "Ocultar Sección `Consigue Youtube Premium`";
"UI_INTERFACE_OPTIONS" = "UI Interface Options";

View file

@ -1,4 +1,6 @@
export TARGET = iphone:clang:16.4:15.0
export TARGET = iphone:clang:16.5:15.0
export SDK_PATH = $(THEOS)/sdks/iPhoneOS16.5.sdk/
export SYSROOT = $(SDK_PATH)
export ARCHS = arm64
export libcolorpicker_ARCHS = arm64
@ -14,11 +16,12 @@ MODULES = jailed
endif
ifndef YOUTUBE_VERSION
YOUTUBE_VERSION = 19.23.3
YOUTUBE_VERSION = 19.40.4
endif
ifndef UYOU_VERSION
UYOU_VERSION = 3.0.4
endif
PACKAGE_NAME = $(TWEAK_NAME)
PACKAGE_VERSION = $(YOUTUBE_VERSION)-$(UYOU_VERSION)
INSTALL_TARGET_PROCESSES = YouTube
@ -31,7 +34,7 @@ $(TWEAK_NAME)_FRAMEWORKS = UIKit Foundation AVFoundation AVKit Photos Accelerate
$(TWEAK_NAME)_LIBRARIES = bz2 c++ iconv z
$(TWEAK_NAME)_CFLAGS = -fobjc-arc -Wno-deprecated-declarations -Wno-unused-but-set-variable -DTWEAK_VERSION=\"$(PACKAGE_VERSION)\"
#uYouLocalization $(TWEAK_NAME)_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib $(THEOS_OBJ_DIR)/uYouLocalization.dylib
$(TWEAK_NAME)_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib $(THEOS_OBJ_DIR)/libFLEX.dylib $(THEOS_OBJ_DIR)/iSponsorBlock.dylib $(THEOS_OBJ_DIR)/YouPiP.dylib $(THEOS_OBJ_DIR)/YouTubeDislikesReturn.dylib $(THEOS_OBJ_DIR)/YTABConfig.dylib $(THEOS_OBJ_DIR)/YTUHD.dylib $(THEOS_OBJ_DIR)/DontEatMyContent.dylib .theos/obj/YTHoldForSpeed.dylib $(THEOS_OBJ_DIR)/YTNoCommunityPosts.dylib $(THEOS_OBJ_DIR)/YTVideoOverlay.dylib $(THEOS_OBJ_DIR)/YouMute.dylib $(THEOS_OBJ_DIR)/YouQuality.dylib $(THEOS_OBJ_DIR)/YouTimeStamp.dylib .theos/obj/YouGroupSettings.dylib $(THEOS_OBJ_DIR)/YoutubeSpeed.dylib # $(THEOS_OBJ_DIR)/MrBeastify-ObjC.dylib
$(TWEAK_NAME)_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib $(THEOS_OBJ_DIR)/libFLEX.dylib $(THEOS_OBJ_DIR)/iSponsorBlock.dylib $(THEOS_OBJ_DIR)/YTABConfig.dylib $(THEOS_OBJ_DIR)/YouGroupSettings.dylib $(THEOS_OBJ_DIR)/YouLoop.dylib $(THEOS_OBJ_DIR)/YouMute.dylib $(THEOS_OBJ_DIR)/YouPiP.dylib $(THEOS_OBJ_DIR)/YouQuality.dylib $(THEOS_OBJ_DIR)/YouTimeStamp.dylib $(THEOS_OBJ_DIR)/YouTubeDislikesReturn.dylib $(THEOS_OBJ_DIR)/DontEatMyContent.dylib $(THEOS_OBJ_DIR)/YTHoldForSpeed.dylib $(THEOS_OBJ_DIR)/YoutubeSpeed.dylib $(THEOS_OBJ_DIR)/YTUHD.dylib $(THEOS_OBJ_DIR)/YTVideoOverlay.dylib
$(TWEAK_NAME)_EMBED_LIBRARIES = $(THEOS_OBJ_DIR)/libcolorpicker.dylib
$(TWEAK_NAME)_EMBED_FRAMEWORKS = $(_THEOS_LOCAL_DATA_DIR)/$(THEOS_OBJ_DIR_NAME)/install_Alderis.xcarchive/Products/var/jb/Library/Frameworks/Alderis.framework
$(TWEAK_NAME)_EMBED_BUNDLES = $(wildcard Bundles/*.bundle)
@ -40,7 +43,7 @@ $(TWEAK_NAME)_EMBED_EXTENSIONS = $(wildcard Extensions/*.appex)
include $(THEOS)/makefiles/common.mk
ifneq ($(JAILBROKEN),1)
#uYouLocalization SUBPROJECTS += Tweaks/Alderis Tweaks/uYouLocalization
SUBPROJECTS += Tweaks/Alderis Tweaks/FLEXing/libflex Tweaks/iSponsorBlock Tweaks/YouPiP Tweaks/Return-YouTube-Dislikes Tweaks/YTABConfig Tweaks/YTUHD Tweaks/DontEatMyContent Tweaks/YTHoldForSpeed Tweaks/YTVideoOverlay Tweaks/YouMute Tweaks/YouQuality Tweaks/YouTimeStamp Tweaks/YouGroupSettings Tweaks/YTSpeed # Tweaks/MrBeastify
SUBPROJECTS += Tweaks/Alderis Tweaks/DontEatMyContent Tweaks/FLEXing/libflex Tweaks/iSponsorBlock Tweaks/Return-YouTube-Dislikes Tweaks/YTABConfig Tweaks/YouGroupSettings Tweaks/YouLoop Tweaks/YouMute Tweaks/YouPiP Tweaks/YouQuality Tweaks/YouTimeStamp Tweaks/YTHoldForSpeed Tweaks/YTSpeed Tweaks/YTUHD Tweaks/YTVideoOverlay
include $(THEOS_MAKE_PATH)/aggregate.mk
endif
include $(THEOS_MAKE_PATH)/tweak.mk

View file

@ -287,40 +287,43 @@
- **Compatibility:** Requires iOS/iPadOS 15.0 or later.
- For AltStore user:
- My official AltStore repo: https://therealfoxster.github.io/altsource-viewer/view/?source=https://raw.githubusercontent.com/arichornlover/arichornlover.github.io/main/apps.json
- My official AltStore repo (uYouEnhanced - iOS 15+): https://therealfoxster.github.io/altsource-viewer/view/?source=https://raw.githubusercontent.com/arichornloverALT/arichornloverALT.github.io/main/apps.json
- [Open in AltStore (v19.21.2-3.0.4)](https://tinyurl.com/2wea84xd) - It will take a while to install because AltStore needs to download the IPA first.
- My alternative AltStore repo (uYouEnhanced - iOS 14+ - mainly for Trollstore users): https://therealfoxster.github.io/altsource-viewer/view/?source=https://raw.githubusercontent.com/arichornloverALT/arichornloverALT.github.io/main/apps-legacy.json - not sure if i can update this ipa. this IPA will be locked in YouTube Version **19.20.2**
- [Open in AltStore (v19.40.4-3.0.4)](https://tinyurl.com/44zmcw8t) - It will take a while to install because AltStore needs to download the IPA first.
<details>
<summary>Version information (last updated: May 28, 2024)</summary>
<summary>Version information (last updated: Oct 10, 2024)</summary>
| **Tweaks/App** | **Developer** | **Version** | **Open source** |
| - | - | :-: | :-: |
| **YouTube** | Google Inc | 19.21.2 | ✖︎ |
| **YouTube** | Google Inc | 19.40.4 | ✖︎ |
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | [MiRO92](https://twitter.com/miro92) | 3.0.4 | ✖︎ |
| **Open in YouTube** | [CokePokes](https://github.com/CokePokes) | 1.2 | [✔︎](https://github.com/CokePokes/YoutubeExtensions) |
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.2.5 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.2.9 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
| **BigYTMiniPlayer** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) |
| **YTNoHoverCards** | [level3tjg](https://twitter.com/level3tjg) | 0.0.3 | [✔︎](https://github.com/level3tjg/YTNoHoverCards) |
| **YTMiniplayerEnabler** | [level3tjg](https://twitter.com/level3tjg) | 0.0.2 | [✔︎](https://github.com/level3tjg/YTMiniplayerEnabler) |
| **DontEatMyContent** | [therealFoxster](https://github.com/therealFoxster) | 1.1.6 | [✔︎](https://github.com/therealFoxster/DontEatMyContent) |
| **DontEatMyContent** | [therealFoxster](https://github.com/therealFoxster) | 1.1.8 | [✔︎](https://github.com/therealFoxster/DontEatMyContent) |
| **YTSpeed** | [Lyvendia](https://github.com/Lyvendia) | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) |
| **Alderis Color Picker** | [HASHBANG Productions](https://github.com/hbang) | 1.2 | [✔︎](https://github.com/hbang/Alderis) |
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.5.1 | [✔︎](https://github.com/PoomSmart/YTUHD) |
| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.8.9 | [✔︎](https://github.com/PoomSmart/YouPiP) |
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.5.5 | [✔︎](https://github.com/PoomSmart/YTUHD) |
| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.8.14 | [✔︎](https://github.com/PoomSmart/YouPiP) |
| **IAmYouTube** | [PoomSmart](https://twitter.com/poomsmart) | 1.3.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) |
| **YTABConfig** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.2 | [✔︎](https://github.com/PoomSmart/YTABConfig) |
| **YTABConfig** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.3 | [✔︎](https://github.com/PoomSmart/YTABConfig) |
| **YTReExplore** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) |
| **NoYTPremium** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.4 | [✔︎](https://github.com/PoomSmart/NoYTPremium) |
| **YTNoPaidPromo** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://github.com/PoomSmart/YTNoPaidPromo) |
| **YouRememberCaption** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) |
| **Return YouTube Dislike** | [PoomSmart](https://twitter.com/poomsmart) | 1.11.11 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
| **YouMute** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.1-3 | [✔︎](https://github.com/PoomSmart/YouMute) |
| **Return YouTube Dislike** | [PoomSmart](https://twitter.com/poomsmart) | 1.12.7 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
| **YouMute** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.3 | [✔︎](https://github.com/PoomSmart/YouMute) |
| **YouQuality** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.1 | [✔︎](https://github.com/PoomSmart/YouQuality) |
| **YTVideoOverlay** | [PoomSmart](https://twitter.com/poomsmart) | 1.1.6 | [✔︎](https://github.com/PoomSmart/YTVideoOverlay) |
| **YTHoldForSpeed** | [joshuaseltzer](https://github.com/joshuaseltzer) | 1.2.0 | [✔︎](https://github.com/joshuaseltzer/YTHoldForSpeed) |
| **YouTube-X** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.3 | [✔︎](https://github.com/PoomSmart/YouTube-X) |
| **YTVideoOverlay** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.0 | [✔︎](https://github.com/PoomSmart/YTVideoOverlay) |
| **YTHoldForSpeed** | [joshuaseltzer](https://github.com/joshuaseltzer) | 1.2.1 | [✔︎](https://github.com/joshuaseltzer/YTHoldForSpeed) |
| **LowContrastMode** | [arichornlover](https://github.com/arichornlover) | 1.5.2 | [✔︎](https://github.com/arichornlover/YTLowContrastMode) |
| **YouTimeStamp** | [arichornlover](https://github.com/arichornlover) | 1.0.0 | [✔︎](https://github.com/arichornlover/YouTimeStamp) |
| **YouTimeStamp** | [arichornlover](https://github.com/arichornlover) | 1.0.1 | [✔︎](https://github.com/arichornlover/YouTimeStamp) |
</details>
@ -332,7 +335,7 @@
| MiRO92 | uYou 3.0 | v18.06.6 - v18.18.2 | iOS 14.0 - iOS 15.8.2 |
| MiRO92 | uYou 3.0.1 | v18.19.1 - v18.41.5 | iOS 14.0 - iOS 17.5.1 |
| MiRO92 | uYou 3.0.2 / 3.0.3 | v19.06.2 - v19.15.1 | iOS 14.0 - iOS 17.5.1 |
| MiRO92 | uYou 3.0.4 | v19.06.2 - latest | iOS 14.0 - 17.5.1 |
| MiRO92 | uYou 3.0.4 | v19.06.2 - v19.22.6 | iOS 14.0 - 17.5.1 |
# Building
@ -370,18 +373,19 @@ See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installati
# Wiki
See [arichornlover - Wiki](https://github.com/arichornlover/uYouenhanced/wiki/) or [qnblackcat - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/)
See [arichornlover - Wiki](https://github.com/arichornlover/uYouEnhanced/wiki/) or [qnblackcat - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/)
## Lightweight Alternative - YTLitePlus
<details>
<summary>Read more</summary><br>
- Change from uYouEnhanced to YTLitePlus (optional)
Hello, this is here to showcase this tweak. I have been seeing the YTLitePlus tweak on Reddit for quite some time now and decided to join in. Before you download the tweak, you should take a look at the pros and cons below to learn more about the tweak.
# Switch from uYouEnhanced to YTLitePlus (optional)
https://github.com/Balackburn/YTLitePlus/releases
Hello, this is here to showcase this tweak. I have been seeing the posts about the YTLitePlus tweak on Reddit for quite some time now and decided to add it here. Before you download or check out the tweak, you should take a look at the pros and cons below to learn more about YTLitePlus.
https://github.com/YTLitePlus/YTLitePlus/releases
**Pros**
@ -389,9 +393,9 @@ https://github.com/Balackburn/YTLitePlus/releases
- YTLitePlus provides more features in YTLite & YTLitePlus Sections in Settings that uYouPlus/uYouEnhanced may not have.
- YTLitePlus includes a lightweight version of the App Version Spoofer, making it easier to use.
- YTLitePlus includes a lightweight and simplified version of the App Version Spoofer, making it easier to use.
- YTLitePlus does not cause your device to overheat, unlike uYouEnhanced.
- YTLitePlus does not cause your device to overheat, unlike uYouPlus/uYouEnhanced.
- YTLitePlus provides faster video & audio downloading than uYouPlus/uYouEnhanced.
@ -399,5 +403,5 @@ https://github.com/Balackburn/YTLitePlus/releases
- Video quality on WiFi option is not available in YTLitePlus.
- Reordering the pivot bar tabs such as Home, Shorts, Explore, Trending, Create, Subscriptions & You is not available in YTLitePlus.
- Reordering the pivot bar tabs such as `Home`, `Shorts`, `Explore`, `Trending`, `Create`, `Subscriptions` & `You` is not available in YTLitePlus.
</details>

View file

@ -2,11 +2,9 @@
#import <YouTubeHeader/YTAssetLoader.h>
@interface AppIconOptionsController () <UITableViewDataSource, UITableViewDelegate>
@property (strong, nonatomic) UITableView *tableView;
@property (strong, nonatomic) NSArray<NSString *> *appIcons;
@property (assign, nonatomic) NSInteger selectedIconIndex;
@end
@implementation AppIconOptionsController
@ -15,8 +13,6 @@
[super viewDidLoad];
self.title = @"Change App Icon";
[self.navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"YTSans-Bold" size:22], NSForegroundColorAttributeName: [UIColor whiteColor]}];
self.selectedIconIndex = -1;
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
@ -25,28 +21,11 @@
[self.view addSubview:self.tableView];
self.backButton = [UIButton buttonWithType:UIButtonTypeCustom];
NSBundle *backIcon = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"uYouPlus" ofType:@"bundle"]];
UIImage *backImage = [UIImage imageNamed:@"Back.png" inBundle:backIcon compatibleWithTraitCollection:nil];
backImage = [self resizeImage:backImage newSize:CGSizeMake(24, 24)];
backImage = [backImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[self.backButton setTintColor:[UIColor whiteColor]];
[self.backButton setImage:backImage forState:UIControlStateNormal];
[self.backButton setImage:[UIImage customBackButtonImage] forState:UIControlStateNormal];
[self.backButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
[self.backButton setFrame:CGRectMake(0, 0, 24, 24)];
UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithCustomView:self.backButton];
self.navigationItem.leftBarButtonItem = customBackButton;
UIColor *buttonColor = [UIColor colorWithRed:203.0/255.0 green:22.0/255.0 blue:51.0/255.0 alpha:1.0];
UIImage *resetImage = [UIImage systemImageNamed:@"arrow.clockwise.circle.fill"];
UIBarButtonItem *resetButton = [[UIBarButtonItem alloc] initWithImage:resetImage style:UIBarButtonItemStylePlain target:self action:@selector(resetIcon)];
resetButton.tintColor = buttonColor;
UIImage *saveImage = [UIImage systemImageNamed:@"square.and.arrow.up.fill"];
UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithImage:saveImage style:UIBarButtonItemStylePlain target:self action:@selector(saveIcon)];
saveButton.tintColor = buttonColor;
self.navigationItem.rightBarButtonItems = @[saveButton, resetButton];
NSString *path = [[NSBundle mainBundle] pathForResource:@"uYouPlus" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:path];
self.appIcons = [bundle pathsForResourcesOfType:@"png" inDirectory:@"AppIcons"];
@ -77,14 +56,8 @@
cell.imageView.image = iconImage;
cell.imageView.layer.cornerRadius = 10.0;
cell.imageView.clipsToBounds = YES;
cell.imageView.frame = CGRectMake(10, 10, 40, 40);
cell.textLabel.frame = CGRectMake(60, 10, self.view.frame.size.width - 70, 40);
if (indexPath.row == self.selectedIconIndex) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
cell.accessoryType = (indexPath.row == self.selectedIconIndex) ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
return cell;
}
@ -97,11 +70,6 @@
}
- (void)resetIcon {
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"];
NSMutableDictionary *infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
[infoDict removeObjectForKey:@"ALTAppIcon"];
[infoDict writeToFile:plistPath atomically:YES];
[[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"Error resetting icon: %@", error.localizedDescription);
@ -109,70 +77,37 @@
} else {
NSLog(@"Icon reset successfully");
[self showAlertWithTitle:@"Success" message:@"Icon reset successfully"];
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
[self.tableView reloadData];
}
}];
}
- (void)saveIcon {
if (![UIApplication sharedApplication].supportsAlternateIcons) {
NSLog(@"Alternate icons are not supported on this device.");
if (self.selectedIconIndex < 0) {
[self showAlertWithTitle:@"Error" message:@"No icon selected"];
return;
}
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *selectedIcon = self.selectedIconIndex >= 0 ? self.appIcons[self.selectedIconIndex] : nil;
if (selectedIcon) {
NSString *iconName = [selectedIcon.lastPathComponent stringByDeletingPathExtension];
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"];
NSMutableDictionary *infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
[infoDict setObject:iconName forKey:@"ALTAppIcon"];
[infoDict writeToFile:plistPath atomically:YES];
[[UIApplication sharedApplication] setAlternateIconName:iconName completionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"Error setting alternate icon: %@", error.localizedDescription);
[self showAlertWithTitle:@"Error" message:@"Failed to set alternate icon"];
} else {
NSLog(@"Alternate icon set successfully");
[self showAlertWithTitle:@"Success" message:@"Alternate icon set successfully"];
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
}
}];
NSString *selectedIcon = self.appIcons[self.selectedIconIndex];
NSString *iconName = [selectedIcon.lastPathComponent stringByDeletingPathExtension];
[[UIApplication sharedApplication] setAlternateIconName:iconName completionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"Error setting alternate icon: %@", error.localizedDescription);
[self showAlertWithTitle:@"Error" message:@"Failed to set alternate icon"];
} else {
NSLog(@"Selected icon path is nil");
NSLog(@"Alternate icon set successfully");
[self showAlertWithTitle:@"Success" message:@"Alternate icon set successfully"];
[self.tableView reloadData];
}
});
}
- (UIImage *)resizeImage:(UIImage *)image toSize:(CGSize)size {
UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resizedImage;
}
- (UIImage *)resizeImage:(UIImage *)image newSize:(CGSize)newSize {
UIGraphicsBeginImageContextWithOptions(newSize, NO, [UIScreen mainScreen].scale);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}];
}
- (void)showAlertWithTitle:(NSString *)title message:(NSString *)message {
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
[alert addAction:okAction];
[self presentViewController:alert animated:YES completion:nil];
});
UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
[alert addAction:okAction];
[self presentViewController:alert animated:YES completion:nil];
}
- (void)back {

View file

@ -25,7 +25,7 @@
%end
%ctor {
if (IS_ENABLED(@"bigYTMiniPlayer_enabled") && (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPad)) {
if (IS_ENABLED(kBigYTMiniPlayer) && (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPad)) {
%init(BigYTMiniPlayer);
}
}

View file

@ -10,10 +10,13 @@ static BOOL lowContrastMode() {
static BOOL customContrastMode() {
return IS_ENABLED(@"lowContrastMode_enabled") && contrastMode() == 1;
}
// static UIColor *whiteTextColor() {
// return [UIColor whiteColor];
// }
UIColor *lcmHexColor;
%group gLowContrastMode // Low Contrast Mode v1.5.2 (Compatible with only YouTube v17.33.2-v17.38.10)
%group gLowContrastMode // Low Contrast Mode v1.6.0 BETA (Compatible with only YouTube v17.33.2-v17.38.10)
%hook UIColor
+ (UIColor *)whiteColor { // Dark Theme Color
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
@ -54,39 +57,51 @@ UIColor *lcmHexColor;
%end
%hook YTCommonColorPalette
- (UIColor *)textPrimary {
NSLog(@"LowContrastMode: textPrimary called");
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
}
- (UIColor *)textSecondary {
NSLog(@"LowContrastMode: textSecondary called");
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
}
- (UIColor *)overlayTextPrimary {
NSLog(@"LowContrastMode: overlayTextPrimary called");
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
}
- (UIColor *)overlayTextSecondary {
NSLog(@"LowContrastMode: overlayTextSecondary called");
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
}
- (UIColor *)iconActive {
NSLog(@"LowContrastMode: iconActive called");
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
}
- (UIColor *)iconActiveOther {
NSLog(@"LowContrastMode: iconActiveOther called");
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
}
- (UIColor *)brandIconActive {
NSLog(@"LowContrastMode: brandIconActive called");
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
}
- (UIColor *)staticBrandWhite {
NSLog(@"LowContrastMode: staticBrandWhite called");
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
}
- (UIColor *)overlayIconActiveOther {
NSLog(@"LowContrastMode: overlayIconActiveOther called");
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
}
- (UIColor *)overlayIconInactive {
NSLog(@"LowContrastMode: overlayIconInactive called");
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.7] : %orig;
}
- (UIColor *)overlayIconDisabled {
NSLog(@"LowContrastMode: overlayIconDisabled called");
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.3] : %orig;
}
- (UIColor *)overlayFilledButtonActive {
NSLog(@"LowContrastMode: overlayFilledButtonActive called");
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.2] : %orig;
}
%end
@ -246,12 +261,21 @@ UIColor *lcmHexColor;
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
%orig(modifiedAttributes, state);
}
- (void)setCustomTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state {
NSMutableDictionary *customAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
[customAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
%orig(customAttributes, state);
}
%end
%hook UIButton
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state {
color = [UIColor whiteColor];
%orig(color, state);
}
- (void)setCustomTitleColor:(UIColor *)color forState:(UIControlState)state {
color = [UIColor whiteColor];
%orig(color, state);
}
%end
%hook UIBarButtonItem
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state {
@ -259,6 +283,11 @@ UIColor *lcmHexColor;
[modifiedAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
%orig(modifiedAttributes, state);
}
- (void)setCustomTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state {
NSMutableDictionary *customAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
[customAttributes setObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
%orig(customAttributes, state);
}
%end
%hook NSAttributedString
- (instancetype)initWithString:(NSString *)str attributes:(NSDictionary<NSAttributedStringKey, id> *)attrs {
@ -550,7 +579,18 @@ UIColor *lcmHexColor;
%end
%hook CATextLayer
- (void)setTextColor:(CGColorRef)textColor {
%orig([UIColor whiteColor].CGColor);
%orig([[UIColor whiteColor] CGColor]);
}
%end
%hook _ASDisplayView
- (void)setAttributedText:(NSAttributedString *)attributedText {
NSMutableAttributedString *newAttributedString = [attributedText mutableCopy];
[newAttributedString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0, newAttributedString.length)];
%orig(newAttributedString);
}
- (void)setTextColor:(UIColor *)textColor {
textColor = [UIColor whiteColor];
%orig(textColor);
}
%end
%hook ASTextNode
@ -563,20 +603,20 @@ UIColor *lcmHexColor;
%end
%hook ASTextFieldNode
- (void)setTextColor:(UIColor *)textColor {
%orig([UIColor whiteColor]);
%orig([UIColor whiteColor]);
}
%end
%hook ASTextView
- (void)setTextColor:(UIColor *)textColor {
%orig([UIColor whiteColor]);
%orig([UIColor whiteColor]);
}
%end
%hook ASButtonNode
- (void)setTextColor:(UIColor *)textColor {
%orig([UIColor whiteColor]);
%orig([UIColor whiteColor]);
}
%end
%hook UIControl // snackbar fix for lcm
%hook UIControl
- (UIColor *)backgroundColor {
return [UIColor blackColor];
}

43
Sources/SettingsKeys.h Normal file
View file

@ -0,0 +1,43 @@
#import "uYouPlus.h"
#import "uYouPlusSettings.h"
// Keys for "Copy settings" button (for: uYouEnhanced)
// In alphabetical order for tweaks after uYouEnhanced
NSArray *NSUserDefaultsCopyKeys = @[
// uYouEnhanced - gathered using get_keys.py
kReplaceCopyandPasteButtons, kAppTheme, kOLEDKeyboard, kPortraitFullscreen, kFullscreenToTheRight, kSlideToSeek, kYTTapToSeek, kDoubleTapToSeek, kSnapToChapter, kPinchToZoom, kYTMiniPlayer, kStockVolumeHUD, kReplaceYTDownloadWithuYou, kDisablePullToFull, kDisableChapterSkip, kAlwaysShowRemainingTime, kDisableRemainingTime, kEnableShareButton, kEnableSaveToButton, kHideYTMusicButton, kHideAutoplaySwitch, kHideCC, kHideVideoTitle, kDisableCollapseButton, kDisableFullscreenButton, kHideHUD, kHidePaidPromotionCard, kHideChannelWatermark, kHideVideoPlayerShadowOverlayButtons, kHidePreviousAndNextButton, kRedProgressBar, kHideHoverCards, kHideRightPanel, kHideFullscreenActions, kHideSuggestedVideo, kHideHeatwaves, kHideDoubleTapToSeekOverlay, kHideOverlayDarkBackground, kDisableAmbientMode, kHideVideosInFullscreen, kHideRelatedWatchNexts, kHideBuySuperThanks, kHideSubscriptions, kShortsQualityPicker, kRedSubscribeButton, kHideButtonContainers, kHideConnectButton, kHideShareButton, kHideRemixButton, kHideThanksButton, kHideDownloadButton, kHideClipButton, kHideSaveToPlaylistButton, kHideReportButton, kHidePreviewCommentSection, kHideCommentSection, kDisableAccountSection, kDisableAutoplaySection, kDisableTryNewFeaturesSection, kDisableVideoQualityPreferencesSection, kDisableNotificationsSection, kDisableManageAllHistorySection, kDisableYourDataInYouTubeSection, kDisablePrivacySection, kDisableLiveChatSection, kHidePremiumPromos, kHideHomeTab, kLowContrastMode, kClassicVideoPlayer, kFixLowContrastMode, kDisableModernButtons, kDisableRoundedHints, kDisableModernFlags, kYTNoModernUI, kEnableVersionSpoofer, kGoogleSignInPatch, kAdBlockWorkaroundLite, kAdBlockWorkaround, kYouTabFakePremium, kDisableAnimatedYouTubeLogo, kCenterYouTubeLogo, kHideYouTubeLogo, kYTStartupAnimation, kDisableHints, kStickNavigationBar, kHideiSponsorBlockButton, kHideChipBar, kHidePlayNextInQueue, kHideCommunityPosts, kHideChannelHeaderLinks, kiPhoneLayout, kBigYTMiniPlayer, kReExplore, kAutoHideHomeBar, kHideSubscriptionsNotificationBadge, kFixCasting, kNewSettingsUI, kFlex, kGoogleSigninFix,
// uYou - https://github.com/MiRO92/uYou-for-YouTube
@"showedWelcomeVC", @"hideShortsTab", @"hideCreateTab", @"hideCastButton", @"relatedVideosAtTheEndOfYTVideos", @"removeYouTubeAds", @"backgroundPlayback", @"disableAgeRestriction", @"iPadLayout", @"noSuggestedVideoAtEnd", @"shortsProgressBar", @"hideShortsCells", @"removeShortsCell", @"startupPage",
// DEMC - https://github.com/therealFoxster/DontEatMyContent/blob/master/Tweak.h
@"DEMC_enabled", @"DEMC_colorViewsEnabled", @"DEMC_safeAreaConstant", @"DEMC_disableAmbientMode",
@"DEMC_limitZoomToFill", @"DEMC_enableForAllVideos",
// iSponsorBlock cannot be exported using this method - it is also being removed in v5
// Return-YouTube-Dislike - https://github.com/PoomSmart/Return-YouTube-Dislikes/blob/main/TweakSettings.h
@"RYD-ENABLED", @"RYD-VOTE-SUBMISSION", @"RYD-EXACT-LIKE-NUMBER", @"RYD-EXACT-NUMBER",
// All YTVideoOverlay Tweaks - https://github.com/PoomSmart/YTVideoOverlay/blob/0fc6d29d1aa9e75f8c13d675daec9365f753d45e/Tweak.x#L28C1-L41C84
@"YTVideoOverlay-YouLoop-Enabled", @"YTVideoOverlay-YouTimeStamp-Enabled", @"YTVideoOverlay-YouMute-Enabled",
@"YTVideoOverlay-YouQuality-Enabled", @"YTVideoOverlay-YouLoop-Position", @"YTVideoOverlay-YouTimeStamp-Position",
@"YTVideoOverlay-YouMute-Position", @"YTVideoOverlay-YouQuality-Position",
// YouPiP - https://github.com/PoomSmart/YouPiP/blob/main/Header.h
@"YouPiPPosition", @"CompatibilityModeKey", @"PiPActivationMethodKey", @"PiPActivationMethod2Key",
@"NoMiniPlayerPiPKey", @"NonBackgroundableKey",
// YTABConfig cannot be reasonably exported using this method
// YTHoldForSpeed will be removed in v5
// YouTube Plus / YTLite cannot be exported using this method
// YTUHD - https://github.com/PoomSmart/YTUHD/blob/master/Header.h
@"EnableVP9", @"AllVP9",
// Useful YouTube Keys
@"inline_muted_playback_enabled",
];
// Some default values to ignore when exporting settings
NSDictionary *NSUserDefaultsCopyKeysDefaults = @{
@"fixCasting_enabled": @1,
@"inline_muted_playback_enabled": @5,
@"newSettingsUI_enabled": @1,
@"DEMC_safeAreaConstant": @21.5,
@"RYD-ENABLED": @1,
@"RYD-VOTE-SUBMISSION": @1,
// Duplicate keys are not allowed in NSDictionary. If present, only the last one will be kept.
};

View file

@ -3,7 +3,7 @@
// YTMiniPlayerEnabler: https://github.com/level3tjg/YTMiniplayerEnabler/
%hook YTWatchMiniBarViewController
- (void)updateMiniBarPlayerStateFromRenderer {
if (IS_ENABLED(@"ytMiniPlayer_enabled")) {}
if (IS_ENABLED(kYTMiniPlayer)) {}
else { return %orig; }
}
%end

View file

@ -3,7 +3,7 @@
// YTNoHoverCards: https://github.com/level3tjg/YTNoHoverCards
%hook YTCreatorEndscreenView
- (void)setHidden:(BOOL)hidden {
if (IS_ENABLED(@"hideHoverCards_enabled"))
if (IS_ENABLED(kHideHoverCards))
hidden = YES;
%orig;
}

View file

@ -5,18 +5,18 @@
// YTNoPaidPromo: https://github.com/PoomSmart/YTNoPaidPromo
%hook YTMainAppVideoPlayerOverlayViewController
- (void)setPaidContentWithPlayerData:(id)data {
if (IS_ENABLED(@"hidePaidPromotionCard_enabled")) {}
if (IS_ENABLED(kHidePaidPromotionCard)) {}
else { return %orig; }
}
- (void)playerOverlayProvider:(YTPlayerOverlayProvider *)provider didInsertPlayerOverlay:(YTPlayerOverlay *)overlay {
if ([[overlay overlayIdentifier] isEqualToString:@"player_overlay_paid_content"] && IS_ENABLED(@"hidePaidPromotionCard_enabled")) return;
if ([[overlay overlayIdentifier] isEqualToString:@"player_overlay_paid_content"] && IS_ENABLED(kHidePaidPromotionCard)) return;
%orig;
}
%end
%hook YTInlineMutedPlaybackPlayerOverlayViewController
- (void)setPaidContentWithPlayerData:(id)data {
if (IS_ENABLED(@"hidePaidPromotionCard_enabled")) {}
if (IS_ENABLED(kHidePaidPromotionCard)) {}
else { return %orig; }
}
%end

View file

@ -38,7 +38,7 @@ static void replaceTab(YTIGuideResponse *response) {
%end
%ctor {
if (IS_ENABLED(@"reExplore_enabled")) {
if (IS_ENABLED(kReExplore)) {
%init(YTReExplore);
}
}

View file

@ -1,53 +1,61 @@
#import <UIKit/UIKit.h>
#import <LocalAuthentication/LocalAuthentication.h>
#import <CaptainHook/CaptainHook.h>
#import <HBLog.h>
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
#import <CaptainHook/CaptainHook.h>
#import <dlfcn.h>
#import <sys/utsname.h>
#import <substrate.h>
#import <LocalAuthentication/LocalAuthentication.h>
#import <objc/runtime.h>
#import <rootless.h>
#import "uYouPlusThemes.h" // Hide "Buy Super Thanks" banner (_ASDisplayView)
#import <YouTubeHeader/YTAppDelegate.h> // Activate FLEX
#import <YouTubeHeader/YTIMenuConditionalServiceItemRenderer.h>
#import <YouTubeHeader/YTIPlayerBarDecorationModel.h>
#import <YouTubeHeader/YTPlayerBarRectangleDecorationView.h>
#import <YouTubeHeader/YTVideoQualitySwitchOriginalController.h>
#import <YouTubeHeader/YTIGuideResponse.h>
#import <YouTubeHeader/YTIGuideResponseSupportedRenderers.h>
#import <YouTubeHeader/YTIPivotBarSupportedRenderers.h>
#import <YouTubeHeader/YTIPivotBarItemRenderer.h>
#import <YouTubeHeader/YTIBrowseRequest.h>
#import <YouTubeHeader/YTIButtonRenderer.h>
#import <YouTubeHeader/YTIElementRenderer.h>
#import <YouTubeHeader/YTISectionListRenderer.h>
#import <YouTubeHeader/YTWatchNextResultsViewController.h>
#import <YouTubeHeader/YTPlayerOverlay.h>
#import <YouTubeHeader/YTPlayerOverlayProvider.h>
#import <YouTubeHeader/YTMainAppVideoPlayerOverlayView.h>
#import <YouTubeHeader/YTMainAppVideoPlayerOverlayViewController.h>
#import <YouTubeHeader/YTReelWatchPlaybackOverlayView.h>
#import <YouTubeHeader/YTInlinePlayerBarContainerView.h>
#import <YouTubeHeader/YTInnerTubeCollectionViewController.h>
#import <YouTubeHeader/YTPivotBarItemView.h>
#import <YouTubeHeader/YTCollectionViewCell.h>
#import <YouTubeHeader/YTIFormattedString.h>
#import <YouTubeHeader/GPBMessage.h>
#import <YouTubeHeader/YTIStringRun.h>
#import <YouTubeHeader/YTWatchViewController.h>
#import <YouTubeHeader/YTIPivotBarRenderer.h>
#import <YouTubeHeader/YTPlayerOverlayManager.h> // Fixes uYou crash when trying to play video (#1422)
// Hide buttons under the video player by @PoomSmart
#import <substrate.h>
#import <sys/utsname.h>
#import <YouTubeHeader/ASCollectionElement.h>
#import <YouTubeHeader/ASCollectionView.h>
#import <YouTubeHeader/ELMNodeController.h>
// YouTube-X
#import <YouTubeHeader/YTReelModel.h>
#import <YouTubeHeader/YTVideoWithContextNode.h>
#import <YouTubeHeader/ELMCellNode.h>
#import <YouTubeHeader/ELMNodeController.h>
#import <YouTubeHeader/ELMPBElement.h>
#import <YouTubeHeader/ELMPBProperties.h>
#import <YouTubeHeader/ELMPBIdentifierProperties.h>
#import <YouTubeHeader/GPBMessage.h>
#import <YouTubeHeader/MLPlayerStickySettings.h>
#import <YouTubeHeader/YTAppDelegate.h>
#import <YouTubeHeader/YTCollectionViewCell.h>
#import <YouTubeHeader/YTIBrowseRequest.h>
#import <YouTubeHeader/YTIButtonRenderer.h>
#import <YouTubeHeader/YTICompactLinkRenderer.h>
#import <YouTubeHeader/YTICompactListItemRenderer.h>
#import <YouTubeHeader/YTICompactListItemThumbnailSupportedRenderers.h>
#import <YouTubeHeader/YTIIconThumbnailRenderer.h>
#import <YouTubeHeader/YTIElementRenderer.h>
#import <YouTubeHeader/YTIFormattedString.h>
#import <YouTubeHeader/YTIGuideResponse.h>
#import <YouTubeHeader/YTIGuideResponseSupportedRenderers.h>
#import <YouTubeHeader/YTIMenuConditionalServiceItemRenderer.h>
#import <YouTubeHeader/YTInnerTubeCollectionViewController.h>
#import <YouTubeHeader/YTInlinePlayerBarContainerView.h>
#import <YouTubeHeader/YTIPivotBarItemRenderer.h>
#import <YouTubeHeader/YTIPivotBarRenderer.h>
#import <YouTubeHeader/YTIPivotBarSupportedRenderers.h>
#import <YouTubeHeader/YTIPlayerBarDecorationModel.h>
#import <YouTubeHeader/YTISectionListRenderer.h>
#import <YouTubeHeader/YTIStringRun.h>
#import <YouTubeHeader/YTMainAppVideoPlayerOverlayViewController.h>
#import <YouTubeHeader/YTMainAppVideoPlayerOverlayView.h>
#import <YouTubeHeader/YTNavigationBarTitleView.h>
#import <YouTubeHeader/YTPlayerBarController.h>
#import <YouTubeHeader/YTPlayerBarRectangleDecorationView.h>
#import <YouTubeHeader/YTPlayerOverlay.h>
#import <YouTubeHeader/YTPlayerOverlayProvider.h>
#import <YouTubeHeader/YTPlayerOverlayManager.h>
#import <YouTubeHeader/YTReelModel.h>
#import <YouTubeHeader/YTReelWatchPlaybackOverlayView.h>
#import <YouTubeHeader/YTResponder.h>
#import <YouTubeHeader/YTVideoQualitySwitchOriginalController.h>
#import <YouTubeHeader/YTVideoWithContextNode.h>
#import <YouTubeHeader/YTWatchNextResultsViewController.h>
#import <YouTubeHeader/YTWatchPlayerViewLayoutSource.h>
#import <YouTubeHeader/YTWatchPullToFullController.h>
#import <YouTubeHeader/YTWatchViewController.h>
#import "uYouPlusThemes.h" // uYouPlus Themes
#define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil]
#define IS_ENABLED(k) [[NSUserDefaults standardUserDefaults] boolForKey:k]
@ -57,13 +65,120 @@
#define DEFAULT_RATE 1.0f // YTSpeed
#define LOWCONTRASTMODE_CUTOFF_VERSION @"17.38.10" // LowContrastMode (v17.33.2-17.38.10)
// Keys
// Copy/Paste Settings
static NSString *const kReplaceCopyandPasteButtons = @"replaceCopyandPasteButtons_enabled";
// App appearance
static NSString *const kAppTheme = @"appTheme";
static NSString *const kOLEDKeyboard = @"oledKeyBoard_enabled";
// Video player
static NSString *const kPortraitFullscreen = @"portraitFullscreen_enabled";
static NSString *const kFullscreenToTheRight = @"fullscreenToTheRight_enabled";
static NSString *const kSlideToSeek = @"slideToSeek_enabled";
static NSString *const kYTTapToSeek = @"YTTapToSeek_enabled";
static NSString *const kDoubleTapToSeek = @"doubleTapToSeek_enabled";
static NSString *const kSnapToChapter = @"snapToChapter_enabled";
static NSString *const kPinchToZoom = @"pinchToZoom_enabled";
static NSString *const kYTMiniPlayer = @"ytMiniPlayer_enabled";
static NSString *const kStockVolumeHUD = @"stockVolumeHUD_enabled";
static NSString *const kReplaceYTDownloadWithuYou = @"kReplaceYTDownloadWithuYou_enabled";
static NSString *const kDisablePullToFull = @"disablePullToFull_enabled";
static NSString *const kDisableChapterSkip = @"disableChapterSkip_enabled";
static NSString *const kAlwaysShowRemainingTime = @"alwaysShowRemainingTime_enabled";
static NSString *const kDisableRemainingTime = @"disableRemainingTime_enabled";
// Video controls overlay
static NSString *const kEnableShareButton = @"enableShareButton_enabled";
static NSString *const kEnableSaveToButton = @"enableSaveToButton_enabled";
static NSString *const kHideYTMusicButton = @"hideYTMusicButton_enabled";
static NSString *const kHideAutoplaySwitch = @"hideAutoplaySwitch_enabled";
static NSString *const kHideCC = @"hideCC_enabled";
static NSString *const kHideVideoTitle = @"hideVideoTitle_enabled";
static NSString *const kDisableCollapseButton = @"disableCollapseButton_enabled";
static NSString *const kDisableFullscreenButton = @"disableFullscreenButton_enabled";
static NSString *const kHideHUD = @"hideHUD_enabled";
static NSString *const kHidePaidPromotionCard = @"hidePaidPromotionCard_enabled";
static NSString *const kHideChannelWatermark = @"hideChannelWatermark_enabled";
static NSString *const kHideVideoPlayerShadowOverlayButtons = @"hideVideoPlayerShadowOverlayButtons_enabled";
static NSString *const kHidePreviousAndNextButton = @"hidePreviousAndNextButton_enabled";
static NSString *const kRedProgressBar = @"redProgressBar_enabled";
static NSString *const kHideHoverCards = @"hideHoverCards_enabled";
static NSString *const kHideRightPanel = @"hideRightPanel_enabled";
static NSString *const kHideFullscreenActions = @"hideFullscreenActions_enabled";
static NSString *const kHideSuggestedVideo = @"hideSuggestedVideo_enabled";
static NSString *const kHideHeatwaves = @"hideHeatwaves_enabled";
static NSString *const kHideDoubleTapToSeekOverlay = @"hideDoubleTapToSeekOverlay_enabled";
static NSString *const kHideOverlayDarkBackground = @"hideOverlayDarkBackground_enabled";
static NSString *const kDisableAmbientMode = @"disableAmbientMode_enabled";
static NSString *const kHideVideosInFullscreen = @"hideVideosInFullscreen_enabled";
static NSString *const kHideRelatedWatchNexts = @"hideRelatedWatchNexts_enabled";
// Shorts control overlay
static NSString *const kHideBuySuperThanks = @"hideBuySuperThanks_enabled";
static NSString *const kHideSubscriptions = @"hideSubscriptions_enabled";
static NSString *const kShortsQualityPicker = @"shortsQualityPicker_enabled";
// Video player buttons
static NSString *const kRedSubscribeButton = @"redSubscribeButton_enabled";
static NSString *const kHideButtonContainers = @"hideButtonContainers_enabled";
static NSString *const kHideConnectButton = @"hideConnectButton_enabled";
static NSString *const kHideShareButton = @"hideShareButton_enabled";
static NSString *const kHideRemixButton = @"hideRemixButton_enabled";
static NSString *const kHideThanksButton = @"hideRemixButton_enabled";
static NSString *const kHideDownloadButton = @"hideDownloadButton_enabled";
static NSString *const kHideClipButton = @"hideClipButton_enabled";
static NSString *const kHideSaveToPlaylistButton = @"hideSaveToPlaylistButton_enabled";
static NSString *const kHideReportButton = @"hideReportButton_enabled";
static NSString *const kHidePreviewCommentSection = @"hidePreviewCommentSection_enabled";
static NSString *const kHideCommentSection = @"hideCommentSection_enabled";
// App settings overlay
static NSString *const kDisableAccountSection = @"disableAccountSection_enabled";
static NSString *const kDisableAutoplaySection = @"disableAutoplaySection_enabled";
static NSString *const kDisableTryNewFeaturesSection = @"disableTryNewFeaturesSection_enabled";
static NSString *const kDisableVideoQualityPreferencesSection = @"disableVideoQualityPreferencesSection_enabled";
static NSString *const kDisableNotificationsSection = @"disableNotificationsSection_enabled";
static NSString *const kDisableManageAllHistorySection = @"disableManageAllHistorySection_enabled";
static NSString *const kDisableYourDataInYouTubeSection = @"disableYourDataInYouTubeSection_enabled";
static NSString *const kDisablePrivacySection = @"disablePrivacySection_enabled";
static NSString *const kDisableLiveChatSection = @"disableLiveChatSection_enabled";
static NSString *const kHidePremiumPromos = @"hidePremiumPromos_enabled";
// UI Interface
static NSString *const kHideHomeTab = @"hideHomeTab_enabled";
static NSString *const kLowContrastMode = @"lowContrastMode_enabled";
static NSString *const kClassicVideoPlayer = @"classicVideoPlayer_enabled";
static NSString *const kFixLowContrastMode = @"fixLowContrastMode_enabled";
static NSString *const kDisableModernButtons = @"disableModernButtons_enabled";
static NSString *const kDisableRoundedHints = @"disableRoundedHints_enabled";
static NSString *const kDisableModernFlags = @"disableModernFlags_enabled";
static NSString *const kYTNoModernUI = @"ytNoModernUI_enabled";
static NSString *const kEnableVersionSpoofer = @"enableVersionSpoofer_enabled";
// Miscellaneous
static NSString *const kGoogleSignInPatch = @"googleSignInPatch_enabled";
static NSString *const kAdBlockWorkaroundLite = @"adBlockWorkaroundLite_enabled";
static NSString *const kAdBlockWorkaround = @"adBlockWorkaround_enabled";
static NSString *const kYouTabFakePremium = @"youTabFakePremium_enabled";
static NSString *const kDisableAnimatedYouTubeLogo = @"disableAnimatedYouTubeLogo_enabled";
static NSString *const kCenterYouTubeLogo = @"centerYouTubeLogo_enabled";
static NSString *const kHideYouTubeLogo = @"hideYouTubeLogo_enabled";
static NSString *const kYTStartupAnimation = @"ytStartupAnimation_enabled";
static NSString *const kDisableHints = @"disableHints_enabled";
static NSString *const kStickNavigationBar = @"stickNavigationBar_enabled";
static NSString *const kHideiSponsorBlockButton = @"hideiSponsorBlockButton_enabled";
static NSString *const kHideChipBar = @"hideChipBar_enabled";
static NSString *const kHidePlayNextInQueue = @"hidePlayNextInQueue_enabled";
static NSString *const kHideCommunityPosts = @"hideCommunityPosts_enabled";
static NSString *const kHideChannelHeaderLinks = @"hideChannelHeaderLinks_enabled";
static NSString *const kiPhoneLayout = @"iPhoneLayout_enabled";
static NSString *const kBigYTMiniPlayer = @"bigYTMiniPlayer_enabled";
static NSString *const kReExplore = @"reExplore_enabled";
static NSString *const kAutoHideHomeBar = @"autoHideHomeBar_enabled";
static NSString *const kHideSubscriptionsNotificationBadge = @"hideSubscriptionsNotificationBadge_enabled";
static NSString *const kFixCasting = @"fixCasting_enabled";
static NSString *const kNewSettingsUI = @"newSettingsUI_enabled";
static NSString *const kFlex = @"flex_enabled";
// unused (uYouEnhanced)
static NSString *const kGoogleSigninFix = @"googleSigninFix_enabled";
// Always show remaining time in video player - @bhackel
@interface YTPlayerBarController : NSObject
@property(nonatomic, strong) YTInlinePlayerBarContainerView *playerBar;
@end
@interface YTInlinePlayerBarContainerView (uYouEnhanced)
@property(nonatomic, assign) BOOL shouldDisplayTimeRemaining;
@end
// Header has been moved to https://github.com/PoomSmart/YouTubeHeader/blob/main/YTPlayerBarController.h
// Header has been moved to https://github.com/PoomSmart/YouTubeHeader/blob/main/YTInlinePlayerBarContainerView.h
// IAmYouTube
@interface SSOConfiguration : NSObject
@ -82,15 +197,18 @@
- (CABasicAnimation *)uYouEnhancedGetBlankColorAnimation;
@end
// OLED Live Chat - @bhackel
@interface YTLUserDefaults : NSUserDefaults
+ (void)exportYtlSettings;
@end
// Hide Home Tab - @bhackel
@interface YTPivotBarItemViewAccessibilityControl : UIControl
@end
@interface YTPivotBarItemView (uYouEnhanced)
@property (nonatomic, strong) YTPivotBarItemViewAccessibilityControl *hitTarget;
@end
// YTPivotBarItemView Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTPivotBarItemView.h
// YTTapToSeek - https://github.com/bhackel/YTTapToSeek
// Header has been moved to https://github.com/arichornlover/YouTubeHeader/blob/main/YTMainAppVideoPlayerOverlayViewController.h
// YTMainAppVideoPlayerOverlayViewController Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTMainAppVideoPlayerOverlayViewController.h
// Enable Premium logo - @bhackel
@interface YTITopbarLogoRenderer : NSObject
@ -98,36 +216,12 @@
@end
// Hide Premium Promo in You tab - @bhackel
@interface YTIIconThumbnailRenderer : GPBMessage
@property (nonatomic, strong) YTIIcon *icon;
- (BOOL)hasIcon;
@end
@interface YTICompactListItemThumbnailSupportedRenderers : GPBMessage
@property (nonatomic, strong) YTIIconThumbnailRenderer *iconThumbnailRenderer;
- (BOOL)hasIconThumbnailRenderer;
@end
@interface YTICompactListItemRenderer : GPBMessage
@property (nonatomic, strong) YTICompactListItemThumbnailSupportedRenderers *thumbnail;
@property (nonatomic, strong) YTIFormattedString *title;
- (BOOL)hasThumbnail;
- (BOOL)hasTitle;
@end
@interface YTIIcon (uYouEnhanced)
- (BOOL)hasIconType;
@end
@interface YTICompactLinkRenderer : GPBMessage
@property (nonatomic, strong) YTIIcon *icon;
@property (nonatomic, strong) YTIFormattedString *title;
@property (nonatomic, strong) YTICompactListItemThumbnailSupportedRenderers *thumbnail;
- (BOOL)hasIcon;
- (BOOL)hasThumbnail;
@end
@interface YTIItemSectionSupportedRenderers (uYouEnhanced)
@property(readonly, nonatomic) YTICompactLinkRenderer *compactLinkRenderer;
@property(readonly, nonatomic) YTICompactListItemRenderer *compactListItemRenderer;
- (BOOL)hasCompactLinkRenderer;
- (BOOL)hasCompactListItemRenderer;
@end
// YTIIconThumbnailRenderer Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTIIconThumbnailRenderer.h
// YTICompactListItemThumbnailSupportedRenderers Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTICompactListItemThumbnailSupportedRenderers.h
// YTICompactListItemRenderer Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTICompactListItemRenderer.h
// YTIIcon Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTIIcon.h
// YTICompactLinkRenderer Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTICompactLinkRenderer.h
// YTIItemSectionSupportedRenderers Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/YTIItemSectionSupportedRenderers.h
@interface YTAppCollectionViewController : YTInnerTubeCollectionViewController
- (void)uYouEnhancedFakePremiumModel:(YTISectionListRenderer *)model;
@end
@ -136,17 +230,18 @@
@end
// Disable Pull to Full for landscape videos - @bhackel
@interface YTWatchPullToFullController : NSObject
@property(nonatomic, strong) YTWatchViewController *playerViewSource;
@end
@interface YTWatchViewController (uYouEnhanced)
@property(nonatomic, strong) YTWatchPullToFullController *pullToFullController;
- (NSUInteger) allowedFullScreenOrientations;
// YTWatchPullToFullController Header has been moved to https://github.com/PoomSmart/YouTubeHeader/blob/main/YTWatchPullToFullController.h
// Fullscreen to the Right (uYouEnhanced Version) - @arichornlover
- (BOOL) fullscreen;
@interface YTWatchViewController (uYouEnhanced)
- (UIInterfaceOrientationMask) supportedInterfaceOrientations;
- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation;
- (void)forceRightFullscreenOrientation;
@end
// Center YouTube Logo (Custom Version) - @arichornlover
@interface YTNavigationBarTitleView (uYouEnhanced)
@property (nonatomic, strong) UIView *customView;
- (void)alignCustomViewToCenterOfWindow;
@end
// uYouPlus
@ -154,9 +249,6 @@
@property(readonly, nonatomic) long long pageStyle;
@end
@interface YTNavigationBarTitleView : UIView
@end
@interface YTChipCloudCell : UIView
@end
@ -189,6 +281,9 @@
@interface YTPlaybackButton : UIControl
@end
@interface HelperVC : UIViewController
@end
@interface YTPlaylistHeaderViewController : UIViewController
@property UIButton *downloadsButton;
@end
@ -196,17 +291,16 @@
// Buttons
@interface YTRightNavigationButtons : UIView
- (id)_viewControllerForAncestor;
@property(readonly, nonatomic) YTQTMButton *searchButton;
@property(readonly, nonatomic) YTQTMButton *notificationButton;
@property(strong, nonatomic) YTQTMButton *sponsorBlockButton;
@property(strong, nonatomic) YTQTMButton *uYouPlusButton;
@property (readonly, nonatomic) NSArray *dynamicButtons;
@property (readonly, nonatomic) NSArray *visibleButtons;
@property (readonly, nonatomic) NSArray *buttons;
@property (readonly, nonatomic) YTQTMButton *searchButton;
@property (readonly, nonatomic) YTQTMButton *notificationButton;
@property (strong, nonatomic) YTQTMButton *sponsorBlockButton;
@property (strong, nonatomic) YTQTMButton *settingsButton;
- (void)setDynamicButtons:(NSArray *)buttons;
- (void)setLeadingPadding:(CGFloat)arg1;
- (void)uYouPlusRootOptionsAction;
@end
@interface YTISlimMetadataButtonSupportedRenderers : NSObject
- (id)slimButton_buttonRenderer;
- (id)slimMetadataButtonRenderer;
- (void)settingsAction;
@end
// YTSpeed
@ -221,9 +315,7 @@
- (void)internalSetRate;
@end
@interface MLPlayerStickySettings (uYouPlus)
- (void)setRate:(float)rate;
@end
// MLPlayerStickySettings Header has been moved to https://github.com/arichornloverALT/YouTubeHeader/blob/main/MLPlayerStickySettings.h
@interface MLPlayerEventCenter : NSObject
- (void)broadcastRateChange:(float)rate;
@ -263,6 +355,9 @@
@interface ELMContainerNode : NSObject
@end
@interface YTWrapperSplitView : UIView
@end
@interface YTAutonavEndscreenView : UIView
@end

File diff suppressed because it is too large Load diff

View file

@ -1,10 +1,12 @@
#import <UIKit/UIActivityViewController.h>
#import <YouTubeHeader/YTUIUtils.h>
#import <YouTubeHeader/YTCommonUtils.h>
#import <YouTubeHeader/YTColorPalette.h>
#import <YouTubeHeader/YTCommonColorPalette.h>
#import "Tweaks/protobuf/objectivec/GPBDescriptor.h"
#import "Tweaks/protobuf/objectivec/GPBUnknownField.h"
#import "Tweaks/protobuf/objectivec/GPBUnknownFieldSet.h"
#import <YouTubeHeader/GOODialogView.h>
#import <YouTubeHeader/GPBDescriptor.h>
#import <YouTubeHeader/GPBUnknownField.h>
#import <YouTubeHeader/GPBUnknownFields.h>
#import "uYouPlus.h"
@interface PlayerManager : NSObject
@ -73,6 +75,15 @@
@interface ELMPBShowActionSheetCommand : GPBMessage
@property (nonatomic, strong, readwrite) ELMPBCommand *onAppear;
@property (nonatomic, assign, readwrite) BOOL hasOnAppear;
- (id)listOptionArray;
@end
@interface ELMContext : NSObject
@property (nonatomic, strong, readwrite) UIView *fromView;
@end
@interface ELMCommandContext : NSObject
@property (nonatomic, strong, readwrite) ELMContext *context;
@end
@interface YTIUpdateShareSheetCommand
@ -85,6 +96,11 @@
+ (GPBExtensionDescriptor*)innertubeCommand;
@end
@interface YTAccountScopedCommandResponderEvent
@property (nonatomic, strong, readwrite) YTICommand *command;
@property (nonatomic, strong, readwrite) UIView *fromView;
@end
@interface YTIShareEntityEndpoint
@property (nonatomic, assign, readwrite) BOOL hasSerializedShareEntity;
@property (nonatomic, copy, readwrite) NSString *serializedShareEntity;

View file

@ -3,6 +3,7 @@
# pragma mark - YouTube patches
// Fix Google Sign in by @PoomSmart and @level3tjg (qnblackcat/uYouPlus#684)
%group gGoogleSignInPatch
%hook NSBundle
- (NSDictionary *)infoDictionary {
NSMutableDictionary *info = %orig.mutableCopy;
@ -11,6 +12,7 @@
return info;
}
%end
%end
// Workaround for MiRO92/uYou-for-YouTube#12, qnblackcat/uYouPlus#263
%hook YTDataUtils
@ -96,30 +98,31 @@ typedef NS_ENUM(NSInteger, ShareEntityType) {
ShareEntityFieldVideo = 1,
ShareEntityFieldPlaylist = 2,
ShareEntityFieldChannel = 3,
ShareEntityFieldPost = 6,
ShareEntityFieldClip = 8
};
static inline NSString* extractIdWithFormat(GPBUnknownFieldSet *fields, NSInteger fieldNumber, NSString *format) {
if (![fields hasField:fieldNumber])
static inline NSString* extractIdWithFormat(GPBUnknownFields *fields, NSInteger fieldNumber, NSString *format) {
NSArray<GPBUnknownField*> *fieldArray = [fields fields:fieldNumber];
if (!fieldArray)
return nil;
GPBUnknownField *idField = [fields getField:fieldNumber];
if ([idField.lengthDelimitedList count] != 1)
if ([fieldArray count] != 1)
return nil;
NSString *id = [[NSString alloc] initWithData:[idField.lengthDelimitedList firstObject] encoding:NSUTF8StringEncoding];
NSString *id = [[NSString alloc] initWithData:[fieldArray firstObject].lengthDelimited encoding:NSUTF8StringEncoding];
return [NSString stringWithFormat:format, id];
}
static BOOL showNativeShareSheet(NSString *serializedShareEntity) {
static BOOL showNativeShareSheet(NSString *serializedShareEntity, UIView *sourceView) {
GPBMessage *shareEntity = [%c(GPBMessage) deserializeFromString:serializedShareEntity];
GPBUnknownFieldSet *fields = shareEntity.unknownFields;
GPBUnknownFields *fields = [[%c(GPBUnknownFields) alloc] initFromMessage:shareEntity];
NSString *shareUrl;
if ([fields hasField:ShareEntityFieldClip]) {
GPBUnknownField *shareEntityClip = [fields getField:ShareEntityFieldClip];
if ([shareEntityClip.lengthDelimitedList count] != 1)
return FALSE;
GPBMessage *clipMessage = [%c(GPBMessage) parseFromData:[shareEntityClip.lengthDelimitedList firstObject] error:nil];
shareUrl = extractIdWithFormat(clipMessage.unknownFields, 1, @"https://youtube.com/clip/%@");
NSArray<GPBUnknownField*> *shareEntityClip = [fields fields:ShareEntityFieldClip];
if (shareEntityClip) {
if ([shareEntityClip count] != 1)
return NO;
GPBMessage *clipMessage = [%c(GPBMessage) parseFromData:[shareEntityClip firstObject].lengthDelimited error:nil];
shareUrl = extractIdWithFormat([[%c(GPBUnknownFields) alloc] initFromMessage:clipMessage], 1, @"https://youtube.com/clip/%@");
}
if (!shareUrl)
@ -138,34 +141,39 @@ static BOOL showNativeShareSheet(NSString *serializedShareEntity) {
shareUrl = extractIdWithFormat(fields, ShareEntityFieldVideo, @"https://youtube.com/watch?v=%@");
if (!shareUrl)
return FALSE;
shareUrl = extractIdWithFormat(fields, ShareEntityFieldPost, @"https://youtube.com/post/%@");
UIActivityViewController *activityViewController = [[UIActivityViewController alloc]initWithActivityItems:@[shareUrl] applicationActivities:nil];
[[%c(YTUIUtils) topViewControllerForPresenting] presentViewController:activityViewController animated:YES completion:^{}];
return TRUE;
if (!shareUrl)
return NO;
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[shareUrl] applicationActivities:nil];
activityViewController.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypePrint];
UIViewController *topViewController = [%c(YTUIUtils) topViewControllerForPresenting];
if (activityViewController.popoverPresentationController) {
activityViewController.popoverPresentationController.sourceView = topViewController.view;
activityViewController.popoverPresentationController.sourceRect = [sourceView convertRect:sourceView.bounds toView:topViewController.view];
}
[topViewController presentViewController:activityViewController animated:YES completion:nil];
return YES;
}
/* -------------------- iPad Layout -------------------- */
%hook YTShareRequestViewController
- (id)initWithService:(id)_service parentResponder:(id)_parentResponder {
// disable the default share sheet behavior and force the app to call [YTAccountScopedCommandRouter handleCommand]
return NULL;
}
%end
%hook YTAccountScopedCommandRouter
- (BOOL)handleCommand:(id)command entry:(id)_entry fromView:(id)_fromView sender:(id)_sender completionBlock:(id)_completionBlock {
// %group gYouTubeNativeShare // YouTube Native Share Option - 0.2.3 - Supports YouTube v17.33.2-v19.34.2
%hook YTAccountScopedCommandResponderEvent
- (void)send {
GPBExtensionDescriptor *shareEntityEndpointDescriptor = [%c(YTIShareEntityEndpoint) shareEntityEndpoint];
if (![command hasExtension:shareEntityEndpointDescriptor])
if (![self.command hasExtension:shareEntityEndpointDescriptor])
return %orig;
YTIShareEntityEndpoint *shareEntityEndpoint = [command getExtension:shareEntityEndpointDescriptor];
if(!shareEntityEndpoint.hasSerializedShareEntity)
YTIShareEntityEndpoint *shareEntityEndpoint = [self.command getExtension:shareEntityEndpointDescriptor];
if (!shareEntityEndpoint.hasSerializedShareEntity)
return %orig;
if (!showNativeShareSheet(shareEntityEndpoint.serializedShareEntity))
if (!showNativeShareSheet(shareEntityEndpoint.serializedShareEntity, self.fromView))
return %orig;
return TRUE;
}
%end
@ -173,7 +181,7 @@ static BOOL showNativeShareSheet(NSString *serializedShareEntity) {
/* ------------------- iPhone Layout ------------------- */
%hook ELMPBShowActionSheetCommand
- (void)executeWithCommandContext:(id)_context handler:(id)_handler {
- (void)executeWithCommandContext:(ELMCommandContext*)context handler:(id)_handler {
if (!self.hasOnAppear)
return %orig;
GPBExtensionDescriptor *innertubeCommandDescriptor = [%c(YTIInnertubeCommandExtensionRoot) innertubeCommand];
@ -186,10 +194,13 @@ static BOOL showNativeShareSheet(NSString *serializedShareEntity) {
YTIUpdateShareSheetCommand *updateShareSheetCommand = [innertubeCommand getExtension:updateShareSheetCommandDescriptor];
if (!updateShareSheetCommand.hasSerializedShareEntity)
return %orig;
if (!showNativeShareSheet(updateShareSheetCommand.serializedShareEntity))
if (!showNativeShareSheet(updateShareSheetCommand.serializedShareEntity, context.context.fromView))
return %orig;
}
%end
// %end
//
// iOS 16 uYou crash fix - @level3tjg: https://github.com/qnblackcat/uYouPlus/pull/224
// %group iOS16
@ -326,8 +337,69 @@ static void refreshUYouAppearance() {
- (void)beginEnlargeAnimation {}
%end
%hook GOODialogView
- (id)imageView {
UIImageView *imageView = %orig;
if ([[self titleLabel].text containsString:@"uYou\n"]) {
// // Invert uYou logo in download dialog if dark mode is enabled
// if ([[NSUserDefaults standardUserDefaults] integerForKey:@"page_style"] == 0)
// return imageView;
// // https://gist.github.com/coryalder/3113a43734f5e0e4b497
// UIImage *image = [imageView image];
// CIImage *ciImage = [[CIImage alloc] initWithImage:image];
// CIFilter *filter = [CIFilter filterWithName:@"CIColorInvert"];
// [filter setDefaults];
// [filter setValue:ciImage forKey:kCIInputImageKey];
// CIContext *context = [CIContext contextWithOptions:nil];
// CIImage *output = [filter outputImage];
// CGImageRef cgImage = [context createCGImage:output fromRect:[output extent]];
// UIImage *icon = [UIImage imageWithCGImage:cgImage];
// CGImageRelease(cgImage);
// Load icon_clipped.png from uYouBundle.bundle
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"uYouBundle" ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
NSString *iconPath = [bundle pathForResource:@"icon_clipped" ofType:@"png"];
UIImage *icon = [UIImage imageWithContentsOfFile:iconPath];
[imageView setImage:icon];
// Resize image to 30x30
// https://stackoverflow.com/a/2658801/19227228
CGSize size = CGSizeMake(30, 30);
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
[icon drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[imageView setImage:resizedImage];
}
return imageView;
}
// Increase space between uYou label and video title
- (id)titleLabel {
UILabel *titleLabel = %orig;
if ([titleLabel.text containsString:@"uYou\n"] &&
![titleLabel.text containsString:@"uYou\n\n"]
) {
NSString *text = [titleLabel.text stringByReplacingOccurrencesOfString:@"uYou\n" withString:@"uYou\n\n"];
[titleLabel setText:text];
}
return titleLabel;
}
%end
%ctor {
%init;
if (IS_ENABLED(kGoogleSignInPatch)) {
%init(gGoogleSignInPatch);
}
/*
if (IS_ENABLED(kYouTubeNativeShare)) {
%init(gYouTubeNativeShare);
}
*/
// if (@available(iOS 16, *)) {
// %init(iOS16);
// }

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -11,7 +11,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4.1.4
uses: actions/checkout@v4.1.7
- name: Set up Git
run: |
@ -20,11 +20,12 @@ jobs:
- name: Add uYouEnhanced submodules
run: |
# git submodule add https://github.com/PoomSmart/FLEXing.git Tweaks/FLEXing
git submodule add https://github.com/dayanch96/uYouLocalization.git Tweaks/uYouLocalization
git submodule add https://github.com/arichornlover/YTHoldForSpeed.git Tweaks/YTHoldForSpeed
git submodule add https://github.com/arichornlover/YouGroupSettings.git Tweaks/YouGroupSettings
git submodule add https://github.com/arichornlover/YouTimeStamp.git Tweaks/YouTimeStamp
git submodule add https://github.com/arichornloverALT/YTHoldForSpeed.git Tweaks/YTHoldForSpeed
git submodule add https://github.com/arichornloverALT/YouGroupSettings.git Tweaks/YouGroupSettings
git submodule add https://github.com/arichornloverALT/YouTimeStamp.git Tweaks/YouTimeStamp
git submodule add https://github.com/bhackel/YouLoop.git Tweaks/YouLoop
git submodule add https://github.com/protocolbuffers/protobuf.git Tweaks/protobuf
git add .
git commit -m "added uYouEnhanced submodules"
git push origin
@ -65,6 +66,8 @@ jobs:
git add .
git submodule update --init --recursive --remote Tweaks/YouMute
git add .
git submodule update --init --recursive --remote Tweaks/YouLoop
git add .
git submodule update --init --recursive --remote Tweaks/YouPiP
git add .
git submodule update --init --recursive --remote Tweaks/YouQuality
@ -84,10 +87,10 @@ jobs:
- name: Make .bundle files
run: |
cd Bundles
ln -s ../Tweaks/MrBeastify/layout/Library/Application\ Support/MrBeastify.bundle MrBeastify.bundle
ln -s ../Tweaks/uYouLocalization/layout/Library/Application\ Support/uYouLocalization.bundle uYouLocalization.bundle
ln -s ../Tweaks/YTHoldForSpeed/layout/Library/Application\ Support/YTHoldForSpeed.bundle YTHoldForSpeed.bundle
ln -s ../Tweaks/YouGroupSettings/layout/Library/Application\ Support/YouGroupSettings.bundle YouGroupSettings.bundle
ln -s ../Tweaks/YouLoop/layout/Library/Application\ Support/YouLoop.bundle YouLoop.bundle
ln -s ../Tweaks/YouTimeStamp/layout/Library/Application\ Support/YouTimeStamp.bundle YouTimeStamp.bundle
git add .
git commit -m "Added bundles"
@ -102,6 +105,7 @@ jobs:
# rm -f uYouLocalization.bundle
# rm -f YTHoldForSpeed.bundle
# rm -f YouGroupSettings.bundle
# rm -f YouLoop.bundle
# rm -f YouTimeStamp.bundle
# git add .
# git commit -m "Deleted bundles"

@ -1 +1 @@
Subproject commit 2aa3086244d296cfb3c8e782ef09c76316452a9d
Subproject commit 15b061bf414cf29fd0d4e0e124e9e2ccb99326b0

@ -1 +1 @@
Subproject commit 95fecff296722df4a9938308c3bdb178cb690b7c
Subproject commit a9134c82b032b145541f3c06a3c4950487f01474

@ -1 +1 @@
Subproject commit d3b2da8ba06c7d438aa3c2fb3359ae01d89b6731
Subproject commit 9ef7bbb3b7d7cd2218a9884d8680625db0d898f3

@ -1 +1 @@
Subproject commit 67e321458867029b1ffcdfa29759332835b80eca
Subproject commit a22ef4deb929c6622069290bb340d21b280f300e

@ -1 +1 @@
Subproject commit 2a4282fbdcbd0c8b586a64ad364fbb3ec880f606
Subproject commit 5af54ea6bf3aed6a615094fa285669a0e46ece51

@ -1 +1 @@
Subproject commit 3cda9a9035e9964c881191268c30a9c0a4fc52a1
Subproject commit 96508bf22012d588a6ad29bfff3f694800a3a525

@ -1 +1 @@
Subproject commit ec0c012561b56a908d7693a51f8db0015e1a6c30
Subproject commit 12b4991ade6d3edd1e4fb28fe19bb32b6dc93206

@ -1 +1 @@
Subproject commit 159da3e9569e8f156a73df80b153c57cccc1dad1
Subproject commit f5af14fc258cd84d7534bc55c51717f30172c79c

1
Tweaks/YouLoop Submodule

@ -0,0 +1 @@
Subproject commit 58f76b1271c1ec05d6513e054f46e4080780a0d9

@ -1 +1 @@
Subproject commit 1f3ee2c5eef13ceb4ddc478148a48ffa19e1a9a7
Subproject commit 63fe2c05fd23a517191645cd450115dc6965e0d8

@ -1 +1 @@
Subproject commit 33d903ddb5fee7c8e8a27a32e378caf9b854ca64
Subproject commit a308e3eeb6eb60cb8f118cf7fdced0015e584ad4

@ -1 +1 @@
Subproject commit 38a2b7032200f700c661b6f6e9d22b4a7eb47e85
Subproject commit e89ffe8be85564fe2bfc04345a186c4a02ef456a

@ -1 +1 @@
Subproject commit 8ed225d41ba7c9894df8e51afff3674c3ded4dbf
Subproject commit 128c9305d7e796b883d8563b3cb6e7eac7a33ea8

@ -1 +1 @@
Subproject commit 58951f248bfe90298ca65007603d465f58369876
Subproject commit b4e1bc798149d68029c89510948600be2986968b

@ -1 +1 @@
Subproject commit 532f0c2ed52b60bc33492a2ee4cbf9c4ca960450
Subproject commit 60ca6e06d78e68854f8b1bd1c644a7f4376f6168