diff --git a/AppSigner/Info.plist b/AppSigner/Info.plist
index c820008..8b0f8f4 100644
--- a/AppSigner/Info.plist
+++ b/AppSigner/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 1.0b13
+ 1.0b14
CFBundleSignature
????
CFBundleVersion
diff --git a/AppSigner/MainView.swift b/AppSigner/MainView.swift
index 7e17e2f..aa2115d 100644
--- a/AppSigner/MainView.swift
+++ b/AppSigner/MainView.swift
@@ -290,6 +290,13 @@ class MainView: NSView, NSURLSessionDataDelegate, NSURLSessionDelegate, NSURLSes
}
}
+ func unzip(inputFile: String, outputPath: String)->AppSignerTaskOutput {
+ return NSTask().execute(unzipPath, workingDirectory: nil, arguments: ["-q",inputFile,"-d",outputPath])
+ }
+ func zip(inputPath: String, outputFile: String)->AppSignerTaskOutput {
+ return NSTask().execute(zipPath, workingDirectory: inputPath, arguments: ["-qry", outputFile, "."])
+ }
+
func cleanup(tempFolder: String){
do {
try fileManager.removeItemAtPath(tempFolder)
@@ -366,6 +373,7 @@ class MainView: NSView, NSURLSessionDataDelegate, NSURLSessionDelegate, NSURLSes
let newApplicationID = self.NewApplicationIDTextField.stringValue.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
let newDisplayName = self.appDisplayName.stringValue.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
let inputStartsWithHTTP = inputFile.lowercaseString.substringToIndex(inputFile.startIndex.advancedBy(4)) == "http"
+ var eggCount: Int = 0
//MARK: Sanity checks
@@ -395,6 +403,7 @@ class MainView: NSView, NSURLSessionDataDelegate, NSURLSessionDelegate, NSURLSes
}
let tempFolder = tempTask.output.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
let workingDirectory = tempFolder.stringByAppendingPathComponent("out")
+ let eggDirectory = tempFolder.stringByAppendingPathComponent("eggs")
let payloadDirectory = workingDirectory.stringByAppendingPathComponent("Payload/")
let entitlementsPlist = tempFolder.stringByAppendingPathComponent("entitlements.plist")
@@ -402,6 +411,15 @@ class MainView: NSView, NSURLSessionDataDelegate, NSURLSessionDelegate, NSURLSes
Log.write("Working directory: \(workingDirectory)")
Log.write("Payload directory: \(payloadDirectory)")
+ //MARK: Create Egg Temp Directory
+ do {
+ try fileManager.createDirectoryAtPath(eggDirectory, withIntermediateDirectories: true, attributes: nil)
+ } catch let error as NSError {
+ setStatus("Error creating egg temp directory")
+ Log.write(error.localizedDescription)
+ cleanup(tempFolder); return
+ }
+
//MARK: Download file
downloading = false
downloadError = nil
@@ -479,7 +497,8 @@ class MainView: NSView, NSURLSessionDataDelegate, NSURLSessionDelegate, NSURLSes
do {
try fileManager.createDirectoryAtPath(workingDirectory, withIntermediateDirectories: true, attributes: nil)
setStatus("Extracting ipa file")
- let unzipTask = NSTask().execute(unzipPath, workingDirectory: nil, arguments: ["-q",inputFile,"-d",workingDirectory])
+
+ let unzipTask = self.unzip(inputFile, outputPath: workingDirectory)
if unzipTask.status != 0 {
setStatus("Error extracting ipa file")
cleanup(tempFolder); return
@@ -645,10 +664,32 @@ class MainView: NSView, NSURLSessionDataDelegate, NSURLSessionDelegate, NSURLSes
}
}
- //MARK: Codesigning
- let signingFunction = generateFileSignFunc(payloadDirectory, entitlementsPath: entitlementsPlist, signingCertificate: signingCertificate!)
+ //MARK: Codesigning - General
let signableExtensions = ["dylib","so","0","vis","pvr","framework"]
+ //MARK: Codesigning - Eggs
+ let eggSigningFunction = generateFileSignFunc(eggDirectory, entitlementsPath: entitlementsPlist, signingCertificate: signingCertificate!)
+ func signEgg(eggFile: String){
+ eggCount++
+
+ let currentEggPath = eggDirectory.stringByAppendingPathComponent("egg\(eggCount)")
+ let shortName = eggFile.substringFromIndex(payloadDirectory.endIndex)
+ setStatus("Extracting \(shortName)")
+ if self.unzip(eggFile, outputPath: currentEggPath).status != 0 {
+ Log.write("Error extracting \(shortName)")
+ return
+ }
+ recursiveDirectorySearch(currentEggPath, extensions: ["egg"], found: signEgg)
+ recursiveDirectorySearch(currentEggPath, extensions: signableExtensions, found: eggSigningFunction)
+ setStatus("Compressing \(shortName)")
+ self.zip(currentEggPath, outputFile: eggFile)
+ }
+ recursiveDirectorySearch(appBundlePath, extensions: ["egg"], found: signEgg)
+
+ //MARK: Codesigning - App
+ let signingFunction = generateFileSignFunc(payloadDirectory, entitlementsPath: entitlementsPlist, signingCertificate: signingCertificate!)
+
+
recursiveDirectorySearch(appBundlePath, extensions: signableExtensions, found: signingFunction)
signingFunction(file: appBundlePath)
}
@@ -670,7 +711,7 @@ class MainView: NSView, NSURLSessionDataDelegate, NSURLSessionDelegate, NSURLSes
}
}
setStatus("Packaging IPA")
- let zipTask = NSTask().execute(zipPath, workingDirectory: workingDirectory, arguments: ["-qry", outputFile!, "."])
+ let zipTask = self.zip(workingDirectory, outputFile: outputFile!)
if zipTask.status != 0 {
setStatus("Error packaging IPA")
}
diff --git a/iOS App Signer.xcodeproj/project.pbxproj b/iOS App Signer.xcodeproj/project.pbxproj
index 1092f9a..95e592d 100644
--- a/iOS App Signer.xcodeproj/project.pbxproj
+++ b/iOS App Signer.xcodeproj/project.pbxproj
@@ -7,7 +7,6 @@
objects = {
/* Begin PBXBuildFile section */
- 6514F9CD1BF6F3020060EC17 /* app-sign.sh in Resources */ = {isa = PBXBuildFile; fileRef = 6514F9CC1BF6F3020060EC17 /* app-sign.sh */; };
652408CC1BE743D4006FA4C6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 652408CB1BE743D4006FA4C6 /* AppDelegate.swift */; };
652408CE1BE743D4006FA4C6 /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 652408CD1BE743D4006FA4C6 /* MainView.swift */; };
652408D01BE743D4006FA4C6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 652408CF1BE743D4006FA4C6 /* Assets.xcassets */; };
@@ -39,7 +38,6 @@
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
- 6514F9CC1BF6F3020060EC17 /* app-sign.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "app-sign.sh"; path = "../app-sign.sh"; sourceTree = ""; };
652408C81BE743D4006FA4C6 /* iOS App Signer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iOS App Signer.app"; sourceTree = BUILT_PRODUCTS_DIR; };
652408CB1BE743D4006FA4C6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
652408CD1BE743D4006FA4C6 /* MainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = ""; };
@@ -108,7 +106,6 @@
652408CA1BE743D4006FA4C6 /* AppSigner */ = {
isa = PBXGroup;
children = (
- 6514F9CC1BF6F3020060EC17 /* app-sign.sh */,
655FFFDF1BEB270200D43AD8 /* Extensions */,
655FFFA01BEAD90800D43AD8 /* Classes */,
65311EB51BF88EB800516EFD /* Application.xib */,
@@ -271,7 +268,6 @@
files = (
65311EB61BF88EB800516EFD /* Application.xib in Resources */,
652408D01BE743D4006FA4C6 /* Assets.xcassets in Resources */,
- 6514F9CD1BF6F3020060EC17 /* app-sign.sh in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};