Closed Macleykun closed 3 months ago
I just pushed a fix for this. Let me know if you encounter any issues!
Thank you so much for taking the time to look into this!
I just pushed a fix for this. Let me know if you encounter any issues!
Will do! Have a great weekend :) <3
Here’s this video of me trying it on iPad, and it will show a crash 🤔 also this was tested when using the uYouEnhanced tweak.
RPReplay_Final1719108127.mp4 Here’s this video of me trying it on iPad, and it will show a crash 🤔 also this was tested when using the uYouEnhanced tweak.
thanks for testing this out for me!
Hmm, do you have a stacktracke or something similar that shows where exactly it crashes? I don't have an iPad so I can't test it unfortunately.
Hmm, do you have a stacktracke or something similar that shows where exactly it crashes? I don't have an iPad so I can't test it unfortunately.
I don’t think I have those. But I do have an .ips
file of the crash but would that take forever to find the problem in it?
but would that take forever to find the problem in it?
Not sure, feel free to share it, I'll have a look :D
Here you go! But can’t confirm if it’s the exact .ips file because usually these don’t show up in the analytics that often.
Also @jkhsjdhjs you might want this code
Class YTVersionUtilsClass = %c(YTVersionUtils); // YTVersionUtils is required if you want App Version Spoofing to work.
NSString *appVersion = [YTVersionUtilsClass performSelector:@selector(appVersion)];
NSComparisonResult result = [appVersion compare:@"VERSION_NUMBER" options:NSNumericSearch];
if (result == NSOrderedAscending) {
return;
}
you can use this to limit which versions that works with the implementation!
for example if it’s 17.33.2
it will be compatible like v17.33.2 up to the latest. This can be useful if you want to limit what code should/shouldn’t run on older versions! But this isn’t related to the crashing, but could be useful. after reading the README.md
Hmm, indeed I couldn't read much out of the ips file, but I suspect it's probably a null pointer deref caused by returning NULL here: https://github.com/jkhsjdhjs/youtube-native-share/blob/6081d80503dc749688c0bed92c3b6290daa85cba/Tweak.x#L116-L121
Can you try building YouTube without this hook and check if the app still crashes? (the tweak shouldn't work in this case, this is just to determine the cause of the crash)
Also thanks for the hint with the version comparison, might come in handy! I don't need it for this tweak, as ELMPBShowActionSheetCommand.executeWithCommandContext
just isn't called on pre-17.33.2 YouTube versions, so this tweak won't cause any issues on older versions anyway.
Alright I’ll be sure to test it out later!
After disabling the hook, it restores YouTube’s sharesheet. would guess Hook just crashes once it gets set to NULL
@arichornloverALT Thanks for testing this and sorry for the late reply - was busy studying for exams. I found a class that I can hook for iPad sharing to work, without returning NULL anywhere, thus not causing any exceptions. It's not as optimal as the iPhone hook, as it is called not just for sharing but also for other events like starting a new video, but the overhead isn't that bad since we return early, so it should be fine. Can you test this?
Also I currently hook both classes on iPad and iPhone, while only one of these is necessary on either platform. Do you know if it's possible to only hook YTAccountScopedCommandResponderEvent
on iPad and ELMPBShowActionSheetCommand
only on iPhones? Thanks in advance!
I’ll test it out in a bit!
Also I am sorry for being on my ALT account instead of my main, since my main is currently flagged.
I still haven’t tested it yet
I am having trouble with compiling on uYouEnhanced but I’ll be sure to update you when the YouTube native share works!
Alright, take your time 👍
Alright I tested it and unfortunately it crashed :( - https://github.com/jkhsjdhjs/youtube-native-share/commit/ba86bc03f4f34624a542a5b66fe85a3ab7e64ef5
{"app_name":"YouTube","timestamp":"2024-07-10 08:59:03.00 -0500","app_version":"19.24.2","slice_uuid":"098d7fbc-5f04-37c6-b86b-e6e571d14b37","build_version":"19.24.2","platform":2,"bundleID":"com.google.ios.youtube.4RRY5SS4JA","share_with_app_devs":0,"is_first_party":0,"bug_type":"309","os_version":"iPhone OS 17.5.1 (21F90)","roots_installed":0,"name":"YouTube","incident_id":"01C802C0-7784-45C4-B989-297BF2470EBC"}
{
"uptime" : 230000,
"procRole" : "Foreground",
"version" : 2,
"userID" : 501,
"deployVersion" : 210,
"modelCode" : "iPad13,4",
"coalitionID" : 1479,
"osVersion" : {
"isEmbedded" : true,
"train" : "iPhone OS 17.5.1",
"releaseType" : "User",
"build" : "21F90"
},
"captureTime" : "2024-07-10 08:59:03.1578 -0500",
"codeSigningMonitor" : 1,
"incident" : "01C802C0-7784-45C4-B989-297BF2470EBC",
"pid" : 6938,
"cpuType" : "ARM-64",
"roots_installed" : 0,
"bug_type" : "309",
"procLaunch" : "2024-07-10 08:58:48.3774 -0500",
"procStartAbsTime" : 5609542091444,
"procExitAbsTime" : 5609896578535,
"procName" : "YouTube",
"procPath" : "\/private\/var\/containers\/Bundle\/Application\/3506D4AE-7CAE-4424-BB33-C52ADEF49097\/App.app\/YouTube",
"bundleInfo" : {"CFBundleShortVersionString":"19.24.2","CFBundleVersion":"19.24.2","CFBundleIdentifier":"com.google.ios.youtube.4RRY5SS4JA","DTAppStoreToolsBuild":"15F31e"},
"storeInfo" : {"deviceIdentifierForVendor":"788C04BE-07C9-41A7-8C55-B0A67E737777","thirdParty":true},
"parentProc" : "launchd",
"parentPid" : 1,
"coalitionName" : "com.google.ios.youtube.4RRY5SS4JA",
"crashReporterKey" : "b2ffe930807c36dff1ad83798e71f702f8dba670",
"wasUnlockedSinceBoot" : 1,
"isLocked" : 0,
"codeSigningID" : "com.google.ios.youtube.4RRY5SS4JA",
"codeSigningTeamID" : "4RRY5SS4JA",
"codeSigningFlags" : 570434309,
"codeSigningValidationCategory" : 3,
"codeSigningTrustLevel" : 6,
"instructionByteStream" : {"beforePC":"fyMD1f17v6n9AwCRNez\/l78DAJH9e8Go\/w9f1sADX9YQKYDSARAA1A==","atPC":"AwEAVH8jA9X9e7+p\/QMAkSrs\/5e\/AwCR\/XvBqP8PX9bAA1\/WECeA0g=="},
"exception" : {"codes":"0x0000000000000000, 0x0000000000000000","rawCodes":[0,0],"type":"EXC_CRASH","signal":"SIGABRT"},
"termination" : {"flags":0,"code":6,"namespace":"SIGNAL","indicator":"Abort trap: 6","byProc":"YouTube","byPid":6938},
"asi" : {"libsystem_c.dylib":["abort() called"]},
"lastExceptionBacktrace" : [{"imageOffset":540448,"symbol":"__exceptionPreprocess","symbolLocation":164,"imageIndex":28},{"imageOffset":90136,"symbol":"objc_exception_throw","symbolLocation":60,"imageIndex":27}, [UIPopoverPresentationController presentationTransitionWillBegin]","symbolLocation":2672,"imageIndex":30},{"imageOffset":4063580,"symbol":"__80-[UIPresentationController _initViewHierarchyForPresentationSuperview:inWindow:]_block_invoke","symbolLocation":2052,"imageIndex":30},{"imageOffset":3212856,"symbol":"__56-[UIPresentationController runTransitionForCurrentState]_block_invoke_3","symbolLocation":304,"imageIndex":30},{"imageOffset":763620,"symbol":"-[_UIAfterCACommitBlock run]","symbolLocation":72,"imageIndex":30},{"imageOffset":763304,"symbol":"-[_UIAfterCACommitQueue flush]","symbolLocation":164,"imageIndex":30},{"imageOffset":763072,"symbol":"_runAfterCACommitDeferredBlocks","symbolLocation":496,"imageIndex":30},{"imageOffset":762104,"symbol":"_cleanUpAfterCAFlushAndRunDeferredBlocks","symbolLocation":80,"imageIndex":30},{"imageOffset":761864,"symbol":"_UIApplicationFlushCATransaction","symbolLocation":72,"imageIndex":30},{"imageOffset":751468,"symbol":"_UIUpdateSequenceRun","symbolLocation":84,"imageIndex":30},{"imageOffset":750512,"symbol":"schedulerStepScheduledMainSection","symbolLocation":172,"imageIndex":30},{"imageOffset":754260,"symbol":"runloopSourceCallback","symbolLocation":92,"imageIndex":30},{"imageOffset":354356,"symbol":"__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__","symbolLocation":28,"imageIndex":28},{"imageOffset":354248,"symbol":"__CFRunLoopDoSource0","symbolLocation":176,"imageIndex":28},{"imageOffset":344728,"symbol":"__CFRunLoopDoSources0","symbolLocation":244,"imageIndex":28},{"imageOffset":341124,"symbol":"__CFRunLoopRun","symbolLocation":828,"imageIndex":28},{"imageOffset":339160,"symbol":"CFRunLoopRunSpecific","symbolLocation":608,"imageIndex":28},{"imageOffset":4520,"symbol":"GSEventRunModal","symbolLocation":164,"imageIndex":29},{"imageOffset":4237580,"symbol":"-[UIApplication _run]","symbolLocation":888,"imageIndex":30},{"imageOffset":4975056,"symbol":"UIApplicationMain","symbolLocation":340,"imageIndex":30},{"imageOffset":746740,"imageIndex":22},{"imageOffset":249420,"symbol":"start","symbolLocation":2240,"imageIndex":31}],
"faultingThread" : 0,
"threads" : [{"triggered":true,"id":1468228,"threadState":{"x":[{"value":0},{"value":0},{"value":0},{"value":0},{"value":8447050435},{"value":6092928384},{"value":110},{"value":0},{"value":674643246151218041},{"value":674643244181048761},{"value":512},{"value":6092927152},{"value":0},{"value":2095104},{"value":16},{"value":0},{"value":328},{"value":8513584832,"symbolLocation":0,"symbol":"_main_thread"},{"value":0},{"value":6},{"value":259},{"value":8513585056,"symbolLocation":224,"symbol":"_main_thread"},{"value":8626814064,"symbolLocation":0,"symbol":"__kCFAllocatorSystemDefault"},{"value":1},{"value":12911678560},{"value":1},{"value":12918990032},{"value":0},{"value":1}],"flavor":"ARM_THREAD_STATE64","lr":{"value":8447958028},"cpsr":{"value":1073745920},"fp":{"value":6092928240},"sp":{"value":6092928208},"esr":{"value":1442840704,"description":" Address size fault"},"pc":{"value":8115172396,"matchesCrashFrame":1},"far":{"value":0}},"queue":"com.apple.main-thread","frames":[{"imageOffset":50220,"symbol":"__pthread_kill","symbolLocation":8,"imageIndex":23},{"imageOffset":31756,"symbol":"pthread_kill","symbolLocation":268,"imageIndex":24},{"imageOffset":482208,"symbol":"abort","symbolLocation":180,"imageIndex":25},{"imageOffset":85156,"symbol":"abort_message","symbolLocation":132,"imageIndex":26},{"imageOffset":20060,"symbol":"demangling_terminate_handler()","symbolLocation":348,"imageIndex":26},{"imageOffset":204332,"symbol":"_objc_terminate()","symbolLocation":144,"imageIndex":27},{"imageOffset":82024,"symbol":"std::__terminate(void (*)())","symbolLocation":16,"imageIndex":26},{"imageOffset":95756,"symbol":"__cxa_rethrow","symbolLocation":204,"imageIndex":26},{"imageOffset":188068,"symbol":"objc_exception_rethrow","symbolLocation":44,"imageIndex":27},{"imageOffset":339336,"symbol":"CFRunLoopRunSpecific","symbolLocation":784,"imageIndex":28},{"imageOffset":4520,"symbol":"GSEventRunModal","symbolLocation":164,"imageIndex":29},{"imageOffset":4237580,"symbol":"-[UIApplication _run]","symbolLocation":888,"imageIndex":30},{"imageOffset":4975056,"symbol":"UIApplicationMain","symbolLocation":340,"imageIndex":30},{"imageOffset":746740,"imageIndex":22},{"imageOffset":249420,"symbol":"start","symbolLocation":2240,"imageIndex":31}]},{"id":1468242,"frames":[{"imageOffset":4292,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":24}],"threadState":{"x":[{"value":6093484032},{"value":6147},{"value":6092947456},{"value":0},{"value":409602},{"value":18446744073709551615},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}],"flavor":"ARM_THREAD_STATE64","lr":{"value":0},"cpsr":{"value":4096},"fp":{"value":0},"sp":{"value":6093484032},"esr":{"value":1442840704,"description":" Address size fault"},"pc":{"value":8447930564},"far":{"value":0}}},{"id":1468243,"frames":[{"imageOffset":4292,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":24}],"threadState":{"x":[{"value":6094057472},{"value":4355},{"value":6093520896},{"value":0},{"value":409604},{"value":18446744073709551615},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}],"flavor":"ARM_THREAD_STATE64","lr":{"value":0},"cpsr":{"value":4096},"fp":{"value":0},"sp":{"value":6094057472},"esr":{"value":1442840704,"description":" Address size fault"},"pc":{"value":8447930564},"far":{"value":0}}},{"id":1468247,"frames":[{"imageOffset":4292,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":24}],"threadState":{"x":[{"value":6094630912},{"value":9987},{"value":6094094336},{"value":0},{"value":409604},{"value":18446744073709551615},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}],"flavor":"ARM_THREAD_STATE64","lr":{"value":0},"cpsr":{"value":4096},"fp":{"value":0},"sp":{"value":6094630912},"esr":{"value":1442840704,"description":" Address size fault"},"pc":{"value":8447930564},"far":{"value":0}}},{"id":1468248,"frames":[{"imageOffset":4292,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":24}],"threadState":{"x":[{"value":6095204352},{"value":9731},{"value":6094667776},{"value":0},{"value":409604},{"value":18446744073709551615},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}],"flavor":"ARM_THREAD_STATE64","lr":{"value":0},"cpsr":{"value":4096},"fp":{"value":0},"sp":{"value":6095204352},"esr":{"value":1442840704,"description":" Address size fault"},"pc":{"value":8447930564},"far":{"value":0}}},{"id":1468250,"frames":[{"imageOffset":4292,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":24}],"threadState":{"x":[{"value":6096351232},{"value":14851},{"value":6095814656},{"value":0},{"value":409604},{"value":18446744073709551615},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0}],"flavor":"ARM_THREAD_STATE64","lr":{"value":0},"cpsr":{"value":4096},"fp":{"value":0},"sp":{"value":6096351232},"esr":{"value":1442840704,"description":" Address size fault"},"pc":{"value":8447930564},"far":{"value":0}}},{"id":1468252,"name":"com.apple.uikit.eventfetch-thread","threadState":{"x":[{"value":268451845},{"value":21592279046},{"value":8589934592,"symbolLocation":0,"symbol":"_OBJC_LABEL_PROTOCOL_$_EKAccountRefresherDelegate"},{"value":70381629079552},{"value":0},{"value":70381629079552},{"value":2},{"value":4294967295},{"value":18446744073709550527},{"value":16387},{"value":0},{"value":1},{"value":16387},{"value":352426},{"value":0},{"value":0},{"value":18446744073709551569},{"value":7023175672,"symbolLocation":56,"symbol":"clock_gettime"},{"value":0},{"value":4294967295},{"value":2},{"value":70381629079552},{"value":0},{"value":70381629079552},{"value":6097493368},{"value":8589934592,"symbolLocation":0,"symbol":"_OBJC_LABEL_PROTOCOL_$_EKAccountRefresherDelegate"},{"value":21592279046},{"value":21592279046},{"value":4412409862}],"flavor":"ARM_THREAD_STATE64","lr":{"value":8115142664},"cpsr":{"value":4096},"fp":{"value":6097493216},"sp":{"value":6097493136},"esr":{"value":1442840704,"description":" Address size fault"},"pc":{"value":8115128328},"far":{"value":0}},"frames":[{"imageOffset":6152,"symbol":"mach_msg2_trap","symbolLocation":8,"imageIndex":23},{"imageOffset":20488,"symbol":"mach_msg2_internal","symbolLocation":80,"imageIndex":23},{"imageOffset":20256,"symbol":"mach_msg_overwrite","symbolLocation":436,"imageIndex":23},{"imageOffset":19808,"symbol":"mach_msg","symbolLocation":24,"imageIndex":23},{"imageOffset":343900,"symbol":"__CFRunLoopServiceMachPort","symbolLocation":160,"imageIndex":28},{"imageOffset":341504,"symbol":"__CFRunLoopRun","symbolLocation":1208,"imageIndex":28},{"imageOffset":339160,"symbol":"CFRunLoopRunSpecific","symbolLocation":608,"imageIndex":28},{"imageOffset":818764,"symbol":"-[NSRunLoop(NSRunLoop) runMode:beforeDate:]","symbolLocation":212,"imageIndex":33},{"imageOffset":818332,"symbol":"-[NSRunLoop(NSRunLoop) runUntilDate:]","symbolLocation":64,"imageIndex":33},{"imageOffset":4318784,"symbol":"-[UIEventFetcher threadMain]","symbolLocation":420,"imageIndex":30},{"imageOffset":911128,"symbol":"__NSThread__start__","symbolLocation":732,"imageIndex":33},{"imageOffset":24684,"symbol":"_pthread_start","symbolLocation":136,"imageIndex":24},
Hmm, that's odd. But can you confirm that it works on your iPhone using the iPad Layout option of YTLitePlus?
Hmm, that's odd. But can you confirm that it works on your iPhone using the iPad Layout option of YTLitePlus?
I didn’t update YTLitePlus on the phone, it’s been on an old version which I’ll be updating in a bit, but was wondering about the iPad Layout implementation. Does the sharing functionality work differently when using a different iPad model? That’s what I am assuming.
Does the sharing functionality work differently when using a different iPad model?
Oof, I really don't hope so.
Can you post the full lastExceptionBacktrace
line? It seems to be cut off after [UIPopoverPresentationController presentationTransitionWillBegin]",
, maybe this can help. Other than that I really don't know what could go wrong here, the hook is pretty much error-proof. I never make any assumptions about GPBMessage extensions and explicitely check whether each extension is present. If anything isn't right, I just return %orig
.
Does the sharing functionality work differently when using a different iPad model?
Oof, I really don't hope so.
Can you post the full
lastExceptionBacktrace
line? It seems to be cut off after
I just updated the crash log above!
Hmm, that's odd. But can you confirm that it works on your iPhone using the iPad Layout option of YTLitePlus?
I didn’t update YTLitePlus on the phone, it’s been on an old version which I’ll be updating in a bit, but was wondering about the iPad Layout implementation. Does the sharing functionality work differently when using a different iPad model? That’s what I am assuming.
perhaps i can test it out on my real iPad? I do need a bit of help with getting the ipa to test it and how i can generate the debug logging if it doesn't work. Also i really appricate the help and interest of you two to make this tweak work on iPad's aswell!
for direct messaging, i use discord under the username: macley
Heres this ipa https://github.com/arichornloverALT/uYouEnhanced/releases/download/v19.24.2-3.0.4-(32)/uYouEnhanced_19.24.2-3.0.4.ipa And its the same one I’m using.
Heres this ipa https://github.com/arichornloverALT/uYouEnhanced/releases/download/v19.24.2-3.0.4-(32)/uYouEnhanced_19.24.2-3.0.4.ipa And its the same one I’m using.
downloaded it, if you want to remove the link just in case. Will test it out asap
test it out just now, but it crashes the moment i tab on the share button. would it be helpful if i also send my logs from my ipad (tried looking into flex but couldn't find anything right off the bat)
[UIPopoverPresentationController presentationTransitionWillBegin]
Hmm, is the way I'm presenting the share dialog maybe not supported on iPads?
@arichornloverALT Can you try building the tweak without the following line?
Of course! I’ll test it and tell you if it did anything.
[UIPopoverPresentationController presentationTransitionWillBegin]
Hmm, is the way I'm presenting the share dialog maybe not supported on iPads?
@arichornloverALT Can you try building the tweak without the following line?
Hey good news! The crashing has stopped! and have this code so you don’t have to remove the lines
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
UIActivityViewController *activityViewController = [[UIActivityViewController alloc]initWithActivityItems:@[shareUrl] applicationActivities:nil];
[[%c(YTUIUtils) topViewControllerForPresenting] presentViewController:activityViewController animated:YES completion:^{}];
return YES;
} else {
return NO; // Do nothing on iPad
}
However, since it did resolve the crashing problem, it doesn’t open the share menu when interacting with the share buttons in the app.
Very nice, thanks for testing this! Maybe we can find a way to pop up a share menu that works on both platforms. However, I really don't know what's wrong with the way it is currently being done.
This may be the problem: https://stackoverflow.com/a/25644145
[UIPopoverPresentationController presentationTransitionWillBegin]
Hmm, is the way I'm presenting the share dialog maybe not supported on iPads? @arichornloverALT Can you try building the tweak without the following line? https://github.com/jkhsjdhjs/youtube-native-share/blob/ba86bc03f4f34624a542a5b66fe85a3ab7e64ef5/Tweak.x#L113
Hey good news! The crashing has stopped! and have this code so you don’t have to remove the lines
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { UIActivityViewController *activityViewController = [[UIActivityViewController alloc]initWithActivityItems:@[shareUrl] applicationActivities:nil]; [[%c(YTUIUtils) topViewControllerForPresenting] presentViewController:activityViewController animated:YES completion:^{}]; return YES; } else { return NO; // Do nothing on iPad }
However, since it did resolve the crashing problem, it doesn’t open the share menu when interacting with the share buttons in the app.
I thought the UIUserInterfaceIdiomPhone
addition would be smart but I realized this wouldn’t resolve the iPad problem so I am making another static BOOL called static BOOL showNativeShareSheetTablet
an alternative version of showNativeShareSheet
but optimized and updated for iPad devices? I am working on this version right now.
I think you can keep the Idiom part and just present the share sheet a bit different, the if/else looks fine to me. If the iPad way also works on iPhone, you can also just do the iPad method in both cases, which would remove the need for an if/else.
Here’s what I got so far
UIViewController *topViewController = [%c(YTUIUtils) topViewControllerForPresenting];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[shareUrl] applicationActivities:nil];
[topViewController presentViewController:activityViewController animated:YES completion:^{}];
} else {
// iPad Layout
UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:[[UIActivityViewController alloc] initWithActivityItems:@[shareUrl] applicationActivities:nil]];
[popoverController presentPopoverFromRect:CGRectMake(0, 0, 0, 0) inView:topViewController.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
return YES;
}
this is untested, can’t confirm if it works or crashes.
Looks good to me so far! I think you can even move the activityViewController
out of the if block and make use of it in the else as well.
Looks good to me so far! I think you can even move the
activityViewController
out of the if block and make use of it in the else as well.
I do gotta tell you something about it, I did test my implementation just now and it works! however, I think I positioned it wrong, which I’ll adjust later 😁
Hey @Macleykun I took care of the problem, it now supports iPad this time!
test it out just now, but it crashes the moment i tab on the share button. would it be helpful if i also send my logs from my ipad (tried looking into flex but couldn't find anything right off the bat)
https://github.com/arichornloverALT/uYouEnhanced/releases/download/v19.24.2-3.0.4-(52)/uYouEnhanced_19.24.2-3.0.4.ipa Here’s this, it will not crash this time since I included UIPopoverController (for iPad compatibility)
Hey @Macleykun I took care of the problem, it now supports iPad this time!
thank you both very much! I just tested it out and it works like arichornlover said! i really appricate the time and effort this has taken to implement this feature, while it's minor thingie, i think it's great that ytns now fully works regardless of which device!
For DMCA reasons, i do suggest to remove the releases we discussed here, and want to wish you all a great weekend!
Refering from this issue: https://github.com/YTLitePlus/YTLitePlus/issues/165
Is there an existing issue for this?
Have you read the FAQ?
Device info
Describe the bug
The youtube-native-share doesn’t work See: https://github.com/jkhsjdhjs/youtube-native-share?tab=readme-ov-file#what If you toggle this tweak on/off it doesn’t change the style sheet.
Steps to reproduce the issue
Crash log (if the app crashes)
No response
Are you using the newest version of YTLitePlus? If not, why?
✅ Yes, I'm using the latest version of YTLitePlus right now
Does the issue happen with the official YouTube from AppStore?
❌ No, It doesn't
Additional context
It seems that when using this tweak on an iPad, it doesn't work as expected and uses the yt default sharesheet. This can be replicated using ytliteplus (e.g.) and toggeling on the iPad Layout option to force the different layout.