iOS:pipe理开发,testing和生产的最佳方式是使用不同的设置和名称构build
我有三个API
与不同的API Keys
和一些不同的设置
-
用于开发或内部testing构build – iOS App Store之外的开发分发
-
Host
– devapi.project-name.com -
API Key
– development_key -
FLEX
[ 1 ] – 启用
-
-
对于客户端testing构build – 在iOS App Store之外的企业分发
-
Host
– stgapi.project-name.com -
API Key
– enterprise_key -
FLEX
– 启用
-
-
生产构build – 在iOS App Store中分发
-
Host
– api.project-name.com -
API key
– app_store_key -
FLEX
– 禁用
-
我可以使用DEBUG
pipe理两个设置
#if DEBUG #define API_BASE_URL @"http://devapi.project-name.com/api/v1" #define API_KEY @"development_key" #else #define API_BASE_URL @"http://stgapi.project-name.com/api/v1" #define API_KEY @"enterprise_key" #endif // In AppDelegate.m #if DEBUG [[FLEXManager sharedManager] showExplorer]; #endif
但是,第一个问题是企业分布(用于客户端testing)和iOS App Store分发(生产)构build,对于企业和App Store分发,每次需要更改代码
-
对于企业分布
#if DEBUG //debug setting #else //enterprise setting #define API_BASE_URL @"http://stgapi.project-name.com/api/v1" #define API_KEY @"enterprise_key" #endif
-
对于App Store分配
#if DEBUG //debug setting #else //app store setting #define API_BASE_URL @"http://api.project-name.com/api/v1" #define API_KEY @"app_store_key" #endif
我正在寻找这样的方式
#ifdef DEVELOPMENT #define API_BASE_URL @"http://devapi.project-name.com/api/v1" #define API_KEY @"development_key" #elif ENTERPRISE #define API_BASE_URL @"http://stgapi.project-name.com/api/v1" #define API_KEY @"enterprise_key" #elif APP_STORE #define API_BASE_URL @"http://api.project-name.com/api/v1" #define API_KEY @"app_store_key" #endif
还是其他?
第二个问题
有没有办法用不同的名字创build三个版本而不创build不同的目标?
-
ProductName
– 用于App Store -
ProductName-Dev
– 用于内部开发构build -
ProductName-Stg
– 用于客户端testing(Enterprise)构build
我刚刚创build了基于iamnichols给出的解决scheme的演示项目和完整的视觉指南
pipe理开发,testing和生产的最佳方式iOS以不同的设置构build
https://github.com/vineetchoudhary/BuildManagement
debugging和发布版本之间的区别是,一个是存档和导出,而另一个是在debugging器中通过Xcode在本地运行。 您可能会发现,您希望有时在debugging器中运行生产或临时构build,但是通过#ifdef DEBUG
分解出来的东西,您可能会遇到问题。
这是我所做的简化版本:
创build单独的configuration
在项目(不是目标)设置中,创build(从原件复制)以下configuration:
- Debug_Dev
- Debug_Staging
- Debug_Prod
- Release_Dev
- Release_Staging
- Release_Prod
请注意,如果使用Cocoapods,则需要将configuration设置为none,删除项目中Pods文件夹的内容( 不是Pods项目 ),然后重新运行pod install
。
为每个环境创build一个scheme
而不是只有一个MyApp计划,创build以下(复制原始):
- MyApp_Dev
- MyApp_Staging
- MyApp_Prod
在每个scheme中,在适当的地方使用关联的Debug_ *和Release_ *configuration。
添加预处理器macros以识别环境
添加一个额外的预处理器macros,以确定您正在构build的环境。
在项目构build设置中,单击+并添加用户定义的构build设置,并将其称为“ MYAPP_ENVIRONMENT
。 然后,为每个不同的环境组添加一个不同的预处理器macros。 即ENV_DEV=1
, ENV_STAGING=1
, ENV_PROD=1
。
然后,在c预处理器macros(再次在项目级而不是目标级),使用$(MYAPP_ENVIRONMENT)
添加这个新的MYAPP_ENVIRONMENT设置。
这样,您就可以确定您正在构build的环境如下:
#ifdef ENV_DEV NSString * const MyAppAPIBaseURL = @"https://api-dev.myapp.com/"; #elif ENV_SAGING NSString * const MyAppAPIBaseURL = @"https://api-staging.myapp.com/"; #elif ENV_PROD NSString * const MyAppAPIBaseURL = @"https://api.myapp.com/"; #endif
这可能是很多,但让我知道你如何继续。
然后,您也可以创build不同的用户定义的构build设置来完成不同的操作,例如更改应用的显示名称。
例如,您可以通过创build一个名为MYAPP_DISPLAY_NAME
的新设置来实现此MYAPP_DISPLAY_NAME
,为每个configuration设置正确的名称,然后在您的info.plist
中将Bundle Display Name的值设置为$(MYAPP_DISPLAY_NAME)
。
一个更简单,不太复杂的解决scheme将使用不同的头文件为每个configuration,并#importing只有其中之一。 这不是自动的,但它很简单:
// You only need to switch the following lines when passing from qa 2 production and back: #import "Mode_QA.h" //#import "Mode_Production.h"