{"id":13815044,"url":"https://github.com/codematrixer/icertools","last_synced_at":"2025-05-15T06:34:00.864Z","repository":{"id":240231415,"uuid":"799935910","full_name":"codematrixer/icertools","owner":"codematrixer","description":"Pure python3 implementation for ios developer certificate manager and re-signing ipa.","archived":false,"fork":false,"pushed_at":"2024-11-19T09:09:06.000Z","size":1221,"stargazers_count":165,"open_issues_count":1,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-19T10:21:50.048Z","etag":null,"topics":["apple-certificate-manager","apple-developer-manager","certificate","ipa","re-sign","resign","resigning","wda"],"latest_commit_sha":null,"homepage":"","language":"Python","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/codematrixer.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":"2024-05-13T11:46:59.000Z","updated_at":"2024-11-19T09:09:09.000Z","dependencies_parsed_at":"2024-05-30T11:24:02.600Z","dependency_job_id":"1ed542ab-0613-47d8-8c09-f428b1049baa","html_url":"https://github.com/codematrixer/icertools","commit_stats":null,"previous_names":["codematrixer/icertools"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codematrixer%2Ficertools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codematrixer%2Ficertools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codematrixer%2Ficertools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codematrixer%2Ficertools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codematrixer","download_url":"https://codeload.github.com/codematrixer/icertools/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254289098,"owners_count":22046032,"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":["apple-certificate-manager","apple-developer-manager","certificate","ipa","re-sign","resign","resigning","wda"],"created_at":"2024-08-04T04:02:52.389Z","updated_at":"2025-05-15T06:34:00.341Z","avatar_url":"https://github.com/codematrixer.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# icertools\n\n纯Python3实现的**iOS证书管理**和**IPA重签名工具**，无需提前登录[苹果开发者网站](https://developer.apple.com/account/resources/devices/list) 进行相关操作。原理参考[XCode自动管理证书](https://www.jianshu.com/p/035ae1f1e563)\n\n\n没有这个工具前, 使用个人开发者账号对IPA`重签`时，需要进入苹果开发者网站（输入验证码登录），添加新设备，然后生成profile文件, 然后导出profile文件, 再用一些重签名工具进行重签, 非常麻烦。 现在有了这个工具，只需调用一个API即可完成重签，非常之高效。\n\n[English](README_EN.md)\n\n# Requirements\n\n- Python3.6+\n- MacOS\n\n\n# Features\n\n- IPA重签名\n- 添加注册设备\n- 查找设备列表\n- 查找证书列表\n- 查找BundleId列表\n- 创建BundleId\n- 查找Profile列表\n- 创建Profile\n- 删除证书\n\n\n# Usage\n\n## Auth\n- 需提前去[苹果开发者网站](https://developer.apple.com/account/resources/devices/list)创建一个证书，安装到电脑上（只用执行这一次，以后都不用）\n- 参考 [API Authentication.md](/docs/Authentication.md) 获取API鉴权信息, `key_file`, `key_id`, `issuer_id`, `user_id`\n\n\n## Code Example\n\n```python3\nimport json\nfrom icertools.api import Api\nfrom icertools.resign import Resign\n\n# Auth info\nkey_file = '/Users/xx/AuthKey_xxx.p8'  # replace with your key file path\nkey_id = \"xxx\"   # replace with your key id\nissuer_id = \"xxx\"   # replace with your issuer id\nuser_id = \"xxx\"   # replace with your user id\n\n\napi = Api(\n    key_file=key_file,\n    key_id=key_id,\n    issuer_id=issuer_id,\n    user_id=user_id)\n\n\n# List Devices\ndata = api.list_devices()\nprint(json.dumps(data, indent=4))\n\n\n# List Bundle ID\ndata = api.list_bundle_ids()\nprint(json.dumps(data, indent=4))\n\n\n# Create Bundle ID\ndata = api.create_bundle_id(\"test\", \"*\")\nprint(json.dumps(data, indent=4))\n\n\n# List Certificates\ndata = api.list_certificates()\nprint(json.dumps(data, indent=4))\n\n\n# Create Certificate\ncsr_path = \"/Users/xx/CertificateSigningRequest.certSigningRequest\"    # replace with your certSigningRequest path\ndata = api.create_certificate(csr_path)\nprint(json.dumps(data, indent=4))\n\n\n# List Profiles\ndata = api.list_profiles()\nprint(json.dumps(data, indent=4))\n\n\n# Delete Profile\napi.delete_profile(\"8SX4Z2FBUL\")\n\n\n# Register Device\ndata = api.register_device(\"00008030-0004598921BB802E\", \"iPhone\")\nprint(json.dumps(data, indent=4))\n\n\n# Resign IPA\ninput_ipa_path = \"/Users/develop/tmp/ios-test.ipa\"\noutput_ipa_path = \"/Users/develop/tmp/resgin/r-ios-test.ipa\"\nr = Resign(api, input_ipa_path, output_ipa_path)\nr.resign_ipa()\n```\n\n\n# Refer to\n- [Xcode自动管理证书](https://www.jianshu.com/p/035ae1f1e563)\n- https://github.com/Ponytech/appstoreconnectapi\n- https://developer.apple.com/documentation/appstoreconnectapi\n- https://developer.apple.com/documentation/appstoreconnectapi/creating_api_keys_for_app_store_connect_api","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodematrixer%2Ficertools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodematrixer%2Ficertools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodematrixer%2Ficertools/lists"}