{"id":6509,"date":"2021-01-05T14:25:09","date_gmt":"2021-01-05T08:55:09","guid":{"rendered":"https:\/\/www.innovationm.com\/blog\/?p=6509"},"modified":"2021-01-05T14:25:09","modified_gmt":"2021-01-05T08:55:09","slug":"build-and-deployment-configuration-flavors-in-ios","status":"publish","type":"post","link":"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/","title":{"rendered":"\u00a0Build and Deployment Configuration Flavors in iOS"},"content":{"rendered":"<p>Suppose your App has 2 Different Environments- \u2018Development\u2019 &amp; \u2018Production\u2019 ( sometimes it may be 3 or 4 according to our Project needs ) and these Different environments have Different codebase or may be Different URLs. And you need to randomly move between all these various server URLs for the testing purpose or maybe another purpose depends on your project needs.<\/p>\n<p><strong>Example:<\/strong> Suppose, you need to submit your app in App Store in \u2018Production\u2019 Environment, and currently, you select \u2018Development\u2019 environment Url And you forgot to change the Development URL into Production environment Url, And by mistake, you submit &amp; Live your App in App Store. Therefore, it creates a Big Problem.<\/p>\n<p>So, in order to store important Data like API Keys\/Base URL and also needs to be secure, We use .xcconfig files and attach .plist file with them to fetch data.<\/p>\n<p>.xcconfig Files are supplemental Files that help in configuring a specific build type. These files are edited outside the Xcode, too.<\/p>\n<p>We are using 2 environments for now &#8211; Production and Development<\/p>\n<p><strong>Step 1-<\/strong> Open your Project.<\/p>\n<p><strong>Step 2-<\/strong> Select the Project file( Top file ) in the navigator area, then select the Info tab and make sure your project is selected. Look at the configuration Section. Here, we already have Debug and Release configurations. So, for 2 environments, we have to build debug&amp;release.<\/p>\n<p>-First rename the present Debug and Release to Debug(Production) and Release(Production) and then pick the icon at the bottom of configuration Section and select Duplicate Debug(Production). And rename into Debug(Development).<\/p>\n<p>-Repeat this process for Release(Production) and rename into Release(Development).<\/p>\n<p>As shown in image-<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-6510 size-full\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Picture2.png\" alt=\"\" width=\"1352\" height=\"694\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Picture2.png 1352w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Picture2-300x154.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Picture2-1024x526.png 1024w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Picture2-768x394.png 768w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Picture2-624x320.png 624w\" sizes=\"(max-width: 1352px) 100vw, 1352px\" \/><\/p>\n<p><strong>Step 3-<\/strong> Create a new folder \u201cConfigs\u201d and create new .xcconfig files For development and production.<\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-6511 size-full\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/image3.png\" alt=\"\" width=\"1500\" height=\"1094\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/image3.png 1500w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/image3-300x219.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/image3-1024x747.png 1024w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/image3-768x560.png 768w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/image3-624x455.png 624w\" sizes=\"(max-width: 1500px) 100vw, 1500px\" \/><\/p>\n<p>Then select Next and name the File Production and make sure that no target is selected because we do not add these files in the application bundle as they are not being compiled.<\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-6512 size-full\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img4.png\" alt=\"\" width=\"1450\" height=\"1070\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img4.png 1450w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img4-300x221.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img4-1024x756.png 1024w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img4-768x567.png 768w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img4-624x460.png 624w\" sizes=\"(max-width: 1450px) 100vw, 1450px\" \/><\/p>\n<p>Now, Repeat the process for Development, after that it looks as below image:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6513 size-full\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Webp.net-compress-image.jpg\" alt=\"\" width=\"528\" height=\"448\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Webp.net-compress-image.jpg 528w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Webp.net-compress-image-300x255.jpg 300w\" sizes=\"(max-width: 528px) 100vw, 528px\" \/><\/p>\n<p>Now, write the API keys and the Url\u2019s that are used in your Project For Production( Data is Different Based on Project needs ) Environment. Then after that repeat the process for Development.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6514 size-full\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img6.png\" alt=\"\" width=\"1600\" height=\"620\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img6.png 1600w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img6-300x116.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img6-1024x397.png 1024w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img6-768x298.png 768w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img6-1536x595.png 1536w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img6-624x242.png 624w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/p>\n<p><strong>Note:<\/strong> Make sure that you enter space after and before in the equal sign( = ) And enter $() between Forwarding slashes because we need to split it with an empty variable substitution into .xcconfig files.<\/p>\n<p><strong>\u00a0\u00a0\u00a0Example = MY_URL = https:\/$()\/\u2026\u2026\u2026<\/strong><\/p>\n<p><strong>Step 4-<\/strong> Now, we need to set the appropriate file for each configuration. So, move to the configuration section in the info tab and select the correct configuration files. As shown in below image-<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6515 size-full\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img7.png\" alt=\"\" width=\"1446\" height=\"892\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img7.png 1446w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img7-300x185.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img7-1024x632.png 1024w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img7-768x474.png 768w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img7-624x385.png 624w\" sizes=\"(max-width: 1446px) 100vw, 1446px\" \/><\/p>\n<p><strong>Note:<\/strong> If you already use cocoa pods Then Delete the .xcworkspace file, podfile.lock and pods Directory ( make sure that you don\u2019t delete the podfile ) Then reinstall the pods( The reason for this is Because cocoa pods have it\u2019s own xcconfig files.)<\/p>\n<p>In Terminal you see that cocoa pods did not set the configuration since we already set the custom configurations. It provides a link to be included in each.<\/p>\n<p>Something like that ( see in below image ):<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6516 size-full\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img8.png\" alt=\"\" width=\"1398\" height=\"452\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img8.png 1398w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img8-300x97.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img8-1024x331.png 1024w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img8-768x248.png 768w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img8-624x202.png 624w\" sizes=\"(max-width: 1398px) 100vw, 1398px\" \/><\/p>\n<ul>\n<li>Now, open the new .xcworkspace file and include the .xcconfig path for cocoa pods in your .xcconfig files by included \u00a0#include \u201c\u201d<\/li>\n<\/ul>\n<p><strong>Example:<\/strong> #include \u201cPods\/Target Support Files\/Pods-DifferentEnvironment\/Pods-DifferentEnvironment.release(Production).xcconfig\u201d<\/p>\n<p><strong>Step 5-<\/strong> Our Xcode Project also comes with a Default scheme named after the project. But, we have 2 Different environments so, we create another new scheme.<\/p>\n<p>-In Xcode toolbar move to the scheme selector then open the scheme popup menu and select manage schemes.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6517 size-full\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img9.png\" alt=\"\" width=\"862\" height=\"480\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img9.png 862w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img9-300x167.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img9-768x428.png 768w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img9-624x347.png 624w\" sizes=\"(max-width: 862px) 100vw, 862px\" \/><\/p>\n<p>After clicking on manage schemes, we see that in our scheme manager we see the available schemes that are available in our project and whether they are shared or not.<\/p>\n<p>-Now, click the current scheme and in the bottom click setting icons and select duplicate.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6518 size-full\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img10.png\" alt=\"\" width=\"1642\" height=\"1062\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img10.png 1642w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img10-300x194.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img10-1024x662.png 1024w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img10-768x497.png 768w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img10-1536x993.png 1536w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img10-624x404.png 624w\" sizes=\"(max-width: 1642px) 100vw, 1642px\" \/><\/p>\n<p>This new scheme will be Development. So, rename it according to need and make sure that the configurations for Development are set for each section like:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6519 size-full\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img11.png\" alt=\"\" width=\"1792\" height=\"1006\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img11.png 1792w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img11-300x168.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img11-1024x575.png 1024w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img11-768x431.png 768w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img11-1536x862.png 1536w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img11-624x350.png 624w\" sizes=\"(max-width: 1792px) 100vw, 1792px\" \/><\/p>\n<p>Now, make sure that our Default scheme uses the Production configurations(same as the previous step ) and make sure that all are marked as shared so that they are not strictly local to your own Xcode environment but also available project-wide if they are not checked by mistake then other openings this project can\u2019t utilize this schemes, as shown in below image-<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6520 size-full\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img12.png\" alt=\"\" width=\"1548\" height=\"862\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img12.png 1548w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img12-300x167.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img12-1024x570.png 1024w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img12-768x428.png 768w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img12-1536x855.png 1536w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img12-624x347.png 624w\" sizes=\"(max-width: 1548px) 100vw, 1548px\" \/><\/p>\n<p><strong>Step6-<\/strong> Now, edit the info.plist file in order to use our new configuration settings and also for accessing the configuration values from our code<\/p>\n<p>-We use MY_URL and MYAPI_KEY in our configurations file and Xcode did not include them by default in Info.plist file. So, add 2 new entries in info.plist.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6521 size-full\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img13.png\" alt=\"\" width=\"972\" height=\"122\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img13.png 972w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img13-300x38.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img13-768x96.png 768w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img13-624x78.png 624w\" sizes=\"(max-width: 972px) 100vw, 972px\" \/><\/p>\n<p>In order to access these values, the best approach is to create Environment.swift file, this file contains an enum with no cases to access the plist and the variables that are contained in your plist file.<\/p>\n<p>Therefore, Create a new swift file in config folder which we have created earlier and add the following code-<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6522 size-full\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img14.png\" alt=\"\" width=\"466\" height=\"352\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img14.png 466w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/img14-300x227.png 300w\" sizes=\"(max-width: 466px) 100vw, 466px\" \/><\/p>\n<pre class=\"lang:default decode:true \">import\u00a0Foundation\r\n\r\npublic\u00a0enum\u00a0Environment {\r\n\r\n\u00a0\u00a0\/\/ \u00a0Write your keys that are used in your Project\r\n\r\n\u00a0\u00a0enum\u00a0Keys {\r\n\r\n\u00a0\u00a0\u00a0\u00a0enum\u00a0Plist {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0static\u00a0let\u00a0myURL = \"MY_URL\"\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0static\u00a0let\u00a0myapiKey = \"MYAPI_KEY\"\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\/\/ Give access for\u00a0Plist\r\n\r\n\u00a0\u00a0private\u00a0static\u00a0let\u00a0infoDictionary: [String: Any] = {\r\n\r\n\u00a0\u00a0\u00a0\u00a0guard\u00a0let\u00a0dict = Bundle.main.infoDictionary else\u00a0{\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fatalError(\" Your Plist is not found\")\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0return\u00a0dict\r\n\r\n\u00a0\u00a0}()\r\n\r\n\u00a0\u00a0\/\/ MARK:\u00a0- Write the Plist values\r\n\r\n\u00a0\u00a0static\u00a0let\u00a0myURL: URL = {\r\n\r\n\u00a0\u00a0\u00a0\u00a0guard\u00a0let\u00a0myURLstring = Environment.infoDictionary[Keys.Plist.myURL] as? String else\u00a0{\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fatalError(\"MY URL is not set in the plist File\")\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0guard\u00a0let\u00a0url = URL(string: myURLstring) else\u00a0{\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fatalError(\"myURL is Invalid\")\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0return\u00a0url\r\n\r\n\u00a0\u00a0}()\r\n\r\n\u00a0\u00a0static\u00a0let\u00a0myapiKey: String = {\r\n\r\n\u00a0\u00a0\u00a0\u00a0guard\u00a0let\u00a0myapiKey = Environment.infoDictionary[Keys.Plist.myapiKey] as? String else\u00a0{\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fatalError(\"myAPI Key is not set in plist\")\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0return\u00a0myapiKey\r\n\r\n\u00a0\u00a0}()\r\n\r\n}<\/pre>\n<p><strong>Note:<\/strong> Make sure that you run your Project in different Environment and no errors come.<\/p>\n<p>-You can also print your keys in various environments in order to test them.<\/p>\n<p>Like:<\/p>\n<pre class=\"lang:default decode:true\">\u00a0print(Environment.myapiKey)\r\n\r\n\u00a0\u00a0\u00a0\u00a0print(Environment.myURL.absoluteString)<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Suppose your App has 2 Different Environments- \u2018Development\u2019 &amp; \u2018Production\u2019 ( sometimes it may be 3 or 4 according to our Project needs ) and these Different environments have Different codebase or may be Different URLs. And you need to randomly move between all these various server URLs for the testing purpose or maybe another [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6523,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[565,14],"class_list":["post-6509","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ios","tag-build-and-deployment-configuration-flavors-in-ios","tag-innovationm"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u00a0Build and Deployment Configuration Flavors in iOS - InnovationM - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u00a0Build and Deployment Configuration Flavors in iOS - InnovationM - Blog\" \/>\n<meta property=\"og:description\" content=\"Suppose your App has 2 Different Environments- \u2018Development\u2019 &amp; \u2018Production\u2019 ( sometimes it may be 3 or 4 according to our Project needs ) and these Different environments have Different codebase or may be Different URLs. And you need to randomly move between all these various server URLs for the testing purpose or maybe another [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/\" \/>\n<meta property=\"og:site_name\" content=\"InnovationM - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-05T08:55:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Configuration-Flavours-in-iOS.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"InnovationM Admin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"InnovationM Admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/build-and-deployment-configuration-flavors-in-ios\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/build-and-deployment-configuration-flavors-in-ios\\\/\"},\"author\":{\"name\":\"InnovationM Admin\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"headline\":\"\u00a0Build and Deployment Configuration Flavors in iOS\",\"datePublished\":\"2021-01-05T08:55:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/build-and-deployment-configuration-flavors-in-ios\\\/\"},\"wordCount\":875,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/build-and-deployment-configuration-flavors-in-ios\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/Configuration-Flavours-in-iOS.png\",\"keywords\":[\"Build and Deployment Configuration Flavors in iOS\",\"InnovationM\"],\"articleSection\":[\"iOS\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/build-and-deployment-configuration-flavors-in-ios\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/build-and-deployment-configuration-flavors-in-ios\\\/\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/build-and-deployment-configuration-flavors-in-ios\\\/\",\"name\":\"\u00a0Build and Deployment Configuration Flavors in iOS - InnovationM - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/build-and-deployment-configuration-flavors-in-ios\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/build-and-deployment-configuration-flavors-in-ios\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/Configuration-Flavours-in-iOS.png\",\"datePublished\":\"2021-01-05T08:55:09+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/build-and-deployment-configuration-flavors-in-ios\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/build-and-deployment-configuration-flavors-in-ios\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/build-and-deployment-configuration-flavors-in-ios\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/Configuration-Flavours-in-iOS.png\",\"contentUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/Configuration-Flavours-in-iOS.png\",\"width\":960,\"height\":540},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/build-and-deployment-configuration-flavors-in-ios\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u00a0Build and Deployment Configuration Flavors in iOS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\",\"name\":\"InnovationM - Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\",\"name\":\"InnovationM Admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"caption\":\"InnovationM Admin\"},\"sameAs\":[\"http:\\\/\\\/www.innovationm.com\\\/\"],\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/author\\\/innovationmadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u00a0Build and Deployment Configuration Flavors in iOS - InnovationM - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/","og_locale":"en_US","og_type":"article","og_title":"\u00a0Build and Deployment Configuration Flavors in iOS - InnovationM - Blog","og_description":"Suppose your App has 2 Different Environments- \u2018Development\u2019 &amp; \u2018Production\u2019 ( sometimes it may be 3 or 4 according to our Project needs ) and these Different environments have Different codebase or may be Different URLs. And you need to randomly move between all these various server URLs for the testing purpose or maybe another [&hellip;]","og_url":"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/","og_site_name":"InnovationM - Blog","article_published_time":"2021-01-05T08:55:09+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Configuration-Flavours-in-iOS.png","type":"image\/png"}],"author":"InnovationM Admin","twitter_misc":{"Written by":"InnovationM Admin","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/#article","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/"},"author":{"name":"InnovationM Admin","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"headline":"\u00a0Build and Deployment Configuration Flavors in iOS","datePublished":"2021-01-05T08:55:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/"},"wordCount":875,"commentCount":0,"image":{"@id":"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Configuration-Flavours-in-iOS.png","keywords":["Build and Deployment Configuration Flavors in iOS","InnovationM"],"articleSection":["iOS"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/","url":"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/","name":"\u00a0Build and Deployment Configuration Flavors in iOS - InnovationM - Blog","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/#primaryimage"},"image":{"@id":"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Configuration-Flavours-in-iOS.png","datePublished":"2021-01-05T08:55:09+00:00","author":{"@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"breadcrumb":{"@id":"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/#primaryimage","url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Configuration-Flavours-in-iOS.png","contentUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2021\/01\/Configuration-Flavours-in-iOS.png","width":960,"height":540},{"@type":"BreadcrumbList","@id":"https:\/\/www.innovationm.com\/blog\/build-and-deployment-configuration-flavors-in-ios\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.innovationm.com\/blog\/"},{"@type":"ListItem","position":2,"name":"\u00a0Build and Deployment Configuration Flavors in iOS"}]},{"@type":"WebSite","@id":"https:\/\/www.innovationm.com\/blog\/#website","url":"https:\/\/www.innovationm.com\/blog\/","name":"InnovationM - Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.innovationm.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed","name":"InnovationM Admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","caption":"InnovationM Admin"},"sameAs":["http:\/\/www.innovationm.com\/"],"url":"https:\/\/www.innovationm.com\/blog\/author\/innovationmadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/6509","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/comments?post=6509"}],"version-history":[{"count":0,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/6509\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media\/6523"}],"wp:attachment":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media?parent=6509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/categories?post=6509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/tags?post=6509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}