我有一个与服务器对话的应用程序。我有这个服务器的 2 个版本:一个生产版本和一个测试版本。这意味着我需要有一个生产 iOS 应用程序和一个测试 iOS 应用程序。两个版本的应用程序的逻辑基本相同,只是它需要根据连接到的服务器使用某些配置。现在,我的解决方案是使用包含两个版本所需信息的 plist
文件。 plist
将包含一堆键值对,例如:
url: test-server.domain.com
username: test-subject
password: test-password
我有 2 个 git 分支:每个 iOS 应用程序版本的生产分支和测试分支。所述 plist
文件的内容在每个分支上都不同。
问题是:有没有更优雅的方法来解决这个问题?最好我只想拥有 1 个分支机构。我已经研究过使用 Xcode 的环境变量,但是当我存档/构建我的应用程序时,这些变量并没有坚持下去。
最佳答案
当然有!您可以使用环境变量来执行此操作,如博文中所述:Flavors for iOS .您甚至可以在构建时根据变量切换应用程序图标和应用程序名称,因此,您可以通过以下方式 checkin 代码:if#APP_DEV//call dev API ELSIF//call prod API
。
步骤
1:在项目设置级别,复制调试配置并将其重命名为暂存。 (可选)
2:打开项目build设置并添加一些用户定义的设置:APP_ENV
值为 dev => dev,staging => stage,production => prod。
3:您需要多个 bundle ID 才能并排加载应用程序(例如测试版或正式版应用程序)。因此,使用值 .$(APP_ENV:lower)
创建另一个用户定义的设置 APP_BUNDLE_SUFFIX
。这会将 Dev
变成 .dev
。如果您希望在提交应用时没有额外的后缀,请将 production 留空。
4:将 APP_BUNDLE_SUFFIX
附加到您的产品包 ID (com.testapp.YourCoolApp.$(APP_BUNDLE_SUFFIX)
)。
5:在Swift项目中,可以将添加的变量添加到同屏的“Active Compilation Conditions”中。通过将 ENV_$(APP_ENV)
添加到列出的环境来执行此操作。在 Objective-C 项目中,这可以通过将环境添加到“预处理器宏”来完成,但请注意,您需要为值添加后缀 =1
才能激活变量。
使环境变量稳定
您可能需要创建单独的方案来实现此目的。您可以复制方案,或在顶部的方案上 option+click
并切换构建配置。
关于ios - Xcode 为同一个应用构建不同的环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45678587/