twostraws / controlroom Goto Github PK
View Code? Open in Web Editor NEWA macOS app to control the Xcode Simulator.
License: MIT License
A macOS app to control the Xcode Simulator.
License: MIT License
Managing simulators in Xcode is unfortunately quite a pain. The biggest issue is that every version of Xcode, all of the simulators are reinstalled, and you can only remove them one by one. The less time-consuming (yet time-consuming) approach is usually to delete them all and add them back one by one.
It'd be great to have a way to do this through ControlRoom to batch up requests, rather than doing it one by one every few months.
Upon suggestion from @twostraws, one idea would be to add an Edit/Done button for the current sidebar to show a list of checkboxes, with a delete button in that context to formalize the action.
An alternative idea I'd propose would be to provide identifiers for the simulators you'd like to install.
Thanks a lot!
The "Default" simulator refers to "which ever simulator happens to be booted".
But... this simulator can't technically be deleted or renamed. You can perform these actions, but they forward on to apply to the booted simulator.
We should guard against this, or just remove the default simulator.
Consider adding an option to change the device language
https://nshipster.com/simctl/
Mostly adding this because it's something I want to take a stab at!
The goal would be to take something like our current:
execute(["status_bar", simulator, "override", "--batteryLevel", "\(level)", "--batteryState", "charging"])
and turn it into something like:
execute(.statusBar(deviceId: simulator, operation: .override([.batteryLevel(level), .batteryState(.charging)])))
Hoping this will also simplify some of the iterating cases in the ui, turning for example:
let resetPermissions = [
"All",
"Calendar",
"Contacts",
"Location",
"Microphone",
"Motion",
"Photos",
"Reminders",
"Siri"
]
Picker("Permissions:", selection: $resetPermission) {
ForEach(resetPermissions, id: \.self) {
Text($0)
}
}
into:
Picker("Permissions:", selection: $resetPermission) {
ForEach(SimCtl.Privacy.Permission.allCases, id: \.self) {
Text($0.displayName)
}
}
This is just an issue when building a release version of the app and not running it from Xcode.
If in Xcode --> Preferences --> Locations --> Commandline Tools is not set the App is stuck at "Loading simulators".
Reason: The app does not find the simctrl tool
Feature request: give feedback/error message when the simctrl tool can not be found with a short explanation how to enable it.
Some ideas regarding push notifications:
I would appreciate any feedback, if you guys think that this is something worth exploring I would be more than willing to work on it.
Hello and congrats for this tool that helps us a lot !
I wonder if it would be better for the "Show Container" button to open the folder the Temporary Application folder. It's the location that is used the most, imho.
What is your opinion about this?
It would be nice if ControlRoom is able to manage the simulators that created by SwiftUI Previews. Check this directory:
~/Library/Developer/Xcode/UserData/Previews/Simulator Devices
Is it possible that there's a way to make the simulator camera work, similar to how Android does?
While testing the Tool, I accidentally uninstalled the app twice. I would suggest to move the button away from "Send Push" or make it at least so, that it needs to be confirmed.
It can be convenient to open the App Group as well.
Is it possible to add the functionality to record a video from the simulator?
In the terminal it's possible to do it with the following command:
xcrun simctl io booted recordVideo .
To stop the recording in terminal "cartel + c" needs to be clicked
⌘N should roll down a sheet where you can select a device type, a runtime, and enter a name to create a simulator.
simctl create <name> <device type id> [<runtime id>]
This project looks cool!
Would be great if there was a precompiled release in the Releases tab I could download without compiling it myself. Ideally, it would also be available on Homebrew so I could run brew cask install controlroom
It was pretty easy to get it to run though -- I expected to have to deal with Cocoapods or something, and instead, it worked on the first run.
This would be an easy thing to add in the contextual menu
simctl clone [device id] [new name]
This tool looks very promising and I hope I can get it to work. Lately I had to test our app behaviour when the user revoke permissions (like Notifcation and Location). It would have saved me plenty of time, where I had to go into the Simulator settings and revoke these manually and then switch back to the app.
Unfortunatly most of the features don't work for me. My setup is
MacOS Catalina 10.15.3
Simulator iOS 12.4: not working at all
Simulator iOS 13.3:
Just tell me which information you need and I will gladly send it
Any chance this could be distributed through the Mac App Store?
In Xcode Project Navigator, besides filter field there are other small buttons, like to show files with git changes.
Maybe we can add such icon in this filter field, to show all active(booted) simulators?
Will require some designer help to come up with nice icon as well.
Is it possible to add feature always on top
?.
I remember this feature was in old ios simulator.
It'd be convenient if there was a button to generate logs through xcrun simctl diagnose
.
@stefanomondino posted a screenshot of the app running on his Mac, and it seems to be missing almost all the device pictures. If two or three were missing I'd say it's OK, but here many are missing and all the question marks looks strange to me.
One of Apple's marketing and identity guidelines is "Don’t show the name or identity of a carrier." Changing the Operator text field to blank does nothing, and it would be better if it instead removes the carrier text from the status bar. If you set it to be a space and then view it on say an iPhone 8 Plus, then there will be a space in the status bar.
is it possible to install the app via homebrew?
I could try making them in Sketch, if you don't mind having a Sketch file checked into the repo, @twostraws.
The Default
simulator has some issues with Location simulation (the tab with the map).
The hack we're using to toggle current user's simulated position is based on simulator's udid
property, which is booted
for the Default one.
We can work around this by checking if selected simulator's id is booted
and then broadcast the location notification to all booted devices.
I'll try to put together a PR
note: related to #43 .
In the list of simulators, there's multiple devices of the same model though no distinction about which version of iOS the device is relating to.
Heya @twostraws, moving the suggestion I provided here, with more details.
This is a feature request to begin using GitHub's Releases to more easily keep up with the progress of ControlRoom. Since using the app is currently predicated on building from source, there's no easy way to know how far from master you are, and what new features have been released since you last updated.
An bigger improvement would be to support prebuilt binaries with each release, but the ideal implementation for me would be to leverage GitHub's Releases API to show an alert in the app whenever there's a new release available.
An alternative approach (and maybe in conjunction with the above) would be to use GitHub's Commits API to see the commits on this repository, so the user can see what work has been done without having to go to GitHub.
Thanks a lot!
Steps to reproduce:
It seems that the selectedSimulators
property in SimulatorsController
is unable to locate the selected simulator(s) when a simulator has "booted" as its udid.
In the "Location" tab, the "activate" button is not currently working.
This is probably due to an error in my previous implementation (inspired by Lyft work here), I omitted the simulator id array and seemed to work properly on my side.
I've re-introduced the array with only the current simulator id and the location simulation is back to work.
PR coming.
It would beneficial if there was an option to set multiple user profiles.
It should be noted there is a compiler dependency on swiftlint 0.39.1
If you have the prior version installed (0.39.0) you will get many compile errors like this one:
Type Name Violation: Type name should only contain alphanumeric characters: 'DataView_Previews' (type_name)
I think I've found a small bug with the following steps:
I'm seeing a lot of previews crashing, mainly due to missing environmentObject
injection (for example AppView is missing UIState
and NetworkView is missing Preferences
- this was pointed out by the crash logs at ~/Library/Logs/DiagnosticReports
and verified by manually adding the objects at the respective previews).
I guess this is due to the assumption that injection happens at AppDelegate (?) and thus "inherited" (by silently launching the app) by every preview or this assumption should be valid and this is something that is failing due to my system setup (latest production version of Xcode)? Is anyone else having these problems?
It'd be nice to have a preference to show booted simulators grouped together at the top of each section, followed by all the shutdown simulators.
In my opinion DerivedData data directory should be excluded from source control. Please think about improving the .gitignore file for this project. I can provide a PR if you desire. Thanks!
Rename a simulator.
Not sure what the UX here would be. Maybe the giant name in the detail area can be editable?
macOS Version: 10.15.3
Commit: 76929cf
When typing out a push notification, the text view does not scroll. Thus, I cannot see any content past what is displayed.
When typing in the push notification payload text view, if you edit something within ""
they automatically change to "smart quotes" which causes the notification to not be able to be sent (since it's no longer valid JSON).
If you use the notification editor, the JSON uses correct quotes.
Control Room was built on:
Xcode: 12.4
macOS: 11.1 (20C69)
Used the debug scheme (Release scheme had an error: "The linked framework 'CoreSimulator.framework' is missing one or more architectures required by this target: arm64.", will raise a separate issue for that.
It would be great to be able to change simulator language via ControlRoom! If there is an underlaying command available already, I could take over the implementation!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.