Merge branch '1.4.5' into develop

This commit is contained in:
Riley Testut
2021-03-09 14:32:05 -06:00
3 changed files with 15 additions and 11 deletions

View File

@@ -3242,7 +3242,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.4.4; MARKETING_VERSION = 1.4.5b;
PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.AltStore; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.AltStore;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@@ -3270,7 +3270,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.4.4; MARKETING_VERSION = 1.4.5b;
PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.AltStore; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.AltStore;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";

View File

@@ -1403,9 +1403,9 @@ private extension AppManager
func run(_ operations: [Foundation.Operation], context: OperationContext?, requiresSerialQueue: Bool = false) func run(_ operations: [Foundation.Operation], context: OperationContext?, requiresSerialQueue: Bool = false)
{ {
// Reference to previous serial operation in context used to enforce FIFO, // Find "Install AltStore" operation if it already exists in `context`
// even if the operations become ready in a different order than submitted. // so we can ensure it runs after any additional serial operations in `operations`.
var previousSerialOperation: Foundation.Operation? = context?.operations.allObjects.filter { self.serialOperationQueue.operations.contains($0) }.last let installAltStoreOperation = context?.operations.allObjects.lazy.compactMap { $0 as? InstallAppOperation }.first { $0.context.bundleIdentifier == StoreApp.altstoreAppID }
for operation in operations for operation in operations
{ {
@@ -1413,16 +1413,20 @@ private extension AppManager
{ {
case _ where requiresSerialQueue: fallthrough case _ where requiresSerialQueue: fallthrough
case is InstallAppOperation, is RefreshAppOperation, is BackupAppOperation: case is InstallAppOperation, is RefreshAppOperation, is BackupAppOperation:
if let previousOperation = previousSerialOperation if let installAltStoreOperation = operation as? InstallAppOperation, installAltStoreOperation.context.bundleIdentifier == StoreApp.altstoreAppID
{ {
// Add dependency on previous serial operation to enforce FIFO. // Add dependencies on previous serial operations in `context` to ensure re-installing AltStore goes last.
operation.addDependency(previousOperation) let previousSerialOperations = context?.operations.allObjects.filter { self.serialOperationQueue.operations.contains($0) }
previousSerialOperations?.forEach { installAltStoreOperation.addDependency($0) }
}
else if let installAltStoreOperation = installAltStoreOperation
{
// Re-installing AltStore should _always_ be the last serial operation in `context`.
installAltStoreOperation.addDependency(operation)
} }
self.serialOperationQueue.addOperation(operation) self.serialOperationQueue.addOperation(operation)
previousSerialOperation = operation
default: self.operationQueue.addOperation(operation) default: self.operationQueue.addOperation(operation)
} }