打包平台基于 node.js 构建,使用了 RailwayJS 作为开发框架,使用 MongoDB 作为后端存储。另外打包平台还使用了 bash 以及 Python 来辅助编译。
基本架构
打包平台使用 RailwayJS 框架来作为整体开发框架,提供用户管理、代码上传、编译、下载打包结果功能。
过期检测
打包程序会遍历程序目录,在找到 -(void)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法后,会在该方法的起始插入以下代码:
dispatch_async(dispatch_queue_create("APP_EXPIRE_KILL", 0), ^{ // 检查程序是否过期 NSTimeInterval now = [[NSDate date] timeIntervalSince1970]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"MMM d yyyy"]; [formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]]; NSDate *expiresDate = [formatter dateFromString:[NSString stringWithFormat:@"%s", __DATE__]]; // 一周过期 if (now - [expiresDate timeIntervalSince1970] >= 7*24*3600) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"您使用的程序是测试版本,目前已经过期,请更新到最新版本" message:nil delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil]; [alert performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:NO]; sleep(10); kill(getpid(), 9); } });