微信公众号:SuperGopher
go、云原生技术 ...... 来者不拒
起源
每个客户端开发者都会想独立开发一款自己的 APP 。 但 iOS 不像 Android 那样可以自由分发应用 (Android 只要把 apk 甩出去就行了)
对于 iOS 开发者来说,苹果开发者账号几乎人手必备(这里只讨论个人账号), 而苹果公司允许我们添加 100 台设备(udid)绑定到账号上,这 100 台设备可以自由安装由账号签名且使用 Ad Hoc 方式打包出的 .ipa
本项目就是利用这个规则,来简化 iOS APP 的分发流程。当你开发一款 APP 的过程中,想要给身边的小伙伴体验一下,只需要使用本项目生成一个二维码链接,扫一扫,即可全程自动绑定设备并签名安装 APP
注意事项
本项目核心功能调用 zsign 和 App Store Connect API 实现
本项目添加开发者账号后会占用账号的一个 iOS Development certificate 名额(每个账号最多只能创建两个),所以你可能得预留一个
本项目仅作为给个人开发者分发合法合规的 APP 使用,严禁使用本项目进行任何商业盈利、损害官方利益、分发任何违法违规的 APP 等行为
本项目开源免费,纯技术分享,不提供平台支持,不再继续更新新功能,不做定制开发(勿扰)
效果预览
开发者账号管理 | 应用管理 |
阿里云OSS设置 | 用户名密码修改 |
描述文件下载 | 安装描述文件获取 UDID |
等待重签名 | 安装 APP |
注:开发者账号的 iss、kid、P8 文件在 https://appstoreconnect.apple.com/access/api 创建
部署项目
Railway 一键部署(每月 5 美元的免费额度可以白嫖):
Docker 部署:
提供了多种部署方案供参考,不同方案的区别仅在于 docker-compose.yml
的配置不同,部署时根据实际情况选择其中任意一种即可
配置 1
需要准备的东西:
- 一个域名,并解析到你的服务器IP地址上,例如:
example.com
- 服务器开放
80
和443
端口,并确保没有被其它程序占用 - 一个邮箱地址,用于自动向 Let's Encrypt 申请免费SSL证书,例如:
[email protected]
创建 docker-compose.yml
,内容如下:
version: '3' services: server: image: togettoyou/supersign:latest ports: - "80:80" - "443:443" volumes: - $PWD/data:/root/togettoyou/data - /etc/timezone:/etc/timezone - /etc/localtime:/etc/localtime environment: - SERVER_URL=https://example.com - SERVER_TLS=true - SERVER_AUTOTLS=true - [email protected] - SERVER_MAXJOB=10 - SERVER_RUNMODE=release - LOG_LEVEL=info
优点:快速部署,自动配置SSL证书
缺点:需要占用 80
和 443
端口
配置 2
需要准备的东西:
- 一个域名,并解析到你的服务器IP地址上,例如:
example.com
- 服务器开放
80
和443
端口,并确保没有被其它程序占用 - 自行准备域名的SSL证书,例如:
ssl.crt
和ssl.key
创建 docker-compose.yml
,内容如下:
version: '3' services: server: image: togettoyou/supersign:latest ports: - "80:80" - "443:443" volumes: - $PWD/data:/root/togettoyou/data - $PWD/ssl.crt:/root/togettoyou/ssl.crt - $PWD/ssl.key:/root/togettoyou/ssl.key - /etc/timezone:/etc/timezone - /etc/localtime:/etc/localtime environment: - SERVER_URL=https://example.com - SERVER_TLS=true - SERVER_AUTOTLS=false - SERVER_CRT=ssl.crt - SERVER_KEY=ssl.key - SERVER_MAXJOB=10 - SERVER_RUNMODE=release - LOG_LEVEL=info
优点:快速部署
缺点:需要占用 80
和 443
端口,需要自己准备SSL证书
配置 3
需要准备的东西:
- 一个域名,并解析到你的服务器IP地址上,例如:
example.com
- 指定一个任意空闲端口,例如:
8888
- 服务器需要部署其它能够支持反向代理和SSL的网关服务,例如:Nginx
创建 docker-compose.yml
,内容如下:
version: '3' services: server: image: togettoyou/supersign:latest ports: - "8888:8888" volumes: - $PWD/data:/root/togettoyou/data - /etc/timezone:/etc/timezone - /etc/localtime:/etc/localtime environment: - SERVER_URL=https://example.com - SERVER_HTTPPORT=8888 - SERVER_MAXJOB=10 - SERVER_RUNMODE=release - LOG_LEVEL=info
此方案需要你额外在网关服务上配置反向代理以及SSL证书,以 Nginx 配置为例:
server { listen 80; server_name example.com; rewrite ^(.*)$ https://$host$1 permanent; } server { listen 443 ssl; server_name example.com; client_max_body_size 300m; client_body_buffer_size 50m; location / { proxy_pass http://127.0.0.1:8888; proxy_http_version 1.1; proxy_set_header Host $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } ssl on; ssl_certificate /etc/nginx/ssl/domain.crt; ssl_certificate_key /etc/nginx/ssl/domain.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE; ssl_prefer_server_ciphers on; }
优点:不需要占用 80
和 443
端口、可利用网关强大的能力(上传大小限制等)
启动和停止
# 前台运行服务 docker-compose up # 后台运行服务 docker-compose up -d # 查看服务日志 docker-compose logs -f --tail 100 # 停止服务 docker-compose stop # 启动服务 docker-compose start # 重启服务 docker-compose restart # 删除服务 docker-compose down -v
启动成功后可通过 域名/admin
例如 https://example.com/admin
访问后台管理
持久化
项目启动后所有文件保存在 data
目录,请妥善保管
apple_developer
: 苹果开发者账号相关证书temporary_file_path
: 临时文件存放路径(重签名后的 IPA)upload_file_path
: 文件上传路径(上传的 IPA)sqlite.db
: 默认的sqlite数据库文件
数据库支持更换为 MySQL ,在 docker-compose.yml
加入以下环境变量 :
- MYSQL_ENABLE=true - MYSQL_DSN=root:[email protected](127.0.0.1:3306)/db_default?charset=utf8mb4&parseTime=True&loc=Local
更多环境变量可参考:server/conf/default.yaml ,变量层级使用 _
连接,如 MYSQL_MAXIDLE
代表 mysql
配置中的空闲连接池中连接的最大数量
JetBrains 开源证书支持
本项目使用 GoLand 开发,感谢 JetBrains 提供的免费授权