Skip to content

Commit

Permalink
merge 2.1.7
Browse files Browse the repository at this point in the history
  • Loading branch information
roothider committed Jun 13, 2024
1 parent 40a39c4 commit f9d7761
Show file tree
Hide file tree
Showing 28 changed files with 364 additions and 201 deletions.
42 changes: 24 additions & 18 deletions Application/Dopamine.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,8 @@
8C5FA96E2BDD7898008C246F /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C5FA93F2BDD5039008C246F /* IOKit.framework */; };
8C5FA96F2BDD789C008C246F /* IOSurface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C5FA9412BDD503D008C246F /* IOSurface.framework */; };
8C5FA9712BDD81EF008C246F /* LICENSE_weightBufs.md in Resources */ = {isa = PBXBuildFile; fileRef = 8C5FA9702BDD81EF008C246F /* LICENSE_weightBufs.md */; };
8C609C9E2C19B4270023DD12 /* NSString+Version.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C609C9C2C19AECF0023DD12 /* NSString+Version.m */; };
8C609C9F2C19B6FA0023DD12 /* libkrw-dopamine.deb in Resources */ = {isa = PBXBuildFile; fileRef = 8C609C992C19AC250023DD12 /* libkrw-dopamine.deb */; };
8C71981A2ABF0E82003C6658 /* DOAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C7198192ABF0E82003C6658 /* DOAppDelegate.m */; };
8C71981D2ABF0E82003C6658 /* DOSceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C71981C2ABF0E82003C6658 /* DOSceneDelegate.m */; };
8C7198252ABF0E84003C6658 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8C7198242ABF0E84003C6658 /* Assets.xcassets */; };
Expand All @@ -186,7 +188,6 @@
8CC139822B53DE6C00230143 /* NSData+Hex.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CC139812B53DE6C00230143 /* NSData+Hex.m */; };
8CC139832B53E05300230143 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CDD08372B4F682500A32B61 /* IOKit.framework */; };
8CCD2FC42B77AAA000F9C5DA /* basebin-link.deb in Resources */ = {isa = PBXBuildFile; fileRef = 8CCD2FC32B77AA9200F9C5DA /* basebin-link.deb */; };
8CCD8A872B6F16CC004B72B0 /* libkrw-plugin.deb in Resources */ = {isa = PBXBuildFile; fileRef = 8CCD8A852B6F1662004B72B0 /* libkrw-plugin.deb */; };
8CDD07AA2B4F619000A32B61 /* kfd.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CDD07A92B4F619000A32B61 /* kfd.h */; settings = {ATTRIBUTES = (Public, ); }; };
8CDD07AF2B4F619000A32B61 /* kfd.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8CDD07A72B4F619000A32B61 /* kfd.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
8CDD08342B4F63E100A32B61 /* kfd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CDD07B32B4F639100A32B61 /* kfd.m */; };
Expand Down Expand Up @@ -505,6 +506,9 @@
8C5FA9582BDD6C0C008C246F /* kernel_rw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kernel_rw.h; sourceTree = "<group>"; };
8C5FA9592BDD6C0C008C246F /* exploit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = exploit.h; sourceTree = "<group>"; };
8C5FA9702BDD81EF008C246F /* LICENSE_weightBufs.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = LICENSE_weightBufs.md; sourceTree = "<group>"; };
8C609C992C19AC250023DD12 /* libkrw-dopamine.deb */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libkrw-dopamine.deb"; path = "../../../Packages/libkrw-provider/libkrw-dopamine.deb"; sourceTree = "<group>"; };
8C609C9C2C19AECF0023DD12 /* NSString+Version.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSString+Version.m"; sourceTree = "<group>"; };
8C609C9D2C19AEE70023DD12 /* NSString+Version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSString+Version.h"; sourceTree = "<group>"; };
8C7198152ABF0E82003C6658 /* Dopamine.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Dopamine.app; sourceTree = BUILT_PRODUCTS_DIR; };
8C7198182ABF0E82003C6658 /* DOAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DOAppDelegate.h; sourceTree = "<group>"; };
8C7198192ABF0E82003C6658 /* DOAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DOAppDelegate.m; sourceTree = "<group>"; };
Expand All @@ -522,7 +526,6 @@
8CC139812B53DE6C00230143 /* NSData+Hex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+Hex.m"; sourceTree = "<group>"; };
8CCD2FC32B77AA9200F9C5DA /* basebin-link.deb */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "basebin-link.deb"; path = "../../../Packages/basebin-link/basebin-link.deb"; sourceTree = "<group>"; };
8CCD8A832B6F165A004B72B0 /* libroot.deb */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libroot.deb; path = ../../../Packages/libroot/libroot.deb; sourceTree = "<group>"; };
8CCD8A852B6F1662004B72B0 /* libkrw-plugin.deb */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libkrw-plugin.deb"; path = "../../../Packages/libkrw-provider/libkrw-plugin.deb"; sourceTree = "<group>"; };
8CDD07A72B4F619000A32B61 /* kfd.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = kfd.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8CDD07A92B4F619000A32B61 /* kfd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = kfd.h; sourceTree = "<group>"; };
8CDD07B32B4F639100A32B61 /* kfd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = kfd.m; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1082,6 +1085,8 @@
8CC139812B53DE6C00230143 /* NSData+Hex.m */,
8C9E46272ACA1C8D00B5456A /* UIImage+Blur.h */,
8C9E46282ACA1CC700B5456A /* UIImage+Blur.m */,
8C609C9D2C19AEE70023DD12 /* NSString+Version.h */,
8C609C9C2C19AECF0023DD12 /* NSString+Version.m */,
);
path = Extensions;
sourceTree = "<group>";
Expand All @@ -1097,7 +1102,7 @@
84F267E92BB7292C00DD3323 /* roothideapp.deb */,
8C512B8B2B5C9DE800C6F14A /* sileo.deb */,
8C512B8C2B5C9DE800C6F14A /* zebra.deb */,
8CCD8A852B6F1662004B72B0 /* libkrw-plugin.deb */,
8C609C992C19AC250023DD12 /* libkrw-dopamine.deb */,
8CCD8A832B6F165A004B72B0 /* libroot.deb */,
8CCD2FC32B77AA9200F9C5DA /* basebin-link.deb */,
04DD0B362B7BA6180055DE4F /* LICENSE.md */,
Expand Down Expand Up @@ -1475,6 +1480,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8C609C9F2C19B6FA0023DD12 /* libkrw-dopamine.deb in Resources */,
04DD0B372B7BA6180055DE4F /* LICENSE.md in Resources */,
04DD0B3A2B7BF3E80055DE4F /* LICENSE_libc.md in Resources */,
8C56D4CD2B7C118B001C03D3 /* LICENSE_kfd.md in Resources */,
Expand All @@ -1497,7 +1503,6 @@
8C2875212BD850B4008B24DA /* LICENSE_libgrabkernel2.md in Resources */,
8C512B912B5C9F9100C6F14A /* sileo.deb in Resources */,
8C512B922B5C9F9400C6F14A /* zebra.deb in Resources */,
8CCD8A872B6F16CC004B72B0 /* libkrw-plugin.deb in Resources */,
8C296BAE2BE05914007C2AD1 /* LICENSE_plooshinit.md in Resources */,
8C5FA9712BDD81EF008C246F /* LICENSE_weightBufs.md in Resources */,
8CB94F052B59E17A0098BAFD /* basebin.tar in Resources */,
Expand Down Expand Up @@ -1659,6 +1664,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8C609C9E2C19B4270023DD12 /* NSString+Version.m in Sources */,
042479A62B66916B0082581B /* DOHeaderCell.m in Sources */,
042479A22B66916B0082581B /* DOCreditsViewController.m in Sources */,
042479B32B66916B0082581B /* DODebugLogView.m in Sources */,
Expand Down Expand Up @@ -1798,7 +1804,7 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 49LJ27SG38;
DEVELOPMENT_TEAM = 333YQBLA8H;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
Expand Down Expand Up @@ -1835,7 +1841,7 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 49LJ27SG38;
DEVELOPMENT_TEAM = 333YQBLA8H;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
Expand Down Expand Up @@ -1870,7 +1876,7 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 49LJ27SG38;
DEVELOPMENT_TEAM = 333YQBLA8H;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
Expand Down Expand Up @@ -1904,7 +1910,7 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 49LJ27SG38;
DEVELOPMENT_TEAM = 333YQBLA8H;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
Expand Down Expand Up @@ -1938,7 +1944,7 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 3Z56NQJ65R;
DEVELOPMENT_TEAM = 333YQBLA8H;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
Expand Down Expand Up @@ -1974,7 +1980,7 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 3Z56NQJ65R;
DEVELOPMENT_TEAM = 333YQBLA8H;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
Expand Down Expand Up @@ -2010,7 +2016,7 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 3Z56NQJ65R;
DEVELOPMENT_TEAM = 333YQBLA8H;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
Expand Down Expand Up @@ -2046,7 +2052,7 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 3Z56NQJ65R;
DEVELOPMENT_TEAM = 333YQBLA8H;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
Expand Down Expand Up @@ -2214,7 +2220,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 49LJ27SG38;
DEVELOPMENT_TEAM = 333YQBLA8H;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Frameworks",
Expand All @@ -2236,7 +2242,7 @@
"$(PROJECT_DIR)/Dopamine/Dependencies",
"$(PROJECT_DIR)/Dopamine/Resources",
);
MARKETING_VERSION = 2.1.5;
MARKETING_VERSION = 2.1.7;
PRODUCT_BUNDLE_IDENTIFIER = "com.opa334.Dopamine-roothide";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES;
Expand All @@ -2252,7 +2258,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 49LJ27SG38;
DEVELOPMENT_TEAM = 333YQBLA8H;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Frameworks",
Expand All @@ -2274,7 +2280,7 @@
"$(PROJECT_DIR)/Dopamine/Dependencies",
"$(PROJECT_DIR)/Dopamine/Resources",
);
MARKETING_VERSION = 2.1.5;
MARKETING_VERSION = 2.1.7;
PRODUCT_BUNDLE_IDENTIFIER = "com.opa334.Dopamine-roothide";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES;
Expand All @@ -2288,7 +2294,7 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 49LJ27SG38;
DEVELOPMENT_TEAM = 333YQBLA8H;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
Expand Down Expand Up @@ -2323,7 +2329,7 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 49LJ27SG38;
DEVELOPMENT_TEAM = 333YQBLA8H;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
Expand Down
2 changes: 1 addition & 1 deletion Application/Dopamine/Exploits/weightBufs/exploit/exploit.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
#else

#define MAX_PROGRAMS 5
#define IOSURFACE_OBJ_SIZE 0x430
#define IOSURFACE_OBJ_SIZE 0x8
#define MAX_SHMEMS 0x2000

#endif /* TARGET_OS_OSX */
Expand Down
3 changes: 2 additions & 1 deletion Application/Dopamine/Exploits/weightBufs/exploit/exploit.m
Original file line number Diff line number Diff line change
Expand Up @@ -1154,9 +1154,10 @@ bool get_target_surface(u64 *kaddr_target)
printf("[+] Found a matching surface-id=0x%04x IOSurface=0x%llx ! \n",
matched.surface_id,
matched.IOSurface_loc);
break;
}
}
/* if(matched.surface_id) break; */
if(matched.surface_id) break;
}

/* assert(matched.surface_id && "Unable to find a suitable IOSurface"); */
Expand Down
18 changes: 18 additions & 0 deletions Application/Dopamine/Extensions/NSString+Version.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
//
// NSString+Version.h
// Dopamine
//
// Created by Lars Fröder on 12.06.24.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSString (Version)

- (NSInteger)numericalVersionRepresentation;

@end

NS_ASSUME_NONNULL_END
27 changes: 27 additions & 0 deletions Application/Dopamine/Extensions/NSString+Version.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
//
// NSString+Version.h
// Dopamine
//
// Created by Lars Fröder on 12.06.24.
//

#import <Foundation/Foundation.h>

@implementation NSString (Version)

- (NSInteger)numericalVersionRepresentation
{
NSInteger numericalRepresentation = 0;

NSArray *components = [self componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];
assert(components.count <= 3);
while (components.count < 3)
components = [components arrayByAddingObject:@"0"];

numericalRepresentation |= [components[0] integerValue] << 16;
numericalRepresentation |= [components[1] integerValue] << 8;
numericalRepresentation |= [components[2] integerValue];
return numericalRepresentation;
}

@end
48 changes: 31 additions & 17 deletions Application/Dopamine/Jailbreak/DOBootstrapper.m
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,16 @@
#import <sys/mount.h>
#import <dlfcn.h>
#import <sys/stat.h>
#import "NSString+Version.h"

#define LIBKRW_DOPAMINE_BUNDLED_VERSION @"2.0.1"
#define LIBKRW_DOPAMINE_BUNDLED_VERSION @"2.0.3"
#define BASEBIN_LINK_BUNDLED_VERSION @"1.0.0"

static NSDictionary *gBundledPackages = @{
@"libkrw0-dopamine" : LIBKRW_DOPAMINE_BUNDLED_VERSION,
@"dopamine-basebin-link" : BASEBIN_LINK_BUNDLED_VERSION,
};

struct hfs_mount_args {
char *fspec;
uid_t hfs_uid; /* uid that owns hfs files (standard HFS only) */
Expand Down Expand Up @@ -772,6 +778,17 @@ - (NSError *)installPackageManagers
return nil;
}

- (BOOL)shouldInstallPackage:(NSString *)identifier
{
NSString *bundledVersion = gBundledPackages[identifier];
if (!bundledVersion) return NO;

NSString *installedVersion = [self installedVersionForPackageWithIdentifier:identifier];
if (!installedVersion) return YES;

return [installedVersion numericalVersionRepresentation] < [bundledVersion numericalVersionRepresentation];
}

- (NSError *)finalizeBootstrap
{
// Initial setup on first jailbreak
Expand All @@ -798,27 +815,19 @@ - (NSError *)finalizeBootstrap
}
}

NSString *libkrwDopamineInstalledVersion = [self installedVersionForPackageWithIdentifier:@"libkrw0-dopamine"];
NSString *basebinLinkInstalledVersion = [self installedVersionForPackageWithIdentifier:@"dopamine-basebin-link"];

if ([self fileOrSymlinkExistsAtPath:NSJBRootPath(@"/usr/lib/libroot.dylib")]) {
[[NSFileManager defaultManager] removeItemAtPath:NSJBRootPath(@"/usr/lib/libroot.dylib") error:nil];
}
[[NSFileManager defaultManager] createSymbolicLinkAtPath:NSJBRootPath(@"/usr/lib/libroot.dylib") withDestinationPath:NSJBRootPath(@"/basebin/libroot.dylib") error:nil];
BOOL shouldInstallLibkrw = [self shouldInstallPackage:@"libkrw0-dopamine"];
BOOL shouldInstallBasebinLink = [self shouldInstallPackage:@"dopamine-basebin-link"];

if (
!libkrwDopamineInstalledVersion || ![libkrwDopamineInstalledVersion isEqualToString:LIBKRW_DOPAMINE_BUNDLED_VERSION] ||
!basebinLinkInstalledVersion || ![basebinLinkInstalledVersion isEqualToString:BASEBIN_LINK_BUNDLED_VERSION]) {
if (shouldInstallLibkrw || shouldInstallBasebinLink) {
[[DOUIManager sharedInstance] sendLog:@"Updating Bundled Packages" debug:NO];


if (!libkrwDopamineInstalledVersion || ![libkrwDopamineInstalledVersion isEqualToString:LIBKRW_DOPAMINE_BUNDLED_VERSION]) {
NSString *libkrwPath = [[NSBundle mainBundle].bundlePath stringByAppendingPathComponent:@"libkrw-plugin.deb"];

if (shouldInstallLibkrw) {
NSString *libkrwPath = [[NSBundle mainBundle].bundlePath stringByAppendingPathComponent:@"libkrw-dopamine.deb"];
int r = [self installPackage:libkrwPath];
if (r != 0) return [NSError errorWithDomain:bootstrapErrorDomain code:BootstrapErrorCodeFailedFinalising userInfo:@{NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Failed to install the libkrw plugin: %d\n", r]}];
}

if (!basebinLinkInstalledVersion || ![basebinLinkInstalledVersion isEqualToString:BASEBIN_LINK_BUNDLED_VERSION]) {
if (shouldInstallBasebinLink) {
// Clean symlinks from earlier Dopamine versions
if (![self fileOrSymlinkExistsAtPath:NSJBRootPath(@"/usr/bin/opainject")]) {
[[NSFileManager defaultManager] removeItemAtPath:NSJBRootPath(@"/usr/bin/opainject") error:nil];
Expand All @@ -839,6 +848,11 @@ - (NSError *)finalizeBootstrap
if (r != 0) return [NSError errorWithDomain:bootstrapErrorDomain code:BootstrapErrorCodeFailedFinalising userInfo:@{NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Failed to install basebin link: %d\n", r]}];
}
}

if ([self fileOrSymlinkExistsAtPath:NSJBRootPath(@"/usr/lib/libroot.dylib")]) {
[[NSFileManager defaultManager] removeItemAtPath:NSJBRootPath(@"/usr/lib/libroot.dylib") error:nil];
}
[[NSFileManager defaultManager] createSymbolicLinkAtPath:NSJBRootPath(@"/usr/lib/libroot.dylib") withDestinationPath:NSJBRootPath(@"/basebin/libroot.dylib") error:nil];

[[NSString stringWithFormat:@"%d",DOPAMINE_INSTALL_VERSION] writeToFile:NSJBRootPath(@"/.installed_dopamine") atomically:YES encoding:NSUTF8StringEncoding error:nil];

Expand Down
Loading

0 comments on commit f9d7761

Please sign in to comment.