如何为同一个项目中的不同目标设置不同的AppDelegate?

时间:2016-10-26 04:24:23

标签: ios target appdelegate

我对Xcode中的目标概念非常陌生。我已按照此tutorial学习在同一项目中创建两个目标。我只想知道如何使目标A使用AppDelegateA.swift作为其指定的应用程序委托,目标B使用AppDelegateB.swift作为其指定的应用程序委托。因为在本教程中,它实际上教授如何从同一个AppDelegate制作两个应用程序。但我制作了两个(几乎)完全不同的应用程序,这些应用程序共享了大量资源和库。

虽然我们正在研究这个主题,但我是否也可以让目标A使用名为Main的故事板,而目标B也使用名为Main的故事板,但它们实际上是一个不同的故事板(但是在同一个项目中放在一起)?

3 个答案:

答案 0 :(得分:3)

是的,您可以根据目标创建2个不同的进行以下更改:

项目中的

main.m
你可以做点什么

int main(int argc, char *argv[])
{
    @autoreleasepool {

        NSString *appDelegateName;
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
            appDelegateName =  NSStringFromClass([AppDelegateIPhone class]);
        } else {
            appDelegateName =  NSStringFromClass([AppDelegateIPad class]);
        }
        return UIApplicationMain(argc, argv, nil, appDelegateName);
    }
}

但IMO你不应该这样做。

而不是像苹果那样做,在app委托加载不同的视图控制器或不同的XIB。

    @implementation AppDelegate

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
        // Override point for customization after application launch.
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
            self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease];
        } else {
            self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil] autorelease];
        }
        self.window.rootViewController = self.viewController;
        [self.window makeKeyAndVisible];
        return YES;
    }

@end

答案 1 :(得分:0)

希望我的回答有助于第二部分包含基于目标的多个AppDelegate文件。 https://stackoverflow.com/a/43227300/2715840

对于使用多个目标的第一部分,您可以通过简单地对基本目标进行双击来实现,您将获得已经复制的plist,根据新目标更改名称或者将其保持为同名plist.info但在不同的路径中。为了分离代码文件(如Appdelegates),故事板和资产,或者firebase plist配置文件,您可以在上面找到我的答案,就像这些目的一样。

希望这会有所帮助。

答案 2 :(得分:0)

对我遇到的一个老问题的新答案。这些天的答案很简单:

  1. 为每个目标复制main.m
  2. 在右侧面板中为每个main.m设置目标成员资格。
  3. 为每个目标创建AppDelegate类。它们可以具有相同或不同的名称,并为每个AppDelegate适当设置目标成员资格。
  4. 在每个mains.m中,调用它需要使用的AppDelegate类。它甚至可以具有不同的名称。