diff --git a/AltStore.xcodeproj/project.pbxproj b/AltStore.xcodeproj/project.pbxproj index 9c8125ab..7e440b57 100644 --- a/AltStore.xcodeproj/project.pbxproj +++ b/AltStore.xcodeproj/project.pbxproj @@ -3505,7 +3505,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = "$(inherited)"; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 6000; + CURRENT_PROJECT_VERSION = "$(inherited)"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; @@ -3545,7 +3545,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = "$(inherited)"; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 6000; + CURRENT_PROJECT_VERSION = "$(inherited)"; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; @@ -3587,7 +3587,7 @@ CODE_SIGN_ENTITLEMENTS = AltWidget/AltWidgetExtension.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 6000; + CURRENT_PROJECT_VERSION = "$(inherited)"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)"; ENABLE_DEBUG_DYLIB = NO; @@ -3622,7 +3622,7 @@ CODE_SIGN_ENTITLEMENTS = AltWidget/AltWidgetExtension.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 6000; + CURRENT_PROJECT_VERSION = "$(inherited)"; DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)"; ENABLE_DEBUG_DYLIB = NO; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; @@ -3793,7 +3793,7 @@ CODE_SIGN_ENTITLEMENTS = AltStore/AltStore.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 6000; + CURRENT_PROJECT_VERSION = "$(inherited)"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)"; ENABLE_BITCODE = NO; @@ -3814,7 +3814,7 @@ "$(PROJECT_DIR)/Dependencies/libcurl", ); LLVM_LTO = YES_THIN; - MARKETING_VERSION = 0.6.0; + MARKETING_VERSION = "$(inherited)"; OTHER_LDFLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -3839,7 +3839,7 @@ CODE_SIGN_ENTITLEMENTS = AltStore/AltStore.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 6000; + CURRENT_PROJECT_VERSION = "$(inherited)"; DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)"; ENABLE_BITCODE = NO; ENABLE_DEBUG_DYLIB = NO; @@ -3860,7 +3860,7 @@ "$(PROJECT_DIR)/Dependencies/libcurl", ); LLVM_LTO = YES_THIN; - MARKETING_VERSION = 0.6.0; + MARKETING_VERSION = "$(inherited)"; OTHER_LDFLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)"; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/AltStore/Settings/SettingsViewController.swift b/AltStore/Settings/SettingsViewController.swift index 7eb94650..394ebb69 100644 --- a/AltStore/Settings/SettingsViewController.swift +++ b/AltStore/Settings/SettingsViewController.swift @@ -289,11 +289,10 @@ private extension SettingsViewController versionLabel = NSLocalizedString(String(format: "Version %@", localizedVersion), comment: "SideStore Version") } - else if var version = buildInfo.marketing_version + else if let version = buildInfo.marketing_version { versionLabel = NSLocalizedString(String(format: "Version %@", version), comment: "SideStore Version") } - else { var version = "SideStore\t" @@ -303,10 +302,7 @@ private extension SettingsViewController // add xcode build version for local builds if let installedApp, - let version = installedApp.storeApp?.latestSupportedVersion?.version, - // if MARKETING_VERSION is set as "0.6.0-local" in CodeSigning.xcconfig as override, - // then it is assumed it is local build and we should show xcode build information - SemanticVersion(version)?.preRelease == "local" + SemanticVersion(installedApp.version)?.preRelease == "local" { versionLabel += "\n\(getXcodeVersion())" } diff --git a/AltStoreCore/Model/MergePolicies/MergePolicy.swift b/AltStoreCore/Model/MergePolicies/MergePolicy.swift index eaeb35dd..a21b2d4f 100644 --- a/AltStoreCore/Model/MergePolicies/MergePolicy.swift +++ b/AltStoreCore/Model/MergePolicies/MergePolicy.swift @@ -222,7 +222,7 @@ extension MergePolicy{ // When conflict.databaseObject is available, it means this is replace (delete + insert) or update private func resolveWhenDatabaseObjectAvailable(_ conflicts: [NSConstraintConflict]) throws { - + for conflict in conflicts { switch conflict.databaseObject @@ -354,7 +354,7 @@ extension MergePolicy{ do { var appVersions = databaseObject.versions - + if let globallyUniqueID = databaseObject.globallyUniqueID { // Permissions @@ -365,16 +365,16 @@ extension MergePolicy{ // Sorting order doesn't matter, but elements themselves don't match so throw error. throw MergeError.incorrectPermissions(for: databaseObject) } - + // App versions if let sortedAppVersionIDs = sortedVersionIDsByGlobalAppID[globallyUniqueID], let sortedAppVersionsIDsArray = sortedAppVersionIDs.array as? [String], - case let databaseVersionIDs = databaseObject.versions.map({ $0.versionID }), + case let databaseVersionIDs = databaseObject.versions.map({ $0.versionID }), databaseVersionIDs != sortedAppVersionsIDsArray { // databaseObject.versions post-merge doesn't match contextApp.versions pre-merge, so attempt to fix by re-sorting. - let fixedAppVersions = databaseObject.versions.sorted { (versionA, versionB) in + let fixedAppVersions = databaseObject.versions.sorted { (versionA, versionB) in let indexA = sortedAppVersionIDs.index(of: versionA.versionID) let indexB = sortedAppVersionIDs.index(of: versionB.versionID) return indexA < indexB @@ -387,16 +387,19 @@ extension MergePolicy{ } appVersions = fixedAppVersions + + // Always update versions post-merging to make sure latestSupportedVersion is correct. + try databaseObject.setVersions(appVersions) } // Screenshots if let sortedScreenshotIDs = sortedScreenshotIDsByGlobalAppID[globallyUniqueID], let sortedScreenshotIDsArray = sortedScreenshotIDs.array as? [String], - case let databaseScreenshotIDs = databaseObject.allScreenshots.map({ $0.screenshotID }), + case let databaseScreenshotIDs = databaseObject.allScreenshots.map({ $0.screenshotID }), databaseScreenshotIDs != sortedScreenshotIDsArray { // Screenshot order is incorrect, so attempt to fix by re-sorting. - let fixedScreenshots = databaseObject.allScreenshots.sorted { (screenshotA, screenshotB) in + let fixedScreenshots = databaseObject.allScreenshots.sorted { (screenshotA, screenshotB) in let indexA = sortedScreenshotIDs.index(of: screenshotA.screenshotID) let indexB = sortedScreenshotIDs.index(of: screenshotB.screenshotID) return indexA < indexB @@ -415,8 +418,6 @@ extension MergePolicy{ } } - // Always update versions post-merging to make sure latestSupportedVersion is correct. - try databaseObject.setVersions(appVersions) } catch { diff --git a/AltStoreCore/Model/Source.swift b/AltStoreCore/Model/Source.swift index 80b08f2f..6d126cef 100644 --- a/AltStoreCore/Model/Source.swift +++ b/AltStoreCore/Model/Source.swift @@ -33,172 +33,171 @@ public extension Source #endif } -public struct AppPermissionFeed: Codable { - let type: String // ALTAppPermissionType - let usageDescription: String +// public struct AppPermissionFeed: Codable { +// let type: String // ALTAppPermissionType +// let usageDescription: String - enum CodingKeys: String, CodingKey - { - case type - case usageDescription - } -} +// enum CodingKeys: String, CodingKey +// { +// case type +// case usageDescription +// } +// } -public struct AppVersionFeed: Codable { - /* Properties */ - let version: String - let date: Date - let localizedDescription: String? +// public struct AppVersionFeed: Codable { +// /* Properties */ +// let version: String +// let date: Date +// let localizedDescription: String? - let downloadURL: URL - let size: Int64 - // added in 0.6.0 - let sha256: String? // sha 256 of the uploaded IPA +// let downloadURL: URL +// let size: Int64 +// // added in 0.6.0 +// let sha256: String? // sha 256 of the uploaded IPA - enum CodingKeys: String, CodingKey - { - case version - case date - case localizedDescription - case downloadURL - case size - // added in 0.6.0 - case sha256 - } -} +// enum CodingKeys: String, CodingKey +// { +// case version +// case date +// case localizedDescription +// case downloadURL +// case size +// // added in 0.6.0 +// case sha256 +// } +// } -public struct PlatformURLFeed: Codable { - /* Properties */ - let platform: Platform - let downloadURL: URL +// public struct PlatformURLFeed: Codable { +// /* Properties */ +// let platform: Platform +// let downloadURL: URL - private enum CodingKeys: String, CodingKey - { - case platform - case downloadURL - } -} +// private enum CodingKeys: String, CodingKey +// { +// case platform +// case downloadURL +// } +// } -public struct StoreAppFeed: Codable { - let name: String - let bundleIdentifier: String - let subtitle: String? +// public struct StoreAppFeed: Codable { +// let name: String +// let bundleIdentifier: String +// let subtitle: String? - let developerName: String - let localizedDescription: String - let size: Int64 +// let developerName: String +// let localizedDescription: String +// let size: Int64 - let iconURL: URL - let screenshotURLs: [URL] +// let iconURL: URL +// let screenshotURLs: [URL] - let version: String - let versionDate: Date - let versionDescription: String? - let downloadURL: URL - let platformURLs: [PlatformURLFeed]? +// let version: String +// let versionDate: Date +// let versionDescription: String? +// let downloadURL: URL +// let platformURLs: [PlatformURLFeed]? - let tintColor: String? // UIColor? - let isBeta: Bool +// let tintColor: String? // UIColor? +// let isBeta: Bool - // let source: Source? - let appPermissions: [AppPermissionFeed] - let versions: [AppVersionFeed] +// // let source: Source? +// let appPermissions: [AppPermissionFeed] +// let versions: [AppVersionFeed] - enum CodingKeys: String, CodingKey - { - case bundleIdentifier - case developerName - case downloadURL - case iconURL - case isBeta = "beta" - case localizedDescription - case name - case appPermissions - case platformURLs - case screenshotURLs - case size - case subtitle - case tintColor - case version - case versionDate - case versionDescription - case versions - } -} +// enum CodingKeys: String, CodingKey +// { +// case bundleIdentifier +// case developerName +// case downloadURL +// case iconURL +// case isBeta = "beta" +// case localizedDescription +// case name +// case appPermissions +// case platformURLs +// case screenshotURLs +// case size +// case subtitle +// case tintColor +// case version +// case versionDate +// case versionDescription +// case versions +// } +// } -public struct NewsItemFeed: Codable { - let identifier: String - let date: Date +// public struct NewsItemFeed: Codable { +// let identifier: String +// let date: Date - let title: String - let caption: String - let tintColor: String //UIColor - let notify: Bool +// let title: String +// let caption: String +// let tintColor: String //UIColor +// let notify: Bool - let imageURL: URL? - let externalURL: URL? +// let imageURL: URL? +// let externalURL: URL? - let appID: String? +// let appID: String? - private enum CodingKeys: String, CodingKey - { - case identifier - case date - case title - case caption - case tintColor - case imageURL - case externalURL = "url" - case appID - case notify - } -} +// private enum CodingKeys: String, CodingKey +// { +// case identifier +// case date +// case title +// case caption +// case tintColor +// case imageURL +// case externalURL = "url" +// case appID +// case notify +// } +// } -public struct SourceJSON: Codable { - let version: Int? - let name: String - let identifier: String - let sourceURL: URL - let userInfo: [String:String]? //[ALTSourceUserInfoKey:String]? - let apps: [StoreAppFeed] - let news: [NewsItemFeed] +// public struct SourceJSON: Codable { +// let version: Int? +// let name: String +// let identifier: String +// let sourceURL: URL +// let userInfo: [String:String]? //[ALTSourceUserInfoKey:String]? +// let apps: [StoreAppFeed] +// let news: [NewsItemFeed] - enum CodingKeys: String, CodingKey - { - case version - case name - case identifier - case sourceURL - case userInfo - case apps - case news - } - -} +// enum CodingKeys: String, CodingKey +// { +// case version +// case name +// case identifier +// case sourceURL +// case userInfo +// case apps +// case news +// } +// } -public extension Source -{ - // Fallbacks for optional JSON values. + public extension Source + { + // Fallbacks for optional JSON values. - var effectiveIconURL: URL? { - return self.iconURL ?? self.apps.first?.iconURL - } + var effectiveIconURL: URL? { + return self.iconURL ?? self.apps.first?.iconURL + } - var effectiveHeaderImageURL: URL? { - return self.headerImageURL ?? self.effectiveIconURL - } + var effectiveHeaderImageURL: URL? { + return self.headerImageURL ?? self.effectiveIconURL + } - var effectiveTintColor: UIColor? { - return self.tintColor ?? self.apps.first?.tintColor - } + var effectiveTintColor: UIColor? { + return self.tintColor ?? self.apps.first?.tintColor + } - var effectiveFeaturedApps: [StoreApp] { - return self.featuredApps ?? self.apps - } -} + var effectiveFeaturedApps: [StoreApp] { + return self.featuredApps ?? self.apps + } + } @objc(Source) public class Source: BaseEntity, Decodable diff --git a/CodeSigning.xcconfig.sample b/CodeSigning.xcconfig.sample index e0a5f1b0..a1806277 100644 --- a/CodeSigning.xcconfig.sample +++ b/CodeSigning.xcconfig.sample @@ -3,12 +3,16 @@ // https://developer.apple.com/account/#/membership DEVELOPMENT_TEAM = XYZ0123456 +// Set this for dev-local xcode builds +MARKETING_VERSION_SUFFIX = -local + // Prefix of unique bundle IDs registered to you in Apple Developer Portal. // You need to register: // - com.myuniquename.provenance // - com.myuniquename.provenance.spotlight // - com.myuniquename.provenance.topshelf -ORG_IDENTIFIER = com.myuniquename +// Uncomment the folowing and customize it to set the override: +//ORG_IDENTIFIER = com.myuniquename // add team ID to bundle ID for debug builds since these will most likely be installed via Xcode // SideStore will expect the team ID to be at the end of the bundle ID, but this doesn't happen when we install via Xcode diff --git a/Makefile b/Makefile index 76861acc..9247cd85 100755 --- a/Makefile +++ b/Makefile @@ -7,8 +7,6 @@ RUBY := $(shell command -v ruby 2>/dev/null) HOMEBREW := $(shell command -v brew 2>/dev/null) BUNDLER := $(shell command -v bundle 2>/dev/null) -default: help - # Add the following 'help' target to your Makefile # And add help text after each target name starting with '\#\#' # A category can be added with @category diff --git a/update_apps.py b/update_apps.py index 8cfadcb3..f84b2400 100755 --- a/update_apps.py +++ b/update_apps.py @@ -14,11 +14,13 @@ SIZE = os.getenv("SIZE") SHA256 = os.getenv("SHA256") LOCALIZED_DESCRIPTION = os.getenv("LOCALIZED_DESCRIPTION") DOWNLOAD_URL = os.getenv("DOWNLOAD_URL") +# BUNDLE_IDENTIFIER = os.getenv("BUNDLE_IDENTIFIER", SIDESTORE_BUNDLE_ID) BUNDLE_IDENTIFIER = os.getenv("BUNDLE_IDENTIFIER") # Uncomment to debug/test by simulating dummy input locally # VERSION_IPA = os.getenv("VERSION_IPA", "0.0.0") # VERSION_DATE = os.getenv("VERSION_DATE", "2000-12-18T00:00:00Z") +# IS_BETA = os.getenv("IS_BETA", True) # SIZE = int(os.getenv("SIZE", "0")) # Convert to integer # SHA256 = os.getenv("SHA256", "") # LOCALIZED_DESCRIPTION = os.getenv("LOCALIZED_DESCRIPTION", "Invalid Update")