{"id":45444987,"url":"https://github.com/wangweicheng7/ipublish","last_synced_at":"2026-02-22T03:53:18.223Z","repository":{"id":62571571,"uuid":"135562805","full_name":"wangweicheng7/ipublish","owner":"wangweicheng7","description":null,"archived":false,"fork":false,"pushed_at":"2018-10-31T06:57:58.000Z","size":94,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-14T08:21:04.990Z","etag":null,"topics":["archive","build","ios","publish","python","upload","xcode","xcodebuild"],"latest_commit_sha":null,"homepage":null,"language":"Python","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/wangweicheng7.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}},"created_at":"2018-05-31T09:31:56.000Z","updated_at":"2018-10-31T06:53:37.000Z","dependencies_parsed_at":"2022-11-03T18:26:10.025Z","dependency_job_id":null,"html_url":"https://github.com/wangweicheng7/ipublish","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/wangweicheng7/ipublish","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wangweicheng7%2Fipublish","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wangweicheng7%2Fipublish/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wangweicheng7%2Fipublish/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wangweicheng7%2Fipublish/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wangweicheng7","download_url":"https://codeload.github.com/wangweicheng7/ipublish/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wangweicheng7%2Fipublish/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29704420,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T03:17:42.375Z","status":"ssl_error","status_checked_at":"2026-02-22T03:17:31.622Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["archive","build","ios","publish","python","upload","xcode","xcodebuild"],"created_at":"2026-02-22T03:53:17.638Z","updated_at":"2026-02-22T03:53:18.218Z","avatar_url":"https://github.com/wangweicheng7.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# iOS 发布工具\n---\n编译，打包，发布到服务器， 你只需要一个简单的命令，`ipublish`就能全部帮你搞定这些。\n### Install\n\npython 2.7\n\n```\npip install ipublish\n```\n\n### Require\n1. Xcode 9.0\n\n2. 创建 `ExportOptions.plist` 文件`[Require]`  \n\t在工程的根目录创建一个`ExportOptions.plist`文件，下图是 \t`ExportOptions.plist` 的一个例子，你可以根据自己的情况去修改\n\t\n\t![](souces/exportoption.png)\n\t\n\t你也可以使用`Xcode`手动构建，在导出的`ipa`文件同目录下，你会发现生成的`ExportOptions.plist`文件，然后拷贝到工程根目录，就可以一劳永逸。\n3. 如果你还不太清楚`ExportOptions.plist`相关的信息，你可以配置好`Xcode`证书之后使用\n\t\n\t```\n\tipublish --init\n\t```\n\n### Quick Start\n\n1. __publish__\n\n\t快速体验\n\t\t\n\t```\n\tcd /path/of/your/ios/project\n\tipublish\n\t```\n\t\n2. __发布到fir.im__\n\t\n\t添加 __fir.im__ 的 __api_token__\n\t* 如果你想上传到你的fir.im账户上，你需要在[fir.im](fir.im)账户上拿到你的`api_token`，然后把它添加到程序中\n\t\n\t\t```\n\t\tipublish-fir api_token\n\t\t```\n\t* 你也可以直接编译项目，程序依然会记录你的`api_token`，就像这样\n\t\n\t\t```\n\t\tipublish -f api_token\n\t\t# or\n\t\tipublish --fir api_token\n\t\t```\n\t\t\n\t以上两种方式任选一种，之后的操作，你只需要在你的工程根目录下执行就可以了\n\t\n\t```\n\tipublish\n\t```\n\t\n\t如果你需要更新你的fir.im 的api_token，\n\t\n\t```\n\tipublish-fir api_token\n\t```\n\t\n3. __发布到蒲公英__\n\t\n\t[蒲公英](https://www.pgyer.com/doc/view/api)平台的操作，基本和fir.im是一样的，同样是添加蒲公英的 __api_key__\n\t\n\t```\n\tipublish-pgy api_key\n\t# or\n\tipublish -p api_key\n\t# or\n\tipublish --pgy api_key\n\t```\n\t\n4. __发布到自己服务器__\n\t\n\t如果你希望发布到自己的服务器，你需要自己写上传脚本，然后像下面这样，但目前只支持`python`编写的脚本\n\t\n\t```\n\tipublish --upload script.py\n\t```\n\t当然同一目录下，程序依然会记录你的上传脚本，所以后面的操作，你依然可以使用以下命令一键编译并上传到自己的服务器。\n\t\n\t```\n\tipublish\n\t```\n\t这里有一个自定义服务器的上传脚本例子，你可以参考[upload.py](./upload.py)\n\t\n5. __发布规则__\n\n\t1. 默认上传，即不加参数编译上传\n\t\t\n\t\t```\n\t\tipublish\n\t\t```\n\t\t* 程序默认优先发布到自定义服务器，如果你使用过自定义服务器的上传脚本，并且目录下有上传脚本的话。\n\t\t* 其次会发布到 fir.im 平台，如果不满足自定义服务器发布的条件，并且你程序记录过你 fir.im 账户的`api_token`。\n\t\t* 如果前面两个发布的条件都不满足，程序会选择蒲公英平台上传，当然在这之前程序必须记录了你的蒲公英账户的`api_key`。\n\t\t* 如果以上条件统统不满足，当然不会上传。\n\t\n\t2. __选择发布__\n\t\n\t\t选择上传的前提是程序之前记录过上传相关的信息，如果你满足所有的上传条件，但是不想选择默认的上传方式。\n\t\t\n\t\t```\n\t\tipublish -f\t#上传到fir.im，程序中必须记录过 api_token\n\t\t# or\n\t\tipublish -p\t#上传到蒲公英，程序中必须记录过 api_key\n\t\t```\n\t\t为了保证自定义上传的顺利进行，如果你要选择自定义上传，必须传入脚本文件\n\t\t\n\t\t```\n\t\tipublish --upload upload.py\t#上传自定义平台\n\t\t# or\n\t\tipublish\n\t\t```\n\t3. __无需发布__\n\t\t\n\t\t如果你不想发布到任何服务器，只是导出`ipa`，你可以尝试下面的操作\n\t\t\n\t\t```\n\t\tipublish -b\n\t\t```\n\n* 感谢我的朋友[Shayne](https://github.com/FCF5646448)提供给我的意见。*","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwangweicheng7%2Fipublish","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwangweicheng7%2Fipublish","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwangweicheng7%2Fipublish/lists"}