title: IOS Targets for each client
body: <p><strong>A little background:</strong> </p>
  
  <p>In android we have developed the same app, basically we have developed the Android app first now we have created its IOS version, so there are multiple clients of this app. In android we are really handling this situation using Android modules system.</p>
  
  <p>Now in IOS we have to do same thing. And that is to make the samecode base to be use in for multiple clients. </p>
  
  <p>I did research and found the Targets and framework are the best option. I created the workspace added the framework and added the projects. But it all going in trouble for no reason. </p>
  
  <p>So I decided to move onto targets. So I read and its easy to understand but can it satisfy my following requirements</p>
  
  <ol>
  <li>Separate swift file for each target. (I have a common file which contains URL links and other things, that is needed different for each client, so can I make same file per client having change the urls and other things</li>
  <li>App icons (there must be separate icons for each targets ) </li>
  <li>Colors off app (I want different color for each client. Here I really do not know how to do this, because I have given Colors to app using IB) </li>
  <li>FCM and its file "GoogleService-Info.plist" (how it should be managed for multiple targets )</li>
  </ol>
  
  <p>Update: This is How I am coding in App Delegate </p>
  
  <pre><code>    import Firebase
  class AppDelegate: UIResponder, UIApplicationDelegate {
  
      var window: UIWindow?
      let gcmMessageIDKey = "gcm.message_id"
  
      func application(_ application: UIApplication,
                       didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -&gt; Bool {
  
          FirebaseApp.configure()
  
          // [START set_messaging_delegate]
          Messaging.messaging().delegate = self
          // [END set_messaging_delegate]
          // Register for remote notifications. This shows a permission dialog on first run, to
          // show the dialog at a more appropriate time move this registration accordingly.
          // [START register_for_notifications]
          if #available(iOS 10.0, *) {
              // For iOS 10 display notification (sent via APNS)
              UNUserNotificationCenter.current().delegate = self
  
              let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
              UNUserNotificationCenter.current().requestAuthorization(
                  options: authOptions,
                  completionHandler: {_, _ in })
          } else {
              let settings: UIUserNotificationSettings =
                  UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
              application.registerUserNotificationSettings(settings)
          }
  
          application.registerForRemoteNotifications()
  
          // [END register_for_notifications]
          return true
      }
  
      // [START receive_message]
      func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
          // If you are receiving a notification message while your app is in the background,
          // this callback will not be fired till the user taps on the notification launching the application.
          // TODO: Handle data of notification
          // With swizzling disabled you must let Messaging know about the message, for Analytics
          // Messaging.messaging().appDidReceiveMessage(userInfo)
          // Print message ID.
          if let messageID = userInfo[gcmMessageIDKey] {
              print("Message ID: \(messageID)")
          }
  
          // Print full message.
          print(userInfo)
      }
  
      func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                       fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -&gt; Void) {
          // If you are receiving a notification message while your app is in the background,
          // this callback will not be fired till the user taps on the notification launching the application.
          // TODO: Handle data of notification
          // With swizzling disabled you must let Messaging know about the message, for Analytics
          // Messaging.messaging().appDidReceiveMessage(userInfo)
          // Print message ID.
          if let messageID = userInfo[gcmMessageIDKey] {
              print("Message ID: \(messageID)")
          }
  
          // Print full message.
          print(userInfo)
  
          completionHandler(UIBackgroundFetchResult.newData)
      }
  </code></pre>
  
  <p>Please tell is it achievable using "Targets" and how? </p>