Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
262 changes: 259 additions & 3 deletions assets/Localizable.xcstrings
Original file line number Diff line number Diff line change
Expand Up @@ -129,18 +129,18 @@
}
}
},
"Apps": {
"Available Versions": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Apps"
"value": "Available Versions"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "应用"
"value": "可用版本"
}
}
}
Expand Down Expand Up @@ -193,6 +193,54 @@
}
}
},
"Build Details": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Build Details"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "构建详情"
}
}
}
},
"Build Release": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Build Release"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "构建发布页"
}
}
}
},
"Bundle ID": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Bundle ID"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "包标识符"
}
}
}
},
"Catalog Unavailable": {
"localizations": {
"en": {
Expand Down Expand Up @@ -497,6 +545,38 @@
}
}
},
"Done": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Done"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "完成"
}
}
}
},
"Download Size": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Download Size"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "下载大小"
}
}
}
},
"Every app in the catalog is already installed on this simulator.": {
"localizations": {
"en": {
Expand Down Expand Up @@ -545,6 +625,38 @@
}
}
},
"License": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "License"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "许可证"
}
}
}
},
"License refers to the upstream project’s main license. Some components or resources may use other licenses.": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "License refers to the upstream project’s main license. Some components or resources may use other licenses."
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "许可证指上游项目的主要许可证。部分组件或资源可能使用其他许可证。"
}
}
}
},
"Loading Apps…": {
"localizations": {
"en": {
Expand Down Expand Up @@ -801,6 +913,22 @@
}
}
},
"Published": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Published"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "发布时间"
}
}
}
},
"Published apps will appear here.": {
"localizations": {
"en": {
Expand All @@ -817,6 +945,22 @@
}
}
},
"Recipe Revision": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Recipe Revision"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "构建脚本提交"
}
}
}
},
"Refresh Catalog": {
"localizations": {
"en": {
Expand Down Expand Up @@ -849,6 +993,22 @@
}
}
},
"Requires": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Requires"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "系统要求"
}
}
}
},
"Runtime": {
"localizations": {
"en": {
Expand All @@ -865,6 +1025,22 @@
}
}
},
"SHA-256": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "SHA-256"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "SHA-256"
}
}
}
},
"Search apps": {
"localizations": {
"en": {
Expand Down Expand Up @@ -1025,6 +1201,38 @@
}
}
},
"Source Repository": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Source Repository"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "源代码仓库"
}
}
}
},
"Source Revision": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Source Revision"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "源代码提交"
}
}
}
},
"Start Simulator": {
"localizations": {
"en": {
Expand Down Expand Up @@ -1153,6 +1361,22 @@
}
}
},
"This build requires iOS %@ or later. It may not work on iOS %@.": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "This build requires iOS %@ or later. It may not work on iOS %@."
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "此构建需要 iOS %@ 或更高版本,在 iOS %@ 上可能无法正常运行。"
}
}
}
},
"Try Again": {
"localizations": {
"en": {
Expand Down Expand Up @@ -1233,6 +1457,38 @@
}
}
},
"Version": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Version"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "版本"
}
}
}
},
"View app details and versions": {
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "View app details and versions"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "查看应用详情和版本"
}
}
}
},
"Xcode did not provide a valid developer directory.": {
"localizations": {
"en": {
Expand Down
4 changes: 3 additions & 1 deletion src/AppCatalog.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ struct CatalogApp: Identifiable, Hashable, Sendable {
}
}

struct CatalogVersion: Hashable, Sendable {
struct CatalogVersion: Identifiable, Hashable, Sendable {
let version: String
let minSimulatorOS: String
let sha256: String
Expand All @@ -47,6 +47,8 @@ struct CatalogVersion: Hashable, Sendable {
let recipeRevision: String
let time: Int64

var id: String { version }

func isCompatible(with runtime: String) -> Bool {
guard let minimum = CatalogVersionNumber(minSimulatorOS),
let installed = CatalogVersionNumber(runtime)
Expand Down
8 changes: 8 additions & 0 deletions src/AppConfiguration.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@ enum AppConfiguration {
buildsRepositoryURL.appending(path: "releases/download/latest/index.json")
}

static func releaseURL(appID: String, version: String) -> URL {
buildsRepositoryURL.appending(path: "releases/tag").appending(component: "\(appID)/\(version)")
}

static func commitURL(repository: URL, revision: String) -> URL {
repository.appending(path: "commit").appending(component: revision)
}

static func assetURL(appID: String, version: String, filename: String) -> URL {
buildsRepositoryURL.appending(path: "releases/download")
.appending(component: "\(appID)/\(version)").appending(component: filename)
Expand Down
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ add_executable(SimStore MACOSX_BUNDLE
CatalogStore.swift
CatalogPresentation.swift
CatalogBrowserView.swift
CatalogAppDetailView.swift
SidebarView.swift
NoSimulatorsView.swift
MissingXcodeView.swift
Expand Down
Loading