hello
hello is application onboarding macOS devices.
- Inspired by Kandji's Liftoff
- Logo created with Type with Pride font family
Warning
DO NOT USE THIS IN PRODUCTION! IT IS NOT READY AND MAY NEVER BE READY!
OS support
macOS Big Sur 11.0 and higher
hello is application onboarding macOS devices.
DO NOT USE THIS IN PRODUCTION! IT IS NOT READY AND MAY NEVER BE READY!
macOS Big Sur 11.0 and higher
Hi Erik,
i discover this issue on Big Sur during my testing Hello 0.2.2 .
2021-07-22 18:46:22.523077+0200 hello[40018:764438] [SwiftUI] No symbol named 'gear.circle' found in system symbol set 2021-07-22 18:46:22.554990+0200 hello[40018:764438] [SwiftUI] No symbol named 'gear.circle' found in system symbol set 2021-07-22 18:46:25.067170+0200 hello[40018:764438] [SwiftUI] No symbol named 'gear.circle' found in system symbol set 2021-07-22 18:46:25.166747+0200 hello[40018:764438] [SwiftUI] No symbol named 'circle.dashed.inset.filled' found in system symbol set
This isn't exactly what you mentioned, but I had issues with that pattern. This one is more lines and slightly more messy, but it seems to work:
When gear.circle.filled is present:
And when its not (I set it to nil
manually) :
macOS version 11.4 Xcode version: 12.5
The project at '/hello-main/hello.xcodeproj' cannot be opened because it is in a future Xcode project file format. Adjust the project format using a compatible version of Xcode to allow it to be opened by this version of Xcode.
Editing /hello-main/hello.xcodeproj/project.pbxproj (objectVersion
) manually from 55
to 54
, allows me to open it, but some of the Beta tools and commands are not available.
A few Cannot find 'AsyncImage' in scope
errors and Cannot infer contextual base in reference to member 'link'
errors.
https://developer.apple.com/documentation/swiftui/asyncimage?changes=_6 (AsyncImage view 10.12+ only?)
Thus the macOS 10.12+ beta compatibility question.
Good day
I have added Managed Software Centre and after it being installed , the Hello app doesn't close How do get it to close after installation has completed ?
Or instead of closing , open the last windows of the hello app
You should be able to just pull the GITHUB_WORKSPACE environmental variable for https://github.com/erikng/hello/issues/9.
I tested this here to verify that is accessible via a build script.
Hi,
I did little changes in code and add second path for Company Logo , Separate Welcome Screen & TopIcons.
User can managed two logos over json.
If that make sense and all good maybe will be good to implement into official release.
MartinC
Hi Erik,
I was thinking about maybe mobileconfig check will be as well interesting. Here is some adjustment i did in your code, but still not working but maybe help, as i'm not really expert in Swift :-) PrimaryStatus:
`// Stage Status (Dynamic Row) struct StageRow: View { @ObservedObject var settings: HelloHelper var installstage: DeviceStage @State var installedPkg = false @State var installedProfile = false var body: some View { HStack { // Icon // TODO: Figure out how to refresh AsyncImage if it fails to download the first time if #available(macOS 12.0, *) { AsyncImage(url: URL(string: installstage.iconPath)) { image in image.resizable() } placeholder: { Utils().randomPlaceholderColor() .opacity(0) } .aspectRatio(contentMode: .fit) .scaledToFit() .frame(width: 40, height: 40) } else { WebImage(url: URL(string: installstage.iconPath)) .renderingMode(.original) .resizable() .aspectRatio(contentMode: .fit) .scaledToFit() .frame(width: 40, height: 40) }
// Stage Name
Text(installstage.title)
.font(.body)
.fontWeight(.bold)
Spacer()
// Current Stage Status
if Utils().pathExists(path: installstage.installedPath) || PkgInfo(receipt: installstage.installedPath) , Profile(receipt: installstage.installedPath) {
Image(systemName: "checkmark.circle.fill")
.foregroundColor(.green)
Text("Completed")
.frame(width: 75)
.onAppear {
settings.applicationState[installstage.id] = "installed"
}
} else {
// First stage - auto trigger installing
if settings.applicationState.isEmpty && installstage.id == 1 {
ProgressView()
.progressViewStyle(.circular)
.scaleEffect(0.4)
Text("Installing")
.frame(width: 75)
.onAppear {
settings.applicationState[installstage.id] = "installing"
settings.applicationInstalling = installstage.title
settings.applicationInstallingIconPath = installstage.iconPath
}
// Stage has already sent its state - no need to resend
} else if settings.applicationState[installstage.id] == "installing" {
ProgressView()
.progressViewStyle(.circular)
.scaleEffect(0.4)
Text("Installing")
.frame(width: 75)
// Previous stage has completed - trigger installing
} else if settings.applicationState[installstage.id-1] == "installed" {
ProgressView()
.progressViewStyle(.circular)
.scaleEffect(0.4)
Text("Installing")
.frame(width: 75)
.onAppear {
settings.applicationState[installstage.id] = "installing"
settings.applicationInstalling = installstage.title
settings.applicationInstallingIconPath = installstage.iconPath
}
// Catchall for pending
} else {
Image(systemName: "checkmark.circle.fill")
.foregroundColor(.secondary)
Text("Pending")
.frame(width: 75)
.onAppear {
settings.applicationState[installstage.id] = "pending"
}
}
}
}
}
func PkgInfo(receipt: String) -> Bool {
DispatchQueue.main.async {
self.installedPkg = Utils().pkgInfo(receipt: receipt)
}
return self.installedPkg
}
func Profile(receipt: String) -> Bool {
DispatchQueue.main.async {
self.installedProfile = Utils().profiles(receipt: receipt)
}
return self.installedProfile
}
}`
Utils:
func profiles(receipt: String) -> Bool { let task = Process() task.launchPath = "/usr/bin/profiles" task.arguments = ["-P", receipt]
let outputPipe = Pipe()
let errorPipe = Pipe()
task.standardOutput = outputPipe
task.standardError = errorPipe
do {
try task.run()
} catch {
let msg = "Error processing profiles"
print(msg)
return false
}
task.waitUntilExit()
if task.terminationStatus != 0 {
return false
} else {
return true
}
}
Thx
A long provisioning workflow is just static text and some progress wheels. It's pretty boring.
The UI should either be rethought out or use make better use of the top portion paragraph.
This is a pre-release version of hello created by GitHub Actions. hello.app has not been signed application nor has the package.
By default hello looks for a com.github.erikng.hello.json
file located in /var/tmp
. If you would like to use an alternative path, look at the code.
The second version of hello.
There is no documentation, but check out the the demo url
You will want to take the com.github.erikng.hello.json
file and place it in /var/tmp
.
alternatively you can do something like
/Applications/hello.app/Contents/MacOS/hello -json-url file:///private/var/tmp/com.github.erikng.hello.json
or
/Applications/hello.app/Contents/MacOS/hello -json-url https://raw.githubusercontent.com/erikng/hello/main/demo/com.github.erikng.hello.json
restartStyle
key in JSON
None
, Notify
or Immediate
installedPath
/Applications/Slack.app
or com.tinyspeck.slackmacgap
The second version of hello.
There is no documentation, but check out the the demo url
You will want to take the com.github.erikng.hello.json
file and place it in /var/tmp
.
alternatively you can do something like
/Applications/hello.app/Contents/MacOS/hello -json-url file:///private/var/tmp/com.github.erikng.hello.json
or
/Applications/hello.app/Contents/MacOS/hello -json-url https://raw.githubusercontent.com/erikng/hello/main/demo/com.github.erikng.hello.json
The first version of hello.
There is no documentation, but check out the com.github.erikng.hello.json
file for ideas. You will want to place it in /var/tmp
.
alternatively you can do something like
/Applications/hello.app/Contents/MacOS/hello -json-url file:///private/var/tmp/com.github.erikng.hello.json
or
/Applications/hello.app/Contents/MacOS/hello -json-url https:///somewhere.com/com.github.erikng.hello.json
Ama-Fruits USER INTERFACE AND USER EXPERIENCE APP DESIGN How to develop an iOS 14 application with SwiftUI 2.0 framework. How to create an Onboarding
Wiggles ?? Beautiful Puppy adoption app built to Demonstrate the use of SwiftUI
Tofu A simple Todo app built with SwiftUI, a REST API, and a local Realm cache.
Home Assistant - Native iOS SwiftUI Application Screenshots Disclaimer - Please read This application is mostly a not-working mockup written in SwiftU
HackerNewsReader This was built during my bootcamp using SwiftUI, WebKit and an API from Hacker News. This was programmed from scratch with SwiftUI. I
Food Recipes Application This is my first IOS App. The first page is sign in and sign up page. I controll informations with regex in sign up page. If
CurrencyConverter Stack: Xcode 12.5.1 iOS 14.5 UIkit iOS deployment target: 13.0
Swift Tutorials This is not a package, it's just a bunch of tutorials This project uses Apple's DocC (Documentation Compiler) to create a set of Swift
Web API Client A modern web API client in Swift built using Async/Await and Actors. let client = APIClient(host: "api.github.com") // Using the clien
Assemblies Where Developers Connect Assemblies is an open-source mobile app built with React Native which developers can use to connect through 'assem
GitPoint GitHub in your pocket. Built with React Native. Table of Contents Introduction Features Feedback Contributors Build Process Backers Sponsors
Dwarf A debugger for reverse engineers, crackers and security analyst. Or you can call it damn, why are raspberries so fluffy or yet, duck warriors ar
AuroraEditor AuroraEditor is a IDE built by the community, for the community, and written in Swift for the best native performance and feel for macOS.
RMSUI A Simple Swift MVVM architectured "Rick & Morty UI" app ?? in order to pra
ProximitySensor Property wrappers for using the Proximity Sensor from the SwiftU
DBZ-Legends Just a simple UI based app for all the DBZ fans. You can tap on the
Dicee-SwiftUI This app show random dicee every time the you make click in button
Glucose Direct App Warning, This project is highly experimental. Please use this app with caution and extreme care. Do not mindlessly make decisions b
Sidebar App This is a template repository for quickly creating boilerplate code for a SwiftUI macOS app. License This app is released into the public