如何将两个ios应用程序合并为一个

时间:2014-08-05 05:26:57

标签: ios iphone

我有两个ios app应用程序的一个变体是针对老师的,第二个版本是针对学生的。学生版本是从应用程序商店的最近两年开始的。这个版本是非ARC项目。现在开发了应用程序的教师版本。这个版本正在使用故事板并拥有ARC。

我的问题是,学生版本的应用程序是基于tabbar的,tabbar是在app delegate中声明的。在教师版本中,应用程序基于大量定制的uinavigation控制器,如菜单中的侧面滑动;这是在app委托也是。现在我的问题是如何将这两个项目合并到一个iPhone应用程序中。

老师和学生都可以根据登录信息进行识别。

3 个答案:

答案 0 :(得分:0)

如果可以在登录阶段识别教师和学生,要解决此问题,您很可能需要在AppDelegate中创建统一的登录页面(根视图控制器)。然后,在用户登录后,您可以确定应用的哪个部分更合适,并显示UINavigationControllerUITabBarController中嵌入的下一个视图控制器。

答案 1 :(得分:0)

我会尝试将学生版本重新编写成故事板(与教师版本不同)并将其更新为ARC。然后,根据登录结果(学生或教师),加载相应的故事板。因此,在获得登录结果后,您可以执行以下操作:

 UIStoryboard *storyBoard;
 if (isStudent) {
   storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_student" bundle:nil];
 }
 else {
    NSLog(@"teacher!");
    storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_teacher" bundle:nil];
 }

UIViewController *initViewController = [storyBoard instantiateInitialViewController];
[self.window setRootViewController:initViewController];

为了确保您的应用程序将替换商店中的应用程序,请确保为新的组合应用程序保留与当前商店中的学生版本相同的包ID。

如果您不想将学生版本文件转换为ARC,可以将项目转换为ARC,但使用-fno-objc-arc标志标记尚未转换为arc的学生类

Compile Sources in Build Phases

基本上,单击项目文件,选择目标,选择Build Phases选项卡,对于不使用ARC的每个旧项目文件,在Compile的Compiler Flags字段中添加-fno-objc-arc来源部分。

答案 2 :(得分:0)

您可以通过向学生项目的所有类文件添加编译器标志-fno-objc-arc,使学生项目与ARC兼容。

从项目设置中删除故事板的自动加载,在AppDelegate中定义加载rootview的逻辑。

if (isStudent) {
   UIViewController *rootViewController = [[UIViewController alloc] init];//whatever you appdelegate code for student is
   [self.window setRootViewController:rootViewController];
 }
 else {
   NSLog(@"teacher!");
   UIStoryboard *storyBoard;
   storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_teacher" bundle:nil];
   UIViewController *initViewController = [storyBoard instantiateInitialViewController];
   [self.window setRootViewController:initViewController];
}
相关问题