PojavLauncher_iOS 源码编译打包实战:3 个 Makefile 变量决定产物形态
【免费下载链接】PojavLauncher_iOSA Minecraft: Java Edition Launcher for Android and iOS based on Boardwalk. Succeeded by https://github.com/AngelAuraMC/Amethyst-iOS项目地址: https://gitcode.com/GitHub_Trending/po/PojavLauncher_iOS
把 PojavLauncher_iOS 克隆下来直接make,九成会栽在同一处:SDK 路径没给、目标平台没选、签名 entitlements 没对齐。PojavLauncher_iOS 是跑 Minecraft: Java Edition 的 iOS 启动器(现已停止维护,后续由 Amethyst 接手),但仓库是完整可构建的。本地打包只需对齐SDKPATH、PLATFORM和签名三处配置,产物就在artifacts/里。
先搞懂构建流水线:Makefile 怎么把 app 拼出来
把根目录 Makefile 看成一条装配线:cmake 交叉编译原生代码(Natives/下的 ObjC 桥接层)→ javac 编译 Java 层(JavaApp/)→ 下载三套 iOS 版 OpenJDK 运行时 → ldid 签名打包。四个环节有先后依赖,任何一环的变量缺位都会让整条线停摆。
场景一:macOS 或 Linux 下做 AltStore/SideStore 侧载包
推荐配置:
git clone https://gitcode.com/GitHub_Trending/po/PojavLauncher_iOS cd PojavLauncher_iOS make SDKPATH=/path/to/iPhoneOS.sdkSDKPATH:iPhoneOS SDK 的绝对路径,macOS 上可用xcrun --sdk iphoneos --show-sdk-path取,要求版本 ≥ 14.0SLIMMED、TROLLSTORE_JIT_ENT不传时默认关闭,打出标准包
为什么这么配:make的默认目标是all,会按依赖链一次跑完 native、java、jre、payload、package 全流程,不需要手动分步。
依赖别漏:cmake、JDK 8、ldid、wget,Linux 额外要lld;macOS 跑 assets 环节还需要actool。缺哪个,Makefile 开头会直接$(error ...)报出名字。
📌 最容易踩的坑:产物只有net.kdt.pojavlauncher-3.0-ios.ipa,没有.tipa后缀。没传TROLLSTORE_JIT_ENT=1时就是预期行为——标准包走 entitlements.sideload.xml 签名,沙盒内保留get-task-allow以便调试器挂 JIT。
场景二:给 TrollStore 设备打包,JIT 自动开启
推荐配置:
make SDKPATH=/path/to/iPhoneOS.sdk TROLLSTORE_JIT_ENT=1为什么这么配:该变量让 Makefile 改用entitlements.trollstore.xml对主程序重签,产物改为.tipa后缀,安装后免沙盒、JIT 自动启用、内存上限提高。
⚠️ 坑:TROLLSTORE_JIT_ENT=1的包只适合 TrollStore 渠道。拿去 AltStore/SideStore 装会失败或行为异常——那两个渠道的 JIT 要靠调试器或电脑端工具外挂,打包时不要带这个变量。
场景三:有 Apple 开发者证书,做正式 codesign 包
推荐配置:
make SDKPATH=/path/to/iPhoneOS.sdk \ TEAMID=你的TeamID \ SIGNING_TEAMID=你的TeamID \ PROVISIONING=/path/to/描述文件.mobileprovision为什么这么配:三个值齐了,package 环节会动态生成带get-task-allow的 entitlements,对 app 和java_runtimes/下所有 Mach-O 逐个调用codesign重签。
⚠️ 坑:无 UDID 的分发证书("trusted source" 类签名服务)给不了get-task-allow,JIT 直接失效。想跑 JIT 只能换 Development 证书重签,或接受外挂 JIT 方案。
场景四:Linux 上交叉编译 iOS 目标
SDKPATH沿用上文场景一,Linux 下手动提供 iPhoneOS SDK 14.0+ 即可。
为什么这么配:平台检测命中 Linux 后,链接参数自动切到-fuse-ld=lld,无需你干预。其余流程与场景一完全一致,产物同样是artifacts/下的 ipa/tipa。
⚠️ 坑:Linux 装完 ldid、lld 还报缺依赖时,先make check,它会按变量逐行 dump 当前配置,缺哪项一眼可见,比翻日志快。
踩坑速修
You need to specify SDKPATH→SDKPATH是必传变量,Makefile 不会替你猜。修复:make SDKPATH=$(xcrun --sdk iphoneos --show-sdk-path),Linux 则换成你手动放置的 SDK 目录。You need to install ldid(或 cmake/JDK 8)→ 构建依赖没装齐。修复:Linux 用apt install cmake ldid wget lld补齐,BOOTJDK指向 JDK 8 的 bin 目录。- TrollStore 包拿去 AltStore 装不进去→
TROLLSTORE_JIT_ENT=1的 entitlements 与侧载渠道冲突。修复:去掉该变量重打标准 ipa。 - 装上了但游戏卡顿、闪退→ JIT 没开。先确认渠道是否自动启用 JIT(AltStore 需同网段 AltServer,TrollStore 才全自动);iOS 17/18 还得靠电脑端 pymobiledevice3 辅助。签名 entitlements 里查
get-task-allow是否为true是关键一步。
速查表:关键构建变量
| 参数 | 推荐值 | 一句话作用 |
|---|---|---|
SDKPATH | iPhoneOS.sdk 绝对路径 | 指定 SDK,版本 ≥ 14.0 |
PLATFORM | 2 | 平台编号:2=iOS、3=tvOS、6=Mac Catalyst、7=iOS 模拟器 |
RELEASE | 1(发布)/0(调试) | 决定 Release 还是 Debug 编译 |
TROLLSTORE_JIT_ENT | 1(TrollStore 包) | 打 TrollStore 专属包,产物带.tipa |
SLIMMED/SLIMMED_ONLY | 1(已预装 JRE 的机型) | 产物剥离java_runtimes/瘦身,ONLY=1 只打瘦包 |
TEAMID/SIGNING_TEAMID/PROVISIONING | 证书三件套 | 启用 codesign,缺省-1跳过 |
SLIMMED_ONLY | 0 | 1时只出瘦包,跳过标准 ipa |
改完变量重新make就能出包,出包失败先查"踩坑速修"。
【免费下载链接】PojavLauncher_iOSA Minecraft: Java Edition Launcher for Android and iOS based on Boardwalk. Succeeded by https://github.com/AngelAuraMC/Amethyst-iOS项目地址: https://gitcode.com/GitHub_Trending/po/PojavLauncher_iOS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考