2016-10-26 9 views
0

私はXcodeのターゲットコンセプトに非常に新しいです。同じプロジェクトで2つのターゲットを作成する方法については、このtutorialに従っています。私はちょうどターゲットAを使用する方法を知りたいのですが、指定されたアプリケーションデリゲートとしてAppDelegateA.swiftを使用し、ターゲットBは指定されたアプリケーションデリゲートとしてAppDelegateB.swiftを使用します。このチュートリアルでは、同じAppDelegateから2つのアプリケーションを作成する方法を実際に教えるためです。しかし、私は2つの(ほとんど)完全に異なるアプリケーションを作成し、多くのリソースとライブラリを共有しています。同じプロジェクト内の異なるターゲットに対して異なるAppDelegateを設定するにはどうすればよいですか?

私たちが対象としている間に、ターゲットAにMainというストーリーボードを使用させることはできますか?ターゲットBもMainというストーリーボードを使用しますが、実際は別のストーリーボードです)?

+0

私は不思議ですが、なぜこれが欲しいですか? – Alexander

+0

@AlexanderMomchliov私はコードをできるだけ別々にしておきたいのです。私の意見では、AppDelegateはアプリケーションの「エントリーポイント」なので、実際には非常に異なるアプリケーション(しかし、ライブラリとリソースを大量に共有する)間のターゲットを分離する必要があります。これは、AppDelegateを含む自分のフォルダ内のそれぞれのターゲットを整理し、別のプロジェクトに素早くコピーすることができるようにするためです。 –

+2

非常に異なるアプリケーションが2つある場合は、2つの異なるプロジェクトにする必要があります。共有コードは、最初の2つから参照される第3のライブラリプロジェクトに抽出される必要があります。 – Alexander

答えて

2

はい、あなたがターゲットに基づく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、あなたがやるべきではありませんそれ。

代わりに、Appleのようにアプリケーションのデリゲートで別のView Controllerまたは別の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 
+2

これはSwiftではなくObjective-C(pre-ARC)です。 –

+0

このコードを迅速に変換することができます。 – Vinodh

+0

ああ、2つのAppDelegateを持つ代わりに、同じAppDelegateを使用しますが、異なる画面をすべて読み込みます。両方の方法を提供していただきありがとうございます! –

0

私のここでの答えは、ターゲットに基づいて複数のAppDelegateファイルを含めるのに役立ちます。あなたは、単にベース・ターゲットをdoublicatingによってそうすることができ、複数のターゲットを使用しての最初の部分については https://stackoverflow.com/a/43227300/2715840

、あなたは、異なるパスに新しい目標に基づいて、あなたのplistはすでにコピーされた変更の名前を取得したり、それを同じ名前のplist.infoを維持します。 (Appdelegatesのような)コードファイル、ストーリーボードとアセット、またはfirebase plist設定ファイルを分離するために、これらの目的のために有効な上記の私の答えを見つけることができます。

これが役に立ちます。

関連する問題