/// [-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..45752ef 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# iOS Developer Toolkit
+# iOS Developer Toolkit (Swift)
@@ -6,8 +6,8 @@
**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"],
From 56378df7f3d3dbcfbc13b7fa955ef925a6b5c077 Mon Sep 17 00:00:00 2001
From: hideouts-io <83608068+hideouts-io@users.noreply.github.com>
Date: Mon, 28 Sep 2026 20:51:42 -0700
Subject: [PATCH 2/3] Give iOS Developer Toolkit (Swift) its own icon
The badge gains a SWIFT sub-label and loses the Apple logo on the phone
screen. The black disc is now fully opaque (the previous artwork had
partly transparent patches that showed as grey blotches on light
backgrounds); the corners stay transparent. Used for the app icon at
every size and for the README logo.
hideouts.io
---
.../AppIcon.appiconset/icon_1024.png | Bin 813128 -> 466274 bytes
.../AppIcon.appiconset/icon_128.png | Bin 18062 -> 15020 bytes
.../AppIcon.appiconset/icon_16.png | Bin 978 -> 1412 bytes
.../AppIcon.appiconset/icon_256.png | Bin 62747 -> 43601 bytes
.../AppIcon.appiconset/icon_32.png | Bin 2488 -> 2798 bytes
.../AppIcon.appiconset/icon_512.png | Bin 234893 -> 140701 bytes
.../AppIcon.appiconset/icon_64.png | Bin 6465 -> 6196 bytes
.../Assets.xcassets/Logo.imageset/logo.png | Bin 909950 -> 634136 bytes
README.md | 2 +-
9 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_1024.png b/App/iOSDeveloperToolkit/Assets.xcassets/AppIcon.appiconset/icon_1024.png
index 25642c3a73ab4a4624e9249a0d4e7da2b6559e80..6909a19ba9e04c7a344f0aba1e3a196444639c69 100644
GIT binary patch
literal 466274
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