diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index 3d96702..9358ce0 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -1,8 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Security vulnerability
- url: https://github.com/hideouts-io/iOS-Developer-Toolkit/security/advisories/new
+ url: https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift/security/advisories/new
about: Report vulnerabilities privately. Do not open a public issue.
- name: Questions and usage help
- url: https://github.com/hideouts-io/iOS-Developer-Toolkit/discussions
+ url: https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift/discussions
about: Ask setup, compatibility, and workflow questions in Discussions.
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index aad7383..72c6b67 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -83,7 +83,7 @@ jobs:
- name: Render every page at the default and minimum window sizes
run: |
scripts/check-layout.sh \
- "$RUNNER_TEMP/dd/Build/Products/Debug/iOS Developer Toolkit.app/Contents/MacOS/iOS Developer Toolkit" \
+ "$RUNNER_TEMP/dd/Build/Products/Debug/iOS Developer Toolkit (Swift).app/Contents/MacOS/iOS Developer Toolkit (Swift)" \
"$RUNNER_TEMP/layout"
- uses: actions/upload-artifact@v7
if: always()
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index d1c6d47..686f94c 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -53,8 +53,8 @@ jobs:
run: |
sha256sum -c SHA256SUMS.txt
version="${GITHUB_REF_NAME#v}"
- zip="release-assets/iOS-Developer-Toolkit-$version-macOS-universal.zip"
- sbom="release-assets/iOS-Developer-Toolkit-$version.spdx.json"
+ zip="release-assets/iOS-Developer-Toolkit-Swift-$version-macOS-universal.zip"
+ sbom="release-assets/iOS-Developer-Toolkit-Swift-$version.spdx.json"
test -f "../$zip" && test -f "../$sbom"
echo "zip=$zip" >> "$GITHUB_OUTPUT"
echo "sbom=$sbom" >> "$GITHUB_OUTPUT"
diff --git a/.gitignore b/.gitignore
index 1d95755..94663ea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,6 +22,7 @@ mvt-analysis-*/
location-logs/
Location Logs/
iOS Developer Toolkit Location Logs/
+iOS Developer Toolkit (Swift) Location Logs/
Live Logs/
Generated Routes/
location-events.jsonl
diff --git a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_1024.png b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_1024.png
index 25642c3..6909a19 100644
Binary files a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_1024.png and b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_1024.png differ
diff --git a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_128.png b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_128.png
index ebd7394..dfb353d 100644
Binary files a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_128.png and b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_128.png differ
diff --git a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_16.png b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_16.png
index 9861ea0..f388968 100644
Binary files a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_16.png and b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_16.png differ
diff --git a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_256.png b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_256.png
index a34da70..9d0ef2b 100644
Binary files a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_256.png and b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_256.png differ
diff --git a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_32.png b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_32.png
index 3c5ada3..b983480 100644
Binary files a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_32.png and b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_32.png differ
diff --git a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_512.png b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_512.png
index 18361f5..f813e2b 100644
Binary files a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_512.png and b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_512.png differ
diff --git a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_64.png b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_64.png
index d7866ba..c27c73a 100644
Binary files a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_64.png and b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_64.png differ
diff --git a/App/iOSDeveloperToolkit/Assets.xcassets/Logo.imageset/logo.png b/App/iOSDeveloperToolkit/Assets.xcassets/Logo.imageset/logo.png
index bbc8054..1c84fe7 100644
Binary files a/App/iOSDeveloperToolkit/Assets.xcassets/Logo.imageset/logo.png and b/App/iOSDeveloperToolkit/Assets.xcassets/Logo.imageset/logo.png differ
diff --git a/App/iOSDeveloperToolkit/Info.plist b/App/iOSDeveloperToolkit/Info.plist
index 0fd848c..b5e5f0b 100644
--- a/App/iOSDeveloperToolkit/Info.plist
+++ b/App/iOSDeveloperToolkit/Info.plist
@@ -5,7 +5,7 @@
CFBundleDevelopmentRegion
en
CFBundleDisplayName
- iOS Developer Toolkit
+ iOS Developer Toolkit (Swift)
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
diff --git a/App/iOSDeveloperToolkit/Model/FeatureModels.swift b/App/iOSDeveloperToolkit/Model/FeatureModels.swift
index e0fb7ab..860db24 100644
--- a/App/iOSDeveloperToolkit/Model/FeatureModels.swift
+++ b/App/iOSDeveloperToolkit/Model/FeatureModels.swift
@@ -177,7 +177,7 @@ final class InstallModel {
@Observable
@MainActor
final class BackupModel {
- var destination = URL.documents.appendingPathComponent("iOS Developer Toolkit Backups")
+ var destination = URL.documents.appendingPathComponent("\(ToolkitVersion.applicationName) Backups")
var forceFullBackup = false
var requireEncryption = true
var encryptionEnabled: Bool?
@@ -265,7 +265,7 @@ final class BackupModel {
@Observable
@MainActor
final class EvidenceModel {
- var outputRoot = URL.documents.appendingPathComponent("iOS Developer Toolkit Cases")
+ var outputRoot = URL.documents.appendingPathComponent("\(ToolkitVersion.applicationName) Cases")
var options = CollectionOptions()
var caseTitle = ""
var casePurpose = ""
diff --git a/App/iOSDeveloperToolkit/Model/LocationModel.swift b/App/iOSDeveloperToolkit/Model/LocationModel.swift
index b14b8a9..c3c40af 100644
--- a/App/iOSDeveloperToolkit/Model/LocationModel.swift
+++ b/App/iOSDeveloperToolkit/Model/LocationModel.swift
@@ -32,7 +32,7 @@ final class LocationModel {
var lastSimulatedTarget: DeviceTarget?
private var playbackTask: Task?
- let evidenceDirectory = FileManager.default.homeDirectoryForCurrentUser.appendingPathComponent("Documents/iOS Developer Toolkit Location Logs")
+ let evidenceDirectory = FileManager.default.homeDirectoryForCurrentUser.appendingPathComponent("Documents/\(ToolkitVersion.applicationName) Location Logs")
init() {
// Screenshot mode shows sample places so personal saved places never appear in docs.
diff --git a/App/iOSDeveloperToolkit/Model/ScreenshotHarness.swift b/App/iOSDeveloperToolkit/Model/ScreenshotHarness.swift
index 36101d6..086aa51 100644
--- a/App/iOSDeveloperToolkit/Model/ScreenshotHarness.swift
+++ b/App/iOSDeveloperToolkit/Model/ScreenshotHarness.swift
@@ -5,7 +5,7 @@ import ToolkitFeatures
/// Renders the app's own window for documentation and GUI verification:
///
-/// "iOS Developer Toolkit" -capture-screenshots
+/// "iOS Developer Toolkit (Swift)" -capture-screenshots
/// [-demo-mode] [-ui-testing] [-window-size WxH] [-only overview,apps]
/// [-populate-demo YES] [-select-booted-simulator YES] [-start-simulator-log YES]
/// [-scroll-fraction 0.0–1.0] [-show-sheet reconnect|shortcuts|advanced] [-select-physical-device YES]
diff --git a/App/iOSDeveloperToolkit/iOSDeveloperToolkitApp.swift b/App/iOSDeveloperToolkit/iOSDeveloperToolkitApp.swift
index 6737499..5748364 100644
--- a/App/iOSDeveloperToolkit/iOSDeveloperToolkitApp.swift
+++ b/App/iOSDeveloperToolkit/iOSDeveloperToolkitApp.swift
@@ -8,7 +8,7 @@ struct IOSDeveloperToolkitApp: App {
@NSApplicationDelegateAdaptor(AppDelegate.self) private var delegate
var body: some Scene {
- WindowGroup("iOS Developer Toolkit", id: "main") {
+ WindowGroup(ToolkitVersion.applicationName, id: "main") {
ContentView()
.environment(model)
.frame(minWidth: 900, minHeight: 560)
diff --git a/CITATION.cff b/CITATION.cff
index f418596..0aef5cb 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -4,8 +4,8 @@ title: "iOS Developer Toolkit"
type: software
authors:
- name: "hideouts-io"
-repository-code: "https://github.com/hideouts-io/iOS-Developer-Toolkit"
-url: "https://github.com/hideouts-io/iOS-Developer-Toolkit/releases/latest"
+repository-code: "https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift"
+url: "https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift/releases/latest"
license: MIT
version: 1.0.0
abstract: "A native Swift/SwiftUI macOS app for iPhone, iPad, and simulator development and diagnostics: device readiness, live Unified and classic logs, location simulation, app installation, encrypted backups, packet capture, and hashed evidence collection."
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index be59498..9891001 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -36,7 +36,7 @@ This Code of Conduct applies within project spaces and when an individual offici
## Enforcement
-Report abusive, harassing, or otherwise unacceptable behavior privately through the repository's [private report form](https://github.com/hideouts-io/iOS-Developer-Toolkit/security/advisories/new) and begin the summary with `Code of Conduct`. Reports will be reviewed by the project maintainer. The maintainer will respect the reporter's privacy and safety.
+Report abusive, harassing, or otherwise unacceptable behavior privately through the repository's [private report form](https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift/security/advisories/new) and begin the summary with `Code of Conduct`. Reports will be reviewed by the project maintainer. The maintainer will respect the reporter's privacy and safety.
Enforcement may include a private warning, removal of content, a temporary participation restriction, or a permanent ban, depending on impact and pattern of behavior.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 98293cb..51a99ea 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -22,7 +22,7 @@ questions, and private vulnerability reporting for security issues.
Requirements: macOS 14 or later and Xcode 16 or later (Swift 6).
```bash
-git clone https://github.com/hideouts-io/iOS-Developer-Toolkit.git
+git clone https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift.git
cd iOS-Developer-Toolkit
swift build
swift test
@@ -71,7 +71,7 @@ Also, when relevant:
automation) and render every page at the default and minimum sizes, as CI does:
```bash
- scripts/check-layout.sh "…/iOS Developer Toolkit.app/Contents/MacOS/iOS Developer Toolkit" /tmp/layout
+ scripts/check-layout.sh "…/iOS Developer Toolkit (Swift).app/Contents/MacOS/iOS Developer Toolkit (Swift)" /tmp/layout
```
It fails if any page is squeezed, overflows the window, or does not render; the PNGs are in
diff --git a/MIGRATION.md b/MIGRATION.md
index 577a693..4addde2 100644
--- a/MIGRATION.md
+++ b/MIGRATION.md
@@ -9,8 +9,9 @@ itself) · 🟡 migrated and tested against the protocol-accurate fake device or
needs physical-device verification · 🔁 replaced by a different Apple-supported mechanism · ❌ not
migrated (see §6) or removed
-> The Python app is not discontinued: it continues as the 0.x line on the `python` branch (see
-> the README). This document covers how its features map to the Swift app (1.x) on `main`.
+> The Python app is not discontinued: it continues as **iOS Developer Toolkit** in
+> [hideouts-io/iOS-Developer-Toolkit](https://github.com/hideouts-io/iOS-Developer-Toolkit). This document covers how its features map to
+> this Swift app, **iOS Developer Toolkit (Swift)**.
## 1. Audit of the Python application (v0.3.4)
diff --git a/README.md b/README.md
index 3e745fe..2f14e42 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,13 @@
-# iOS Developer Toolkit
+# iOS Developer Toolkit (Swift)
-
+
**A native macOS app for working with iPhones, iPads, and simulators — device information, live logs, location simulation, app installs, backups, packet capture, readiness checks, and documented evidence collection.**
-[](https://github.com/hideouts-io/iOS-Developer-Toolkit/actions/workflows/ci.yml)
-[](https://github.com/hideouts-io/iOS-Developer-Toolkit/releases/latest)
+[](https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift/actions/workflows/ci.yml)
+[](https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift/releases/latest)


[](LICENSE)
@@ -114,8 +114,8 @@ The Command Line Tools alone are not enough for the Xcode column: `devicectl`, `
### Download a release
-1. Download `iOS-Developer-Toolkit-VERSION-macOS-universal.zip` and `SHA256SUMS.txt` from the
- [latest release](https://github.com/hideouts-io/iOS-Developer-Toolkit/releases/latest).
+1. Download `iOS-Developer-Toolkit-Swift-VERSION-macOS-universal.zip` and `SHA256SUMS.txt` from the
+ [latest release](https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift/releases/latest).
2. Verify the download:
```bash
@@ -125,16 +125,16 @@ The Command Line Tools alone are not enough for the Xcode column: `devicectl`, `
Optionally verify GitHub's build attestation:
```bash
- gh attestation verify iOS-Developer-Toolkit-VERSION-macOS-universal.zip --repo hideouts-io/iOS-Developer-Toolkit
+ gh attestation verify iOS-Developer-Toolkit-Swift-VERSION-macOS-universal.zip --repo hideouts-io/iOS-Developer-Toolkit-Swift
```
-3. Unzip it and move **iOS Developer Toolkit.app** to `/Applications`.
+3. Unzip it and move **iOS Developer Toolkit (Swift).app** to `/Applications`.
4. Release builds are ad-hoc signed and not notarized, so macOS asks for confirmation the first
time. Control-click the app, choose **Open**, and confirm. If there is no Open button, go to
**System Settings › Privacy & Security** and choose **Open Anyway**. Do not disable Gatekeeper.
Nothing else needs to be installed. The release also contains `idt`, the command-line tool, at
-`iOS Developer Toolkit.app/Contents/MacOS/idt`.
+`iOS Developer Toolkit (Swift).app/Contents/MacOS/idt`.
### Build it yourself
@@ -170,7 +170,7 @@ No device handy? Turn on **Device › Demo Mode** to explore every workspace wit
- **Install App** — inspect an `.ipa` (or choose a simulator `.app`), see whether the device is in
the provisioning profile, then install.
- **Location Lab** — coordinates, map, saved places (stored only on this Mac), routes, GPX playback.
- Location events are appended to `~/Documents/iOS Developer Toolkit Location Logs/location-events.jsonl`.
+ Location events are appended to `~/Documents/iOS Developer Toolkit (Swift) Location Logs/location-events.jsonl`.
- **Live Logs** — several concurrent streams; pop out any stream into its own window.
- **Actions** — the guided action catalog and Advanced Mode.
- **Backup** — encryption status and setup, full or incremental backups.
@@ -300,7 +300,7 @@ More detail: [docs/troubleshooting.md](docs/troubleshooting.md).
Requirements: macOS 14+, Xcode 16 or later (Swift 6).
```bash
-git clone https://github.com/hideouts-io/iOS-Developer-Toolkit.git
+git clone https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift.git
cd iOS-Developer-Toolkit
swift test # unit and integration tests
@@ -326,7 +326,7 @@ xcodebuild -project iOSDeveloperToolkit.xcodeproj -scheme iOSDeveloperToolkit \
Documentation screenshots are produced by the app itself:
```bash
-"iOS Developer Toolkit.app/Contents/MacOS/iOS Developer Toolkit" \
+"iOS Developer Toolkit (Swift).app/Contents/MacOS/iOS Developer Toolkit (Swift)" \
-demo-mode YES -populate-demo YES -window-size 1180x700 -capture-screenshots ~/Desktop/shots
```
@@ -338,18 +338,17 @@ See [docs/architecture.md](docs/architecture.md).
## Project status and limitations
-Version 1.0 is a complete rewrite of the earlier Python/PySide6 app (0.3.x), which depended on
+Version 1.0 is a native rewrite of the Python/PySide6 app ([iOS Developer Toolkit](https://github.com/hideouts-io/iOS-Developer-Toolkit), 0.3.x), which depends on
`pymobiledevice3`. See [MIGRATION.md](MIGRATION.md) for the feature-by-feature mapping. Workspace
profiles exported by 0.3.x can be imported in **Settings › Profiles**; the preview explains how each
setting carries over.
-### The Python app (0.x)
+### The Python app
-The Python/PySide6 app is still maintained, as a separate line: it is developed on the
-[`python`](https://github.com/hideouts-io/iOS-Developer-Toolkit/tree/python) branch and released as
-`v0.x` ([0.x releases](https://github.com/hideouts-io/iOS-Developer-Toolkit/releases?q=v0.&expanded=true),
-with separate Apple silicon and Intel builds). It uses `pymobiledevice3` and Python; this app (1.x)
-needs neither. Workspace profiles move between them: 1.x imports profiles exported by 0.x.
+The Python/PySide6 app, **iOS Developer Toolkit**, is maintained separately in
+[hideouts-io/iOS-Developer-Toolkit](https://github.com/hideouts-io/iOS-Developer-Toolkit), with its releases. It uses `pymobiledevice3` and
+Python; this app needs neither. The two install side by side and keep their data in separate
+folders, and this app imports workspace profiles exported by the Python app.
- The native lockdown services (logs, packet capture, backup, diagnostics, app installation over
USB, developer-image checking and mounting including Apple personalization) are tested end to
diff --git a/SECURITY.md b/SECURITY.md
index 40cce93..4ef4bed 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -10,7 +10,7 @@
## Report a vulnerability privately
-Use [GitHub private vulnerability reporting](https://github.com/hideouts-io/iOS-Developer-Toolkit/security/advisories/new).
+Use [GitHub private vulnerability reporting](https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift/security/advisories/new).
Do not disclose a suspected vulnerability in a public issue, discussion, pull request, log,
screenshot, or evidence archive.
diff --git a/SOURCE_AVAILABILITY.md b/SOURCE_AVAILABILITY.md
index 5328e75..b6153c5 100644
--- a/SOURCE_AVAILABILITY.md
+++ b/SOURCE_AVAILABILITY.md
@@ -1,12 +1,12 @@
# Source availability
Every published release of iOS Developer Toolkit is built from a Git tag in
-[this public repository](https://github.com/hideouts-io/iOS-Developer-Toolkit) by the release
+[this public repository](https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift) by the release
workflow, with a GitHub build-provenance attestation that links the archive to that workflow run
and commit. GitHub provides source archives for each tag, or:
```bash
-git clone --branch vVERSION --depth 1 https://github.com/hideouts-io/iOS-Developer-Toolkit.git
+git clone --branch vVERSION --depth 1 https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift.git
```
The app is written in Swift. Its third-party dependencies are Swift packages resolved from their
diff --git a/SUPPORT.md b/SUPPORT.md
index 5e453f6..d132b1d 100644
--- a/SUPPORT.md
+++ b/SUPPORT.md
@@ -1,6 +1,6 @@
# Support
-Use [GitHub Discussions](https://github.com/hideouts-io/iOS-Developer-Toolkit/discussions) for
+Use [GitHub Discussions](https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift/discussions) for
installation, pairing, Developer Mode, developer services, compatibility, and workflow questions.
Before asking:
diff --git a/Sources/DeviceKit/Services/MobileBackup2.swift b/Sources/DeviceKit/Services/MobileBackup2.swift
index d27196e..9e742f6 100644
--- a/Sources/DeviceKit/Services/MobileBackup2.swift
+++ b/Sources/DeviceKit/Services/MobileBackup2.swift
@@ -125,7 +125,7 @@ public enum MobileBackup2 {
"GUID": .string(UUID().uuidString.replacingOccurrences(of: "-", with: "")),
"Last Backup Date": .date(Date()),
"iTunes Version": "12.13.0",
- "Backup Tool": "iOS Developer Toolkit",
+ "Backup Tool": .string(ToolkitVersion.applicationName),
]
let mapping = [
"Device Name": "DeviceName", "Display Name": "DeviceName", "Product Type": "ProductType",
diff --git a/Sources/ToolkitCore/ToolkitVersion.swift b/Sources/ToolkitCore/ToolkitVersion.swift
index 8e917f6..fcc8cd5 100644
--- a/Sources/ToolkitCore/ToolkitVersion.swift
+++ b/Sources/ToolkitCore/ToolkitVersion.swift
@@ -4,5 +4,7 @@ import Foundation
/// the app's Info.plist.
public enum ToolkitVersion {
public static let current = "1.0.0"
- public static let applicationName = "iOS Developer Toolkit"
+ /// The app's name. It also names its folders (caches, Application Support, and the default
+ /// Documents folders), which keeps them apart from the Python app's "iOS Developer Toolkit" folders.
+ public static let applicationName = "iOS Developer Toolkit (Swift)"
}
diff --git a/Sources/ToolkitFeatures/Evidence/CaseWorkflow.swift b/Sources/ToolkitFeatures/Evidence/CaseWorkflow.swift
index 670ea5d..6b79989 100644
--- a/Sources/ToolkitFeatures/Evidence/CaseWorkflow.swift
+++ b/Sources/ToolkitFeatures/Evidence/CaseWorkflow.swift
@@ -60,7 +60,7 @@ public enum CaseWorkflow {
let folder = try createCaseFolder(in: root, target: target, at: now)
let document: [String: Any] = [
"schema_version": 2,
- "application": "iOS Developer Toolkit",
+ "application": ToolkitVersion.applicationName,
"case": try JSONSerialization.jsonObject(with: JSONOutput.encode(intake)),
"limitations": [
"The intake records the operator acknowledgement; it does not establish chain of custody.",
diff --git a/Sources/ToolkitFeatures/Evidence/EvidenceCollector.swift b/Sources/ToolkitFeatures/Evidence/EvidenceCollector.swift
index 973ef34..cb0bbd6 100644
--- a/Sources/ToolkitFeatures/Evidence/EvidenceCollector.swift
+++ b/Sources/ToolkitFeatures/Evidence/EvidenceCollector.swift
@@ -79,7 +79,7 @@ public enum CollectionOutcome: String, Codable, Sendable {
public struct CollectionManifest: Codable, Sendable {
public var schemaVersion = 2
- public var application = "iOS Developer Toolkit"
+ public var application = ToolkitVersion.applicationName
public var applicationVersion: String
public var targetUDID: String
public var targetName: String
diff --git a/Sources/ToolkitFeatures/LiveLogs/LogCapture.swift b/Sources/ToolkitFeatures/LiveLogs/LogCapture.swift
index bd04381..a7cacd6 100644
--- a/Sources/ToolkitFeatures/LiveLogs/LogCapture.swift
+++ b/Sources/ToolkitFeatures/LiveLogs/LogCapture.swift
@@ -172,7 +172,7 @@ public actor LogCapture {
private var closed = false
public static func defaultDirectory(home: URL = FileManager.default.homeDirectoryForCurrentUser) -> URL {
- home.appendingPathComponent("Library/Caches/iOS Developer Toolkit/Live Logs")
+ home.appendingPathComponent("Library/Caches/\(ToolkitVersion.applicationName)/Live Logs")
}
public init(kind: LogStreamKind, target: DeviceTarget, directory: URL = LogCapture.defaultDirectory(), now: Date = Date()) throws {
diff --git a/Sources/ToolkitFeatures/Location/LocationLab.swift b/Sources/ToolkitFeatures/Location/LocationLab.swift
index 0c61115..23b53f5 100644
--- a/Sources/ToolkitFeatures/Location/LocationLab.swift
+++ b/Sources/ToolkitFeatures/Location/LocationLab.swift
@@ -171,7 +171,7 @@ public enum LocationLab {
formatter.formatOptions = [.withInternetDateTime]
var lines = [
#""#,
- #""#,
+ #""#,
" Toolkit QA route",
]
for (index, point) in points.enumerated() {
@@ -224,7 +224,7 @@ public enum LocationLab {
// MARK: Saved locations (same JSON schema as earlier releases)
public static func savedLocationsURL(home: URL = FileManager.default.homeDirectoryForCurrentUser) -> URL {
- home.appendingPathComponent("Library/Application Support/iOS Developer Toolkit/locations.json")
+ home.appendingPathComponent("Library/Application Support/\(ToolkitVersion.applicationName)/locations.json")
}
public static func validateLocationName(_ name: String) throws -> String {
diff --git a/Sources/ToolkitFeatures/Readiness/CompatibilityStore.swift b/Sources/ToolkitFeatures/Readiness/CompatibilityStore.swift
index 4283dee..4a87792 100644
--- a/Sources/ToolkitFeatures/Readiness/CompatibilityStore.swift
+++ b/Sources/ToolkitFeatures/Readiness/CompatibilityStore.swift
@@ -38,11 +38,11 @@ public struct CompatibilityObservation: Codable, Sendable, Hashable, Identifiabl
}
}
-/// Append-only local history at ~/Library/Application Support/iOS Developer Toolkit/Compatibility.
+/// Append-only local history at ~/Library/Application Support//Compatibility.
public struct CompatibilityStore: Sendable {
public let url: URL
- public init(url: URL = FileManager.default.homeDirectoryForCurrentUser.appendingPathComponent("Library/Application Support/iOS Developer Toolkit/Compatibility/observations-v2.jsonl")) {
+ public init(url: URL = FileManager.default.homeDirectoryForCurrentUser.appendingPathComponent("Library/Application Support/\(ToolkitVersion.applicationName)/Compatibility/observations-v2.jsonl")) {
self.url = url
}
@@ -101,7 +101,7 @@ public struct CompatibilityStore: Sendable {
var lines = [
"# Real-device readiness report",
"",
- "Generated \(ISO8601.string(Date())) by iOS Developer Toolkit \(ToolkitVersion.current). Observed results only; untested devices and builds are not predicted. Names, identifiers, and fingerprints are omitted.",
+ "Generated \(ISO8601.string(Date())) by \(ToolkitVersion.applicationName) \(ToolkitVersion.current). Observed results only; untested devices and builds are not predicted. Names, identifiers, and fingerprints are omitted.",
"",
"| Model | iOS | Build | Connection | " + rows.map(\.title).joined(separator: " | ") + " |",
"|" + String(repeating: "---|", count: 4 + rows.count),
diff --git a/Sources/ToolkitFeatures/Shared/SupportBundle.swift b/Sources/ToolkitFeatures/Shared/SupportBundle.swift
index cde05af..b089693 100644
--- a/Sources/ToolkitFeatures/Shared/SupportBundle.swift
+++ b/Sources/ToolkitFeatures/Shared/SupportBundle.swift
@@ -32,7 +32,7 @@ public struct SupportBundleContext: Sendable {
/// Builds a local, reviewable ZIP for bug reports. Nothing is uploaded.
public enum SupportBundle {
public static let readme = """
- iOS Developer Toolkit sanitized support bundle
+ iOS Developer Toolkit (Swift) sanitized support bundle
This archive was generated locally and is never uploaded by the application. It contains app and
macOS version information, aggregate readiness states, sanitized status summaries, the toolchain
diff --git a/Sources/idt/IDT.swift b/Sources/idt/IDT.swift
index 050fdba..66bf326 100644
--- a/Sources/idt/IDT.swift
+++ b/Sources/idt/IDT.swift
@@ -8,7 +8,7 @@ import ToolkitFeatures
struct IDT: AsyncParsableCommand {
static let configuration = CommandConfiguration(
commandName: "idt",
- abstract: "iOS Developer Toolkit command-line tools.",
+ abstract: "iOS Developer Toolkit (Swift) command-line tools.",
discussion: "Device identifiers are always explicit: commands that touch a device require --udid.",
version: ToolkitVersion.current,
subcommands: [Devices.self, Collect.self, InspectIPA.self, Readiness.self, Toolchain.self, DDI.self]
diff --git a/docs/release-verification.md b/docs/release-verification.md
index 323337b..66b0380 100644
--- a/docs/release-verification.md
+++ b/docs/release-verification.md
@@ -7,9 +7,9 @@ a GitHub-hosted macOS runner:
| File | Contents |
|---|---|
-| `iOS-Developer-Toolkit-VERSION-macOS-universal.zip` | The app (arm64 + x86_64), ad-hoc signed with the hardened runtime, with `idt` in `Contents/MacOS` and dependency licenses in `Contents/Resources/Licenses` |
+| `iOS-Developer-Toolkit-Swift-VERSION-macOS-universal.zip` | The app (arm64 + x86_64), ad-hoc signed with the hardened runtime, with `idt` in `Contents/MacOS` and dependency licenses in `Contents/Resources/Licenses` |
| `SHA256SUMS.txt` | SHA-256 of every release file |
-| `iOS-Developer-Toolkit-VERSION.spdx.json` | SPDX 2.3 SBOM of the Swift package dependencies, generated from `Package.resolved` |
+| `iOS-Developer-Toolkit-Swift-VERSION.spdx.json` | SPDX 2.3 SBOM of the Swift package dependencies, generated from `Package.resolved` |
GitHub build-provenance and SBOM attestations are published for the ZIP. The app is **not**
notarized by Apple.
@@ -18,15 +18,15 @@ notarized by Apple.
```bash
shasum -a 256 -c SHA256SUMS.txt --ignore-missing
-gh attestation verify iOS-Developer-Toolkit-VERSION-macOS-universal.zip --repo hideouts-io/iOS-Developer-Toolkit
+gh attestation verify iOS-Developer-Toolkit-Swift-VERSION-macOS-universal.zip --repo hideouts-io/iOS-Developer-Toolkit-Swift
```
After unzipping:
```bash
-codesign --verify --deep --strict --verbose=2 "iOS Developer Toolkit.app"
-codesign --display --verbose=2 "iOS Developer Toolkit.app" # expect: Signature=adhoc, flags=0x10002(adhoc,runtime)
-lipo -archs "iOS Developer Toolkit.app/Contents/MacOS/iOS Developer Toolkit" # expect: x86_64 arm64
+codesign --verify --deep --strict --verbose=2 "iOS Developer Toolkit (Swift).app"
+codesign --display --verbose=2 "iOS Developer Toolkit (Swift).app" # expect: Signature=adhoc, flags=0x10002(adhoc,runtime)
+lipo -archs "iOS Developer Toolkit (Swift).app/Contents/MacOS/iOS Developer Toolkit (Swift)" # expect: x86_64 arm64
```
Then open the app with Control-click › **Open** (or **Open Anyway** in *System Settings › Privacy &
diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md
index de79c76..63aa26e 100644
--- a/docs/troubleshooting.md
+++ b/docs/troubleshooting.md
@@ -46,5 +46,5 @@ the technical details are in **Help › Diagnostic Log**.
log show --last 10m --predicate 'subsystem == "io.hideouts.iOSDeveloperToolkit"' --info
```
-Ask in [GitHub Discussions](https://github.com/hideouts-io/iOS-Developer-Toolkit/discussions)
+Ask in [GitHub Discussions](https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift/discussions)
and follow [SUPPORT.md](../SUPPORT.md) before sharing any output.
diff --git a/iOSDeveloperToolkit.xcodeproj/project.pbxproj b/iOSDeveloperToolkit.xcodeproj/project.pbxproj
index 3e9ad4b..c34352c 100644
--- a/iOSDeveloperToolkit.xcodeproj/project.pbxproj
+++ b/iOSDeveloperToolkit.xcodeproj/project.pbxproj
@@ -366,7 +366,7 @@
"ONLY_ACTIVE_ARCH[config=Debug]" = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.hideouts.iOSDeveloperToolkit;
PRODUCT_MODULE_NAME = iOSDeveloperToolkitApp;
- PRODUCT_NAME = "iOS Developer Toolkit";
+ PRODUCT_NAME = "iOS Developer Toolkit (Swift)";
SDKROOT = macosx;
SWIFT_TREAT_WARNINGS_AS_ERRORS = YES;
};
@@ -392,7 +392,7 @@
"ONLY_ACTIVE_ARCH[config=Debug]" = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.hideouts.iOSDeveloperToolkit;
PRODUCT_MODULE_NAME = iOSDeveloperToolkitApp;
- PRODUCT_NAME = "iOS Developer Toolkit";
+ PRODUCT_NAME = "iOS Developer Toolkit (Swift)";
SDKROOT = macosx;
SWIFT_TREAT_WARNINGS_AS_ERRORS = YES;
};
diff --git a/project.yml b/project.yml
index 961cb44..a5e963d 100644
--- a/project.yml
+++ b/project.yml
@@ -35,7 +35,7 @@ targets:
product: ToolkitFeatures
settings:
base:
- PRODUCT_NAME: iOS Developer Toolkit
+ PRODUCT_NAME: "iOS Developer Toolkit (Swift)"
PRODUCT_MODULE_NAME: iOSDeveloperToolkitApp
PRODUCT_BUNDLE_IDENTIFIER: io.hideouts.iOSDeveloperToolkit
INFOPLIST_FILE: App/iOSDeveloperToolkit/Info.plist
diff --git a/scripts/build-release.sh b/scripts/build-release.sh
index ebf7c36..921a124 100755
--- a/scripts/build-release.sh
+++ b/scripts/build-release.sh
@@ -8,12 +8,12 @@
# other OUTPUT_DIR must be empty or absent.
#
# Produces, in OUTPUT_DIR:
-# iOS-Developer-Toolkit-VERSION-macOS-universal.zip the app (arm64 + x86_64), ad-hoc signed
+# iOS-Developer-Toolkit-Swift-VERSION-macOS-universal.zip the app (arm64 + x86_64), ad-hoc signed
# with the hardened runtime; idt is at
# Contents/MacOS/idt and dependency licenses,
# notices, and the SBOM are in
# Contents/Resources/Licenses
-# iOS-Developer-Toolkit-VERSION.spdx.json SPDX 2.3 SBOM from Package.resolved
+# iOS-Developer-Toolkit-Swift-VERSION.spdx.json SPDX 2.3 SBOM from Package.resolved
# SHA256SUMS.txt checksums of both files
set -euo pipefail
@@ -50,7 +50,7 @@ CACHE="$ROOT/build-output/release-cache"
WORK="$(mktemp -d "${TMPDIR:-/tmp}/idt-release.XXXXXX")"
trap 'rm -rf "$WORK"' EXIT
-NAME="iOS-Developer-Toolkit-$VERSION"
+NAME="iOS-Developer-Toolkit-Swift-$VERSION"
ZIP="$OUT/$NAME-macOS-universal.zip"
SBOM="$OUT/$NAME.spdx.json"
ENTITLEMENTS="App/iOSDeveloperToolkit/iOSDeveloperToolkit.entitlements"
@@ -63,7 +63,7 @@ xcodebuild -project iOSDeveloperToolkit.xcodeproj -scheme iOSDeveloperToolkit \
-derivedDataPath "$CACHE/DerivedData" -archivePath "$WORK/app.xcarchive" \
ARCHS="arm64 x86_64" ONLY_ACTIVE_ARCH=NO \
-quiet archive
-APP="$WORK/app.xcarchive/Products/Applications/iOS Developer Toolkit.app"
+APP="$WORK/app.xcarchive/Products/Applications/iOS Developer Toolkit (Swift).app"
[[ -d "$APP" ]] || fail "the archive does not contain the app"
step "Building idt (arm64 + x86_64, release)"
@@ -105,7 +105,7 @@ verify_app() {
local app="$1"
codesign --verify --deep --strict "$app" || fail "codesign verification failed for $app"
local details
- for binary in "$app/Contents/MacOS/iOS Developer Toolkit" "$app/Contents/MacOS/idt"; do
+ for binary in "$app/Contents/MacOS/iOS Developer Toolkit (Swift)" "$app/Contents/MacOS/idt"; do
details="$(codesign --display --verbose=2 "$binary" 2>&1)"
grep -q 'Signature=adhoc' <<<"$details" || fail "$(basename "$binary") is not ad-hoc signed"
grep -Eq 'flags=0x[0-9a-f]+\(.*runtime' <<<"$details" || fail "$(basename "$binary") lacks the hardened runtime"
@@ -136,7 +136,7 @@ ditto -c -k --sequesterRsrc --keepParent "$APP" "$ZIP"
step "Verifying the ZIP"
mkdir "$WORK/unzipped"
ditto -x -k "$ZIP" "$WORK/unzipped"
-verify_app "$WORK/unzipped/iOS Developer Toolkit.app"
+verify_app "$WORK/unzipped/iOS Developer Toolkit (Swift).app"
(cd "$OUT" && shasum -a 256 -c SHA256SUMS.txt)
step "Done: $OUT"
diff --git a/scripts/generate-sbom.swift b/scripts/generate-sbom.swift
index 873c27b..8b10d53 100644
--- a/scripts/generate-sbom.swift
+++ b/scripts/generate-sbom.swift
@@ -73,7 +73,7 @@ var packages: [[String: Any]] = [[
"SPDXID": appID,
"name": "iOS Developer Toolkit",
"versionInfo": version,
- "downloadLocation": "git+https://github.com/hideouts-io/iOS-Developer-Toolkit.git@\(commit)",
+ "downloadLocation": "git+https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift.git@\(commit)",
"licenseConcluded": "MIT",
"licenseDeclared": "MIT",
"copyrightText": "Copyright (c) 2026 hideouts-io",
@@ -114,7 +114,7 @@ let document: [String: Any] = [
"dataLicense": "CC0-1.0",
"SPDXID": "SPDXRef-DOCUMENT",
"name": "iOS-Developer-Toolkit-\(version)",
- "documentNamespace": "https://github.com/hideouts-io/iOS-Developer-Toolkit/spdx/\(version)/\(commit)",
+ "documentNamespace": "https://github.com/hideouts-io/iOS-Developer-Toolkit-Swift/spdx/\(version)/\(commit)",
"creationInfo": [
"created": formatter.string(from: Date()),
"creators": ["Tool: scripts/generate-sbom.swift", "Organization: hideouts-io"],