{"id":17931708,"url":"https://github.com/jessesquires/nine41","last_synced_at":"2025-04-04T18:04:17.627Z","repository":{"id":41876790,"uuid":"211943491","full_name":"jessesquires/Nine41","owner":"jessesquires","description":"Automate overriding the status bars for all running iOS simulators","archived":false,"fork":false,"pushed_at":"2025-03-20T22:28:10.000Z","size":491,"stargazers_count":171,"open_issues_count":0,"forks_count":15,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-28T17:02:05.369Z","etag":null,"topics":["ios","ios-simulator","simulator","xcode","xcrun"],"latest_commit_sha":null,"homepage":"https://www.jessesquires.com/blog/2020/04/13/fully-automating-perfect-status-bar-overrides-for-ios-simulators/","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jessesquires.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-09-30T19:52:25.000Z","updated_at":"2025-03-27T23:42:58.000Z","dependencies_parsed_at":"2023-02-12T18:15:44.333Z","dependency_job_id":"556b47be-c5f3-4419-9526-523787497cb3","html_url":"https://github.com/jessesquires/Nine41","commit_stats":{"total_commits":132,"total_committers":6,"mean_commits":22.0,"dds":0.6363636363636364,"last_synced_commit":"7baea61445e44b5b63c2a1b1a444bda9045db667"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jessesquires%2FNine41","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jessesquires%2FNine41/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jessesquires%2FNine41/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jessesquires%2FNine41/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jessesquires","download_url":"https://codeload.github.com/jessesquires/Nine41/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247226212,"owners_count":20904465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ios","ios-simulator","simulator","xcode","xcrun"],"created_at":"2024-10-28T21:23:17.935Z","updated_at":"2025-04-04T18:04:17.604Z","avatar_url":"https://github.com/jessesquires.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nine41 ![CI](https://github.com/jessesquires/Nine41/workflows/CI/badge.svg)\n\n*Automate overriding the status bars for all running iOS simulators*\n\n[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fjessesquires%2FNine41%2Fbadge%3Ftype%3Dswift-versions)](https://swiftpackageindex.com/jessesquires/Nine41) \u003cbr\u003e [![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fjessesquires%2FNine41%2Fbadge%3Ftype%3Dplatforms)](https://swiftpackageindex.com/jessesquires/Nine41)\n\n![perfect status bar](https://raw.githubusercontent.com/jessesquires/Nine41/main/screenshot.png)\n\n## About\n\nBlog posts:\n\n* [Fully automating perfect status bar overrides for iOS simulators with Nine41](https://www.jessesquires.com/blog/2020/04/13/fully-automating-perfect-status-bar-overrides-for-ios-simulators/)\n* [A script to automate overriding iOS simulator status bar values](https://www.jessesquires.com/blog/2019/09/30/automating-simctl-status-bar/)\n* [Overriding status bar display settings in the iOS simulator](https://www.jessesquires.com/blog/2019/09/26/overriding-status-bar-settings-ios-simulator/)\n\n[Xcode 11](https://developer.apple.com/documentation/xcode_release_notes/xcode_11_release_notes) shipped with `simctl status_bar`, a tool to override the status bar values in the simulator so you can take perfect screenshots.\n\nHowever, it has some issues:\n* The overrides do not persist across launches of the simulator\n* The numerous override options are difficult to remember\n* There are no sensible defaults\n\nThis script fixes most of those issues. It overrides the status bars for all currently running simulators using \"Apple's defaults\" \u0026mdash; full cellular bars, full wifi bars, full battery, no \"carrier\" name, and `9:41` for the time.\n\n## Requirements\n\n- Swift 6.0+\n- Xcode 16.0+\n\n## Installation\n\n### [Swift Package Manager](https://swift.org/package-manager/)\n\nAdd `Nine41` to the `dependencies` value of your `Package.swift`.\n\n```swift\ndependencies: [\n    .package(url: \"https://github.com/jessesquires/Nine41.git\", from: \"4.0.0\")\n]\n```\n\nAlternatively, you can add the package [directly via Xcode](https://developer.apple.com/documentation/xcode/adding_package_dependencies_to_your_app).\n\n## Usage\n\nAfter cloning the repo, you can create a custom bash command:\n\n```bash\nfunction nine41() {\n  swift run --package-path /PATH/TO/Nine41/\n}\n```\n\nThen you can run this from the command line.\n\nExample run with 2 open simulators:\n\n```bash\n$ nine41\nFixing status bars...\n✅ iPhone 15, 65A6C323-E74D-452C-B85E-7F576259E022\n✅ iPhone 16 Pro, 52E8FAD0-7743-4F85-AA2E-26E4C1275F38\n```\n\nExample run with no open simulators:\n\n```bash\n$ nine41\nFixing status bars...\n❌ No simulators are running. Launch the iOS simulator first.\n```\n\n## Automation with Xcode build phases\n\nAs described [in this post](https://www.jessesquires.com/blog/2020/04/13/fully-automating-perfect-status-bar-overrides-for-ios-simulators/), you can automate your perfect status bars using Xcode build phases.\n\n1. Add the Swift package to your Xcode project\n2. Add a \"Run Script\" build phase with the following:\n\n```bash\n/usr/bin/xcrun --sdk macosx swift run --package-path \"${BUILD_ROOT}/../../SourcePackages/checkouts/Nine41\"\n```\n\n3. Build and run. Note that simulators must be booted for the script to work, which means the very first run may not produce results but the subsequent runs will.\n\n## Contributing\n\nInterested in making contributions to this project? Please review the guides below.\n\n- [Contributing Guidelines](https://github.com/jessesquires/.github/blob/master/CONTRIBUTING.md)\n- [Code of Conduct](https://github.com/jessesquires/.github/blob/master/CODE_OF_CONDUCT.md)\n- [Support and Help](https://github.com/jessesquires/.github/blob/master/SUPPORT.md)\n- [Security Policy](https://github.com/jessesquires/.github/blob/master/SECURITY.md)\n\nAlso, consider [sponsoring this project](https://www.jessesquires.com/sponsor/) or [buying my apps](https://www.hexedbits.com)! :v:\n\n## License\n\nReleased under an [MIT License](https://opensource.org/licenses/MIT). See `LICENSE` for details.\n\n\u003e **Copyright \u0026copy; 2019-present Jesse Squires.**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjessesquires%2Fnine41","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjessesquires%2Fnine41","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjessesquires%2Fnine41/lists"}