- Add instance: the address and name fields carry their titles (iOS shows only a form field's prompt), aligned right, with an example address for the chosen kind - node and service State rows: badge and state side by side instead of a Label, which made the row far too tall on iOS - an added instance is selected once its sheet is gone; selected in the update that inserted its row, the sidebar sometimes left it unhighlighted (2 of 5 adds on the iPad simulator, 0 of 12 after) - readme: the screens have been looked at on the iPhone and iPad simulators against a fake Cloudly
serve.zone/swiftapp
The serve.zone app for iPhone, iPad and Mac: one place to watch many Onebox and Cloudly instances. It lists every instance you add, checks them all every 30 seconds while a window is in front and whenever the overview, an instance, a node or a service is pulled, and shows the worst first: an overview with instances, nodes and services counted by severity; each instance's problems, its clusters with their nodes, and its services; each node's last report and measurements; each service's deployments and its workload logs, a page at a time. It reads only.
It reads Cloudly through serve.zone/swiftsupport, which holds serve.zone's Swift outside this app.
Issue Reporting and Security
For reporting bugs, issues, or security vulnerabilities, please visit community.foss.global/. This is the central community hub for all issue reporting. Developers who sign and comply with our contribution agreement and go through identification can also get a code.foss.global/ account to submit Pull Requests directly.
Layout
App/ the SwiftUI app: one target for iPhone, iPad and Mac (native macOS, not Catalyst)
ServeZoneKit/ a Swift package with the product ServeZoneKit
Sources/ServeZoneCore instances, their addresses and Keychain items, health; no transport, so it builds anywhere
Sources/ServeZoneKit reading Cloudly, InstancesModel, the summaries the screens show and the paged workload logs
Tests/ Swift Testing suites of both targets
ServeZoneTests/ tests hosted in the app: the real Keychain, the words the screens show
ServeZone.xcodeproj the app and its tests, with folders the project follows on its own
Config/ the entitlements and the Info.plist of Debug builds
The app imports only ServeZoneCore and ServeZoneKit, never the Cloudly client: the screens show the summaries the Kit makes of what an instance answered, and the logs as the Kit's LogTranscript.
Instances
- Storage. Each instance is one generic-password item in the Keychain (service
zone.serve.app.instance, account = the instance's id) that holds its record and its sign-in together. Items stay on this device (AfterFirstUnlockThisDeviceOnly, not synchronized), and on the Mac they live in the data-protection keychain. There is no other copy: removing an instance removes its sign-in. An item the app cannot read is listed so it can be removed. - Address. An address is kept as an origin:
httpsonly,httponly for the loopback address while developing. Paths, queries, fragments and credentials in the address are refused, and an origin cannot be added twice. - Cloudly. An admin signs in with a user name and password. The app keeps the identity Cloudly answers until it expires, and never the password. A node is critical when offline and a warning in maintenance or while it initializes; a cluster is as bad as its worst node; a service is judged by its deployments and its reconciliation.
- Workload logs. Logs are read when their screen opens or is pulled, not by the 30-second check. A service lists its runs (Cloudly's log attempts: one per replica on a node) newest first, 50 at a time; a run shows the output Cloudly keeps of it, 256 records at a time, in the order Cloudly received it. Pieces of a long line are joined into the line, and what the node lost, what Cloudly did not receive and what it dropped is shown where it happened, with the reason Cloudly states.
- Onebox. A Onebox can be added and is listed, but it is not read yet: Onebox offers no sign-in a native app can use (U1–U3 below).
Development
pnpm install
pnpm test # ServeZoneKit's swift test, then the app's tests through tsswift
pnpm run test:kit # only ServeZoneKit
pnpm run build:macos # or build:ios, build; run; doctor
tsswift (configured under @git.zone/tsswift in .smartconfig.json) builds and tests on the Mac central-macos as its remote builder: macOS, an iPhone 17 Pro simulator and an iPad mini simulator.
Dependencies
ServeZoneKit depends on serve.zone/swiftsupport by its id servezone.swiftsupport in the Swift package registry of code.foss.global, which brings api.global/swiftsupport as apiglobal.swiftsupport; by URL both would be the package swiftsupport and could not be in one graph. Both scopes are mapped twice, with the same file: ServeZoneKit/.swiftpm/configuration/registries.json for swift test in the Kit, and ServeZone.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/configuration/registries.json for Xcode, which reads only the project's. ServeZoneKit/Package.resolved and the project's xcshareddata/swiftpm/Package.resolved pin the versions; move them together. The archives are not signed, so SwiftPM warns on download. ServeZoneKit builds and tests on Linux too.
On Apple platforms
The app builds for the iOS Simulator, and its hosted tests pass on the iPhone and iPad simulators. The Mac app builds only unsigned: a signed build needs a provisioning profile of the project's team, which the remote builder does not have, so the Mac app and its tests have not run, and whether the keychain-access-groups entitlement in Config/ServeZone.entitlements and the sandbox entitlements Xcode derives from ENABLE_APP_SANDBOX merge as intended is unconfirmed. The screens have been looked at only on the iPhone 17 Pro and iPad Pro 11-inch simulators, light and dark, against a fake Cloudly, not on the Mac, and no screen has read a live Cloudly: the reads of clusters and of logs are tested only against answers built in the tests. The app has no icon yet, and no screen with the licenses of what it includes: the MIT notice of api.global/swiftsupport (Lossless GmbH) has to ship with the first distributed build.
Upstream
- U1 (Onebox, Cloudly): pairing a device, which gets a revocable credential of its own, in place of the admin password.
- U2 (Onebox): keep the signing key across restarts, so a restart does not sign every client out.
- U3 (Onebox): publish its client contracts, so
serve.zone/swiftsupportcan generate them. - U7 (Cloudly): answer UI clients without secret material, and publish what the overview needs.
License and Legal Information
This repository contains open-source code licensed under the MIT License. A copy of the license can be found in the license.md file.
Please note: The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.
Trademarks
This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH or third parties, and are not included within the scope of the MIT license granted herein.
Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines or the guidelines of the respective third-party owners, and any usage must be approved in writing. Third-party trademarks used herein are the property of their respective owners and used only in a descriptive manner, e.g. for an implementation of an API or similar.
Company Information
Task Venture Capital GmbH Registered at District Court Bremen HRB 35230 HB, Germany
For any legal inquiries or further information, please contact us via email at hello@task.vc.
By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.