{"id":17690174,"url":"https://github.com/onmyway133/swiftlane","last_synced_at":"2025-04-04T12:08:15.036Z","repository":{"id":42365233,"uuid":"202980266","full_name":"onmyway133/Swiftlane","owner":"onmyway133","description":"🚀 Build utilities in pure Swift","archived":false,"fork":false,"pushed_at":"2023-09-29T13:03:54.000Z","size":69318,"stargazers_count":690,"open_issues_count":1,"forks_count":31,"subscribers_count":23,"default_branch":"main","last_synced_at":"2025-03-28T11:08:30.837Z","etag":null,"topics":["appstoreconnect","build","ios","swift"],"latest_commit_sha":null,"homepage":"https://onmyway133.com","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/onmyway133.png","metadata":{"files":{"readme":"README.md","changelog":null,"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-08-18T08:48:32.000Z","updated_at":"2025-01-14T02:01:00.000Z","dependencies_parsed_at":"2024-10-24T14:29:28.508Z","dependency_job_id":"8f0036e2-3bfc-4bbe-8fcd-8acc95e50e83","html_url":"https://github.com/onmyway133/Swiftlane","commit_stats":{"total_commits":55,"total_committers":4,"mean_commits":13.75,"dds":"0.34545454545454546","last_synced_commit":"51014b3142bdd93e6d312f17cd043d5cbf186984"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onmyway133%2FSwiftlane","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onmyway133%2FSwiftlane/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onmyway133%2FSwiftlane/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onmyway133%2FSwiftlane/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/onmyway133","download_url":"https://codeload.github.com/onmyway133/Swiftlane/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247174420,"owners_count":20896078,"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":["appstoreconnect","build","ios","swift"],"created_at":"2024-10-24T11:50:01.603Z","updated_at":"2025-04-04T12:08:15.018Z","avatar_url":"https://github.com/onmyway133.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Swiftlane\n\nSwiftlane contains a set of build utilities to speed up iOS and macOS development and deployment\n\nThere's no additional configuration file, your Swift script file is the source of truth. With auto \ncompletion and type safety, you are ensured to do the right things in Swiftlane.\n\n- Swiftlane and its dependencies are written in pure Swift, making it easy to read and contribute.\n- Use latest Swift features like async/await to enable declarative syntax\n- Type-safe. All required and optional arguments are clear.\n- No configuration file. Your Swift script is your definition.\n- Simple wrapper around existing tools like xcodebuild, instruments and agvtool\n- Reuse awesome Swift scripting dependencies from Swift community\n\n## How to use\n\nSwiftlane is intended to be used as a Swift Package. Please consult `Examples` folder for ways to integrate\n\n- CLI: make a macOS Command Line Tool project\n- Script: make an executable Swift Package\n\n```swift\nimport Swiftlane\nimport AppStoreConnect\n\n@main\nstruct Script {\n    static func main() async throws {\n        try await deployMyApp()\n    }\n    \n    private static func deployMyApp() async throws {\n        var workflow = Workflow()\n        workflow.directory = Settings.fs\n            .homeDirectory()\n            .appendingPathComponent(\"Projects/swiftlane/Examples/MyApp\")\n        workflow.xcodeApp = URL(string: \"/Applications/Xcode.app\")\n        \n        let build = Build()\n        build.project(\"MyApp\")\n        build.allowProvisioningUpdates()\n        build.destination(platform: .iOSSimulator, name: \"iPhone 13\")\n        build.workflow = workflow\n        try await build.run()\n        \n        guard\n            let issuerId = Settings.env[\"ASC_ISSUER_ID\"],\n            let privateKeyId = Settings.env[\"ASC_PRIVATE_KEY_ID\"],\n            let privateKey = Settings.env[\"ASC_PRIVATE_KEY\"]\n        else { return }\n        \n        let asc = try ASC(\n            credential: AppStoreConnect.Credential(\n                issuerId: issuerId,\n                privateKeyId: privateKeyId,\n                privateKey: privateKey\n            )\n        )\n        \n        try await asc.fetchCertificates()\n        try await asc.fetchProvisioningProfiles()\n        \n        let keychain = try await Keychain.create(\n            path: Keychain.Path(\n                rawValue: Settings.fs\n                    .downloadsDirectory\n                    .appendingPathComponent(\"custom.keychain\")),\n            password: \"keychain_password\"\n        )\n        try await keychain.unlock()\n        try await keychain.import(\n            certificateFile: Settings.fs\n                .downloadsDirectory\n                .appendingPathComponent(\"abcpass.p12\"),\n            certificatePassword: \"123\"\n        )\n        \n    }\n}\n```\n\n## Actions\n\n### iOS\n- [x] Build: build project\n- [x] Test: test project\n- [x] Archive: archive project\n- [x] ExportArchive: export archive\n- [x] AppStore Connect: use https://github.com/onmyway133/AppStoreConnect\n- [x] GetBuildSettings: get project build settings\n- [ ] GenerateIcon: generate app icon set\n- [x] Screenshot: take screenshot\n- [ ] Frame: frame screenshot\n- [x] UploadASC: upload IPA to AppStore Connect\n\n#### ASC\n\n- [x] Fetch certificates\n- [x] Fetch provisioning profiles\n- [x] Save certificates into file system\n- [x] Save profiles into file system\n- [x] Install provisioning profile\n- [x] Fetch TestFlight versions\n- [x] Fetch TestFlight builds\n- [x] Fetch latest TestFlight build number\n\n#### Project\n\n- [x] Set version\n- [x] Set build number\n- [x] Increment build number\n\n#### Keychain\n\n- [x] Create custom keychain\n- [x] Unlock keychain\n- [x] Delete keychain\n- [x] List searchable keychain paths\n- [x] Add keychain to searchable paths\n- [x] Import certificate into keychain\n\n#### Simulator \n\n- [ ] Boot a simulator\n- [ ] Update and style  simulator\n\n#### Xcode\n\n- [x] Print current Xcode path\n\n### macOS\n- [x] Notarize: notarize project\n- [ ] MakeDMG: package as DMG\n- [ ] Sparkle: update Spackle Appcast file\n\n### Standard\n- [x] Slack: send message to a Slack channel\n- [x] RunScript: run arbitrary script\n- [x] PrintWorkingDirectory: print current working directory\n- [ ] S3: upload to S3\n- [ ] Setapp: upload to Setapp\n- [x] Download: download file\n- [x] MoveFile: move file\n- [x] CopyFile: copy file\n- [x] AppCenter: use appcenter-cli\n\n## Settings\n\nConfigurations via `Settings`\n\n- Console: log to console\n- FileSystem: interact with file system\n- Environment: read environment values\n- CommandLine: run command line tools\n\n## Credit\n\n- Notarize: refactor from https://github.com/Mortennn/Notarize\n\n## License\nSwiftlane is released under the MIT license. See LICENSE for details.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonmyway133%2Fswiftlane","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fonmyway133%2Fswiftlane","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonmyway133%2Fswiftlane/lists"}