Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

5.1 update

  • Loading branch information...
commit e38365c59b28ec97e75d0dd07090355b64154e1b 1 parent 1209631
Kevin Bradley authored
View
19 PatchedFile.h
@@ -19,6 +19,25 @@ QuietLog((format),##__VA_ARGS__); \
#endif
+#define APPLETV_31_DEVICE DeviceIDMake(8, 35138)
+#define APPLETV_21_DEVICE DeviceIDMake(16, 35120)
+#define IPAD_11_DEVICE DeviceIDMake(2, 35120)
+#define IPAD_21_DEVICE DeviceIDMake(4, 35136)
+#define IPAD_22_DEVICE DeviceIDMake(6, 35136)
+#define IPAD_23_DEVICE DeviceIDMake(2, 35136)
+#define IPHONE_11_DEVICE DeviceIDMake(0, 35072)
+#define IPHONE_12_DEVICE DeviceIDMake(4, 35072)
+#define IPHONE_21_DEVICE DeviceIDMake(0, 35104)
+#define IPHONE_31_DEVICE DeviceIDMake(0, 35120)
+#define IPHONE_33_DEVICE DeviceIDMake(6, 35120)
+#define IPOD_11_DEVICE DeviceIDMake(2, 35072)
+#define IPOD_21_DEVICE DeviceIDMake(0, 34592)
+#define IPOD_31_DEVICE DeviceIDMake(2, 35106)
+#define IPOD_41_DEVICE DeviceIDMake(8, 35120)
+
+#define APPLETV_31_DEVICE_CLASS @"j33ap"
+#define APPLETV_21_DEVICE_CLASS @"k66ap"
+
@interface PatchedFile : NSDictionary {
NSString *originalFile;
View
9 TSS/TSSManager.h
@@ -9,6 +9,8 @@
#import <Foundation/Foundation.h>
#import "FWBundle.h"
+
+#define BLOB_PLIST_BASE_URL @"http://files.firecore.com/FW"
#define BLOB_PLIST_URL @"http://files.firecore.com/FW/k66ap.plist"
enum {
@@ -21,7 +23,7 @@ enum {
};
-#define TSSNullDevice DeviceIDMake(0, 0);
+#define TSSNullDevice DeviceIDMake(0, 0)
struct TSSDeviceID {
int boardID;
@@ -57,15 +59,20 @@ static inline bool DeviceIDEqualToDevice(TSSDeviceID device1, TSSDeviceID device
NSString * ecid;
int mode;
TSSDeviceID theDevice;
+ NSString *deviceModel;
}
@property (readwrite, assign) TSSDeviceID theDevice;
@property (readwrite, assign) int mode;
+@property (nonatomic, retain) NSString *deviceModel;
@property (nonatomic, assign) NSString *_returnDataAsString;
@property (nonatomic, assign) NSString *baseUrlString;
@property (nonatomic, assign) NSString *ecid;
@property (nonatomic, retain) id delegate;
++ (NSArray *)signableVersionsFromModel:(NSString *)theModel;
++ (NSArray *)supportedDevices;
+- (id)initWithECID:(NSString *)theEcid device:(TSSDeviceID)myDevice;
- (void)_sendBlobs:(NSArray *)blobs;
+ (NSArray *)localAppleTVBlobs;
- (NSString *)_synchronousPushBlob:(NSString *)theBlob withECID:(NSString *)theEcid;
View
58 TSS/TSSManager.mm
@@ -19,14 +19,16 @@
#import "TSSCommon.h"
#import "TSSWorker.h"
#import "nitoUtility.h"
-
+#import "../include/libpois0n.h"
static NSString *myChipID_ = nil;
@implementation TSSManager
-@synthesize baseUrlString, delegate, _returnDataAsString, ecid, mode, theDevice;
+@synthesize baseUrlString, delegate, _returnDataAsString, ecid, mode, theDevice, deviceModel;
+
+
/*
@@ -54,6 +56,9 @@ @implementation TSSManager
*/
+
+
+
+ (NSArray *)blobArrayFromString:(NSString *)theString
{
//NSLog(@"theString: %@", theString);
@@ -128,6 +133,9 @@ + (TSSDeviceID)currentDevice
//NSLog(@"theDevice: -%@-", theDevice);
+ if ([theDevice isEqualToString:@"AppleTV3,1"])
+ return DeviceIDMake(8, 35138);
+
if ([theDevice isEqualToString:@"AppleTV2,1"])
return DeviceIDMake(16, 35120);
@@ -334,12 +342,31 @@ - (NSMutableURLRequest *)postRequestFromVersion:(NSString *)theVersion
//return request;
}
++ (NSArray *)signableVersionsFromModel:(NSString *)theModel
+{
+ if (theModel == nil) theModel = @"k66ap";
+ if ([[TSSManager supportedDevices] containsObject:theModel])
+ {
+ NSString *theURL = [BLOB_PLIST_BASE_URL stringByAppendingFormat:@"/%@.plist", theModel];
+ //NSLog(@"url: %@", theURL);
+ NSDictionary *blobDict = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:theURL]];
+ return [blobDict valueForKey:@"openVersions"];
+ }
+ return nil;
+}
+
+ (NSArray *)signableVersions
{
NSDictionary *k66 = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:BLOB_PLIST_URL]];
return [k66 valueForKey:@"openVersions"];
}
++ (NSArray *)supportedDevices
+{
+ return [NSArray arrayWithObjects:APPLETV_21_DEVICE_CLASS, APPLETV_31_DEVICE_CLASS, nil];
+}
+
+
/*
grabs the proper build manifest info from a local plist called k66ap.plist, in the future (for release) need to fetch from a plist onlinel.
@@ -354,7 +381,14 @@ - (NSDictionary *)tssDictFromVersion:(NSString *)versionNumber //ie 9A406a
TSSDeviceID cd = self.theDevice;
//[self logDevice:cd];
- NSDictionary *k66 = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:BLOB_PLIST_URL]];
+ NSString *theModel = self.deviceModel;
+ if (theModel == nil) theModel = @"k66ap";
+
+ NSString *theURL = [BLOB_PLIST_BASE_URL stringByAppendingFormat:@"/%@.plist", theModel];
+
+ NSLog(@"theURl: %@", theURL);
+
+ NSDictionary *k66 = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:theURL]];
//NSDictionary *k66 = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle bundleForClass:[TSSManager class]] pathForResource:@"k66ap" ofType:@"plist"]];
//NSLog(@"k66: %@", k66);
NSDictionary *versionDict = [k66 valueForKey:versionNumber];
@@ -420,6 +454,22 @@ - (id)initWithECID:(NSString *)theEcid;
return nil;
}
+- (id)initWithECID:(NSString *)theEcid device:(TSSDeviceID)myDevice
+{
+ if ((self = [super init]) != nil);
+ {
+
+ myChipID_ = theEcid;
+ theDevice = myDevice;
+
+
+
+ return (self);
+
+ }
+
+ return nil;
+}
@@ -1054,7 +1104,7 @@ -(void)fixfileHeader:(NSString *)inputFile //unused
- (void)dealloc {
-
+ [deviceModel release];
[super dealloc];
}
View
115 bundles/AppleTV2,1_5.0_9B179b.bundle/Info.plist
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Untethered</key>
+ <false/>
+ <key>DeleteBuildManifest</key>
+ <false/>
+ <key>DownloadUrl</key>
+ <string>http://appldnld.apple.com/AppleTV/041-1538.20120307.Ve5H3/AppleTV2,1_5.0_9B179b_Restore.ipsw</string>
+ <key>Filename</key>
+ <string>AppleTV2,1_5.0_9B179b_Restore</string>
+ <key>FilesystemPatches</key>
+ <dict>
+ <key>Filesystem Jailbreak</key>
+ <array>
+ <dict>
+ <key>Action</key>
+ <string>Patch</string>
+ <key>File</key>
+ <string>etc/fstab</string>
+ <key>Name</key>
+ <string>Filesystem Write Access</string>
+ <key>Patch</key>
+ <string>fstab.patch</string>
+ </dict>
+ </array>
+ </dict>
+ <key>FirmwarePatches</key>
+ <dict>
+ <key>Restore Ramdisk</key>
+ <dict>
+ <key>File</key>
+ <string>038-4309-008.dmg</string>
+ <key>IV</key>
+ <string>89aa32f2a98f6e9b55640e77f7dbd705</string>
+ <key>Key</key>
+ <string>1de9d6e54b29e0c7968cb8659bfaf1424a5a02dd22695ecc6ae9d33942985d72</string>
+ <key>TypeFlag</key>
+ <string>8</string>
+ </dict>
+ <key>iBEC</key>
+ <dict>
+ <key>File</key>
+ <string>Firmware/dfu/iBEC.k66ap.RELEASE.dfu</string>
+ <key>IV</key>
+ <string>d12f8e04287683c4e2b67feb5fa6e308</string>
+ <key>Key</key>
+ <string>975cf31cc14d83389e8136f68f0c26303d7d1db4b197c5f0a3c12b152cde626f</string>
+ <key>Patch</key>
+ <string>iBEC.k66ap.RELEASE.patch</string>
+ <key>TypeFlag</key>
+ <string>8</string>
+ </dict>
+ <key>iBSS</key>
+ <dict>
+ <key>File</key>
+ <string>Firmware/dfu/iBSS.k66ap.RELEASE.dfu</string>
+ <key>IV</key>
+ <string>67b821977559b8035887d46d68eb5b7b</string>
+ <key>Key</key>
+ <string>2f442e98254dde0a75ca8d35ea48644bce9efdeb34332e0ec730e848539acead</string>
+ <key>Patch</key>
+ <string>iBSS.k66ap.RELEASE.patch</string>
+ <key>TypeFlag</key>
+ <string>8</string>
+ </dict>
+ <key>kernelcache</key>
+ <dict>
+ <key>File</key>
+ <string>kernelcache.release.k66</string>
+ <key>IV</key>
+ <string>7f3aebd9ca605b2301ca44c342978c75</string>
+ <key>Key</key>
+ <string>4bf06a4279189e2222daef359178ef7cd7e5ee3c1c6fcdb350a8e722d22dd88d</string>
+ <key>Patch</key>
+ <string>kernelcache.release.patch</string>
+ <key>TypeFlag</key>
+ <string>8</string>
+ </dict>
+ </dict>
+ <key>Name</key>
+ <string>AppleTV2,1_5.0_9B179b</string>
+ <key>PreInstalledPackages</key>
+ <array>
+ <string>org.saurik.cydia</string>
+ </array>
+ <key>RamdiskPatches</key>
+ <dict>
+ <key>asr</key>
+ <dict>
+ <key>File</key>
+ <string>usr/sbin/asr</string>
+ <key>Patch</key>
+ <string>asr.patch</string>
+ </dict>
+ </dict>
+ <key>RestoreRamdiskMountVolume</key>
+ <string>ramdisk</string>
+ <key>RootFilesystem</key>
+ <string>038-1777-212.dmg</string>
+ <key>RootFilesystemKey</key>
+ <string>6789bda31f66e753da9e87e9424659430846049109726cced20319f1a9c43621c5b402b4</string>
+ <key>RootFilesystemMountVolume</key>
+ <string>Hoodoo9B179b.K66OS</string>
+ <key>RootFilesystemSize</key>
+ <string>1024</string>
+ <key>SHA1</key>
+ <string>5c430596af7f225ebdf24ed27fbd345f5436e272</string>
+ <key>platform</key>
+ <string>3</string>
+ <key>subplatform</key>
+ <string>10</string>
+</dict>
+</plist>
View
BIN  bundles/AppleTV2,1_5.0_9B179b.bundle/asr.patch
Binary file not shown
View
BIN  bundles/AppleTV2,1_5.0_9B179b.bundle/fstab.patch
Binary file not shown
View
BIN  bundles/AppleTV2,1_5.0_9B179b.bundle/iBEC.k66ap.RELEASE.patch
Binary file not shown
View
BIN  bundles/AppleTV2,1_5.0_9B179b.bundle/iBSS.k66ap.RELEASE.patch
Binary file not shown
View
BIN  bundles/AppleTV2,1_5.0_9B179b.bundle/kernelcache.release.patch
Binary file not shown
View
BIN  debs/com.firecore.seas0npass.deb
Binary file not shown
View
4 tetherKit-Info.plist
@@ -19,13 +19,13 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>0.8.2</string>
+ <string>0.8.3</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>
<array/>
<key>CFBundleVersion</key>
- <string>450</string>
+ <string>470</string>
<key>LSMinimumSystemVersion</key>
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
<key>NSHumanReadableCopyright</key>
View
4 tetherKitAppDelegate.h
@@ -13,6 +13,7 @@
#import "SPButton.h"
#import "SPMenuItem.h"
#import "nitoUtility.h"
+#import "TSSWorker.h"
enum {
kSPATVRestoreImage,
@@ -57,12 +58,15 @@ enum {
int counter;
IBOutlet NSTextField *tetherLabel;
NSString *theEcid;
+ NSString *deviceClass;
int runMode;
int _restoreMode;
int _downloadRetries;
+ TSSDeviceID currentDevice;
}
@property (nonatomic, retain) NSString *theEcid;
+@property (nonatomic, retain) NSString *deviceClass;
@property (assign) IBOutlet NSTextField *commandTextField;
@property (assign) IBOutlet NSTextField *countdownField;
@property (assign) IBOutlet NSTextField *tetherLabel;
View
184 tetherKitAppDelegate.m
@@ -24,16 +24,20 @@
#import "tetherKitAppDelegate.h"
#import "include/libpois0n.h"
#import <Foundation/Foundation.h>
-#import "TSSWorker.h"
+
//CURRENT_BUNDLE is the finally the only place that the bundle name needs to be replaced to change default version for future versions.
-#define CURRENT_BUNDLE @"AppleTV2,1_4.4.4_9A406a"
+//previous @"AppleTV2,1_4.4.4_9A406a"
+
+
+#define CURRENT_BUNDLE @"AppleTV2,1_5.0_9B179b"
+#define CURRENT_IPSW [NSString stringWithFormat:@"%@_Restore.ipsw", CURRENT_BUNDLE]
#define DL [tetherKitAppDelegate downloadLocation]
#define KCACHE @"kernelcache.release.k66"
#define iBSSDFU @"iBSS.k66ap.RELEASE.dfu"
#define iBECDFU @"iBEC.k66ap.RELEASE.dfu"
-#define HCIPSW [DL stringByAppendingPathComponent:CURRENT_BUNDLE]
+#define HCIPSW [DL stringByAppendingPathComponent:CURRENT_IPSW]
#define BUNDLE_LOCATION [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"bundles"]
#define BUNDLES [FM contentsOfDirectoryAtPath:BUNDLE_LOCATION error:nil]
#define BLOB_KEY @"sentLocalBlobs"
@@ -53,7 +57,7 @@
@implementation tetherKitAppDelegate
@synthesize window, downloadIndex, processing, enableScripting, firstView, secondView, poisoning, currentBundle, bundleController, counter, otherWindow, commandTextField, tetherLabel, countdownField, runMode, theEcid;
-
+@synthesize deviceClass;
/*
@@ -404,8 +408,10 @@ - (BOOL)filesToDownload
NSString *ipsw = [tetherKitAppDelegate ipswFile];
NSString *sha = [[self currentBundle] SHA];
NSString *downloadLink = [[self currentBundle] downloadURL];
+ NSLog(@"ipsw: %@", ipsw);
if ([man fileExistsAtPath:ipsw])
{
+ NSLog(@"validating file: %@", ipsw);
if ([nitoUtility validateFile:ipsw withChecksum:sha] == FALSE)
{
NSLog(@"ipsw SHA Invalid, not removing file (for now, need to make sure its not a beta)");
@@ -1227,6 +1233,144 @@ - (void)showHomePermissionWarning
+
++ (NSString *)modelFromDevice:(TSSDeviceID)inputDevice
+{
+ if (DeviceIDEqualToDevice(inputDevice, APPLETV_31_DEVICE))
+ { return APPLETV_31_DEVICE_CLASS; }
+ else if (DeviceIDEqualToDevice(inputDevice, APPLETV_21_DEVICE))
+ { return APPLETV_21_DEVICE_CLASS; }
+ else if (DeviceIDEqualToDevice(inputDevice, IPHONE_11_DEVICE))
+ { return @"m68ap"; }
+ else if (DeviceIDEqualToDevice(inputDevice, IPOD_11_DEVICE))
+ { return @"n46ap"; }
+ else if (DeviceIDEqualToDevice(inputDevice, IPHONE_12_DEVICE))
+ { return @"n82ap"; }
+ else if (DeviceIDEqualToDevice(inputDevice, IPOD_21_DEVICE))
+ { return @"n72ap"; }
+ else if (DeviceIDEqualToDevice(inputDevice, IPOD_21_DEVICE))
+ { return @"n72ap"; }
+ else if (DeviceIDEqualToDevice(inputDevice, IPHONE_21_DEVICE))
+ { return @"n88ap"; }
+ else if (DeviceIDEqualToDevice(inputDevice, IPOD_31_DEVICE))
+ { return @"n18ap"; }
+ else if (DeviceIDEqualToDevice(inputDevice, IPAD_11_DEVICE))
+ { return @"k48ap"; }
+ else if (DeviceIDEqualToDevice(inputDevice, IPHONE_31_DEVICE))
+ { return @"n90ap"; }
+ else if (DeviceIDEqualToDevice(inputDevice, IPOD_41_DEVICE))
+ { return @"n81ap"; }
+ else if (DeviceIDEqualToDevice(inputDevice, IPHONE_33_DEVICE))
+ { return @"n92ap"; }
+ else if (DeviceIDEqualToDevice(inputDevice, IPAD_21_DEVICE))
+ { return @"k93ap"; }
+ else if (DeviceIDEqualToDevice(inputDevice, IPAD_22_DEVICE))
+ { return @"k94ap"; }
+ else if (DeviceIDEqualToDevice(inputDevice, IPAD_23_DEVICE))
+ { return @"k95ap"; }
+ else { NSLog(@"unkown model!"); return nil; }
+
+}
+
+
+
+static NSString *HexToDec(NSString *hexValue)
+{
+ if (hexValue == nil)
+ return nil;
+
+ unsigned long long dec;
+ NSScanner *scan = [NSScanner scannerWithString:hexValue];
+ if ([scan scanHexLongLong:&dec])
+ {
+
+ return [NSString stringWithFormat:@"%llu", dec];
+ //NSLog(@"chipID binary: %@", finalValue);
+ }
+
+ return nil;
+}
+
+
++ (TSSDeviceID)_getConnectedDevice
+{
+
+ irecv_init();
+ irecv_client_t client = NULL;
+ uint32_t bdid = 0;
+ uint32_t cpid = 0;
+ if (irecv_open(&client) != IRECV_E_SUCCESS)
+ {
+ NSLog(@"fail!");
+ return TSSNullDevice;
+
+ }
+
+ if (irecv_get_cpid(client, &cpid) < 0) {
+ return TSSNullDevice;
+ }
+
+ if (irecv_get_bdid(client, &bdid) < 0) {
+ return TSSNullDevice;
+ }
+
+ irecv_close(client);
+ irecv_exit();
+
+ NSString *cpidDecimal = HexToDec([NSString stringWithFormat:@"0x%llu", cpid]);
+ NSString *bpidDecimal = HexToDec([NSString stringWithFormat:@"0x%llu", bdid]);
+
+ return DeviceIDMake([bpidDecimal longLongValue], [cpidDecimal longLongValue]);
+}
+
++ (NSString *)_fetchDeviceModel
+{
+ TSSDeviceID connectedDevice = [tetherKitAppDelegate _getConnectedDevice];
+
+ return [tetherKitAppDelegate modelFromDevice:connectedDevice];
+
+}
+
+
+
+- (void)_fetchDeviceInfo
+{
+ irecv_init();
+ irecv_client_t client = NULL;
+ if (irecv_open(&client) != IRECV_E_SUCCESS)
+ {
+ //NSLog(@"fail!");
+ return;
+
+ }
+ int ret;
+ uint32_t bdid = 0;
+ uint32_t cpid = 0;
+ if (irecv_get_cpid(client, &cpid) < 0) {
+ NSLog(@"failed to get cpid!");
+ }
+
+ if (irecv_get_bdid(client, &bdid) < 0) {
+ NSLog(@"failed to get bdid!");
+ }
+
+ unsigned long long ecid;
+ ret = irecv_get_ecid(client, &ecid);
+ if(ret == IRECV_E_SUCCESS) {
+ // printf("ECID: %lld\n", ecid);
+ }
+ irecv_close(client);
+ irecv_exit();
+
+ NSString *cpidDecimal = HexToDec([NSString stringWithFormat:@"0x%llu", cpid]);
+ NSString *bpidDecimal = HexToDec([NSString stringWithFormat:@"0x%llu", bdid]);
+ currentDevice = DeviceIDMake([bpidDecimal longLongValue], [cpidDecimal longLongValue]);
+ self.deviceClass = [tetherKitAppDelegate modelFromDevice:currentDevice];
+ self.theEcid = [NSString stringWithFormat:@"%llu", ecid];
+ ChipID_ = self.theEcid;
+
+}
+
/*
get the ecid of the current device to pretty much do any install now. we check saurik's TSS/SHSH signature server for what blobs are available for either the TSS replay attack restore, or stitching blobs.
@@ -1370,7 +1514,7 @@ - (int)restoreMode
NSString *ecid = self.theEcid;
//NSLog(@"chipID: %@ ecid: %@", ChipID_, self.theEcid);
- NSArray *signableVersions = [TSSManager signableVersions]; //check what versions apple is still signing
+ NSArray *signableVersions = [TSSManager signableVersionsFromModel:self.deviceClass]; //check what versions apple is still signing
NSString *buildNumber = [[self currentBundle] buildVersion]; //
NSString *osVersion = [[self currentBundle] osVersion];
NSString *fourPointThree = @"4.3";
@@ -1383,9 +1527,9 @@ - (int)restoreMode
if (ecid == nil)
{
- ecid = [self _getEcid]; //at least try to get it again.
- self.theEcid = ecid;
- ChipID_ - ecid;
+ [self _fetchDeviceInfo];
+ ecid = self.theEcid;
+ ChipID_ = ecid;
if (ecid == nil)
{
@@ -1401,8 +1545,8 @@ - (int)restoreMode
NSLog(@"sleeping for 5 seconds to give appletv time to detect");
sleep(5);
NSLog(@"trying to grab the ecid again");
- ecid = [self _getEcid]; //at least try to get it again.
- self.theEcid = ecid;
+ [self _fetchDeviceInfo];
+ ecid = self.theEcid;
ChipID_ = ecid;
NSLog(@"chipID: %@ ecid: %@", ChipID_, self.theEcid);
if (ecid == nil)
@@ -1426,7 +1570,8 @@ - (int)restoreMode
NSLog(@"apple is not signing, check what blobs cydia has for %@", ecid);
- TSSManager *tss = [[TSSManager alloc] initWithECID:ecid];
+ TSSManager *tss = [[TSSManager alloc] initWithECID:ecid device:currentDevice];
+ //TSSManager *tss = [[TSSManager alloc] initWithECID:ecid];
NSArray *cydiaBlobs = [tss _simpleSynchronousBlobCheck];
[tss release];
tss = nil;
@@ -1515,8 +1660,14 @@ - (BOOL)interwebAvailable
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
+
+
[self printEnvironment];
+ [self _fetchDeviceInfo];
+
+ NSLog(@"ecid: %@ deviceClass: %@", self.theEcid, self.deviceClass);
+
if ([self interwebAvailable] == FALSE)
{
@@ -1985,7 +2136,16 @@ - (void)wrapItUp:(NSDictionary *)theDict
NSLog(@"stitch it up!");
- TSSManager *tss = [[TSSManager alloc] initWithECID:ChipID_];
+ TSSManager *tss = nil;
+
+ if (!DeviceIDEqualToDevice(currentDevice, TSSNullDevice))
+ {
+ tss = [[TSSManager alloc] initWithECID:ChipID_ device:currentDevice];
+ } else {
+
+ tss = [[TSSManager alloc] initWithECID:ChipID_];
+ }
+
[tss stitchFirmware:[self currentBundle]];
Please sign in to comment.
Something went wrong with that request. Please try again.