项目标题与描述
AltStore 是一个为非越狱 iOS 设备设计的替代应用商店。它允许用户使用个人 Apple ID 签名并安装第三方应用(.ipa 文件)。AltStore 通过 WiFi 与桌面应用 AltServer 通信,自动刷新应用以防止证书过期。
功能特性
WiFi 安装:通过 AltServer 在局域网内无线安装应用
自动签名:使用用户 Apple ID 自动为应用签名
后台刷新:定期自动刷新应用签名防止过期
应用更新:直接在 AltStore 内更新已安装应用
多设备支持:支持 iOS 和 macOS 平台
开发者友好:支持分发开发者自己的应用
安装指南
系统要求
Xcode 15
Swift 5.9
iOS 14.0 (AltStore)
macOS 11.0 (AltServer)
安装步骤
下载并安装 AltServer
确保 iOS 设备与电脑在同一 WiFi 网络
通过 AltServer 安装 AltStore 到 iOS 设备
在设备上信任开发者证书
使用说明
基础使用
let keychain = Keychain(service: "com.example.github-token")
keychain["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef"
安装应用
准备 .ipa 文件
通过 AltStore 选择文件并安装
输入 Apple ID 进行签名
自动刷新
AltStore 会在以下情况下自动刷新应用:
设备与 AltServer 在同一网络
应用即将过期(7天有效期)
核心代码
应用签名核心逻辑
void *injectApp(void *originalApp, size_t originalAppSize, void *appToInject, size_t appToInjectSize, size_t *outputSize) {
*outputSize = 0;
// 验证待注入应用架构
MachOHeader *injectedHeader = (MachOHeader*) appToInject;
if (injectedHeader->cpuType != CPU_TYPE_ARM64) {
return NULL;
}
// 构建 FAT 头
size_t totalSize = 0x4000 + ROUND_TO_PAGE(originalAppSize) + ROUND_TO_PAGE(appToInjectSize);
void *fatBuf = malloc(totalSize);
// 写入原始应用和注入应用
memcpy(fatBuf + 0x4000, originalApp, originalAppSize);
memcpy(fatBuf + 0x4000 + originalAppSizeRounded, appToInject, appToInjectSize);
*outputSize = totalSize;
return fatBuf;
}
设备管理核心类
@interface ALTDeviceManager : NSObject
@property (class, nonatomic, readonly) ALTDeviceManager *sharedManager;
// 应用安装
- (NSProgress *)installAppAtURL:(NSURL *)fileURL
toDeviceWithUDID:(NSString *)udid
activeProvisioningProfiles:(nullable NSSet
completionHandler:(void (^)(BOOL success, NSError *_Nullable error))completionHandler;
// 应用移除
- (void)removeAppForBundleIdentifier:(NSString *)bundleIdentifier
fromDeviceWithUDID:(NSString *)udid
completionHandler:(void (^)(BOOL success, NSError *_Nullable error))completionHandler;
@end
错误处理
typedef NS_ERROR_ENUM(AltServerErrorDomain, ALTServerError) {
ALTServerErrorUnderlyingError = -1,
ALTServerErrorUnknown = 0,
ALTServerErrorConnectionFailed = 1,
ALTServerErrorLostConnection = 2,
ALTServerErrorDeviceNotFound = 3,
ALTServerErrorDeviceWriteFailed = 4,
ALTServerErrorInvalidRequest = 5,
ALTServerErrorInvalidResponse = 6,
ALTServerErrorInvalidApp = 7,
ALTServerErrorInstallationFailed = 8,
ALTServerErrorMaximumFreeAppLimitReached = 9,
ALTServerErrorUnsupportediOSVersion = 10
};
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码