go、云原生技术 ...... 来者不拒,欢迎关注
每个客户端开发者都会想独立开发一款自己的 APP 。 但 iOS 不像 Android 那样可以自由的分享应用给其他人安装 (Android 只要把 apk 甩出去就行了)
对于 iOS 开发者来说,苹果开发者账号几乎人手必备(这里只讨论个人账号), 而苹果公司允许我们添加 100 台设备(udid)绑定到账号上,这 100 台设备可以自由安装由账号签名且使用 Ad Hoc 方式打包出的 .ipa
本项目就是利用这个规则,来简化 iOS APP 的分享流程。当你开发一款 APP 的过程中,想要给身边的小伙伴体验一下,只需要使用本项目上传你的 IPA 并生成一个二维码链接,扫一扫,即可全程自动绑定设备并签名安装 APP
本项目核心功能调用 zsign 和 App Store Connect API 实现
本项目添加开发者账号后会占用账号的一个 iOS Development certificate 名额(每个账号最多只能创建两个),所以你可能得预留一个
本项目仅作为给个人开发者分享自己的合法合规的 APP 使用,严禁使用本项目进行任何商业盈利、损害官方利益、分享任何违法违规的 APP 等行为
本项目开源免费,纯技术分享,不提供任何平台支持,不基于此项目做任何定制开发(请勿扰)
本项目若有 bug 可提交 issue ,会抽空维护,但是不再继续增加新的功能
后台管理登录 | 开发者账号管理 |
应用管理 | 扫码安装应用 |
阿里云 OSS 设置 | 更改用户名密码 |
等待 APP 打包中 | 开始安装 APP |
注:开发者账号的 iss、kid、P8 文件在 https://appstoreconnect.apple.com/access/api 创建
Railway 一键部署(每月有 5 美元的免费额度可以白嫖):
Docker 部署:
提供了多种部署方案供参考,不同方案的区别仅在于 docker-compose.yml
的配置不同,部署时根据实际情况选择其中任意一种即可
需要准备的东西:
- 一个域名,并解析到你的服务器IP地址上,例如:
example.com
- 服务器开放
80
和443
端口,并确保没有被其它程序占用 - 一个邮箱地址,用于自动向 Let's Encrypt 申请免费SSL证书,例如:
foo@qq.com
创建 docker-compose.yml
,内容如下:
version: '3'
services:
server:
image: togettoyou/ipashare: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
- SERVER_ACMEEMAIL=foo@qq.com
- SERVER_MAXJOB=10
- SERVER_RUNMODE=release
- LOG_LEVEL=info
优点:快速部署,自动配置SSL证书
缺点:需要占用 80
和 443
端口
需要准备的东西:
- 一个域名,并解析到你的服务器IP地址上,例如:
example.com
- 服务器开放
80
和443
端口,并确保没有被其它程序占用 - 自行准备域名的SSL证书,例如:
ssl.crt
和ssl.key
创建 docker-compose.yml
,内容如下:
version: '3'
services:
server:
image: togettoyou/ipashare: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证书
需要准备的东西:
- 一个域名,并解析到你的服务器IP地址上,例如:
example.com
- 指定一个任意空闲端口,例如:
8888
- 服务器需要部署其它能够支持反向代理和SSL的网关服务,例如:Nginx
创建 docker-compose.yml
,内容如下:
version: '3'
services:
server:
image: togettoyou/ipashare: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,1小时后会自动删除)upload_file_path
: 文件上传路径(上传的 IPA)sqlite.db
: 默认的sqlite数据库文件
数据库支持更换为 MySQL ,在 docker-compose.yml
加入以下环境变量 :
- MYSQL_ENABLE=true
- MYSQL_DSN=root:123456@tcp(127.0.0.1:3306)/db_default?charset=utf8mb4&parseTime=True&loc=Local
更多环境变量可参考:server/conf/default.yaml ,变量层级使用 _
连接,如 MYSQL_MAXIDLE
代表 mysql
配置中的空闲连接池中连接的最大数量
本项目使用 GoLand 开发,感谢 JetBrains 提供的免费授权