Compare commits

..
Author SHA1 Message Date
qnblackcat e2cd37a8b6 formating, remove old code, update IAmYouTube 2022-09-01 11:40:09 +07:00
qnblackcat e5b9ff21cf update submodules 2022-09-01 09:23:13 +07:00
level3tjg 2e7fd253a8 just found out isnan() exists 2022-08-30 10:44:48 -04:00
level3tjg 3aa7c57d82 Fix uYou player bar bug 2022-08-28 02:02:18 -04:00
level3tjg 11ddcd421d Workaround for iOS 15 uYou settings bug (#10) 2022-08-27 02:49:20 -04:00
level3tjg 6418f3daeb Make sure we're modifying uYou shorts button 2022-08-27 02:12:18 -04:00
level3tjg 4b283110a6 Various fixes for shorts (#170, #253, #263) 2022-08-26 18:41:33 -04:00
qnblackcat 2615436031 v17.33.2-2.1 2022-08-26 13:20:22 +07:00
qnblackcat 81088fadd3 update Makefile 2022-08-26 13:20:13 +07:00
BandarHelal 5adaec2c93 Update uYouPlus.xm 2022-08-25 19:39:25 +03:00
BandarHelal 7ac253963e Fix Login issue 2022-08-25 18:31:28 +03:00
Nguyễn Đạt 2d2b469f1f Merge pull request #407 from darkbrow/main
Update Korean localization
2022-08-25 08:20:04 +07:00
Jinbong 9e98ad9482 Update Korean localization 2022-08-25 03:17:53 +09:00
BandarHelal 1d5de3cd4c Update uYouPlus.xm
Improve Julioverne's code by specifying YouTube SSOService because "device_challenge_request" can be used in other thinks with the App like Apple Push Service.
2022-08-21 17:03:47 +03:00
Nguyễn Đạt 1266cb5a38 More specifically... 2022-08-21 11:00:59 +07:00
Nguyễn Đạt 4fee21517e Merge pull request #398 from julioverne/main
Completely fix Google Sign-in by julioverne (#319)
2022-08-21 02:23:44 +07:00
julioverne 2ff0f3fb56 Fix Login
Fixes Login Account from Insecure App
2022-08-20 15:28:51 -03:00
qnblackcat 329fb1681a Skips content warning before playing *some videos - @PoomSmart 2022-08-14 02:02:23 +07:00
Nguyễn Đạt c78e5b9fd9 Merge pull request #374 from darkbrow/main
Add Korean localization
2022-08-13 12:59:43 +07:00
Jinbong 7b9fd7dcfb Add Korean localization 2022-08-13 14:02:24 +09:00
Nguyễn Đạt 922ab4e9b7 Merge pull request #373 from Sh1hu/patch-1
Update Japanese localization
2022-08-13 10:20:34 +07:00
Sh1hu c8a4acfff0 Update Japanese localization
The correct Japanese translation of the "Explore" tab is "探索".
Other translation optimizations were made.
2022-08-13 09:56:20 +09:00
qnblackcat d53b400235 v17.31.4-2.1 2022-08-12 22:00:53 +07:00
qnblackcat 3cabc4405d update uYouPlus.xm 2022-08-12 22:00:36 +07:00
qnblackcat d3a347a914 add Japan localization, credit: @Haerumastu - Twitter 2022-08-10 21:41:59 +07:00
Nguyễn Đạt 17adfaf534 Merge pull request #362 from fefifofum/main
Add Spanish translation
2022-08-10 21:38:09 +07:00
Nguyễn Đạt edc1ac3912 Update Localizable.strings 2022-08-10 21:37:47 +07:00
Nguyễn Đạt 21d3e74f9f Merge pull request #361 from Thunderz2016/main
Add Simplified Chinese (zh_cn) translation
2022-08-10 21:37:14 +07:00
qnblackcat 3bd1914a36 update submodules 2022-08-10 21:30:43 +07:00
fefifofum 7ff88f4106 Add Spanish translation 2022-08-10 10:36:01 +02:00
Thunderz2016 b6304bf20a Added Simplified Chinese translation
Minor grammar improvements.
2022-08-09 23:32:07 -07:00
Thunderz2016 0db3c368a0 Added Simplified Chinese translation
Deleted comments that contain instructions to create translations.
2022-08-09 23:21:20 -07:00
Thunderz2016 9bd31e7189 Added Simplified Chinese translation 2022-08-09 23:16:28 -07:00
Nguyễn Đạt 58488a1d89 Merge pull request #350 from moh-ter/main
Update Ar Translation
2022-08-07 08:34:08 +07:00
moh-ter c9547cae78 Merge branch 'qnblackcat:main' into main 2022-08-06 16:53:16 +03:00
moh-ter f8336d0352 Fix Ar Translation + add "Kill App" translation
Fix Ar Translation .. sorry for the mistake.

+ add translation for the new strings
2022-08-06 16:23:35 +03:00
qnblackcat e549c1e9e9 fixed missing scroll bar in Shorts (#343) 2022-08-06 11:31:20 +07:00
qnblackcat afb5cf1cb6 update submodules 2022-08-06 11:28:53 +07:00
qnblackcat f275f72413 use iOS 15.5 SDK 2022-08-05 23:20:17 +07:00
qnblackcat 46b4ea6a27 update submodules 2022-08-05 23:18:20 +07:00
qnblackcat 23ba60a3ba v17.30.3-2.1 (pre-release) 2022-08-05 23:17:09 +07:00
17 changed files with 415 additions and 59 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ _Make sure you complete the template. Otherwise, it will be closed without furth
- iOS/iPadOS version:
- Device model:
- Sideload tool (Ex: AltStore, Sideloadly...)
- Version of uYouPlus:
- Version of uYouPlus: _**latest** or **newest** is NOT a version number!!_
### Describe the bug
+3 -6
View File
@@ -56,13 +56,10 @@ jobs:
path: theos
submodules: recursive
- name: Download iOS 15 SDK
- name: Download iOS 15.5 SDK
run: |
curl -LO https://github.com/chrisharper22/sdks/archive/main.zip
TMP=$(mktemp -d)
unzip -qq main.zip -d $TMP
mv $TMP/sdks-main/*.sdk $THEOS/sdks
rm -r main.zip $TMP
svn checkout -q https://github.com/chrisharper22/sdks/trunk/iPhoneOS15.5.sdk
mv *.sdk $THEOS/sdks
env:
THEOS: ${{ github.workspace }}/theos
+11
View File
@@ -9,6 +9,10 @@
@end
// uYouPlus
@interface YTPlayabilityResolutionUserActionUIController : NSObject // Skips content warning before playing *some videos - @PoomSmart
- (void)confirmAlertDidPressConfirm;
@end
@interface YTMainAppControlsOverlayView : UIView
@end
@@ -26,6 +30,13 @@
@interface FRPSliderCell : UITableViewCell
@end
@interface boolSettingsVC : UIViewController
@end
@interface PlayerManager : NSObject
- (float)progress;
@end
// iOS16 fix
@interface OBPrivacyLinkButton : UIButton
- (instancetype)initWithCaption:(NSString *)caption
+1 -1
View File
@@ -13,7 +13,7 @@ BUNDLE_ID = com.google.ios.youtube
uYouPlus_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib .theos/obj/libcolorpicker.dylib .theos/obj/iSponsorBlock.dylib .theos/obj/YTUHD.dylib .theos/obj/YouPiP.dylib .theos/obj/YouTubeDislikesReturn.dylib .theos/obj/YoutubeSpeed.dylib
uYouPlus_FILES = uYouPlus.xm Settings.xm
uYouPlus_IPA = ./tmp/Payload/YouTube.app
uYouPlus_FRAMEWORKS = UIKit
uYouPlus_FRAMEWORKS = UIKit Security
uYouPlus_CFLAGS = -fobjc-arc
include $(THEOS)/makefiles/common.mk
+25 -18
View File
@@ -21,7 +21,11 @@
- [PoomSmart](https://twitter.com/poomsmart) - the developer of many tweaks used by uYouPlus, see [Version info - Download](#download) for more details.
- [level3tjg](https://twitter.com/level3tjg) - for [YTNoHoverCards](https://github.com/level3tjg/YTNoHoverCards) and [YTMiniplayerEnabler](https://github.com/level3tjg/YTMiniplayerEnabler).
- [level3tjg](https://twitter.com/level3tjg) for [YTNoHoverCards](https://github.com/level3tjg/YTNoHoverCards), [YTMiniplayerEnabler](https://github.com/level3tjg/YTMiniplayerEnabler) and many hot patches for uYou.
- [BandarHL](https://twitter.com/bandarhl) for a bunch of improvements.
- [Julioverne](https://twitter.com/ijulioverne) for the solution to skip Google's safety warning when logging in.
- [Lyvendia](https://github.com/Lyvendia/) for [YTSpeed](https://github.com/Lyvendia/YTSpeed/)
@@ -29,6 +33,8 @@
- [theos team](https://github.com/theos/theos) for theos & theos-jailed.
- Thanks to all the translators who have contributed to uYouPlus. Your contribution is highly appreciated!
# Features
1. **uYou:** uYou has a ton of features that I can't list them all. Visit [here](https://miro92.com/repo/depictions/?p=com.miro.uyou) for more info!
@@ -48,17 +54,15 @@
7. **YTNoHoverCards:** offer an option to enable/disable the annoying suggested videos show up at the end of the videos.
8. **YTSystemAppearance**: sync the YouTube theme (dark/light) with the system theme.
8. **YTNoCheckLocalNetwork**: block the Local Network permission popup.
9. **YTNoCheckLocalNetwork**: block the Local Network permission popup.
9. **YouRememberCaption**: make YouTube remember your video caption setting (if not already).
10. **YouRememberCaption**: make YouTube remember your video caption setting (if not already).
10. **NoYTPremium**: remove YouTube Premium upshells.
11. **NoYTPremium**: remove YouTube Premium upshells.
11. **YTSpeed**: add 2.25, 2.5, 2.75, and 3x playback speed
12. **YTSpeed**: add 2.25, 2.5, 2.75, and 3x playback speed
13. **YTMiniplayerEnabler**: enable Miniplayer for all YouTube videos.
12. **YTMiniplayerEnabler**: enable Miniplayer for all YouTube videos.
</details>
@@ -76,26 +80,26 @@
- My official AltStore repo: https://qnblackcat.github.io/AltStore/
- [Open in AltStore (v17.26.2-2.1)](https://tinyurl.com/2y86dh6b) - It will take a while to install because AltStore needs to download the IPA.
- [Open in AltStore (v17.33.2-2.1)](https://tinyurl.com/33mv77u6) - It will take a while to install because AltStore needs to download the IPA.
- Version info: _(last update: Jul 11)_
- Version info: _(last update: Aug 26)_
<details>
<summary>Expand</summary>
| **Tweaks/App** | **Developer** | **Version** | **Open source** |
| - | - | :-: | :-: |
| **YouTube** | Google Inc | 17.26.2 | ✖︎ |
| **YouTube** | Google Inc | 17.33.2 | ✖︎ |
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | [MiRO92](https://twitter.com/miro92) | 2.1 | ✖︎ |
| [Open in YouTube](https://github.com/CokePokes/YoutubeExtensions) | [CokePokes](https://github.com/CokePokes) | 1.2 | ✖︎ |
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-14 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
| **iSponsorBlock** | [Galactic-Dev](https://github.com/Galactic-Dev) | 1.0-15 | [✔︎](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) |
| **YTSpeed** | [Lyvendia](https://github.com/Lyvendia) | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) |
| **YTCastConfirm** | [JamieBerghmans](https://github.com/JamieBerghmans) | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) |
| **Alderis Color Picker** | [HASHBANG Productions](https://github.com/hbang) | 1.2| [✔︎](https://github.com/hbang/Alderis) |
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.8 | [✔︎](https://github.com/PoomSmart/YTUHD) |
| **YTUHD** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.9 | [✔︎](https://github.com/PoomSmart/YTUHD) |
| **YouPiP** | [PoomSmart](https://twitter.com/poomsmart) | 1.7.7 | [✔︎](https://github.com/PoomSmart/YouPiP) |
| **IAmYouTube** | [PoomSmart](https://twitter.com/poomsmart) | 1.2.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) |
| **YTReExplore** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) |
@@ -103,9 +107,8 @@
| **YTNoPaidPromo** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://github.com/PoomSmart/YTNoPaidPromo) |
| **YTAutoFullScreen** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.3 | [✔︎](https://github.com/PoomSmart/YTAutoFullScreen) |
| **YouRememberCaption** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) |
| **YTSystemAppearance** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html) |
| **YTClassicVideoQuality** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.1 | [✔︎](https://github.com/PoomSmart/YTClassicVideoQuality) |
| **Return YouTube Dislike** | [PoomSmart](https://twitter.com/poomsmart) | 1.6.5 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
| **Return YouTube Dislike** | [PoomSmart](https://twitter.com/poomsmart) | 1.6.6 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
| **YTNoCheckLocalNetwork** | [PoomSmart](https://twitter.com/poomsmart) | 1.0.2 | [✔︎](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html) |
</details>
@@ -118,9 +121,7 @@ See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installati
<details>
<summary>MiRO92</summary>
- CashApp: https://cash.app/$MiRO92M
- Other payment methods are available in uYou's settings.
- https://github.com/MiRO92/uYou-for-YouTube#support
</details>
<details>
@@ -130,6 +131,12 @@ See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installati
</details>
<details>
<summary>Bandar Alruwaili (BandarHL)</summary>
- Paypal: https://www.paypal.com/paypalme/BandarHL
</details>
<details>
<summary>Galactic-dev</summary>
@@ -1,34 +1,37 @@
// Settings
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "إخفاء زر "السابق" و"التالي"";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "إخفاء زرّي "السابق" و"التالي" من أزرار التحكم على الفيديو.";
"KILL_APP" = "إغلاق تطبيق يوتيوب";
"KILL_APP_DESC" = "المس هنا لإغلاق تطبيق يوتيوب!";
"YT_MINIPLAYER" = "السماح بـ"المشغل المصغّر" لكل فيديوهات يوتيوب";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "إخفاء زر السابق والتالي";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "إخفاء زرّي السابق والتالي من أزرار التحكم على الفيديو.";
"YT_MINIPLAYER" = "السماح بالمشغل المصغّر لكل فيديوهات يوتيوب";
"YT_MINIPLAYER_DESC" = "عند تصغير فيديوهات الأطفال مثلاً (قبل إغلاق المقطع).";
"CAST_CONFIRM" = "التأكيد قبل البث (أداة YTCastConfirm)";
"CAST_CONFIRM_DESC" = "إظهار تنبيه للتأكيد قبل البث، من أجل منع البث للتلفاز عن طريق الخطأ.";
"HIDE_HOVER_CARD" = "إخفاء صور المقاطع الأخرى في نهاية المقاطع (YTNoHoverCards)";
"HIDE_HOVER_CARD" = "إخفاء صور المقاطع الأخرى في نهاية المقاطع (أداة YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "إخفاء الصور المصغرة الظاهرة على مشغل الفيديو في نهاية المقطع.";
"NEW_MINIPLAYER_STYLE" = "تغيير شكل المشغّل المصغر (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE" = "تغيير شكل المشغّل المصغر (أداة BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "تغيير شكل المشغّل المصغر في الآيفون إلى نفس شكله في الآيباد - تتطلب إغلاق التطبيق وإعادة فتحه.";
"YT_RE_EXPLORE" = "استبدال تبويب Shorts بتبويب Explore (YTReExplore)";
"YT_RE_EXPLORE" = "استبدال تبويب Shorts بتبويب Explore (أداة YTReExplore)";
"YT_RE_EXPLORE_DESC" = " تتطلب إغلاق التطبيق وإعادة فتحه.";
"HIDE_SUBTITLES_BUTTON" = "إخفاء زر "الترجمة"";
"HIDE_SUBTITLES_BUTTON_DESC" = "إخفاء زر "الترجمة" من أزرار التحكم على الفيديو.";
"HIDE_SUBTITLES_BUTTON" = "إخفاء زر الترجمة";
"HIDE_SUBTITLES_BUTTON_DESC" = "إخفاء زر الترجمة من أزرار التحكم على الفيديو.";
"HIDE_AUTOPLAY_SWITCH" = "إخفاء زر "التشغيل التلقائي"";
"HIDE_AUTOPLAY_SWITCH_DESC" = "إخفاء زر "التشغيل التلقائي" من أزرار التحكم على الفيديو.";
"HIDE_AUTOPLAY_SWITCH" = "إخفاء زر التشغيل التلقائي";
"HIDE_AUTOPLAY_SWITCH_DESC" = "إخفاء زر التشغيل التلقائي من أزرار التحكم على الفيديو.";
"AUTO_FULLSCREEN" = "كامل الشاشة تلقائياً (YTAutoFullScreen)";
"AUTO_FULLSCREEN" = "كامل الشاشة تلقائياً (أداة YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "تشغيل الفيديوهات تلقائياً بكامل الشاشة.";
"HIDE_HUD_MESSAGES" = "إخفاء رسائل المعلومات";
"HIDE_HUD_MESSAGES_DESC" = "مثلاً: تم إيقاف الترحمة...";
"HIDE_HUD_MESSAGES_DESC" = "مثلاً: تم إيقاف الترجمة...";
"OLED_DARKMODE" = "وضغ داكن OLED (ميزة تجريبية)";
"OLED_DARKMODE_DESC" = "قد لا تعمل في كل الحالات. يجب إعادة تشغيل التطبيق عند تشغيل أو إيقاف هذه الخاصية.";
@@ -36,8 +39,8 @@
"OLED_KEYBOARD" = "لوحة مفاتيح داكنة OLED (ميزة تجريبية)";
"OLED_KEYBOARD_DESC" = "قد لا تعمل في كل الحالات. يجب إعادة تشغيل التطبيق عند تشغيل أو إيقاف هذه الخاصية.";
"HIDE_PAID_PROMOTION_CARDS" = "إخفاء شريط "الترويج المدفوع"";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "إخفاء عبارة "يتضمن ترويجاً مدفوعاً" الظاهرة على بعض الفيديوهات.";
"HIDE_PAID_PROMOTION_CARDS" = "إخفاء شريط الترويج المدفوع";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "إخفاء عبارة يتضمن ترويجاً مدفوعاً الظاهرة على بعض الفيديوهات.";
// YTCastConfirm
"CASTING" = "البث";
@@ -0,0 +1,49 @@
// Settings
"KILL_APP" = "Cerrar YouTube";
"KILL_APP_DESC" = "Toca aquí para cerrar YouTube!";
"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.";
"YT_MINIPLAYER" = "Activar el minirreproductor para todos los vídeos de YouTube";
"YT_MINIPLAYER_DESC" = "Vídeos infantiles por ejemplo.";
"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.";
"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.";
"NEW_MINIPLAYER_STYLE" = "Nuevo estilo de barra del minirreproductor (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "Requiere reiniciar la app.";
"YT_RE_EXPLORE" = "Reemplazar pestaña de Cortos con pestaña de Explorar (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "Requiere reiniciar la app.";
"HIDE_SUBTITLES_BUTTON" = "Ocultar botón de Subtítulos";
"HIDE_SUBTITLES_BUTTON_DESC" = "Ocultar el botón de Subtítulos en los botones superpuestos.";
"HIDE_AUTOPLAY_SWITCH" = "Ocultar interruptor de Reproducir automáticamente";
"HIDE_AUTOPLAY_SWITCH_DESC" = "Ocultar el interruptor de Reproducir automáticamente en los botones superpuestos.";
"AUTO_FULLSCREEN" = "Pantalla completa automática (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "Reproducir vídeos en pantalla completa automáticamente.";
"HIDE_HUD_MESSAGES" = "Ocultar mensajes HUD";
"HIDE_HUD_MESSAGES_DESC" = "Ejemplo: CC está activado/desactivado, Vídeo en bucle está activado,...";
"OLED_DARKMODE" = "Modo oscuro OLED (Experimental)";
"OLED_DARKMODE_DESC" = "Puede no funcionar correctamente en algunos casos. Requiere reiniciar la app después de activar/desactivar esta opción.";
"OLED_KEYBOARD" = "Teclado OLED (Experimental)";
"OLED_KEYBOARD_DESC" = "Puede no funcionar correctamente en algunos casos. Requiere reiniciar la app.";
"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.";
// YTCastConfirm
"CASTING" = "Enviar contenido";
"MSG_ARE_YOU_SURE" = "¿Estás seguro de que deseas Enviar contenido?";
"MSG_YES" = "Sí";
"MSG_CANCEL" = "Cancelar";
@@ -0,0 +1,49 @@
// Settings
"KILL_APP" = "YouTubeを閉じる";
"KILL_APP_DESC" = "ここをタップしてYouTubeを終了できます!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "前後の動画のボタンを非表示";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "コントロールのオーバーレイで前後の動画のボタンを非表示にします。";
"YT_MINIPLAYER" = "すべての動画でミニプレーヤーを有効にする";
"YT_MINIPLAYER_DESC" = "例: 子ども向けの動画";
"CAST_CONFIRM" = "キャストする前に確認画面を表示する (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "誤ってテレビにキャストしないよう、前に確認画面を表示します。";
"HIDE_HOVER_CARD" = "動画終わりのホバーカードを非表示 (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "動画の最後のホバーカード(サムネイル)を非表示にします。";
"NEW_MINIPLAYER_STYLE" = "新しいミニプレーヤー・バーを使う (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "アプリの再起動が必要です。";
"YT_RE_EXPLORE" = "ショートタブを探索タブに置き換える (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "アプリの再起動が必要です。";
"HIDE_SUBTITLES_BUTTON" = "字幕ボタンを非表示";
"HIDE_SUBTITLES_BUTTON_DESC" = "動画コントロールのオーバーレイから字幕ボタンを非表示にします。";
"HIDE_AUTOPLAY_SWITCH" = "自動再生ボタンを非表示";
"HIDE_AUTOPLAY_SWITCH_DESC" = "動画コントロールのオーバーレイから自動再生ボタンを非表示にします。";
"AUTO_FULLSCREEN" = "自動でフルスクリーンにする (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "動画を自動でフルスクリーンにします。";
"HIDE_HUD_MESSAGES" = "HUDのメッセージを非表示";
"HIDE_HUD_MESSAGES_DESC" = "例: 字幕がオン/オフになりました、ループ再生はオンになっています 等";
"OLED_DARKMODE" = "有機ELダークモード (実験的機能)";
"OLED_DARKMODE_DESC" = "一部では正しく動作しない可能性があります。この設定を変更したあとはアプリの再起動が必要です。";
"OLED_KEYBOARD" = "有機ELキーボード (実験的機能)";
"OLED_KEYBOARD_DESC" = "一部では正しく動作しない可能性があります。この設定を変更したあとはアプリの再起動が必要です。";
"HIDE_PAID_PROMOTION_CARDS" = "プロモーションバナーを非表示";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "一部の動画にある「プロモーションを含みます」のバナーを非表示にします。";
// YTCastConfirm
"CASTING" = "キャスト";
"MSG_ARE_YOU_SURE" = "本当にキャストを開始しますか?";
"MSG_YES" = "はい";
"MSG_CANCEL" = "キャンセル";
@@ -0,0 +1,49 @@
// Settings
"KILL_APP" = "YouTube 닫기";
"KILL_APP_DESC" = "YouTube 앱을 닫으려면 여기를 탭하세요!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "이전, 다음 재생 버튼 숨기기";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "비디오 재생 오버레이에서 이전 재생, 다음 재생 버튼을 숨깁니다.";
"YT_MINIPLAYER" = "모든 YouTube 영상에서 미니 플레이어 활성화";
"YT_MINIPLAYER_DESC" = "아동용 영상일 경우.";
"CAST_CONFIRM" = "TV 전송 알림 (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "의도치 않게 TV로 영상을 전송하지 않도록 보내기 전에 확인 메시지를 표시합니다.";
"HIDE_HOVER_CARD" = "영상 끝 부분의 호버카드 숨기기 (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "영상의 끝 부분에서 게시자가 표시한 영상 썸네일을 숨깁니다.";
"NEW_MINIPLAYER_STYLE" = "새로운 스타일의 미니 플레이어 (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "앱을 다시 시작해야 합니다.";
"YT_RE_EXPLORE" = "Shorts 탭 대신 탐색 탭 보이기 (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "앱을 다시 시작해야 합니다.";
"HIDE_SUBTITLES_BUTTON" = "자막 버튼 숨기기";
"HIDE_SUBTITLES_BUTTON_DESC" = "비디오 재생 오버레이에서 자막 버튼을 숨깁니다.";
"HIDE_AUTOPLAY_SWITCH" = "자동재생 스위치 숨기기";
"HIDE_AUTOPLAY_SWITCH_DESC" = "비디오 재생 오버레이에서 자동재생 스위치를 숨깁니다.";
"AUTO_FULLSCREEN" = "자동 전체화면 재생 (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "자동으로 전체화면에서 재생합니다.";
"HIDE_HUD_MESSAGES" = "화면 메시지 숨기기";
"HIDE_HUD_MESSAGES_DESC" = "예: 자막 사용 설정됨/중지됨, 반복재생 설정됨,...";
"OLED_DARKMODE" = "OLED 다크모드 (실험실)";
"OLED_DARKMODE_DESC" = "몇몇 경우 제대로 동작하지 않을 수도 있습니다. 이 기능을 켜거나 끄는 경우 앱을 다시 시작해야 합니다.";
"OLED_KEYBOARD" = "OLED 키보드 (실험실)";
"OLED_KEYBOARD_DESC" = "몇몇 경우 제대로 동작하지 않을 수도 있습니다. 앱을 다시 시작해야 합니다.";
"HIDE_PAID_PROMOTION_CARDS" = "유료 광고 배너 숨기기";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "'유료 광고 포함' 배너를 숨깁니다.";
// YTCastConfirm
"CASTING" = "TV로 전송";
"MSG_ARE_YOU_SURE" = "TV로 영상 전송을 시작하겠습니까?";
"MSG_YES" = "예";
"MSG_CANCEL" = "취소";
@@ -0,0 +1,49 @@
// Settings
"KILL_APP" = "关闭YouTube";
"KILL_APP_DESC" = "点击此处关闭YouTube!";
"HIDE_PREVIOUS_AND_NEXT_BUTTON" = "隐藏上一个/下一个按钮";
"HIDE_PREVIOUS_AND_NEXT_BUTTON_DESC" = "隐藏视频播放器控制界面上的上一个/下一个按钮。";
"YT_MINIPLAYER" = "为所有YouTube视频启用迷你播放器";
"YT_MINIPLAYER_DESC" = "例如:面向儿童的视频。";
"CAST_CONFIRM" = "投屏前确认 (YTCastConfirm)";
"CAST_CONFIRM_DESC" = "在投屏前显示确认对话框以防意外劫屏。";
"HIDE_HOVER_CARD" = "隐藏片尾画面悬浮卡片 (YTNoHoverCards)";
"HIDE_HOVER_CARD_DESC" = "隐藏视频结尾处的创作者片尾画面元素(缩略图)。";
"NEW_MINIPLAYER_STYLE" = "新迷你播放器风格 (BigYTMiniPlayer)";
"NEW_MINIPLAYER_STYLE_DESC" = "更改本设置后需要重启App。";
"YT_RE_EXPLORE" = "将Shorts选项卡替换成探索选项卡 (YTReExplore)";
"YT_RE_EXPLORE_DESC" = "更改本设置后需要重启App。";
"HIDE_SUBTITLES_BUTTON" = "隐藏字幕按钮";
"HIDE_SUBTITLES_BUTTON_DESC" = "隐藏视频播放器控制界面上的字幕按钮。";
"HIDE_AUTOPLAY_SWITCH" = "隐藏自动播放模式开关";
"HIDE_AUTOPLAY_SWITCH_DESC" = "隐藏视频播放器控制界面上的自动播放开关。";
"AUTO_FULLSCREEN" = "自动全屏 (YTAutoFullScreen)";
"AUTO_FULLSCREEN_DESC" = "自动全屏播放视频。";
"HIDE_HUD_MESSAGES" = "隐藏系统提醒";
"HIDE_HUD_MESSAGES_DESC" = "例如:\"已启用/停用字幕\"、\"已开启/关闭视频循环播放\"等。";
"OLED_DARKMODE" = "OLED 深色模式(实验性功能)";
"OLED_DARKMODE_DESC" = "在某些情况下可能不会正常工作。更改本设置后需要重启App。";
"OLED_KEYBOARD" = "OLED 键盘(实验性功能)";
"OLED_KEYBOARD_DESC" = "在某些情况下可能不会正常工作。更改本设置后需要重启App。";
"HIDE_PAID_PROMOTION_CARDS" = "隐藏付费宣传内容提醒横幅";
"HIDE_PAID_PROMOTION_CARDS_DESC" = "隐藏出现在部分视频中的\"包含付费宣传内容\"横幅。";
// YTCastConfirm
"CASTING" = "正在投屏";
"MSG_ARE_YOU_SURE" = "您确定要开始投屏吗?";
"MSG_YES" = "确定";
"MSG_CANCEL" = "取消";
+155 -13
View File
@@ -15,6 +15,8 @@
#import "Tweaks/YouTubeHeader/ASCollectionView.h"
#import "Tweaks/YouTubeHeader/YTPlayerOverlay.h"
#import "Tweaks/YouTubeHeader/YTPlayerOverlayProvider.h"
#import "Tweaks/YouTubeHeader/YTReelWatchPlaybackOverlayView.h"
#import "Tweaks/YouTubeHeader/YTReelPlayerBottomButton.h"
// Tweak's bundle for Localizations support - @PoomSmart - https://github.com/PoomSmart/YouPiP/commit/aea2473f64c75d73cab713e1e2d5d0a77675024f
NSBundle *uYouPlusBundle() {
@@ -28,7 +30,24 @@ NSBundle *uYouPlusBundle() {
}
NSBundle *tweakBundle = uYouPlusBundle();
//
static NSString *accessGroupID() {
NSDictionary *query = [NSDictionary dictionaryWithObjectsAndKeys:
(__bridge NSString *)kSecClassGenericPassword, (__bridge NSString *)kSecClass,
@"bundleSeedID", kSecAttrAccount,
@"", kSecAttrService,
(id)kCFBooleanTrue, kSecReturnAttributes,
nil];
CFDictionaryRef result = nil;
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&result);
if (status == errSecItemNotFound)
status = SecItemAdd((__bridge CFDictionaryRef)query, (CFTypeRef *)&result);
if (status != errSecSuccess)
return nil;
NSString *accessGroup = [(__bridge NSDictionary *)result objectForKey:(__bridge NSString *)kSecAttrAccessGroup];
return accessGroup;
}
BOOL hideHUD() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"];
}
@@ -79,6 +98,11 @@ BOOL hidePaidPromotionCard() {
- (BOOL)canReorder { return YES; }
%end
// Skips content warning before playing *some videos - @PoomSmart
%hook YTPlayabilityResolutionUserActionUIController
- (void)showConfirmAlert { [self confirmAlertDidPressConfirm]; }
%end
// YTMiniPlayerEnabler: https://github.com/level3tjg/YTMiniplayerEnabler/
%hook YTWatchMiniBarViewController
- (void)updateMiniBarPlayerStateFromRenderer {
@@ -174,16 +198,18 @@ BOOL hidePaidPromotionCard() {
}
%end
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/12
%hook YTAdsInnerTubeContextDecorator
- (void)decorateContext:(id)arg1 { %orig(nil); }
// Workaround for MiRO92/uYou-for-YouTube#12, qnblackcat/uYouPlus#263
%hook YTDataUtils
+ (NSMutableDictionary *)spamSignalsDictionary {
return nil;
}
%end
// Workaround for https://github.com/MiRO92/uYou-for-YouTube/issues/94
%hook YTELMView
%hook UIResponder
%new
- (id)entry {
return nil;
return nil;
}
%end
@@ -191,7 +217,17 @@ BOOL hidePaidPromotionCard() {
%hook YTLocalPlaybackController
%new
- (id)activeVideoController {
return [self activeVideo];
return [self activeVideo];
}
%end
// Workaround for qnblackcat/uYouPlus#10
%hook boolSettingsVC
- (instancetype)initWithTitle:(NSString *)title sections:(NSArray *)sections footer:(NSString *)footer {
if (@available(iOS 15, *))
if (![self valueForKey:@"_lastNotifiedTraitCollection"])
[self setValue:[UITraitCollection currentTraitCollection] forKey:@"_lastNotifiedTraitCollection"];
return %orig;
}
%end
@@ -240,9 +276,13 @@ BOOL hidePaidPromotionCard() {
- (void)showSurveyWithRenderer:(id)arg1 surveyParentResponder:(id)arg2 {}
%end
// Enable Shorts scroll bar - @level3tjg - https://reddit.com/r/jailbreak/comments/v29yvk/_/iasl1l0/
// Enable Shorts scroll bar - @PoomSmart
%hook YTReelPlayerViewController
- (BOOL)shouldEnablePlayerBar { return YES; }
- (BOOL)shouldAlwaysEnablePlayerBar { return YES; }
%end
%hook YTInlinePlayerBarContainerView
- (void)setUserInteractionEnabled:(BOOL)enabled { %orig(YES); }
%end
// Workaround for issue #54
@@ -251,7 +291,62 @@ BOOL hidePaidPromotionCard() {
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"relatedVideosAtTheEndOfYTVideos"] == NO) {}
else { return %orig; }
}
%end
%end
// Workaround for qnblackcat/uYouPlus#253, qnblackcat/uYouPlus#170
%hook YTReelWatchPlaybackOverlayView
- (YTQTMButton *)overflowButton {
if ([self respondsToSelector:@selector(orderedRightSideButtons)] &&
[self orderedRightSideButtons].count != 0)
return [self orderedRightSideButtons][0];
return %orig;
}
%end
%hook NSLayoutConstraint
+ (instancetype)constraintWithItem:(UIView *)view1
attribute:(NSLayoutAttribute)attr1
relatedBy:(NSLayoutRelation)relation
toItem:(UIView *)view2
attribute:(NSLayoutAttribute)attr2
multiplier:(CGFloat)multiplier
constant:(CGFloat)c {
if (![view1 isKindOfClass:%c(YTReelPlayerBottomButton)] &&
![view1.accessibilityIdentifier isEqualToString:@"com.miro.uyou"])
return %orig;
if (!view2) {
view1.hidden = YES;
return [NSLayoutConstraint alloc];
}
YTReelPlayerBottomButton *uYouButton = (YTReelPlayerBottomButton *)view1;
YTReelPlayerBottomButton *topButton = (YTReelPlayerBottomButton *)view2;
NSString *uYouButtonTitle =
[view2.accessibilityIdentifier isEqualToString:@"com.miro.uyou"]
? @"uYou"
: @"uYouLocal";
uYouButton.accessibilityLabel = uYouButtonTitle;
uYouButton.uppercaseTitle = NO;
[uYouButton setTitle:uYouButtonTitle forState:UIControlStateNormal];
[uYouButton
setTitleTypeKind:MSHookIvar<NSInteger>(topButton, "_typeKind")
typeVariant:MSHookIvar<NSInteger>(topButton, "_typeVariant")];
uYouButton.applyRightSideLayoutImageSize = topButton.applyRightSideLayoutImageSize;
uYouButton.buttonImageTitlePadding = topButton.buttonImageTitlePadding;
uYouButton.buttonLayoutStyle = topButton.buttonLayoutStyle;
uYouButton.sizeWithPaddingAndInsets = topButton.sizeWithPaddingAndInsets;
uYouButton.verticalContentPadding = topButton.verticalContentPadding;
return %orig;
}
%end
// Prevent uYou player bar from showing when not playing downloaded media
%hook PlayerManager
- (void)pause {
if (isnan([self progress]))
return;
%orig;
}
%end
// Hide YouTube Shorts banner in Home page? - @MiRO92 - YTNoShorts: https://github.com/MiRO92/YTNoShorts
%hook YTAsyncCollectionView
@@ -339,6 +434,14 @@ BOOL hidePaidPromotionCard() {
}
%end
%hook APMAEU
+ (BOOL)isFAS { return YES; }
%end
%hook GULAppEnvironmentUtil
+ (BOOL)isFromAppStore { return YES; }
%end
%hook NSBundle
- (NSString *)bundleIdentifier {
NSArray *address = [NSThread callStackReturnAddresses];
@@ -359,6 +462,46 @@ BOOL hidePaidPromotionCard() {
}
%end
// Fix "You can't sign in to this app because Google can't confirm that it's safe" warning when signing in. by julioverne & PoomSmart
// https://gist.github.com/PoomSmart/ef5b172fd4c5371764e027bea2613f93
// https://github.com/qnblackcat/uYouPlus/pull/398
%hook SSOService
+ (id)fetcherWithRequest:(NSMutableURLRequest *)request configuration:(id)configuration {
if ([request isKindOfClass:[NSMutableURLRequest class]] && request.HTTPBody) {
NSError *error = nil;
NSMutableDictionary *body = [NSJSONSerialization JSONObjectWithData:request.HTTPBody options:NSJSONReadingMutableContainers error:&error];
if (!error && [body isKindOfClass:[NSMutableDictionary class]]) {
[body removeObjectForKey:@"device_challenge_request"];
request.HTTPBody = [NSJSONSerialization dataWithJSONObject:body options:kNilOptions error:&error];
}
}
return %orig;
}
%end
// Fix login for YouTube 17.33.2 and higher
%hook SSOKeychainCore
+ (NSString *)accessGroup {
return accessGroupID();
}
+ (NSString *)sharedAccessGroup {
return accessGroupID();
}
%end
// Fix App Group Directory by move it to document directory
%hook NSFileManager
- (NSURL *)containerURLForSecurityApplicationGroupIdentifier:(NSString *)groupIdentifier {
if (groupIdentifier != nil) {
NSArray *paths = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
NSURL *documentsURL = [paths lastObject];
return [documentsURL URLByAppendingPathComponent:@"AppGroup"];
}
return %orig(groupIdentifier);
}
%end
# pragma mark - OLED dark mode by BandarHL
UIColor* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:1.0];
%group gOLED
@@ -426,7 +569,7 @@ UIColor* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:
- (void)didMoveToWindow {
%orig;
if (isDarkMode() && [self.nextResponder isKindOfClass:%c(_ASDisplayView)]) {
self.superview.backgroundColor = [UIColor clearColor];
self.superview.backgroundColor = [UIColor blackColor];
}
}
%end
@@ -551,7 +694,6 @@ UIColor* raisedColor = [UIColor colorWithRed:0.035 green:0.035 blue:0.035 alpha:
if ([self.accessibilityIdentifier isEqualToString:@"rich_header"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.comment_cell"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.ui.cancel.button"]) { self.superview.backgroundColor = [UIColor clearColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.filter_chip_bar"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.comment_composer"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.elements.components.video_list_entry"]) { self.backgroundColor = [UIColor blackColor]; }
if ([self.accessibilityIdentifier isEqualToString:@"id.comment.guidelines_text"]) { self.superview.backgroundColor = [UIColor blackColor]; }
@@ -725,4 +867,4 @@ static void replaceTab(YTIGuideResponse *response) {
if (@available(iOS 16, *)) {
%init(iOS16);
}
}
}