☰
PojavLauncher_iOS 源码编译打包实战:3 个 Makefile 变量决定产物形态
2026/10/20 13:34:30 网站建设 项目流程

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.sdk
  • SDKPATH:iPhoneOS SDK 的绝对路径,macOS 上可用xcrun --sdk iphoneos --show-sdk-path取,要求版本 ≥ 14.0
  • SLIMMED、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是关键一步。

速查表:关键构建变量

参数推荐值一句话作用
SDKPATHiPhoneOS.sdk 绝对路径指定 SDK,版本 ≥ 14.0
PLATFORM2平台编号:2=iOS、3=tvOS、6=Mac Catalyst、7=iOS 模拟器
RELEASE1(发布)/0(调试)决定 Release 还是 Debug 编译
TROLLSTORE_JIT_ENT1(TrollStore 包)打 TrollStore 专属包,产物带.tipa
SLIMMED/SLIMMED_ONLY1(已预装 JRE 的机型)产物剥离java_runtimes/瘦身,ONLY=1 只打瘦包
TEAMID/SIGNING_TEAMID/PROVISIONING证书三件套启用 codesign,缺省-1跳过
SLIMMED_ONLY01时只出瘦包,跳过标准 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询