{"id":13485943,"url":"https://github.com/google/j2objc","last_synced_at":"2025-09-09T20:58:52.642Z","repository":{"id":13695839,"uuid":"16389681","full_name":"google/j2objc","owner":"google","description":"A Java to iOS Objective-C translation tool and runtime.","archived":false,"fork":false,"pushed_at":"2025-09-04T22:44:30.000Z","size":105714,"stargazers_count":6028,"open_issues_count":91,"forks_count":991,"subscribers_count":284,"default_branch":"master","last_synced_at":"2025-09-06T03:02:23.786Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://j2objc.org","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/google.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2014-01-30T20:19:56.000Z","updated_at":"2025-09-05T18:45:51.000Z","dependencies_parsed_at":"2024-06-27T00:13:05.381Z","dependency_job_id":"e77f7861-557d-4f7e-ace8-1afb95f5c4b3","html_url":"https://github.com/google/j2objc","commit_stats":{"total_commits":5626,"total_committers":144,"mean_commits":39.06944444444444,"dds":0.5127977248489157,"last_synced_commit":"770699589e90cdc89cc80b41b1ba1ed4ad816a5b"},"previous_names":[],"tags_count":42,"template":false,"template_full_name":null,"purl":"pkg:github/google/j2objc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fj2objc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fj2objc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fj2objc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fj2objc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/google","download_url":"https://codeload.github.com/google/j2objc/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fj2objc/sbom","scorecard":{"id":113170,"data":{"date":"2025-08-11","repo":{"name":"github.com/google/j2objc","commit":"1671e9afb72a16126d448f468db3e582358fba47"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.2,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/main.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/google/.github/SECURITY.md:1","Info: Found linked content: github.com/google/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/google/.github/SECURITY.md:1","Info: Found text in security policy: github.com/google/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":8,"reason":"binaries present in source code","details":["Warn: binary detected: jre_emul/android/platform/external/icu/icu4j/main/shared/data/icudata.jar:1","Warn: binary detected: jre_emul/android/platform/external/icu/icu4j/main/shared/data/icutzdata.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-735f-pc8j-v9w8"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/google/j2objc/main.yml/master?enable=pin","Info:   0 out of   1 GitHub-owned GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-15T16:31:10.517Z","repository_id":13695839,"created_at":"2025-08-15T16:31:10.517Z","updated_at":"2025-08-15T16:31:10.517Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273979774,"owners_count":25201584,"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","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-07-31T18:00:34.706Z","updated_at":"2025-09-09T20:58:52.626Z","avatar_url":"https://github.com/google.png","language":"Java","readme":"# J2ObjC: Java to Objective-C Translator and Runtime #\n\n**Project site:** \u003chttps://j2objc.org\u003e\u003cbr\u003e\n**J2ObjC blog:** \u003chttps://j2objc.blogspot.com\u003e\u003cbr\u003e\n**Questions and discussion:** \u003chttps://groups.google.com/group/j2objc-discuss\u003e\n\n### What J2ObjC Is ###\nJ2ObjC is an open-source command-line tool from Google that translates\nJava source code to Objective-C for the iOS (iPhone/iPad) platform. This tool\nenables Java source to be part of an iOS application's build, as no editing\nof the generated files is necessary. The goal is to write an app's non-UI\ncode (such as application logic and data models) in Java, which is then\nshared by web apps (using [GWT](http://www.gwtproject.org/)), Android apps,\nand iOS apps.\n\nJ2ObjC supports most Java language and runtime features required by\nclient-side application developers, including exceptions, inner and\nanonymous classes, generic types, threads and reflection. JUnit test\ntranslation and execution is also supported.\n\nJ2ObjC is currently beta quality. Several Google projects rely on it, but\nwhen new projects first start working with it, they usually find new bugs\nto be fixed. If you run into issues with your project, please report them!\n\n### What J2ObjC isn't ###\nJ2ObjC does not provide any sort of platform-independent UI toolkit, nor are\nthere any plans to do so in the future. We believe that iOS UI code needs to\nbe written in Objective-C, Objective-C++ or Swift using Apple's iOS SDK (Android\nUIs using Android's API, web app UIs using GWT, etc.).\n\nJ2ObjC cannot convert Android binary applications. Developers must have source\ncode for their Android app, which they either own or are licensed to use.\n\n## Requirements ##\n\n* JDK 21\n* Mac workstation or laptop\n* OS X 15.6.1 or higher\n* Xcode 16.3 or higher\n\n## License ##\n\nThis library is distributed under the Apache 2.0 license found in the\n[LICENSE](https://github.com/google/j2objc/blob/master/LICENSE) file.\nThe protocol buffers library is distributed under the same BSD license as\nGoogle's protocol buffers. See its\n[README](https://github.com/protocolbuffers/protobuf/blob/master/README.md) and\n[LICENSE](https://github.com/protocolbuffers/protobuf/blob/master/LICENSE).\n\n## Running on GNU/Linux ##\n\nTo build and run on GNU/Linux, install [the Darling project](http://www.darlinghq.org/), then following [its Compile and Run a Program example](https://wiki.darlinghq.org/what_to_try#compile_and_run_a_program). Please note that j2objc is only supported on iOS/macOS.\n\n## Artifact Signatures ##\n\nThis project publishes some artifacts through Maven Central with a `groupId` of `com.google.j2objc`.\nThese artifacts are currently signed with [the following PGP/GPG key]\n(https://keyserver.ubuntu.com/pks/lookup?op=get\u0026search=0xeb1b3de71713c9ec2e87cc26ee92349ad86de446):\n\n```\npub   rsa2048 2023-01-10 [SC] [expires: 2025-01-09]\n      EB1B3DE71713C9EC2E87CC26EE92349AD86DE446\nuid           [ unknown] Thomas Ball \u003ctball@google.com\u003e\nsub   rsa2048 2023-01-10 [E] [expires: 2025-01-09]\n```\n\nOlder artifacts are signed with the following PGP/GPG key:\n\n```\npub   rsa2048 2015-09-25 [SC]\n      B801E2F8EF035068EC1139CC29579F18FA8FD93B\nuid           [ unknown] Tom Ball \u003ctball724@gmail.com\u003e\nsub   rsa2048 2015-09-25 [E]\n```\n","funding_links":[],"categories":["Projects","Java","项目","V. Tools for developing","Virtual Machines","Miscellaneous"],"sub_categories":["Miscellaneous","杂项","8. Other"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Fj2objc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoogle%2Fj2objc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Fj2objc/lists"}