/rip

Primary LanguageGoMIT LicenseMIT

微信公众号:SuperGopher

go、云原生技术、项目问题、单纯支持 ...... 来者不拒

微信公众号.png

起源

每个客户端开发者都会想独立开发一款自己的 APP 。 但 iOS 不像 Android 那样可以自由分发应用 (Android 只要把 apk 甩出去就行了)

对于 iOS 开发者来说,苹果开发者账号几乎人手必备(这里只讨论个人账号), 而苹果公司允许我们添加 100 台设备(udid)绑定到账号上,这 100 台设备可以自由安装由账号签名且使用 Ad Hoc 方式打包出的 .ipa

本项目就是利用这个规则,来简化 iOS APP 的分发流程。当你开发一款 APP 的过程中,想要给身边的小伙伴体验一下,只需要使用本项目生成一个二维码链接,扫一扫,即可全程自动绑定设备并签名安装 APP

注意事项

本项目核心功能调用 zsignApp Store Connect API 实现

本项目添加开发者账号后会占用账号的一个 iOS Development certificate 名额(每个账号最多只能创建两个),所以你可能得预留一个

本项目仅作为给开发者分发合法合规的 APP 使用,严禁使用本项目进行任何盈利、损害官方利益、分发任何违法违规的 APP 等行为

效果预览

https://supersign.up.railway.app/admin (只作界面演示预览用途,勿滥用。每次更新代码将重置数据)

开发者账号管理 应用管理
阿里云OSS设置 用户名密码修改
描述文件下载 安装描述文件获取 UDID
等待重签名 安装 APP

注:开发者账号的 iss、kid、P8 文件在 https://appstoreconnect.apple.com/access/api 创建

image

部署项目

Railway 平台一键部署(每月 5 美元的免费额度,本项目的预览环境就部署在 Railway):

Deploy on Railway

Docker 部署:

提供了多种部署方案供参考,不同方案的区别仅在于 docker-compose.yml 的配置不同,部署时根据实际情况选择其中任意一种即可

配置 1

需要准备的东西:

  1. 一个域名,并解析到你的服务器IP地址上,例如:example.com
  2. 服务器开放 80443 端口,并确保没有被其它程序占用
  3. 一个邮箱地址,用于自动向 Let's Encrypt 申请免费SSL证书,例如:foo@qq.com

创建 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
      - SERVER_ACMEEMAIL=foo@qq.com
      - SERVER_MAXJOB=10
      - SERVER_RUNMODE=release
      - LOG_LEVEL=info

优点:快速部署,自动配置SSL证书

缺点:需要占用 80443 端口

配置 2

需要准备的东西:

  1. 一个域名,并解析到你的服务器IP地址上,例如:example.com
  2. 服务器开放 80443 端口,并确保没有被其它程序占用
  3. 自行准备域名的SSL证书,例如:ssl.crtssl.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

优点:快速部署

缺点:需要占用 80443 端口,需要自己准备SSL证书

配置 3

需要准备的东西:

  1. 一个域名,并解析到你的服务器IP地址上,例如:example.com
  2. 指定一个任意空闲端口,例如:8888
  3. 服务器需要部署其它能够支持反向代理和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;
}

优点:不需要占用 80443 端口、可利用网关强大的能力(上传大小限制等)

启动和停止

# 前台运行服务
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:123456@tcp(127.0.0.1:3306)/db_default?charset=utf8mb4&parseTime=True&loc=Local

更多环境变量可参考:server/conf/default.yaml ,变量层级使用 _ 连接,如 MYSQL_MAXIDLE 代表 mysql 配置中的空闲连接池中连接的最大数量

喝杯奶茶

如有帮助,可以打赏支持,一分也是爱!

微信打赏 支付宝打赏
微信 支付宝

JetBrains 开源证书支持

本项目使用 GoLand 开发,感谢 JetBrains 提供的免费授权