ref: simplify readEntitlements() + unzip to tmp-dir shortcut
This commit is contained in:
@@ -3,25 +3,22 @@ import Foundation
|
|||||||
extension PreviewGenerator {
|
extension PreviewGenerator {
|
||||||
/// Search for app binary and run `codesign` on it.
|
/// Search for app binary and run `codesign` on it.
|
||||||
private func readEntitlements(_ meta: MetaInfo, _ bundleExecutable: String?) -> Entitlements {
|
private func readEntitlements(_ meta: MetaInfo, _ bundleExecutable: String?) -> Entitlements {
|
||||||
guard let bundleExecutable else {
|
if let exe = bundleExecutable {
|
||||||
return Entitlements.withoutBinary()
|
switch meta.type {
|
||||||
}
|
case .IPA:
|
||||||
|
if let tmpPath = try? meta.zipFile!.unzipFileToTempDir("Payload/*.app/\(exe)") {
|
||||||
switch meta.type {
|
defer {
|
||||||
case .IPA:
|
try? FileManager.default.removeItem(atPath: tmpPath)
|
||||||
let tmpPath = NSTemporaryDirectory() + "/" + UUID().uuidString
|
}
|
||||||
try! FileManager.default.createDirectory(atPath: tmpPath, withIntermediateDirectories: true)
|
return Entitlements(forBinary: tmpPath + "/" + exe)
|
||||||
defer {
|
}
|
||||||
try? FileManager.default.removeItem(atPath: tmpPath)
|
case .Archive, .Extension:
|
||||||
|
return Entitlements(forBinary: meta.effectiveUrl("MacOS", exe).path)
|
||||||
|
case .APK:
|
||||||
|
break // not applicable for Android
|
||||||
}
|
}
|
||||||
try! meta.zipFile!.unzipFile("Payload/*.app/\(bundleExecutable)", toDir: tmpPath)
|
|
||||||
return Entitlements(forBinary: tmpPath + "/" + bundleExecutable)
|
|
||||||
case .Archive, .Extension:
|
|
||||||
return Entitlements(forBinary: meta.effectiveUrl("MacOS", bundleExecutable).path)
|
|
||||||
case .APK:
|
|
||||||
// not applicable for Android
|
|
||||||
return Entitlements.withoutBinary()
|
|
||||||
}
|
}
|
||||||
|
return Entitlements.withoutBinary()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Process compiled binary and provision plist to extract `Entitlements`
|
/// Process compiled binary and provision plist to extract `Entitlements`
|
||||||
|
|||||||
@@ -354,12 +354,23 @@ struct ZipFile {
|
|||||||
/// Unzip file to filesystem.
|
/// Unzip file to filesystem.
|
||||||
/// @param filePath File path inside zip file.
|
/// @param filePath File path inside zip file.
|
||||||
/// @param targetDir Directory in which to unzip the file.
|
/// @param targetDir Directory in which to unzip the file.
|
||||||
func unzipFile(_ filePath: String, toDir targetDir: String) throws {
|
@discardableResult
|
||||||
if let data = self.unzipFile(filePath) {
|
func unzipFile(_ filePath: String, toDir targetDir: String) throws -> String? {
|
||||||
let filename = filePath.components(separatedBy: "/").last!
|
guard let data = self.unzipFile(filePath) else {
|
||||||
let outputPath = targetDir.appending("/" + filename)
|
return nil
|
||||||
os_log(.debug, log: log, "[unzip] write to %{public}@", outputPath)
|
|
||||||
try data.write(to: URL(fileURLWithPath: outputPath), options: .atomic)
|
|
||||||
}
|
}
|
||||||
|
let filename = filePath.components(separatedBy: "/").last!
|
||||||
|
let outputPath = targetDir.appending("/" + filename)
|
||||||
|
os_log(.debug, log: log, "[unzip] write to %{public}@", outputPath)
|
||||||
|
try data.write(to: URL(fileURLWithPath: outputPath), options: .atomic)
|
||||||
|
return outputPath
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Extract selected `filePath` inside zip to a new temporary directory and return path to that file.
|
||||||
|
/// @return Path to extracted data. Returns `nil` or throws exception if data could not be extracted.
|
||||||
|
func unzipFileToTempDir(_ filePath: String) throws -> String? {
|
||||||
|
let tmpPath = NSTemporaryDirectory() + "/" + UUID().uuidString
|
||||||
|
try! FileManager.default.createDirectory(atPath: tmpPath, withIntermediateDirectories: true)
|
||||||
|
return try unzipFile(filePath, toDir: tmpPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user