Skip to content

Commit cd83ef3

Browse files
committed
Merge pull request maciekish#18 from SandyChapman/master
Modified resigning procedure to automatically copy the target provisioni...
2 parents 104a16d + 9bb64a3 commit cd83ef3

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed

iReSign/iReSign/iReSignAppDelegate.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
NSTask *unzipTask;
2020
NSTask *provisioningTask;
2121
NSTask *codesignTask;
22+
NSTask *generateEntitlementsTask;
2223
NSTask *verifyTask;
2324
NSTask *zipTask;
2425
NSString *originalIpaPath;
@@ -27,6 +28,7 @@
2728
NSString *appName;
2829
NSString *fileName;
2930

31+
NSString *entitlementsResult;
3032
NSString *codesigningResult;
3133
NSString *verificationResult;
3234

iReSign/iReSign/iReSignAppDelegate.m

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ - (void)checkProvisioning:(NSTimer *)timer {
270270
if (identifierOK) {
271271
NSLog(@"Provisioning completed.");
272272
[statusLabel setStringValue:@"Provisioning completed"];
273-
[self doCodeSigning];
273+
[self doEntitlementsFixing];
274274
} else {
275275
[self showAlertOfKind:NSCriticalAlertStyle WithTitle:@"Error" AndMessage:@"Product identifiers don't match"];
276276
[self enableControls];
@@ -287,6 +287,69 @@ - (void)checkProvisioning:(NSTimer *)timer {
287287
}
288288
}
289289

290+
- (void)doEntitlementsFixing
291+
{
292+
if (![entitlementField.stringValue isEqualToString:@""] || [provisioningPathField.stringValue isEqualToString:@""]) {
293+
[self doCodeSigning];
294+
return; // Using a pre-made entitlements file or we're not re-provisioning.
295+
}
296+
297+
[statusLabel setStringValue:@"Generating entitlements"];
298+
299+
if (appPath) {
300+
generateEntitlementsTask = [[NSTask alloc] init];
301+
[generateEntitlementsTask setLaunchPath:@"/usr/bin/security"];
302+
[generateEntitlementsTask setArguments:@[@"cms", @"-D", @"-i", provisioningPathField.stringValue]];
303+
[generateEntitlementsTask setCurrentDirectoryPath:workingPath];
304+
305+
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(checkEntitlementsFix:) userInfo:nil repeats:TRUE];
306+
307+
NSPipe *pipe=[NSPipe pipe];
308+
[generateEntitlementsTask setStandardOutput:pipe];
309+
[generateEntitlementsTask setStandardError:pipe];
310+
NSFileHandle *handle = [pipe fileHandleForReading];
311+
312+
[generateEntitlementsTask launch];
313+
314+
[NSThread detachNewThreadSelector:@selector(watchEntitlements:)
315+
toTarget:self withObject:handle];
316+
}
317+
}
318+
319+
- (void)watchEntitlements:(NSFileHandle*)streamHandle {
320+
@autoreleasepool {
321+
entitlementsResult = [[NSString alloc] initWithData:[streamHandle readDataToEndOfFile] encoding:NSASCIIStringEncoding];
322+
}
323+
}
324+
325+
- (void)checkEntitlementsFix:(NSTimer *)timer {
326+
if ([generateEntitlementsTask isRunning] == 0) {
327+
[timer invalidate];
328+
generateEntitlementsTask = nil;
329+
NSLog(@"Entitlements fixed done");
330+
[statusLabel setStringValue:@"Entitlements generated"];
331+
[self doEntitlementsEdit];
332+
}
333+
}
334+
335+
- (void)doEntitlementsEdit
336+
{
337+
NSDictionary* entitlements = entitlementsResult.propertyList;
338+
entitlements = entitlements[@"Entitlements"];
339+
NSString* filePath = [workingPath stringByAppendingPathComponent:@"entitlements.plist"];
340+
NSData *xmlData = [NSPropertyListSerialization dataWithPropertyList:entitlements format:NSPropertyListXMLFormat_v1_0 options:kCFPropertyListImmutable error:nil];
341+
if(![xmlData writeToFile:filePath atomically:YES]) {
342+
NSLog(@"Error writing entitlements file.");
343+
[self showAlertOfKind:NSCriticalAlertStyle WithTitle:@"Error" AndMessage:@"Failed entitlements generation"];
344+
[self enableControls];
345+
[statusLabel setStringValue:@"Ready"];
346+
}
347+
else {
348+
entitlementField.stringValue = filePath;
349+
[self doCodeSigning];
350+
}
351+
}
352+
290353
- (void)doCodeSigning {
291354
appPath = nil;
292355

0 commit comments

Comments
 (0)