/ipashare

🚤 share and install your Apple ipa 分享你的 ipa 应用给别人安装

Primary LanguageGoMIT LicenseMIT

微信公众号:SuperGopher

go、云原生技术 ...... 来者不拒,欢迎关注

微信公众号.png

起源

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

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

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

注意事项

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

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

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

本项目开源免费,纯技术分享,不提供任何平台支持,不基于此项目做任何定制开发(请勿扰)

本项目若有 bug 可提交 issue ,会抽空维护,但是不再继续增加新的功能

效果预览

login developer
后台管理登录 开发者账号管理
ipalist qrcode
应用管理 扫码安装应用
oss pw
阿里云 OSS 设置 更改用户名密码
htdb install
等待 APP 打包中 开始安装 APP

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

image

部署项目

Railway 一键部署(每月有 5 美元的免费额度可以白嫖):

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/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证书

缺点:需要占用 80443 端口

配置 2

需要准备的东西:

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

优点:快速部署

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

配置 3

需要准备的东西:

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

优点:不需要占用 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,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 配置中的空闲连接池中连接的最大数量

JetBrains 开源证书支持

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